From 17093d638878837e6849e7650535db897ad83a69 Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 17 Aug 2021 11:58:11 +0200 Subject: [PATCH 01/15] cb reports --- .../ReportObjects/BudgetnachweisAnhangRO.cs | 7 +- .../SettlementReport.Designer.cs | 14 +- .../SettlementReport.resx | 8 +- ...CustomMitarbeiterstundenkontoBerechnung.cs | 6 +- .../DiakonieKKKleve/DiakonieKKKleve.csproj | 9 + .../LeistungsnachweisSoziotherapie.cs | 51 + ...LeistungsnachweisSoziotherapie.designer.cs | 719 ++ .../LeistungsnachweisSoziotherapie.resx | 123 + ...MitarbeiterstundenkontoBerechnungMonate.cs | 28 + .../DieDueneReports/DieDueneReports.csproj | 20 + .../Mitarbeiterarbeitszeitkonto.cs | 52 + .../Mitarbeiterarbeitszeitkonto.designer.cs | 1140 ++ .../Mitarbeiterarbeitszeitkonto.resx | 123 + .../MitarbeiterstundenkontoJahr.cs | 28 + .../MitarbeiterstundenkontoJahr.designer.cs | 761 ++ .../MitarbeiterstundenkontoJahr.resx | 123 + .../BudgetnachweisAnhang.Designer.cs | 1199 +- .../KompassBeWoWesel/BudgetnachweisAnhang.cs | 3 +- .../BudgetnachweisAnhang.resx | 10363 +++++++++++++++- .../KompassBeWoWesel/CustomReportCreator.cs | 23 + .../KompassBeWoWesel/KompassBeWoWesel.csproj | 1 + .../Budgetnachweis.Designer.cs | 289 +- .../LebenshilfeDorsten/Budgetnachweis.resx | 7 +- .../Export/DatevExporter.cs | 653 +- .../RechnungEinzelfallhilfe.Designer.cs | 13 +- .../RechnungFud.Designer.cs | 13 +- .../RechnungHort.Designer.cs | 39 +- .../RechnungHortPrivat.Designer.cs | 181 +- .../RechnungTagesstruktur.Designer.cs | 13 +- ...chnungTagesstrukturVerpflegung.Designer.cs | 10 +- .../PraxisPusteblume/IfsRechnungBezirk.cs | 10 + .../PraxisPusteblume/IfsSammelRechnung.cs | 9 + .../Invoicing/IFSInvoiceCreationBezirk.cs | 8 + .../Invoicing/IFSSammelInvoiceCreation.cs | 9 + .../Invoicing/CustomInvoiceCreation.cs | 42 + .../SeWo/ServicesOverviewReport.Designer.cs | 2 +- Service/Plugins/PluginLoader.cs | 16 +- 37 files changed, 14857 insertions(+), 1258 deletions(-) create mode 100644 ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.cs create mode 100644 ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.designer.cs create mode 100644 ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.resx create mode 100644 ReportImp/DieDueneReports/CustomMitarbeiterstundenkontoBerechnungMonate.cs create mode 100644 ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.cs create mode 100644 ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.designer.cs create mode 100644 ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.resx create mode 100644 ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.cs create mode 100644 ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.designer.cs create mode 100644 ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.resx create mode 100644 ReportImp/KompassBeWoWesel/CustomReportCreator.cs diff --git a/Report/ReportObjects/BudgetnachweisAnhangRO.cs b/Report/ReportObjects/BudgetnachweisAnhangRO.cs index 004cb183c..5add88fdf 100644 --- a/Report/ReportObjects/BudgetnachweisAnhangRO.cs +++ b/Report/ReportObjects/BudgetnachweisAnhangRO.cs @@ -122,7 +122,7 @@ namespace BeWo.Report.ReportObjects zeile.ServiceRecords = new List(); zeile.Monat = monat; zeile.SummeMinuten = 0; - + foreach (var e in result.Entgeltzeitraeume) { if (e.Start <= monat && monat <= e.Ende) @@ -191,6 +191,10 @@ namespace BeWo.Report.ReportObjects result.SummeFaktorStunden = result.SummeFaktorMinuten / 60; result.SummeGesamtStunden = result.SummeGesamtMinuten / 60; + //foreach (var z in result.MonatsZeilen) + //{ + // z.Betrag = + //} return result; } @@ -203,6 +207,7 @@ namespace BeWo.Report.ReportObjects public DateTime Monat { get; set; } public decimal? SummeMinuten { get; set; } public int Entgeltzeitraum { get; set; } + public decimal? Betrag { get; set; } } diff --git a/ReportImp/BeWoSchillingReports/SettlementReport.Designer.cs b/ReportImp/BeWoSchillingReports/SettlementReport.Designer.cs index 5db730858..51939e042 100644 --- a/ReportImp/BeWoSchillingReports/SettlementReport.Designer.cs +++ b/ReportImp/BeWoSchillingReports/SettlementReport.Designer.cs @@ -876,18 +876,18 @@ namespace BeWo.BeWoSchillingReports // bottomMarginBand1 // this.bottomMarginBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrRichText1, this.xrRichText8, this.xrRichText5, this.xrRichText4, - this.xrRichText2, - this.xrRichText1}); + this.xrRichText2}); this.bottomMarginBand1.HeightF = 75F; this.bottomMarginBand1.Name = "bottomMarginBand1"; // // xrRichText8 // this.xrRichText8.Font = new System.Drawing.Font("Arial", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrRichText8.LocationFloat = new DevExpress.Utils.PointFloat(275.0842F, 0F); + this.xrRichText8.LocationFloat = new DevExpress.Utils.PointFloat(278.0843F, 0F); this.xrRichText8.Name = "xrRichText8"; this.xrRichText8.SerializableRtfString = resources.GetString("xrRichText8.SerializableRtfString"); this.xrRichText8.SizeF = new System.Drawing.SizeF(157.0009F, 59.99997F); @@ -896,7 +896,7 @@ namespace BeWo.BeWoSchillingReports // xrRichText5 // this.xrRichText5.Font = new System.Drawing.Font("Times New Roman", 9.75F); - this.xrRichText5.LocationFloat = new DevExpress.Utils.PointFloat(557.9989F, 0F); + this.xrRichText5.LocationFloat = new DevExpress.Utils.PointFloat(560.999F, 0F); this.xrRichText5.Name = "xrRichText5"; this.xrRichText5.SerializableRtfString = resources.GetString("xrRichText5.SerializableRtfString"); this.xrRichText5.SizeF = new System.Drawing.SizeF(92.00092F, 60F); @@ -904,7 +904,7 @@ namespace BeWo.BeWoSchillingReports // xrRichText4 // this.xrRichText4.Font = new System.Drawing.Font("Times New Roman", 9.75F); - this.xrRichText4.LocationFloat = new DevExpress.Utils.PointFloat(432.0851F, 0F); + this.xrRichText4.LocationFloat = new DevExpress.Utils.PointFloat(435.0851F, 0F); this.xrRichText4.Name = "xrRichText4"; this.xrRichText4.SerializableRtfString = resources.GetString("xrRichText4.SerializableRtfString"); this.xrRichText4.SizeF = new System.Drawing.SizeF(125.9138F, 60F); @@ -912,7 +912,7 @@ namespace BeWo.BeWoSchillingReports // xrRichText2 // this.xrRichText2.Font = new System.Drawing.Font("Times New Roman", 9.75F); - this.xrRichText2.LocationFloat = new DevExpress.Utils.PointFloat(159.0842F, 0F); + this.xrRichText2.LocationFloat = new DevExpress.Utils.PointFloat(162.0845F, 0F); this.xrRichText2.Name = "xrRichText2"; this.xrRichText2.SerializableRtfString = resources.GetString("xrRichText2.SerializableRtfString"); this.xrRichText2.SizeF = new System.Drawing.SizeF(116F, 60F); @@ -923,7 +923,7 @@ namespace BeWo.BeWoSchillingReports this.xrRichText1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); this.xrRichText1.Name = "xrRichText1"; this.xrRichText1.SerializableRtfString = resources.GetString("xrRichText1.SerializableRtfString"); - this.xrRichText1.SizeF = new System.Drawing.SizeF(159.0842F, 60F); + this.xrRichText1.SizeF = new System.Drawing.SizeF(162.0845F, 60F); // // GroupHeader1 // diff --git a/ReportImp/BeWoSchillingReports/SettlementReport.resx b/ReportImp/BeWoSchillingReports/SettlementReport.resx index a7ef952a7..28efc32a5 100644 --- a/ReportImp/BeWoSchillingReports/SettlementReport.resx +++ b/ReportImp/BeWoSchillingReports/SettlementReport.resx @@ -127,8 +127,11 @@ anbei sende ich Ihnen die unterschriebenen Nachweise über die im Rahmen des Betreuten Wohnens für [Salutation2] [CustomerName] erbrachten Leistungen zu. Nach unserer Berechnung ergeben sich für den Betreuungszeitraum [AccountingPeriod] hieraus: + + ewBcAHIAdABmADEAXABkAGUAZgBmADAAewBcAGYAbwBuAHQAdABiAGwAewBcAGYAMAAgAEMAYQBsAGkAYgByAGkAOwB9AHsAXABmADEAIABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgA7AH0AewBcAGYAMgAgAEMAZQBuAHQAdQByAHkAIABHAG8AdABoAGkAYwA7AH0AfQB7AFwAYwBvAGwAbwByAHQAYgBsACAAOwBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMAAgADsAXAByAGUAZAAwAFwAZwByAGUAZQBuADAAXABiAGwAdQBlADIANQA1ACAAOwB9AHsAXAAqAFwAZABlAGYAYwBoAHAAIABcAGYAMQBcAGYAcwAyADQAfQB7AFwAcwB0AHkAbABlAHMAaABlAGUAdAAgAHsAXABxAGwAXABmADEAXABmAHMAMgA0ACAATgBvAHIAbQBhAGwAOwB9AHsAXAAqAFwAYwBzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABEAGUAZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0ADsAfQB7AFwAKgBcAGMAcwAyAFwAcwBiAGEAcwBlAGQAbwBuADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABMAGkAbgBlACAATgB1AG0AYgBlAHIAOwB9AHsAXAAqAFwAYwBzADMAXAB1AGwAXABmADEAXABmAHMAMgA0AFwAYwBmADIAIABIAHkAcABlAHIAbABpAG4AawA7AH0AewBcACoAXAB0AHMANABcAHQAcwByAG8AdwBkAFwAZgAxAFwAZgBzADIANABcAHEAbABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgBsADMAXAB0AHMAYwBlAGwAbABwAGEAZABkAGwAMQAwADgAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAYgAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgB0ADMAXAB0AHMAdgBlAHIAdABhAGwAdABcAGMAbAB0AHgAbAByAHQAYgAgAE4AbwByAG0AYQBsACAAVABhAGIAbABlADsAfQB7AFwAKgBcAHQAcwA1AFwAdABzAHIAbwB3AGQAXABzAGIAYQBzAGUAZABvAG4ANABcAGYAMQBcAGYAcwAyADQAXABxAGwAXAB0AHIAYgByAGQAcgB0AFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGwAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAYgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHIAYgByAGQAcgByAFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGgAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAdgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAbAAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABsADEAMAA4AFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwB2AGUAcgB0AGEAbAB0AFwAYwBsAHQAeABsAHIAdABiACAAVABhAGIAbABlACAAUwBpAG0AcABsAGUAIAAxADsAfQB9AHsAXAAqAFwAbABpAHMAdABvAHYAZQByAHIAaQBkAGUAdABhAGIAbABlAH0AXABuAG8AdQBpAGMAbwBtAHAAYQB0AFwAcwBwAGwAeQB0AHcAbgBpAG4AZQBcAGgAdABtAGEAdQB0AHMAcABcAHQAcgBvAHcAZABcAGkAcgBvAHcAMABcAGkAcgBvAHcAYgBhAG4AZAAwAFwAdAByAGcAYQBwAGgAMgA4AFwAdAByAGwAZQBmAHQAMABcAHQAcgBmAHQAcwBXAGkAZAB0AGgAMQBcAHQAcgBwAGEAZABkAGYAbAAzAFwAdAByAHAAYQBkAGQAbAAyADgAXAB0AHIAcABhAGQAZABmAHIAMwBcAHQAcgBwAGEAZABkAHIAMgA4AFwAdABiAGwAaQBuAGQAdAB5AHAAZQAzAFwAdABiAGwAaQBuAGQAMgA4AFwAYwBsAHYAZQByAHQAYQBsAHQAXABjAGwAYgByAGQAcgB0AFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGwAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAYgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgByAFwAYgByAGQAcgBuAGkAbABcAGMAbAB0AHgAbAByAHQAYgBcAGMAbABmAHQAcwBXAGkAZAB0AGgAMwBcAGMAbAB3AFcAaQBkAHQAaAAyADIANwA0AFwAYwBsAHAAYQBkAGYAcgAzAFwAYwBsAHAAYQBkAHIAMgA4AFwAYwBsAHAAYQBkAGYAdAAzAFwAYwBsAHAAYQBkAHQAMgA4AFwAYwBlAGwAbAB4ADIAMgA3ADQAXABwAGEAcgBkAFwAcABsAGEAaQBuAFwAcQBsAFwAaQBuAHQAYgBsAHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAAUwBvAHoAaQBhAGwAZQAgAEQAaQBlAG4AcwB0AGUAIABTAGMAaABpAGwAbABpAG4AZwB9AHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAAIAB9AHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAARwBtAGIASAB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQBcAGMAZQBsAGwAXAB0AHIAbwB3AGQAXABpAHIAbwB3ADAAXABpAHIAbwB3AGIAYQBuAGQAMABcAHQAcgBnAGEAcABoADIAOABcAHQAcgBsAGUAZgB0ADAAXAB0AHIAZgB0AHMAVwBpAGQAdABoADEAXAB0AHIAcABhAGQAZABmAGwAMwBcAHQAcgBwAGEAZABkAGwAMgA4AFwAdAByAHAAYQBkAGQAZgByADMAXAB0AHIAcABhAGQAZAByADIAOABcAHQAYgBsAGkAbgBkAHQAeQBwAGUAMwBcAHQAYgBsAGkAbgBkADIAOABcAGMAbAB2AGUAcgB0AGEAbAB0AFwAYwBsAGIAcgBkAHIAdABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBsAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGIAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAcgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAdAB4AGwAcgB0AGIAXABjAGwAZgB0AHMAVwBpAGQAdABoADMAXABjAGwAdwBXAGkAZAB0AGgAMgAyADcANABcAGMAbABwAGEAZABmAHIAMwBcAGMAbABwAGEAZAByADIAOABcAGMAbABwAGEAZABmAHQAMwBcAGMAbABwAGEAZAB0ADIAOABcAGMAZQBsAGwAeAAyADIANwA0AFwAcgBvAHcAXAB0AHIAbwB3AGQAXABpAHIAbwB3ADEAXABpAHIAbwB3AGIAYQBuAGQAMQBcAHQAcgBnAGEAcABoADIAOABcAHQAcgBsAGUAZgB0ADAAXAB0AHIAZgB0AHMAVwBpAGQAdABoADEAXAB0AHIAZgB0AHMAVwBpAGQAdABoAEEAMwBcAHQAcgB3AFcAaQBkAHQAaABBADIAMgA3AFwAdAByAHAAYQBkAGQAZgBsADMAXAB0AHIAcABhAGQAZABsADIAOABcAHQAcgBwAGEAZABkAGYAcgAzAFwAdAByAHAAYQBkAGQAcgAyADgAXAB0AGIAbABpAG4AZAB0AHkAcABlADMAXAB0AGIAbABpAG4AZAAyADgAXABjAGwAdgBlAHIAdABhAGwAdABcAGMAbABiAHIAZAByAHQAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAbABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBiAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAHIAXABiAHIAZAByAG4AaQBsAFwAYwBsAHQAeABsAHIAdABiAFwAYwBsAGYAdABzAFcAaQBkAHQAaAAzAFwAYwBsAHcAVwBpAGQAdABoADIAMAA0ADcAXABjAGwAcABhAGQAZgByADMAXABjAGwAcABhAGQAcgAyADgAXABjAGwAcABhAGQAZgB0ADMAXABjAGwAcABhAGQAdAAyADgAXABjAGUAbABsAHgAMgAwADQANwBcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAXABpAG4AdABiAGwAewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAIABPAGwAcABlAG4AZQByACAAUwB0AHIAYQBcAHUAMgAyADMAXAAnAGQAZgBlACAANQA0ADQAIAB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQBcAGMAZQBsAGwAXAB0AHIAbwB3AGQAXABpAHIAbwB3ADEAXABpAHIAbwB3AGIAYQBuAGQAMQBcAHQAcgBnAGEAcABoADIAOABcAHQAcgBsAGUAZgB0ADAAXAB0AHIAZgB0AHMAVwBpAGQAdABoADEAXAB0AHIAZgB0AHMAVwBpAGQAdABoAEEAMwBcAHQAcgB3AFcAaQBkAHQAaABBADIAMgA3AFwAdAByAHAAYQBkAGQAZgBsADMAXAB0AHIAcABhAGQAZABsADIAOABcAHQAcgBwAGEAZABkAGYAcgAzAFwAdAByAHAAYQBkAGQAcgAyADgAXAB0AGIAbABpAG4AZAB0AHkAcABlADMAXAB0AGIAbABpAG4AZAAyADgAXABjAGwAdgBlAHIAdABhAGwAdABcAGMAbABiAHIAZAByAHQAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAbABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBiAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAHIAXABiAHIAZAByAG4AaQBsAFwAYwBsAHQAeABsAHIAdABiAFwAYwBsAGYAdABzAFcAaQBkAHQAaAAzAFwAYwBsAHcAVwBpAGQAdABoADIAMAA0ADcAXABjAGwAcABhAGQAZgByADMAXABjAGwAcABhAGQAcgAyADgAXABjAGwAcABhAGQAZgB0ADMAXABjAGwAcABhAGQAdAAyADgAXABjAGUAbABsAHgAMgAwADQANwBcAHIAbwB3AFwAdAByAG8AdwBkAFwAaQByAG8AdwAyAFwAaQByAG8AdwBiAGEAbgBkADIAXABsAGEAcwB0AHIAbwB3AFwAdAByAGcAYQBwAGgAMgA4AFwAdAByAGwAZQBmAHQAMABcAHQAcgBmAHQAcwBXAGkAZAB0AGgAMQBcAHQAcgBmAHQAcwBXAGkAZAB0AGgAQQAzAFwAdAByAHcAVwBpAGQAdABoAEEAMgAyADcAXAB0AHIAcABhAGQAZABmAGwAMwBcAHQAcgBwAGEAZABkAGwAMgA4AFwAdAByAHAAYQBkAGQAZgByADMAXAB0AHIAcABhAGQAZAByADIAOABcAHQAYgBsAGkAbgBkAHQAeQBwAGUAMwBcAHQAYgBsAGkAbgBkADIAOABcAGMAbAB2AGUAcgB0AGEAbAB0AFwAYwBsAGIAcgBkAHIAdABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBsAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGIAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAcgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAdAB4AGwAcgB0AGIAXABjAGwAZgB0AHMAVwBpAGQAdABoADMAXABjAGwAdwBXAGkAZAB0AGgAMgAwADQANwBcAGMAbABwAGEAZABmAHIAMwBcAGMAbABwAGEAZAByADIAOABcAGMAbABwAGEAZABmAHQAMwBcAGMAbABwAGEAZAB0ADIAOABcAGMAZQBsAGwAeAAyADAANAA3AFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbABcAGkAbgB0AGIAbAB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgADUAMQAxADAAOQAgAEsAXAB1ADIANAA2AFwAJwBmADYAbABuAH0AXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxAFwAYwBlAGwAbABcAHQAcgBvAHcAZABcAGkAcgBvAHcAMgBcAGkAcgBvAHcAYgBhAG4AZAAyAFwAbABhAHMAdAByAG8AdwBcAHQAcgBnAGEAcABoADIAOABcAHQAcgBsAGUAZgB0ADAAXAB0AHIAZgB0AHMAVwBpAGQAdABoADEAXAB0AHIAZgB0AHMAVwBpAGQAdABoAEEAMwBcAHQAcgB3AFcAaQBkAHQAaABBADIAMgA3AFwAdAByAHAAYQBkAGQAZgBsADMAXAB0AHIAcABhAGQAZABsADIAOABcAHQAcgBwAGEAZABkAGYAcgAzAFwAdAByAHAAYQBkAGQAcgAyADgAXAB0AGIAbABpAG4AZAB0AHkAcABlADMAXAB0AGIAbABpAG4AZAAyADgAXABjAGwAdgBlAHIAdABhAGwAdABcAGMAbABiAHIAZAByAHQAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAbABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBiAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAHIAXABiAHIAZAByAG4AaQBsAFwAYwBsAHQAeABsAHIAdABiAFwAYwBsAGYAdABzAFcAaQBkAHQAaAAzAFwAYwBsAHcAVwBpAGQAdABoADIAMAA0ADcAXABjAGwAcABhAGQAZgByADMAXABjAGwAcABhAGQAcgAyADgAXABjAGwAcABhAGQAZgB0ADMAXABjAGwAcABhAGQAdAAyADgAXABjAGUAbABsAHgAMgAwADQANwBcAHIAbwB3AFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbABcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAXABwAGEAcgB9AA== + - ewBcAHIAdABmADEAXABkAGUAZgBmADAAewBcAGYAbwBuAHQAdABiAGwAewBcAGYAMAAgAEMAYQBsAGkAYgByAGkAOwB9AHsAXABmADEAIABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgA7AH0AewBcAGYAMgAgAEEAcgBpAGEAbAA7AH0AfQB7AFwAYwBvAGwAbwByAHQAYgBsACAAOwBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMAAgADsAXAByAGUAZAAwAFwAZwByAGUAZQBuADAAXABiAGwAdQBlADIANQA1ACAAOwB9AHsAXAAqAFwAZABlAGYAYwBoAHAAIABcAGYAMQBcAGYAcwAyADQAfQB7AFwAcwB0AHkAbABlAHMAaABlAGUAdAAgAHsAXABxAGwAXABmADEAXABmAHMAMgA0ACAATgBvAHIAbQBhAGwAOwB9AHsAXAAqAFwAYwBzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABEAGUAZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0ADsAfQB7AFwAKgBcAGMAcwAyAFwAcwBiAGEAcwBlAGQAbwBuADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABMAGkAbgBlACAATgB1AG0AYgBlAHIAOwB9AHsAXAAqAFwAYwBzADMAXAB1AGwAXABmADEAXABmAHMAMgA0AFwAYwBmADIAIABIAHkAcABlAHIAbABpAG4AawA7AH0AewBcACoAXAB0AHMANABcAHQAcwByAG8AdwBkAFwAZgAxAFwAZgBzADIANABcAHEAbABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgBsADMAXAB0AHMAYwBlAGwAbABwAGEAZABkAGwAMQAwADgAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAYgAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgB0ADMAXAB0AHMAdgBlAHIAdABhAGwAdABcAGMAbAB0AHgAbAByAHQAYgAgAE4AbwByAG0AYQBsACAAVABhAGIAbABlADsAfQB7AFwAKgBcAHQAcwA1AFwAdABzAHIAbwB3AGQAXABzAGIAYQBzAGUAZABvAG4ANABcAGYAMQBcAGYAcwAyADQAXABxAGwAXAB0AHIAYgByAGQAcgB0AFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGwAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAYgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHIAYgByAGQAcgByAFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGgAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAdgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAbAAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABsADEAMAA4AFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwB2AGUAcgB0AGEAbAB0AFwAYwBsAHQAeABsAHIAdABiACAAVABhAGIAbABlACAAUwBpAG0AcABsAGUAIAAxADsAfQB9AHsAXAAqAFwAbABpAHMAdABvAHYAZQByAHIAaQBkAGUAdABhAGIAbABlAH0AXABuAG8AdQBpAGMAbwBtAHAAYQB0AFwAcwBwAGwAeQB0AHcAbgBpAG4AZQBcAGgAdABtAGEAdQB0AHMAcABcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAXAB0AHEAYwBcAHQAeAA0ADUAMwA2AFwAdABxAHIAXAB0AHgAOQAwADcAMgB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgAFMAcABhAHIAawBhAHMAcwBlACAASwBcAHUAMgA0ADYAXAAnAGYANgBsAG4AQgBvAG4AbgB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQBcAHAAYQByAFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbABcAHQAcQBjAFwAdAB4ADQANQAzADYAXAB0AHEAcgBcAHQAeAA5ADAANwAyAHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAASQBiAGEAbgAgAEQARQA1ADIAMwA3ADAANQAwADEAOQA4ADEAOQAzADEAMQA4ADMAMgA0ADYAfQBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAXABwAGEAcgBcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAXAB0AHEAYwBcAHQAeAA0ADUAMwA2AFwAdABxAHIAXAB0AHgAOQAwADcAMgB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgAEsAdABvAC4AIAAxADkAMwAgADEAMQA4ACAAMwAyADQAIAA2AH0AXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxAFwAcABhAHIAXABwAGEAcgBkAFwAcABsAGEAaQBuAFwAcQBsAFwAdABxAGMAXAB0AHgANAA1ADMANgBcAHQAcQByAFwAdAB4ADkAMAA3ADIAewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAIABCAEwAWgAgADMANwAwAH0AewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAIAAgAH0AewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAIAA1ADAAMQAgADkAOAB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMQBcAGYAcwAyADQAXABjAGYAMQBcAHAAYQByAH0A + ewBcAHIAdABmADEAXABkAGUAZgBmADAAewBcAGYAbwBuAHQAdABiAGwAewBcAGYAMAAgAEMAYQBsAGkAYgByAGkAOwB9AHsAXABmADEAIABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgA7AH0AewBcAGYAMgAgAEEAcgBpAGEAbAA7AH0AfQB7AFwAYwBvAGwAbwByAHQAYgBsACAAOwBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMAAgADsAXAByAGUAZAAwAFwAZwByAGUAZQBuADAAXABiAGwAdQBlADIANQA1ACAAOwB9AHsAXAAqAFwAZABlAGYAYwBoAHAAIABcAGYAMQBcAGYAcwAyADQAfQB7AFwAcwB0AHkAbABlAHMAaABlAGUAdAAgAHsAXABxAGwAXABmADEAXABmAHMAMgA0ACAATgBvAHIAbQBhAGwAOwB9AHsAXAAqAFwAYwBzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABEAGUAZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0ADsAfQB7AFwAKgBcAGMAcwAyAFwAcwBiAGEAcwBlAGQAbwBuADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABMAGkAbgBlACAATgB1AG0AYgBlAHIAOwB9AHsAXAAqAFwAYwBzADMAXAB1AGwAXABmADEAXABmAHMAMgA0AFwAYwBmADIAIABIAHkAcABlAHIAbABpAG4AawA7AH0AewBcACoAXAB0AHMANABcAHQAcwByAG8AdwBkAFwAZgAxAFwAZgBzADIANABcAHEAbABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgBsADMAXAB0AHMAYwBlAGwAbABwAGEAZABkAGwAMQAwADgAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAYgAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgB0ADMAXAB0AHMAdgBlAHIAdABhAGwAdABcAGMAbAB0AHgAbAByAHQAYgAgAE4AbwByAG0AYQBsACAAVABhAGIAbABlADsAfQB7AFwAKgBcAHQAcwA1AFwAdABzAHIAbwB3AGQAXABzAGIAYQBzAGUAZABvAG4ANABcAGYAMQBcAGYAcwAyADQAXABxAGwAXAB0AHIAYgByAGQAcgB0AFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGwAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAYgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHIAYgByAGQAcgByAFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGgAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAdgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAbAAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABsADEAMAA4AFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwB2AGUAcgB0AGEAbAB0AFwAYwBsAHQAeABsAHIAdABiACAAVABhAGIAbABlACAAUwBpAG0AcABsAGUAIAAxADsAfQB9AHsAXAAqAFwAbABpAHMAdABvAHYAZQByAHIAaQBkAGUAdABhAGIAbABlAH0AXABuAG8AdQBpAGMAbwBtAHAAYQB0AFwAcwBwAGwAeQB0AHcAbgBpAG4AZQBcAGgAdABtAGEAdQB0AHMAcABcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAXAB0AHEAYwBcAHQAeAA0ADUAMwA2AFwAdABxAHIAXAB0AHgAOQAwADcAMgB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgAFMAcABhAHIAawBhAHMAcwBlACAASwBcAHUAMgA0ADYAXAAnAGYANgBsAG4AQgBvAG4AbgB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQBcAHAAYQByAFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbABcAHQAcQBjAFwAdAB4ADQANQAzADYAXAB0AHEAcgBcAHQAeAA5ADAANwAyAHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAASQBiAGEAbgAgAEQARQA1ADIAfQB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgADMANwAwADUAfQB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgADAAMQA5ADgAfQB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgADEAOQAzADEAfQB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgADEAOAAzADIAfQB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgADQANgB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQBcAHAAYQByAFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbABcAHQAcQBjAFwAdAB4ADQANQAzADYAXAB0AHEAcgBcAHQAeAA5ADAANwAyAHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAASwB0AG8ALgAgADEAOQAzACAAMQAxADgAIAAzADIANAAgADYAfQBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAXABwAGEAcgBcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAXAB0AHEAYwBcAHQAeAA0ADUAMwA2AFwAdABxAHIAXAB0AHgAOQAwADcAMgB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgAEIATABaACAAMwA3ADAAIAA1ADAAMQAgADkAOAB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMQBcAGYAcwAyADQAXABjAGYAMQBcAHAAYQByAH0A ewBcAHIAdABmADEAXABkAGUAZgBmADAAewBcAGYAbwBuAHQAdABiAGwAewBcAGYAMAAgAEMAYQBsAGkAYgByAGkAOwB9AHsAXABmADEAIABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgA7AH0AewBcAGYAMgAgAEMAZQBuAHQAdQByAHkAIABHAG8AdABoAGkAYwA7AH0AfQB7AFwAYwBvAGwAbwByAHQAYgBsACAAOwBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMAAgADsAXAByAGUAZAAwAFwAZwByAGUAZQBuADAAXABiAGwAdQBlADIANQA1ACAAOwB9AHsAXAAqAFwAZABlAGYAYwBoAHAAIABcAGYAMQBcAGYAcwAyADQAfQB7AFwAcwB0AHkAbABlAHMAaABlAGUAdAAgAHsAXABxAGwAXABmADEAXABmAHMAMgA0ACAATgBvAHIAbQBhAGwAOwB9AHsAXAAqAFwAYwBzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABEAGUAZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0ADsAfQB7AFwAKgBcAGMAcwAyAFwAcwBiAGEAcwBlAGQAbwBuADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABMAGkAbgBlACAATgB1AG0AYgBlAHIAOwB9AHsAXAAqAFwAYwBzADMAXAB1AGwAXABmADEAXABmAHMAMgA0AFwAYwBmADIAIABIAHkAcABlAHIAbABpAG4AawA7AH0AewBcACoAXAB0AHMANABcAHQAcwByAG8AdwBkAFwAZgAxAFwAZgBzADIANABcAHEAbABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgBsADMAXAB0AHMAYwBlAGwAbABwAGEAZABkAGwAMQAwADgAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAYgAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgB0ADMAXAB0AHMAdgBlAHIAdABhAGwAdABcAGMAbAB0AHgAbAByAHQAYgAgAE4AbwByAG0AYQBsACAAVABhAGIAbABlADsAfQB7AFwAKgBcAHQAcwA1AFwAdABzAHIAbwB3AGQAXABzAGIAYQBzAGUAZABvAG4ANABcAGYAMQBcAGYAcwAyADQAXABxAGwAXAB0AHIAYgByAGQAcgB0AFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGwAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAYgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHIAYgByAGQAcgByAFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGgAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAdgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAbAAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABsADEAMAA4AFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwB2AGUAcgB0AGEAbAB0AFwAYwBsAHQAeABsAHIAdABiACAAVABhAGIAbABlACAAUwBpAG0AcABsAGUAIAAxADsAfQB9AHsAXAAqAFwAbABpAHMAdABvAHYAZQByAHIAaQBkAGUAdABhAGIAbABlAH0AXABuAG8AdQBpAGMAbwBtAHAAYQB0AFwAcwBwAGwAeQB0AHcAbgBpAG4AZQBcAGgAdABtAGEAdQB0AHMAcABcAHQAcgBvAHcAZABcAGkAcgBvAHcAMABcAGkAcgBvAHcAYgBhAG4AZAAwAFwAdAByAGcAYQBwAGgAMgA4AFwAdAByAGwAZQBmAHQAMABcAHQAcgBmAHQAcwBXAGkAZAB0AGgAMQBcAHQAcgBwAGEAZABkAGYAbAAzAFwAdAByAHAAYQBkAGQAbAAyADgAXAB0AHIAcABhAGQAZABmAHIAMwBcAHQAcgBwAGEAZABkAHIAMgA4AFwAdABiAGwAaQBuAGQAdAB5AHAAZQAzAFwAdABiAGwAaQBuAGQAMgA4AFwAYwBsAHYAZQByAHQAYQBsAHQAXABjAGwAYgByAGQAcgB0AFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGwAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAYgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgByAFwAYgByAGQAcgBuAGkAbABcAGMAbAB0AHgAbAByAHQAYgBcAGMAbABmAHQAcwBXAGkAZAB0AGgAMwBcAGMAbAB3AFcAaQBkAHQAaAAxADcAMAAxAFwAYwBsAHAAYQBkAGYAcgAzAFwAYwBsAHAAYQBkAHIAMgA4AFwAYwBsAHAAYQBkAGYAdAAzAFwAYwBsAHAAYQBkAHQAMgA4AFwAYwBlAGwAbAB4ADEANwAwADEAXABwAGEAcgBkAFwAcABsAGEAaQBuAFwAcQBsAFwAaQBuAHQAYgBsAHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAARwBlAHMAYwBoAFwAdQAyADIAOABcACcAZQA0AGYAdABzAGYAXAB1ADIANQAyAFwAJwBmAGMAaAByAHUAbgBnAH0AXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxAFwAYwBlAGwAbABcAHQAcgBvAHcAZABcAGkAcgBvAHcAMABcAGkAcgBvAHcAYgBhAG4AZAAwAFwAdAByAGcAYQBwAGgAMgA4AFwAdAByAGwAZQBmAHQAMABcAHQAcgBmAHQAcwBXAGkAZAB0AGgAMQBcAHQAcgBwAGEAZABkAGYAbAAzAFwAdAByAHAAYQBkAGQAbAAyADgAXAB0AHIAcABhAGQAZABmAHIAMwBcAHQAcgBwAGEAZABkAHIAMgA4AFwAdABiAGwAaQBuAGQAdAB5AHAAZQAzAFwAdABiAGwAaQBuAGQAMgA4AFwAYwBsAHYAZQByAHQAYQBsAHQAXABjAGwAYgByAGQAcgB0AFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGwAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAYgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgByAFwAYgByAGQAcgBuAGkAbABcAGMAbAB0AHgAbAByAHQAYgBcAGMAbABmAHQAcwBXAGkAZAB0AGgAMwBcAGMAbAB3AFcAaQBkAHQAaAAxADcAMAAxAFwAYwBsAHAAYQBkAGYAcgAzAFwAYwBsAHAAYQBkAHIAMgA4AFwAYwBsAHAAYQBkAGYAdAAzAFwAYwBsAHAAYQBkAHQAMgA4AFwAYwBlAGwAbAB4ADEANwAwADEAXAByAG8AdwBcAHQAcgBvAHcAZABcAGkAcgBvAHcAMQBcAGkAcgBvAHcAYgBhAG4AZAAxAFwAdAByAGcAYQBwAGgAMgA4AFwAdAByAGwAZQBmAHQAMABcAHQAcgBmAHQAcwBXAGkAZAB0AGgAMQBcAHQAcgBwAGEAZABkAGYAbAAzAFwAdAByAHAAYQBkAGQAbAAyADgAXAB0AHIAcABhAGQAZABmAHIAMwBcAHQAcgBwAGEAZABkAHIAMgA4AFwAdABiAGwAaQBuAGQAdAB5AHAAZQAzAFwAdABiAGwAaQBuAGQAMgA4AFwAYwBsAHYAZQByAHQAYQBsAHQAXABjAGwAYgByAGQAcgB0AFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGwAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAYgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgByAFwAYgByAGQAcgBuAGkAbABcAGMAbAB0AHgAbAByAHQAYgBcAGMAbABmAHQAcwBXAGkAZAB0AGgAMwBcAGMAbAB3AFcAaQBkAHQAaAAxADcAMAAxAFwAYwBsAHAAYQBkAGYAcgAzAFwAYwBsAHAAYQBkAHIAMgA4AFwAYwBsAHAAYQBkAGYAdAAzAFwAYwBsAHAAYQBkAHQAMgA4AFwAYwBlAGwAbAB4ADEANwAwADEAXABwAGEAcgBkAFwAcABsAGEAaQBuAFwAcQBsAFwAaQBuAHQAYgBsAHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAASwBhAHQAaABhAHIAaQBuAGEAIABQAHIAXAB1ADIANQAyAFwAJwBmAGMAbgB0AGUAfQBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAXABjAGUAbABsAFwAdAByAG8AdwBkAFwAaQByAG8AdwAxAFwAaQByAG8AdwBiAGEAbgBkADEAXAB0AHIAZwBhAHAAaAAyADgAXAB0AHIAbABlAGYAdAAwAFwAdAByAGYAdABzAFcAaQBkAHQAaAAxAFwAdAByAHAAYQBkAGQAZgBsADMAXAB0AHIAcABhAGQAZABsADIAOABcAHQAcgBwAGEAZABkAGYAcgAzAFwAdAByAHAAYQBkAGQAcgAyADgAXAB0AGIAbABpAG4AZAB0AHkAcABlADMAXAB0AGIAbABpAG4AZAAyADgAXABjAGwAdgBlAHIAdABhAGwAdABcAGMAbABiAHIAZAByAHQAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAbABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBiAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAHIAXABiAHIAZAByAG4AaQBsAFwAYwBsAHQAeABsAHIAdABiAFwAYwBsAGYAdABzAFcAaQBkAHQAaAAzAFwAYwBsAHcAVwBpAGQAdABoADEANwAwADEAXABjAGwAcABhAGQAZgByADMAXABjAGwAcABhAGQAcgAyADgAXABjAGwAcABhAGQAZgB0ADMAXABjAGwAcABhAGQAdAAyADgAXABjAGUAbABsAHgAMQA3ADAAMQBcAHIAbwB3AFwAdAByAG8AdwBkAFwAaQByAG8AdwAyAFwAaQByAG8AdwBiAGEAbgBkADIAXABsAGEAcwB0AHIAbwB3AFwAdAByAGcAYQBwAGgAMgA4AFwAdAByAGwAZQBmAHQAMABcAHQAcgBmAHQAcwBXAGkAZAB0AGgAMQBcAHQAcgBwAGEAZABkAGYAbAAzAFwAdAByAHAAYQBkAGQAbAAyADgAXAB0AHIAcABhAGQAZABmAHIAMwBcAHQAcgBwAGEAZABkAHIAMgA4AFwAdABiAGwAaQBuAGQAdAB5AHAAZQAzAFwAdABiAGwAaQBuAGQAMgA4AFwAYwBsAHYAZQByAHQAYQBsAHQAXABjAGwAYgByAGQAcgB0AFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGwAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAYgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgByAFwAYgByAGQAcgBuAGkAbABcAGMAbAB0AHgAbAByAHQAYgBcAGMAbABmAHQAcwBXAGkAZAB0AGgAMwBcAGMAbAB3AFcAaQBkAHQAaAAxADcAMAAxAFwAYwBsAHAAYQBkAGYAcgAzAFwAYwBsAHAAYQBkAHIAMgA4AFwAYwBsAHAAYQBkAGYAdAAzAFwAYwBsAHAAYQBkAHQAMgA4AFwAYwBlAGwAbAB4ADEANwAwADEAXABwAGEAcgBkAFwAcABsAGEAaQBuAFwAcQBsAFwAaQBuAHQAYgBsAHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAATABvAHQAaABhAHIAIABQAHIAXAB1ADIANQAyAFwAJwBmAGMAbgB0AGUAfQBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAXABwAGEAcgBcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAXABpAG4AdABiAGwAewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAIABMAGUAbwAgAFMAYwBoAGkAfQB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgAGwAbAB9AHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAAaQBuAGcAfQBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAXABjAGUAbABsAFwAdAByAG8AdwBkAFwAaQByAG8AdwAyAFwAaQByAG8AdwBiAGEAbgBkADIAXABsAGEAcwB0AHIAbwB3AFwAdAByAGcAYQBwAGgAMgA4AFwAdAByAGwAZQBmAHQAMABcAHQAcgBmAHQAcwBXAGkAZAB0AGgAMQBcAHQAcgBwAGEAZABkAGYAbAAzAFwAdAByAHAAYQBkAGQAbAAyADgAXAB0AHIAcABhAGQAZABmAHIAMwBcAHQAcgBwAGEAZABkAHIAMgA4AFwAdABiAGwAaQBuAGQAdAB5AHAAZQAzAFwAdABiAGwAaQBuAGQAMgA4AFwAYwBsAHYAZQByAHQAYQBsAHQAXABjAGwAYgByAGQAcgB0AFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGwAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAYgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgByAFwAYgByAGQAcgBuAGkAbABcAGMAbAB0AHgAbAByAHQAYgBcAGMAbABmAHQAcwBXAGkAZAB0AGgAMwBcAGMAbAB3AFcAaQBkAHQAaAAxADcAMAAxAFwAYwBsAHAAYQBkAGYAcgAzAFwAYwBsAHAAYQBkAHIAMgA4AFwAYwBsAHAAYQBkAGYAdAAzAFwAYwBsAHAAYQBkAHQAMgA4AFwAYwBlAGwAbAB4ADEANwAwADEAXAByAG8AdwBcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAxAFwAZgBzADIANABcAGMAZgAxAFwAcABhAHIAfQA= @@ -139,9 +142,6 @@ ewBcAHIAdABmADEAXABkAGUAZgBmADAAewBcAGYAbwBuAHQAdABiAGwAewBcAGYAMAAgAEMAYQBsAGkAYgByAGkAOwB9AHsAXABmADEAIABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgA7AH0AewBcAGYAMgAgAEMAZQBuAHQAdQByAHkAIABHAG8AdABoAGkAYwA7AH0AfQB7AFwAYwBvAGwAbwByAHQAYgBsACAAOwBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMAAgADsAXAByAGUAZAAwAFwAZwByAGUAZQBuADAAXABiAGwAdQBlADIANQA1ACAAOwB9AHsAXAAqAFwAZABlAGYAYwBoAHAAIABcAGYAMQBcAGYAcwAyADQAfQB7AFwAcwB0AHkAbABlAHMAaABlAGUAdAAgAHsAXABxAGwAXABmADEAXABmAHMAMgA0ACAATgBvAHIAbQBhAGwAOwB9AHsAXAAqAFwAYwBzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABEAGUAZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0ADsAfQB7AFwAKgBcAGMAcwAyAFwAcwBiAGEAcwBlAGQAbwBuADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABMAGkAbgBlACAATgB1AG0AYgBlAHIAOwB9AHsAXAAqAFwAYwBzADMAXAB1AGwAXABmADEAXABmAHMAMgA0AFwAYwBmADIAIABIAHkAcABlAHIAbABpAG4AawA7AH0AewBcACoAXAB0AHMANABcAHQAcwByAG8AdwBkAFwAZgAxAFwAZgBzADIANABcAHEAbABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgBsADMAXAB0AHMAYwBlAGwAbABwAGEAZABkAGwAMQAwADgAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAYgAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgB0ADMAXAB0AHMAdgBlAHIAdABhAGwAdABcAGMAbAB0AHgAbAByAHQAYgAgAE4AbwByAG0AYQBsACAAVABhAGIAbABlADsAfQB7AFwAKgBcAHQAcwA1AFwAdABzAHIAbwB3AGQAXABzAGIAYQBzAGUAZABvAG4ANABcAGYAMQBcAGYAcwAyADQAXABxAGwAXAB0AHIAYgByAGQAcgB0AFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGwAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAYgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHIAYgByAGQAcgByAFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGgAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAdgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAbAAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABsADEAMAA4AFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwB2AGUAcgB0AGEAbAB0AFwAYwBsAHQAeABsAHIAdABiACAAVABhAGIAbABlACAAUwBpAG0AcABsAGUAIAAxADsAfQB9AHsAXAAqAFwAbABpAHMAdABvAHYAZQByAHIAaQBkAGUAdABhAGIAbABlAH0AXABuAG8AdQBpAGMAbwBtAHAAYQB0AFwAcwBwAGwAeQB0AHcAbgBpAG4AZQBcAGgAdABtAGEAdQB0AHMAcABcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAIABBAG0AdABzAGcAZQByAGkAYwBoAHQAIABLAFwAdQAyADQANgBcACcAZgA2AGwAbgB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQBcAHAAYQByAFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbAB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgAEYAaQByAG0AZQBuAHMAaQB0AHoAIABLAFwAdQAyADQANgBcACcAZgA2AGwAbgB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQBcAHAAYQByAFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbAB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQAgAFMAdABOAHIALgAgADIAMQA4AC8ANQA4ADUAMwAvADEANQAxADcAfQBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAXABwAGEAcgBcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAIABIAFIAQgB9AHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAAOgAgADEAMAA2ADkANgA2AH0AXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAxAFwAZgBzADIANABcAGMAZgAxAFwAcABhAHIAfQA= - - ewBcAHIAdABmADEAXABkAGUAZgBmADAAewBcAGYAbwBuAHQAdABiAGwAewBcAGYAMAAgAEMAYQBsAGkAYgByAGkAOwB9AHsAXABmADEAIABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgA7AH0AewBcAGYAMgAgAEMAZQBuAHQAdQByAHkAIABHAG8AdABoAGkAYwA7AH0AfQB7AFwAYwBvAGwAbwByAHQAYgBsACAAOwBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMAAgADsAXAByAGUAZAAwAFwAZwByAGUAZQBuADAAXABiAGwAdQBlADIANQA1ACAAOwB9AHsAXAAqAFwAZABlAGYAYwBoAHAAIABcAGYAMQBcAGYAcwAyADQAfQB7AFwAcwB0AHkAbABlAHMAaABlAGUAdAAgAHsAXABxAGwAXABmADEAXABmAHMAMgA0ACAATgBvAHIAbQBhAGwAOwB9AHsAXAAqAFwAYwBzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABEAGUAZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0ADsAfQB7AFwAKgBcAGMAcwAyAFwAcwBiAGEAcwBlAGQAbwBuADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABMAGkAbgBlACAATgB1AG0AYgBlAHIAOwB9AHsAXAAqAFwAYwBzADMAXAB1AGwAXABmADEAXABmAHMAMgA0AFwAYwBmADIAIABIAHkAcABlAHIAbABpAG4AawA7AH0AewBcACoAXAB0AHMANABcAHQAcwByAG8AdwBkAFwAZgAxAFwAZgBzADIANABcAHEAbABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgBsADMAXAB0AHMAYwBlAGwAbABwAGEAZABkAGwAMQAwADgAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAYgAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgB0ADMAXAB0AHMAdgBlAHIAdABhAGwAdABcAGMAbAB0AHgAbAByAHQAYgAgAE4AbwByAG0AYQBsACAAVABhAGIAbABlADsAfQB7AFwAKgBcAHQAcwA1AFwAdABzAHIAbwB3AGQAXABzAGIAYQBzAGUAZABvAG4ANABcAGYAMQBcAGYAcwAyADQAXABxAGwAXAB0AHIAYgByAGQAcgB0AFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGwAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAYgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHIAYgByAGQAcgByAFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGgAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAdgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAbAAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABsADEAMAA4AFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwB2AGUAcgB0AGEAbAB0AFwAYwBsAHQAeABsAHIAdABiACAAVABhAGIAbABlACAAUwBpAG0AcABsAGUAIAAxADsAfQB9AHsAXAAqAFwAbABpAHMAdABvAHYAZQByAHIAaQBkAGUAdABhAGIAbABlAH0AXABuAG8AdQBpAGMAbwBtAHAAYQB0AFwAcwBwAGwAeQB0AHcAbgBpAG4AZQBcAGgAdABtAGEAdQB0AHMAcABcAHQAcgBvAHcAZABcAGkAcgBvAHcAMABcAGkAcgBvAHcAYgBhAG4AZAAwAFwAdAByAGcAYQBwAGgAMgA4AFwAdAByAGwAZQBmAHQAMABcAHQAcgBmAHQAcwBXAGkAZAB0AGgAMQBcAHQAcgBwAGEAZABkAGYAbAAzAFwAdAByAHAAYQBkAGQAbAAyADgAXAB0AHIAcABhAGQAZABmAHIAMwBcAHQAcgBwAGEAZABkAHIAMgA4AFwAdABiAGwAaQBuAGQAdAB5AHAAZQAzAFwAdABiAGwAaQBuAGQAMgA4AFwAYwBsAHYAZQByAHQAYQBsAHQAXABjAGwAYgByAGQAcgB0AFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGwAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAYgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgByAFwAYgByAGQAcgBuAGkAbABcAGMAbAB0AHgAbAByAHQAYgBcAGMAbABmAHQAcwBXAGkAZAB0AGgAMwBcAGMAbAB3AFcAaQBkAHQAaAAyADAANAA3AFwAYwBsAHAAYQBkAGYAcgAzAFwAYwBsAHAAYQBkAHIAMgA4AFwAYwBsAHAAYQBkAGYAdAAzAFwAYwBsAHAAYQBkAHQAMgA4AFwAYwBlAGwAbAB4ADIAMAA0ADcAXABwAGEAcgBkAFwAcABsAGEAaQBuAFwAcQBsAFwAaQBuAHQAYgBsAHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAZgAyAFwAZgBzADEANABcAGMAZgAxACAAUwBvAHoAaQBhAGwAZQAgAEQAaQBlAG4AcwB0AGUAIABTAGMAaABpAGwAbABpAG4AZwAgAEcAbQBiAEgAfQBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAXABjAGUAbABsAFwAdAByAG8AdwBkAFwAaQByAG8AdwAwAFwAaQByAG8AdwBiAGEAbgBkADAAXAB0AHIAZwBhAHAAaAAyADgAXAB0AHIAbABlAGYAdAAwAFwAdAByAGYAdABzAFcAaQBkAHQAaAAxAFwAdAByAHAAYQBkAGQAZgBsADMAXAB0AHIAcABhAGQAZABsADIAOABcAHQAcgBwAGEAZABkAGYAcgAzAFwAdAByAHAAYQBkAGQAcgAyADgAXAB0AGIAbABpAG4AZAB0AHkAcABlADMAXAB0AGIAbABpAG4AZAAyADgAXABjAGwAdgBlAHIAdABhAGwAdABcAGMAbABiAHIAZAByAHQAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAbABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBiAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAHIAXABiAHIAZAByAG4AaQBsAFwAYwBsAHQAeABsAHIAdABiAFwAYwBsAGYAdABzAFcAaQBkAHQAaAAzAFwAYwBsAHcAVwBpAGQAdABoADIAMAA0ADcAXABjAGwAcABhAGQAZgByADMAXABjAGwAcABhAGQAcgAyADgAXABjAGwAcABhAGQAZgB0ADMAXABjAGwAcABhAGQAdAAyADgAXABjAGUAbABsAHgAMgAwADQANwBcAHIAbwB3AFwAdAByAG8AdwBkAFwAaQByAG8AdwAxAFwAaQByAG8AdwBiAGEAbgBkADEAXAB0AHIAZwBhAHAAaAAyADgAXAB0AHIAbABlAGYAdAAwAFwAdAByAGYAdABzAFcAaQBkAHQAaAAxAFwAdAByAHAAYQBkAGQAZgBsADMAXAB0AHIAcABhAGQAZABsADIAOABcAHQAcgBwAGEAZABkAGYAcgAzAFwAdAByAHAAYQBkAGQAcgAyADgAXAB0AGIAbABpAG4AZAB0AHkAcABlADMAXAB0AGIAbABpAG4AZAAyADgAXABjAGwAdgBlAHIAdABhAGwAdABcAGMAbABiAHIAZAByAHQAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAbABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBiAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAHIAXABiAHIAZAByAG4AaQBsAFwAYwBsAHQAeABsAHIAdABiAFwAYwBsAGYAdABzAFcAaQBkAHQAaAAzAFwAYwBsAHcAVwBpAGQAdABoADIAMAA0ADcAXABjAGwAcABhAGQAZgByADMAXABjAGwAcABhAGQAcgAyADgAXABjAGwAcABhAGQAZgB0ADMAXABjAGwAcABhAGQAdAAyADgAXABjAGUAbABsAHgAMgAwADQANwBcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAXABpAG4AdABiAGwAewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAIABPAGwAcABlAG4AZQByACAAUwB0AHIAYQBcAHUAMgAyADMAXAAnAGQAZgBlACAANQA0ADQAIAB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQBcAGMAZQBsAGwAXAB0AHIAbwB3AGQAXABpAHIAbwB3ADEAXABpAHIAbwB3AGIAYQBuAGQAMQBcAHQAcgBnAGEAcABoADIAOABcAHQAcgBsAGUAZgB0ADAAXAB0AHIAZgB0AHMAVwBpAGQAdABoADEAXAB0AHIAcABhAGQAZABmAGwAMwBcAHQAcgBwAGEAZABkAGwAMgA4AFwAdAByAHAAYQBkAGQAZgByADMAXAB0AHIAcABhAGQAZAByADIAOABcAHQAYgBsAGkAbgBkAHQAeQBwAGUAMwBcAHQAYgBsAGkAbgBkADIAOABcAGMAbAB2AGUAcgB0AGEAbAB0AFwAYwBsAGIAcgBkAHIAdABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBsAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAGIAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAcgBcAGIAcgBkAHIAbgBpAGwAXABjAGwAdAB4AGwAcgB0AGIAXABjAGwAZgB0AHMAVwBpAGQAdABoADMAXABjAGwAdwBXAGkAZAB0AGgAMgAwADQANwBcAGMAbABwAGEAZABmAHIAMwBcAGMAbABwAGEAZAByADIAOABcAGMAbABwAGEAZABmAHQAMwBcAGMAbABwAGEAZAB0ADIAOABcAGMAZQBsAGwAeAAyADAANAA3AFwAcgBvAHcAXAB0AHIAbwB3AGQAXABpAHIAbwB3ADIAXABpAHIAbwB3AGIAYQBuAGQAMgBcAGwAYQBzAHQAcgBvAHcAXAB0AHIAZwBhAHAAaAAyADgAXAB0AHIAbABlAGYAdAAwAFwAdAByAGYAdABzAFcAaQBkAHQAaAAxAFwAdAByAHAAYQBkAGQAZgBsADMAXAB0AHIAcABhAGQAZABsADIAOABcAHQAcgBwAGEAZABkAGYAcgAzAFwAdAByAHAAYQBkAGQAcgAyADgAXAB0AGIAbABpAG4AZAB0AHkAcABlADMAXAB0AGIAbABpAG4AZAAyADgAXABjAGwAdgBlAHIAdABhAGwAdABcAGMAbABiAHIAZAByAHQAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAbABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBiAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAHIAXABiAHIAZAByAG4AaQBsAFwAYwBsAHQAeABsAHIAdABiAFwAYwBsAGYAdABzAFcAaQBkAHQAaAAzAFwAYwBsAHcAVwBpAGQAdABoADIAMAA0ADcAXABjAGwAcABhAGQAZgByADMAXABjAGwAcABhAGQAcgAyADgAXABjAGwAcABhAGQAZgB0ADMAXABjAGwAcABhAGQAdAAyADgAXABjAGUAbABsAHgAMgAwADQANwBcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAXABpAG4AdABiAGwAewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADIAXABmAHMAMQA0AFwAYwBmADEAIAA1ADEAMQAwADkAIABLAFwAdQAyADQANgBcACcAZgA2AGwAbgB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAxADQAXABjAGYAMQBcAGMAZQBsAGwAXAB0AHIAbwB3AGQAXABpAHIAbwB3ADIAXABpAHIAbwB3AGIAYQBuAGQAMgBcAGwAYQBzAHQAcgBvAHcAXAB0AHIAZwBhAHAAaAAyADgAXAB0AHIAbABlAGYAdAAwAFwAdAByAGYAdABzAFcAaQBkAHQAaAAxAFwAdAByAHAAYQBkAGQAZgBsADMAXAB0AHIAcABhAGQAZABsADIAOABcAHQAcgBwAGEAZABkAGYAcgAzAFwAdAByAHAAYQBkAGQAcgAyADgAXAB0AGIAbABpAG4AZAB0AHkAcABlADMAXAB0AGIAbABpAG4AZAAyADgAXABjAGwAdgBlAHIAdABhAGwAdABcAGMAbABiAHIAZAByAHQAXABiAHIAZAByAG4AaQBsAFwAYwBsAGIAcgBkAHIAbABcAGIAcgBkAHIAbgBpAGwAXABjAGwAYgByAGQAcgBiAFwAYgByAGQAcgBuAGkAbABcAGMAbABiAHIAZAByAHIAXABiAHIAZAByAG4AaQBsAFwAYwBsAHQAeABsAHIAdABiAFwAYwBsAGYAdABzAFcAaQBkAHQAaAAzAFwAYwBsAHcAVwBpAGQAdABoADIAMAA0ADcAXABjAGwAcABhAGQAZgByADMAXABjAGwAcABhAGQAcgAyADgAXABjAGwAcABhAGQAZgB0ADMAXABjAGwAcABhAGQAdAAyADgAXABjAGUAbABsAHgAMgAwADQANwBcAHIAbwB3AFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbABcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAXABwAGEAcgB9AA== - 17, 17 diff --git a/ReportImp/BetreuWoReports/CustomMitarbeiterstundenkontoBerechnung.cs b/ReportImp/BetreuWoReports/CustomMitarbeiterstundenkontoBerechnung.cs index 779e0f7eb..b336d74f1 100644 --- a/ReportImp/BetreuWoReports/CustomMitarbeiterstundenkontoBerechnung.cs +++ b/ReportImp/BetreuWoReports/CustomMitarbeiterstundenkontoBerechnung.cs @@ -12,11 +12,15 @@ namespace BetreuWoReports { public override decimal GetFeiertagsFaktor(DateTime start) { - + if (start.Year >= 2021) + { + return base.GetFeiertagsFaktor(start); + } if (start.Year >= 2019 && start.Month == 12 && (start.Day == 24 || start.Day == 31)) { return 0.5m; } + return base.GetFeiertagsFaktor(start); } diff --git a/ReportImp/DiakonieKKKleve/DiakonieKKKleve.csproj b/ReportImp/DiakonieKKKleve/DiakonieKKKleve.csproj index 389363a1a..e0fb5bd8a 100644 --- a/ReportImp/DiakonieKKKleve/DiakonieKKKleve.csproj +++ b/ReportImp/DiakonieKKKleve/DiakonieKKKleve.csproj @@ -130,6 +130,12 @@ MitarbeiterstundenkontoJahr.cs + + Component + + + LeistungsnachweisSoziotherapie.cs + Component @@ -242,6 +248,9 @@ QuittierungsbelegDienstleistung.cs Designer + + LeistungsnachweisSoziotherapie.cs + RechnungBeWo67.cs Designer diff --git a/ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.cs b/ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.cs new file mode 100644 index 000000000..c517857c5 --- /dev/null +++ b/ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections; +using System.ComponentModel; +using BS.Shared.Core; +using DevExpress.XtraReports.UI; +using BeWo.Report.ReportObjects; +using BeWo.Report; +using System.Collections.Generic; + +namespace BeWo.LebenshilfeDuisburgReports +{ + public partial class LeistungsnachweisSoziotherapie : DevExpress.XtraReports.UI.XtraReport, IBeWoReport + { + public LeistungsnachweisSoziotherapie() + { + InitializeComponent(); + } + + public void SetReportDataSource(ServicesOverviewRO pRO) + { + if (pRO.Services != null) + { + foreach (ServicesOverviewRO.ServiceDetail s in pRO.Services) + { + s.ServiceCategoryAbbr = ""; + + String firstLine = ""; + if (!String.IsNullOrEmpty(s.Notice)) + { + if (s.Notice.IndexOf(Environment.NewLine) >= 0) + firstLine = s.Notice.Substring(0, s.Notice.IndexOf(Environment.NewLine)); + else + firstLine = s.Notice; + } + s.Notice = firstLine; + + if (s.ServiceCategory != null && + ((s.ServiceCategory.ToLower().IndexOf("face") >= 0) || (s.ServiceCategory.ToLower().IndexOf("atz") >= 0 && s.ServiceCategory.ToLower().IndexOf("mit klient") >= 0) || + (s.ServiceCategory.ToLower().IndexOf("konfrontativ") >= 0 && s.ServiceDescription.ToLower() != "kollegialer austausch" && s.ServiceDescription.ToLower() != "kooperationsgesprch" && s.ServiceDescription.ToLower() != "erstgesprch seitens der familie abgesagt"))) + s.ServiceCategoryAbbr = "Ja"; + + else + s.ServiceCategoryAbbr = "Nein"; + } + + } + + this.bindingSource1.DataSource = pRO; + } + } +} diff --git a/ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.designer.cs b/ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.designer.cs new file mode 100644 index 000000000..878156a86 --- /dev/null +++ b/ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.designer.cs @@ -0,0 +1,719 @@ +using BeWo.Report.ReportObjects; +namespace BeWo.LebenshilfeDuisburgReports +{ + partial class LeistungsnachweisSoziotherapie + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.Detail = new DevExpress.XtraReports.UI.DetailBand(); + this.xrTableServiceRecords1 = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell(); + this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand(); + this.Detail1 = new DevExpress.XtraReports.UI.DetailBand(); + this.xrTable3 = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRow6 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell(); + this.GroupHeader1 = new DevExpress.XtraReports.UI.GroupHeaderBand(); + this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); + this.formattingRuleStartDate = new DevExpress.XtraReports.UI.FormattingRule(); + this.formattingRuleServiceDesc = new DevExpress.XtraReports.UI.FormattingRule(); + this.formattingRuleCostBearer = new DevExpress.XtraReports.UI.FormattingRule(); + this.formattingRuleEmployeeName = new DevExpress.XtraReports.UI.FormattingRule(); + this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand(); + this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand(); + this.ReportFooter = new DevExpress.XtraReports.UI.ReportFooterBand(); + this.xrLabel11 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel(); + this.fieldAbrechenbareMinuten = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldBillableFLS = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldAbrechenbareFLS = new DevExpress.XtraReports.UI.CalculatedField(); + this.xrLabel12 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel23 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel15 = new DevExpress.XtraReports.UI.XRLabel(); + this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand(); + this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel10 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel13 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel16 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel17 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell17 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell18 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel(); + ((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); + // + // Detail + // + this.Detail.Font = new System.Drawing.Font("Arial", 11F); + this.Detail.HeightF = 0F; + this.Detail.Name = "Detail"; + this.Detail.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.Detail.StylePriority.UseFont = false; + this.Detail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; + // + // xrTableServiceRecords1 + // + this.xrTableServiceRecords1.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableServiceRecords1.LocationFloat = new DevExpress.Utils.PointFloat(0.0005086263F, 0F); + this.xrTableServiceRecords1.Name = "xrTableServiceRecords1"; + this.xrTableServiceRecords1.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.xrTableServiceRecords1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRow2}); + this.xrTableServiceRecords1.SizeF = new System.Drawing.SizeF(1097.458F, 60F); + this.xrTableServiceRecords1.StylePriority.UseBackColor = false; + this.xrTableServiceRecords1.StylePriority.UseBorders = false; + this.xrTableServiceRecords1.StylePriority.UseFont = false; + this.xrTableServiceRecords1.StylePriority.UseTextAlignment = false; + this.xrTableServiceRecords1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRow2 + // + this.xrTableRow2.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell4, + this.xrTableCell3, + this.xrTableCell6, + this.xrTableCell1, + this.xrTableCell11, + this.xrTableCell7, + this.xrTableCell16, + this.xrTableCell14, + this.xrTableCell5}); + this.xrTableRow2.Name = "xrTableRow2"; + this.xrTableRow2.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.xrTableRow2.StylePriority.UseTextAlignment = false; + this.xrTableRow2.Weight = 1.875D; + // + // xrTableCell3 + // + this.xrTableCell3.Name = "xrTableCell3"; + this.xrTableCell3.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell3.StylePriority.UseFont = false; + this.xrTableCell3.StylePriority.UseTextAlignment = false; + this.xrTableCell3.Text = "Datum"; + this.xrTableCell3.Weight = 0.24385913270146492D; + // + // xrTableCell11 + // + this.xrTableCell11.Multiline = true; + this.xrTableCell11.Name = "xrTableCell11"; + this.xrTableCell11.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell11.StylePriority.UseFont = false; + this.xrTableCell11.StylePriority.UseTextAlignment = false; + this.xrTableCell11.Text = "Anzahl\r\nEinheiten*\r\nEinzeln"; + this.xrTableCell11.Weight = 0.21947322627465268D; + // + // xrTableCell6 + // + this.xrTableCell6.Multiline = true; + this.xrTableCell6.Name = "xrTableCell6"; + this.xrTableCell6.Text = "Uhrzeit\r\n(von - bis)"; + this.xrTableCell6.Weight = 0.34140277718578993D; + // + // xrTableCell1 + // + this.xrTableCell1.Name = "xrTableCell1"; + this.xrTableCell1.Text = "Leistungsart"; + this.xrTableCell1.Weight = 0.26824505480994043D; + // + // xrTableCell4 + // + this.xrTableCell4.Name = "xrTableCell4"; + this.xrTableCell4.Text = "Ort"; + this.xrTableCell4.Weight = 0.24385912943517524D; + // + // xrTableCell7 + // + this.xrTableCell7.Multiline = true; + this.xrTableCell7.Name = "xrTableCell7"; + this.xrTableCell7.Text = "Anzahl\r\nEinheiten*\r\nGruppe"; + this.xrTableCell7.Weight = 0.21947323646722164D; + // + // xrTableCell5 + // + this.xrTableCell5.Name = "xrTableCell5"; + this.xrTableCell5.Text = "Datum, Unterschrift versicherte Person"; + this.xrTableCell5.Weight = 0.48151942592111374D; + // + // DetailReport + // + this.DetailReport.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail1, + this.GroupHeader1}); + this.DetailReport.DataMember = "Services"; + this.DetailReport.DataSource = this.bindingSource1; + this.DetailReport.Level = 0; + this.DetailReport.Name = "DetailReport"; + this.DetailReport.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.DetailReport.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; + // + // Detail1 + // + this.Detail1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTable3}); + this.Detail1.Font = new System.Drawing.Font("Arial", 11F); + this.Detail1.HeightF = 25F; + this.Detail1.Name = "Detail1"; + this.Detail1.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.Detail1.StylePriority.UseFont = false; + this.Detail1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; + // + // xrTable3 + // + this.xrTable3.BorderColor = System.Drawing.Color.Black; + this.xrTable3.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrTable3.Name = "xrTable3"; + this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRow6}); + this.xrTable3.SizeF = new System.Drawing.SizeF(1097.458F, 25F); + this.xrTable3.StylePriority.UseFont = false; + this.xrTable3.StylePriority.UseTextAlignment = false; + this.xrTable3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRow6 + // + this.xrTableRow6.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell17, + this.xrTableCell13, + this.xrTableCell15, + this.xrTableCell12, + this.xrTableCell2, + this.xrTableCell8, + this.xrTableCell10, + this.xrTableCell18, + this.xrTableCell9}); + this.xrTableRow6.Name = "xrTableRow6"; + this.xrTableRow6.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.xrTableRow6.StylePriority.UseTextAlignment = false; + this.xrTableRow6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableRow6.Weight = 1.25D; + // + // xrTableCell13 + // + this.xrTableCell13.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.StartDate", "{0:dd.MM.yyyy}")}); + this.xrTableCell13.Name = "xrTableCell13"; + this.xrTableCell13.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell13.StylePriority.UseFont = false; + this.xrTableCell13.StylePriority.UsePadding = false; + this.xrTableCell13.StylePriority.UseTextAlignment = false; + this.xrTableCell13.Text = "xrTableCell13"; + this.xrTableCell13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell13.Weight = 0.12626263699193913D; + // + // xrTableCell15 + // + this.xrTableCell15.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.TimeRangeString", "{0:HH:mm}")}); + this.xrTableCell15.Name = "xrTableCell15"; + this.xrTableCell15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F); + this.xrTableCell15.StylePriority.UseFont = false; + this.xrTableCell15.StylePriority.UsePadding = false; + this.xrTableCell15.StylePriority.UseTextAlignment = false; + this.xrTableCell15.Text = "xrTableCell15"; + this.xrTableCell15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell15.Weight = 0.17676769478719556D; + // + // xrTableCell12 + // + this.xrTableCell12.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.ServiceDescription")}); + this.xrTableCell12.Name = "xrTableCell12"; + this.xrTableCell12.Weight = 0.138888903265244D; + // + // xrTableCell2 + // + this.xrTableCell2.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.fieldAbrechenbareMinuten", "{0:0.00}")}); + this.xrTableCell2.Name = "xrTableCell2"; + this.xrTableCell2.StylePriority.UseTextAlignment = false; + this.xrTableCell2.Text = "xrTableCell2"; + this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell2.Weight = 0.1136363732196215D; + // + // xrTableCell8 + // + this.xrTableCell8.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.Notice")}); + this.xrTableCell8.Name = "xrTableCell8"; + this.xrTableCell8.Weight = 0.11363637936198562D; + // + // xrTableCell10 + // + this.xrTableCell10.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.ServiceCategoryAbbr")}); + this.xrTableCell10.Name = "xrTableCell10"; + this.xrTableCell10.Weight = 0.15151516425749251D; + // + // xrTableCell9 + // + this.xrTableCell9.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.ServiceDescription")}); + this.xrTableCell9.Multiline = true; + this.xrTableCell9.Name = "xrTableCell9"; + this.xrTableCell9.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); + this.xrTableCell9.StylePriority.UsePadding = false; + this.xrTableCell9.StylePriority.UseTextAlignment = false; + this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell9.Weight = 0.24931568999505721D; + // + // GroupHeader1 + // + this.GroupHeader1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTableServiceRecords1}); + this.GroupHeader1.Font = new System.Drawing.Font("Arial", 11F, System.Drawing.FontStyle.Bold); + this.GroupHeader1.HeightF = 60F; + this.GroupHeader1.Name = "GroupHeader1"; + this.GroupHeader1.RepeatEveryPage = true; + this.GroupHeader1.StylePriority.UseFont = false; + // + // bindingSource1 + // + this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO); + // + // formattingRuleStartDate + // + this.formattingRuleStartDate.Condition = "[StartDate2] < [StartDate]"; + this.formattingRuleStartDate.DataMember = "ServicesDouble"; + this.formattingRuleStartDate.Formatting.Visible = DevExpress.Utils.DefaultBoolean.False; + this.formattingRuleStartDate.Name = "formattingRuleStartDate"; + // + // formattingRuleServiceDesc + // + this.formattingRuleServiceDesc.Condition = "[StartDate2] < [StartDate]"; + this.formattingRuleServiceDesc.DataMember = "ServicesDouble"; + this.formattingRuleServiceDesc.Formatting.Visible = DevExpress.Utils.DefaultBoolean.False; + this.formattingRuleServiceDesc.Name = "formattingRuleServiceDesc"; + // + // formattingRuleCostBearer + // + this.formattingRuleCostBearer.Condition = "[StartDate2] < [StartDate]"; + this.formattingRuleCostBearer.DataMember = "ServicesDouble"; + this.formattingRuleCostBearer.Formatting.Visible = DevExpress.Utils.DefaultBoolean.False; + this.formattingRuleCostBearer.Name = "formattingRuleCostBearer"; + // + // formattingRuleEmployeeName + // + this.formattingRuleEmployeeName.Condition = "[StartDate2] < [StartDate]"; + this.formattingRuleEmployeeName.DataMember = "ServicesDouble"; + this.formattingRuleEmployeeName.Formatting.Visible = DevExpress.Utils.DefaultBoolean.False; + this.formattingRuleEmployeeName.Name = "formattingRuleEmployeeName"; + // + // topMarginBand1 + // + this.topMarginBand1.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.topMarginBand1.HeightF = 50F; + this.topMarginBand1.Name = "topMarginBand1"; + this.topMarginBand1.StylePriority.UseFont = false; + // + // bottomMarginBand1 + // + this.bottomMarginBand1.HeightF = 30F; + this.bottomMarginBand1.Name = "bottomMarginBand1"; + // + // ReportFooter + // + this.ReportFooter.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrLabel3, + this.xrLabel11, + this.xrLabel8, + this.xrLabel6, + this.xrLabel4}); + this.ReportFooter.Font = new System.Drawing.Font("Arial", 11F); + this.ReportFooter.HeightF = 140.125F; + this.ReportFooter.Name = "ReportFooter"; + this.ReportFooter.StylePriority.UseFont = false; + // + // xrLabel11 + // + this.xrLabel11.Borders = DevExpress.XtraPrinting.BorderSide.Right; + this.xrLabel11.Font = new System.Drawing.Font("Arial", 11F, System.Drawing.FontStyle.Bold); + this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(168.6445F, 0F); + this.xrLabel11.Name = "xrLabel11"; + this.xrLabel11.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 3, 0, 0, 100F); + this.xrLabel11.SizeF = new System.Drawing.SizeF(281.3553F, 24.24997F); + this.xrLabel11.StylePriority.UseBorders = false; + this.xrLabel11.StylePriority.UseFont = false; + this.xrLabel11.StylePriority.UsePadding = false; + this.xrLabel11.StylePriority.UseTextAlignment = false; + this.xrLabel11.Text = "Einheiten gesamt:"; + this.xrLabel11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + // + // xrLabel8 + // + this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(630.0005F, 36.41669F); + this.xrLabel8.Name = "xrLabel8"; + this.xrLabel8.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel8.SizeF = new System.Drawing.SizeF(386.3333F, 17.99997F); + this.xrLabel8.StylePriority.UseBorders = false; + this.xrLabel8.StylePriority.UseFont = false; + this.xrLabel8.Text = "Datum, Unterschrift Leistungserbringer"; + // + // xrLabel6 + // + this.xrLabel6.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; + this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(630.0001F, 82.02082F); + this.xrLabel6.Name = "xrLabel6"; + this.xrLabel6.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel6.SizeF = new System.Drawing.SizeF(467.4581F, 17.99997F); + this.xrLabel6.StylePriority.UseBorders = false; + this.xrLabel6.StylePriority.UseFont = false; + // + // xrLabel4 + // + this.xrLabel4.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrLabel4.BorderWidth = 1F; + this.xrLabel4.Font = new System.Drawing.Font("Arial", 11F, System.Drawing.FontStyle.Bold); + this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(449.9998F, 0F); + this.xrLabel4.Name = "xrLabel4"; + this.xrLabel4.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 3, 0, 0, 100F); + this.xrLabel4.SizeF = new System.Drawing.SizeF(90.00092F, 24.24997F); + this.xrLabel4.StylePriority.UseBorders = false; + this.xrLabel4.StylePriority.UseBorderWidth = false; + this.xrLabel4.StylePriority.UseFont = false; + this.xrLabel4.StylePriority.UsePadding = false; + this.xrLabel4.StylePriority.UseTextAlignment = false; + this.xrLabel4.Text = "[fieldBillableFLS!0.00]"; + this.xrLabel4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // fieldAbrechenbareMinuten + // + this.fieldAbrechenbareMinuten.DataMember = "Services"; + this.fieldAbrechenbareMinuten.Expression = "[Minutes] / 60"; + this.fieldAbrechenbareMinuten.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldAbrechenbareMinuten.Name = "fieldAbrechenbareMinuten"; + // + // fieldBillableFLS + // + this.fieldBillableFLS.Expression = "[TotalFLMBillable] / 60"; + this.fieldBillableFLS.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldBillableFLS.Name = "fieldBillableFLS"; + // + // fieldAbrechenbareFLS + // + this.fieldAbrechenbareFLS.Expression = "([TotalFLMBillable] / 60) * 1.2"; + this.fieldAbrechenbareFLS.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldAbrechenbareFLS.Name = "fieldAbrechenbareFLS"; + // + // xrLabel12 + // + this.xrLabel12.LocationFloat = new DevExpress.Utils.PointFloat(0F, 100F); + this.xrLabel12.Name = "xrLabel12"; + this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel12.SizeF = new System.Drawing.SizeF(248.7709F, 20F); + this.xrLabel12.StylePriority.UseFont = false; + this.xrLabel12.Text = "Name der versicherten Person: "; + // + // xrLabel23 + // + this.xrLabel23.LocationFloat = new DevExpress.Utils.PointFloat(248.7709F, 100F); + this.xrLabel23.Name = "xrLabel23"; + this.xrLabel23.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel23.SizeF = new System.Drawing.SizeF(358.2291F, 20F); + this.xrLabel23.StylePriority.UseBorders = false; + this.xrLabel23.StylePriority.UseFont = false; + this.xrLabel23.Text = "[CustomerFirstName] [CustomerLastName]"; + // + // xrLabel15 + // + this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(0F, 39.99999F); + this.xrLabel15.Name = "xrLabel15"; + this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel15.SizeF = new System.Drawing.SizeF(233.9999F, 20F); + this.xrLabel15.StylePriority.UseFont = false; + this.xrLabel15.Text = "Leistungserbringer: "; + // + // ReportHeader + // + this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrLabel2, + this.xrLabel9, + this.xrLabel17, + this.xrLabel16, + this.xrLabel13, + this.xrLabel14, + this.xrLabel10, + this.xrLabel7, + this.xrLabel1, + this.xrLabel15, + this.xrLabel23, + this.xrLabel12}); + this.ReportHeader.Font = new System.Drawing.Font("Arial", 11F, System.Drawing.FontStyle.Bold); + this.ReportHeader.HeightF = 200F; + this.ReportHeader.Name = "ReportHeader"; + this.ReportHeader.StylePriority.UseFont = false; + // + // xrLabel1 + // + this.xrLabel1.Font = new System.Drawing.Font("Arial", 13F, System.Drawing.FontStyle.Bold); + this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrLabel1.Name = "xrLabel1"; + this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel1.SizeF = new System.Drawing.SizeF(578.9792F, 20F); + this.xrLabel1.StylePriority.UseFont = false; + this.xrLabel1.Text = "Soziotherapeutischer Leistungsnachweis"; + // + // xrLabel7 + // + this.xrLabel7.LocationFloat = new DevExpress.Utils.PointFloat(233.9999F, 39.99999F); + this.xrLabel7.Name = "xrLabel7"; + this.xrLabel7.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel7.SizeF = new System.Drawing.SizeF(749.2915F, 20F); + this.xrLabel7.StylePriority.UseFont = false; + this.xrLabel7.Text = "Diakonie im Kirchenkreis Kleve e.V., Ostwall 20, 47608 Geldern"; + // + // xrLabel10 + // + this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(0F, 70.00002F); + this.xrLabel10.Name = "xrLabel10"; + this.xrLabel10.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel10.SizeF = new System.Drawing.SizeF(402.7499F, 20F); + this.xrLabel10.StylePriority.UseFont = false; + this.xrLabel10.Text = "IK-Nr.: 500506249"; + // + // xrLabel13 + // + this.xrLabel13.LocationFloat = new DevExpress.Utils.PointFloat(607F, 70.00002F); + this.xrLabel13.Name = "xrLabel13"; + this.xrLabel13.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel13.SizeF = new System.Drawing.SizeF(167.396F, 20F); + this.xrLabel13.StylePriority.UseFont = false; + this.xrLabel13.Text = "Krankenkasse:"; + // + // xrLabel14 + // + this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(774.396F, 70.00002F); + this.xrLabel14.Name = "xrLabel14"; + this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel14.SizeF = new System.Drawing.SizeF(310.8333F, 20F); + this.xrLabel14.StylePriority.UseBorders = false; + this.xrLabel14.StylePriority.UseFont = false; + this.xrLabel14.Text = "[CustomerFirstName] [CustomerLastName]"; + // + // xrLabel16 + // + this.xrLabel16.LocationFloat = new DevExpress.Utils.PointFloat(0F, 130F); + this.xrLabel16.Name = "xrLabel16"; + this.xrLabel16.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel16.SizeF = new System.Drawing.SizeF(248.7709F, 20F); + this.xrLabel16.StylePriority.UseFont = false; + this.xrLabel16.Text = "Zeitraum von - bis: "; + // + // xrLabel17 + // + this.xrLabel17.LocationFloat = new DevExpress.Utils.PointFloat(0F, 160F); + this.xrLabel17.Name = "xrLabel17"; + this.xrLabel17.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel17.SizeF = new System.Drawing.SizeF(378.4584F, 20F); + this.xrLabel17.StylePriority.UseFont = false; + this.xrLabel17.Text = "Soziotherapeutische Manahmen"; + // + // xrLabel2 + // + this.xrLabel2.LocationFloat = new DevExpress.Utils.PointFloat(607F, 100F); + this.xrLabel2.Name = "xrLabel2"; + this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel2.SizeF = new System.Drawing.SizeF(167.396F, 20F); + this.xrLabel2.StylePriority.UseFont = false; + this.xrLabel2.Text = "KV-Nr. / Geb.datum:"; + // + // xrLabel9 + // + this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(774.396F, 100F); + this.xrLabel9.Name = "xrLabel9"; + this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel9.SizeF = new System.Drawing.SizeF(310.8333F, 20F); + this.xrLabel9.StylePriority.UseBorders = false; + this.xrLabel9.StylePriority.UseFont = false; + this.xrLabel9.Text = "[CustomerFirstName] [CustomerLastName]"; + // + // xrTableCell14 + // + this.xrTableCell14.Name = "xrTableCell14"; + this.xrTableCell14.Text = "Handzeichen Soziothera-peut/in"; + this.xrTableCell14.Weight = 0.36578870400304608D; + // + // xrTableCell16 + // + this.xrTableCell16.Name = "xrTableCell16"; + this.xrTableCell16.Text = "Leistungsform"; + this.xrTableCell16.Weight = 0.29263096229337826D; + // + // xrTableCell17 + // + this.xrTableCell17.Name = "xrTableCell17"; + this.xrTableCell17.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell17.StylePriority.UsePadding = false; + this.xrTableCell17.StylePriority.UseTextAlignment = false; + this.xrTableCell17.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell17.Weight = 0.12626263699193913D; + // + // xrTableCell18 + // + this.xrTableCell18.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.EmployeeAbbr")}); + this.xrTableCell18.Name = "xrTableCell18"; + this.xrTableCell18.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); + this.xrTableCell18.StylePriority.UsePadding = false; + this.xrTableCell18.StylePriority.UseTextAlignment = false; + this.xrTableCell18.Text = "xrTableCell18"; + this.xrTableCell18.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell18.Weight = 0.18939395719588026D; + // + // xrLabel3 + // + this.xrLabel3.Font = new System.Drawing.Font("Arial", 9F); + this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(0.0005086263F, 122.125F); + this.xrLabel3.Name = "xrLabel3"; + this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel3.SizeF = new System.Drawing.SizeF(1085.229F, 17.99998F); + this.xrLabel3.StylePriority.UseBorders = false; + this.xrLabel3.StylePriority.UseFont = false; + this.xrLabel3.Text = "* Hinweis: 1 Einheit bei Einzeltherapie umfasst 60 Minuten, im Gruppenkontext 90 " + + "Minuten. Die Einzeltherapie kann auch in Teileinheiten erbracht werden (bspw. 0," + + "5 oder 1,5)."; + // + // LeistungsnachweisSoziotherapie + // + this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail, + this.DetailReport, + this.ReportHeader, + this.topMarginBand1, + this.bottomMarginBand1, + this.ReportFooter}); + this.CalculatedFields.AddRange(new DevExpress.XtraReports.UI.CalculatedField[] { + this.fieldAbrechenbareMinuten, + this.fieldBillableFLS, + this.fieldAbrechenbareFLS}); + this.DataSource = this.bindingSource1; + this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { + this.formattingRuleStartDate, + this.formattingRuleServiceDesc, + this.formattingRuleCostBearer, + this.formattingRuleEmployeeName}); + this.Landscape = true; + this.Margins = new System.Drawing.Printing.Margins(30, 30, 50, 30); + this.PageHeight = 827; + this.PageWidth = 1169; + this.PaperKind = System.Drawing.Printing.PaperKind.A4; + this.SnapGridSize = 9F; + this.Version = "17.1"; + ((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); + + } + + #endregion + + private DevExpress.XtraReports.UI.DetailBand Detail; + private System.Windows.Forms.BindingSource bindingSource1; + private DevExpress.XtraReports.UI.DetailReportBand DetailReport; + private DevExpress.XtraReports.UI.DetailBand Detail1; + private DevExpress.XtraReports.UI.XRTable xrTable3; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow6; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell15; + private DevExpress.XtraReports.UI.XRTable xrTableServiceRecords1; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow2; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell3; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell11; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell13; + private DevExpress.XtraReports.UI.FormattingRule formattingRuleStartDate; + private DevExpress.XtraReports.UI.FormattingRule formattingRuleServiceDesc; + private DevExpress.XtraReports.UI.FormattingRule formattingRuleCostBearer; + private DevExpress.XtraReports.UI.FormattingRule formattingRuleEmployeeName; + private DevExpress.XtraReports.UI.TopMarginBand topMarginBand1; + private DevExpress.XtraReports.UI.BottomMarginBand bottomMarginBand1; + private DevExpress.XtraReports.UI.ReportFooterBand ReportFooter; + private DevExpress.XtraReports.UI.CalculatedField fieldAbrechenbareMinuten; + private DevExpress.XtraReports.UI.XRLabel xrLabel4; + private DevExpress.XtraReports.UI.CalculatedField fieldBillableFLS; + private DevExpress.XtraReports.UI.CalculatedField fieldAbrechenbareFLS; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell2; + private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell6; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell4; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell7; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell5; + private DevExpress.XtraReports.UI.XRLabel xrLabel12; + private DevExpress.XtraReports.UI.XRLabel xrLabel23; + private DevExpress.XtraReports.UI.XRLabel xrLabel15; + private DevExpress.XtraReports.UI.ReportHeaderBand ReportHeader; + private DevExpress.XtraReports.UI.XRLabel xrLabel11; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell12; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell8; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell10; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell9; + private DevExpress.XtraReports.UI.XRLabel xrLabel8; + private DevExpress.XtraReports.UI.XRLabel xrLabel6; + private DevExpress.XtraReports.UI.XRLabel xrLabel7; + private DevExpress.XtraReports.UI.XRLabel xrLabel1; + private DevExpress.XtraReports.UI.XRLabel xrLabel10; + private DevExpress.XtraReports.UI.XRLabel xrLabel2; + private DevExpress.XtraReports.UI.XRLabel xrLabel9; + private DevExpress.XtraReports.UI.XRLabel xrLabel17; + private DevExpress.XtraReports.UI.XRLabel xrLabel16; + private DevExpress.XtraReports.UI.XRLabel xrLabel13; + private DevExpress.XtraReports.UI.XRLabel xrLabel14; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell16; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell14; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell17; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell18; + private DevExpress.XtraReports.UI.XRLabel xrLabel3; + } +} diff --git a/ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.resx b/ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.resx new file mode 100644 index 000000000..19e908bd3 --- /dev/null +++ b/ReportImp/DiakonieKKKleve/LeistungsnachweisSoziotherapie.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 21, 17 + + \ No newline at end of file diff --git a/ReportImp/DieDueneReports/CustomMitarbeiterstundenkontoBerechnungMonate.cs b/ReportImp/DieDueneReports/CustomMitarbeiterstundenkontoBerechnungMonate.cs new file mode 100644 index 000000000..7684e51a0 --- /dev/null +++ b/ReportImp/DieDueneReports/CustomMitarbeiterstundenkontoBerechnungMonate.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; +using BeWo.Report; +using BeWo.Data.Entities; +using BeWo.Data.Access; +using BeWo.Report.ReportObjects; +using BeWo.Service.Configuration; +using BeWo.Service.ServiceImplementations; +using BS.Shared; +using BS.Shared.Core; +using BS.Shared.Extensions; +using DevExpress.Data.Helpers; + + +namespace BeWo.DieDueneReports +{ + public class CustomMitarbeiterstundenkontoBerechnungMonate : MitarbeiterstundenkontoBerechnungMonate + { + + + public override MitarbeiterstundenkontoBerechnung CreateMitarbeiterstundenkontoBerechnung() + { + return new DieDueneMitarbeiterstundenkontoBerechnung(); + } + } +} diff --git a/ReportImp/DieDueneReports/DieDueneReports.csproj b/ReportImp/DieDueneReports/DieDueneReports.csproj index a7a67f948..e6f4e785d 100644 --- a/ReportImp/DieDueneReports/DieDueneReports.csproj +++ b/ReportImp/DieDueneReports/DieDueneReports.csproj @@ -62,12 +62,19 @@ + Component InvoiceCustomerReport.cs + + Component + + + Mitarbeiterarbeitszeitkonto.cs + Component @@ -75,6 +82,12 @@ Mitarbeiterstundenkonto.cs + + Component + + + MitarbeiterstundenkontoJahr.cs + Component @@ -113,9 +126,16 @@ InvoiceCustomerReport.cs Designer + + Mitarbeiterarbeitszeitkonto.cs + Mitarbeiterstundenkonto.cs + + MitarbeiterstundenkontoJahr.cs + Designer + ServiceInvoiceReport.cs diff --git a/ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.cs b/ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.cs new file mode 100644 index 000000000..88376d204 --- /dev/null +++ b/ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.cs @@ -0,0 +1,52 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using BeWo.Report; +using BeWo.Report.ReportObjects; + +using BS.Shared.Core; +using DevExpress.XtraReports.UI; + +namespace BeWo.DieDueneReports +{ + [IDSpecificClass(Identifier = "Mitarbeiterarbeitszeitkonto")] + public partial class Mitarbeiterarbeitszeitkonto : DevExpress.XtraReports.UI.XtraReport, IBeWoReport + { + + public Mitarbeiterarbeitszeitkonto() + { + InitializeComponent(); + } + + public void SetReportDataSource(MitarbeiterstundenkontoRO pRO) + { + var msb = new DieDueneMitarbeiterstundenkontoBerechnung(); + msb.CreateReport(pRO); + + foreach (var ed in pRO.EmployeeDetailList) + { + foreach (var dd in ed.Days) + { + dd.PauseInMinuten /= 60; + } + + var c = ed.Employee.GetValidContractForDate(pRO.ReportStartDate); + if (c != null) + { + if (c.MonthlyTotalHours.HasValue) + { + ed.Regelarbeitszeit = String.Format("{0:0.00} Stunden im Monat", c.MonthlyTotalHours); + } + else if (c.WeeklyTotalHours.HasValue) + { + ed.Regelarbeitszeit = String.Format("{0:0.00} Stunden pro Woche", c.WeeklyTotalHours); + } + } + + } + this.bindingSource1.DataSource = pRO; + } + + } +} diff --git a/ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.designer.cs b/ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.designer.cs new file mode 100644 index 000000000..8e8c21e42 --- /dev/null +++ b/ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.designer.cs @@ -0,0 +1,1140 @@ +using BeWo.Report.ReportObjects; +namespace BeWo.DieDueneReports +{ + partial class Mitarbeiterarbeitszeitkonto + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + DevExpress.XtraReports.UI.XRSummary xrSummary1 = new DevExpress.XtraReports.UI.XRSummary(); + DevExpress.XtraReports.UI.XRSummary xrSummary3 = new DevExpress.XtraReports.UI.XRSummary(); + DevExpress.XtraReports.UI.XRSummary xrSummary4 = new DevExpress.XtraReports.UI.XRSummary(); + DevExpress.XtraReports.UI.XRSummary xrSummary5 = new DevExpress.XtraReports.UI.XRSummary(); + DevExpress.XtraReports.UI.XRSummary xrSummary2 = new DevExpress.XtraReports.UI.XRSummary(); + this.Detail = new DevExpress.XtraReports.UI.DetailBand(); + this.Detail1 = new DevExpress.XtraReports.UI.DetailBand(); + this.xrTableDetail = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRowDetail = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell20 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell31 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell67 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell(); + this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand(); + this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand(); + this.Detail2 = new DevExpress.XtraReports.UI.DetailBand(); + this.GroupHeader2 = new DevExpress.XtraReports.UI.GroupHeaderBand(); + this.xrTableHeader = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRowHeader = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell(); + this.GroupHeader3 = new DevExpress.XtraReports.UI.GroupHeaderBand(); + this.lblMonat = new DevExpress.XtraReports.UI.XRLabel(); + this.xrTable2 = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell25 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableRow8 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellRegelarbeitszeit = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableRow10 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell21 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell24 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell28 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell23 = new DevExpress.XtraReports.UI.XRTableCell(); + this.GroupFooter2 = new DevExpress.XtraReports.UI.GroupFooterBand(); + this.xrTable4 = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRow9 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell64 = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellSumMinutesTotalDecimal = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellSumHoursSickDecimal = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellSumHoursInVacationDecimal = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTable1 = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell46 = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellSumMinutesTotalDecimal2 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell17 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell41 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell55 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableRow5 = new DevExpress.XtraReports.UI.XRTableRow(); + this.sollStundenMonatLabelTableCell = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell50 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell51 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell18 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableRow6 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell48 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell57 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell58 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell26 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell(); + this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); + this.Title = new DevExpress.XtraReports.UI.XRControlStyle(); + this.FieldCaption = new DevExpress.XtraReports.UI.XRControlStyle(); + this.PageInfo = new DevExpress.XtraReports.UI.XRControlStyle(); + this.DataField = new DevExpress.XtraReports.UI.XRControlStyle(); + this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand(); + this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand(); + this.fieldSumSpecial = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldSumSonntag = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldSumFeiertag = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldHours = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldSick = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldVacation = new DevExpress.XtraReports.UI.CalculatedField(); + this.calculatedField1 = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldSumHours = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldSumHoliday2 = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldIstArbeitszeit = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldUeberstundenGesamt = new DevExpress.XtraReports.UI.CalculatedField(); + this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell(); + ((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); + // + // Detail + // + this.Detail.HeightF = 0F; + this.Detail.Name = "Detail"; + this.Detail.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.Detail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; + // + // Detail1 + // + this.Detail1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Detail1.HeightF = 0F; + this.Detail1.Name = "Detail1"; + this.Detail1.StylePriority.UseFont = false; + // + // xrTableDetail + // + this.xrTableDetail.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableDetail.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrTableDetail.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrTableDetail.Name = "xrTableDetail"; + this.xrTableDetail.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTableDetail.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRowDetail}); + this.xrTableDetail.SizeF = new System.Drawing.SizeF(670F, 22F); + this.xrTableDetail.StylePriority.UseBorders = false; + this.xrTableDetail.StylePriority.UseFont = false; + this.xrTableDetail.StylePriority.UsePadding = false; + this.xrTableDetail.StylePriority.UseTextAlignment = false; + this.xrTableDetail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRowDetail + // + this.xrTableRowDetail.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell3, + this.xrTableCell20, + this.xrTableCell31, + this.xrTableCell9, + this.xrTableCell67, + this.xrTableCell27}); + this.xrTableRowDetail.Name = "xrTableRowDetail"; + this.xrTableRowDetail.Weight = 0.88D; + // + // xrTableCell3 + // + this.xrTableCell3.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.Date", "{0:ddd. dd.MM.}")}); + this.xrTableCell3.Name = "xrTableCell3"; + this.xrTableCell3.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell3.StylePriority.UseFont = false; + this.xrTableCell3.StylePriority.UsePadding = false; + this.xrTableCell3.StylePriority.UseTextAlignment = false; + this.xrTableCell3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell3.Weight = 0.090171325518485154D; + this.xrTableCell3.XlsxFormatString = "ddd. dd.MM.yyyy"; + // + // xrTableCell20 + // + this.xrTableCell20.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.ZeitraeumeString", "{0:HH:mm}")}); + this.xrTableCell20.Name = "xrTableCell20"; + this.xrTableCell20.Text = "xrTableCell20"; + this.xrTableCell20.Weight = 0.26149685088313307D; + // + // xrTableCell31 + // + this.xrTableCell31.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.fieldHours", "{0:0.00}")}); + this.xrTableCell31.Name = "xrTableCell31"; + this.xrTableCell31.StylePriority.UseTextAlignment = false; + this.xrTableCell31.Text = "xrTableCell31"; + this.xrTableCell31.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell31.Weight = 0.063119930442761957D; + // + // xrTableCell67 + // + this.xrTableCell67.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursSick", "{0:0.00}")}); + this.xrTableCell67.Name = "xrTableCell67"; + this.xrTableCell67.StylePriority.UseTextAlignment = false; + this.xrTableCell67.Text = "xrTableCell67"; + this.xrTableCell67.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell67.Weight = 0.063119926573028409D; + // + // xrTableCell27 + // + this.xrTableCell27.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursInVacation", "{0:0.00}")}); + this.xrTableCell27.Name = "xrTableCell27"; + this.xrTableCell27.StylePriority.UseTextAlignment = false; + this.xrTableCell27.Text = "xrTableCell27"; + this.xrTableCell27.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell27.Weight = 0.063119917543649692D; + // + // DetailReport + // + this.DetailReport.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail1, + this.DetailReport1}); + this.DetailReport.DataMember = "EmployeeDetailList"; + this.DetailReport.DataSource = this.bindingSource1; + this.DetailReport.Level = 0; + this.DetailReport.Name = "DetailReport"; + // + // DetailReport1 + // + this.DetailReport1.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail2, + this.GroupHeader2, + this.GroupHeader3, + this.GroupFooter2}); + this.DetailReport1.DataMember = "EmployeeDetailList.Days"; + this.DetailReport1.DataSource = this.bindingSource1; + this.DetailReport1.Level = 0; + this.DetailReport1.Name = "DetailReport1"; + // + // Detail2 + // + this.Detail2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTableDetail}); + this.Detail2.Font = new System.Drawing.Font("Arial", 8F); + this.Detail2.HeightF = 22F; + this.Detail2.Name = "Detail2"; + this.Detail2.StylePriority.UseFont = false; + // + // GroupHeader2 + // + this.GroupHeader2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTableHeader}); + this.GroupHeader2.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); + this.GroupHeader2.HeightF = 30F; + this.GroupHeader2.Name = "GroupHeader2"; + this.GroupHeader2.StylePriority.UseFont = false; + // + // xrTableHeader + // + this.xrTableHeader.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableHeader.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrTableHeader.Name = "xrTableHeader"; + this.xrTableHeader.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTableHeader.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRowHeader}); + this.xrTableHeader.SizeF = new System.Drawing.SizeF(670F, 30F); + this.xrTableHeader.StylePriority.UseBackColor = false; + this.xrTableHeader.StylePriority.UseBorders = false; + this.xrTableHeader.StylePriority.UseFont = false; + this.xrTableHeader.StylePriority.UsePadding = false; + this.xrTableHeader.StylePriority.UseTextAlignment = false; + this.xrTableHeader.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRowHeader + // + this.xrTableRowHeader.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell5, + this.xrTableCell2, + this.xrTableCell7, + this.xrTableCell4, + this.xrTableCell8, + this.xrTableCell10}); + this.xrTableRowHeader.Name = "xrTableRowHeader"; + this.xrTableRowHeader.Weight = 0.79999999999999982D; + // + // xrTableCell5 + // + this.xrTableCell5.Name = "xrTableCell5"; + this.xrTableCell5.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell5.StylePriority.UsePadding = false; + this.xrTableCell5.StylePriority.UseTextAlignment = false; + this.xrTableCell5.Text = "Datum"; + this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell5.Weight = 0.090171325629990237D; + // + // xrTableCell2 + // + this.xrTableCell2.Name = "xrTableCell2"; + this.xrTableCell2.StylePriority.UseTextAlignment = false; + this.xrTableCell2.Text = "Uhrzeit"; + this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell2.Weight = 0.26149684382621236D; + // + // xrTableCell7 + // + this.xrTableCell7.Name = "xrTableCell7"; + this.xrTableCell7.StylePriority.UseTextAlignment = false; + this.xrTableCell7.Text = "Stunden"; + this.xrTableCell7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell7.Weight = 0.063119928922238014D; + // + // xrTableCell8 + // + this.xrTableCell8.Multiline = true; + this.xrTableCell8.Name = "xrTableCell8"; + this.xrTableCell8.StylePriority.UseTextAlignment = false; + this.xrTableCell8.Text = "Krank"; + this.xrTableCell8.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell8.Weight = 0.063119927721024038D; + // + // xrTableCell10 + // + this.xrTableCell10.Multiline = true; + this.xrTableCell10.Name = "xrTableCell10"; + this.xrTableCell10.StylePriority.UseBackColor = false; + this.xrTableCell10.StylePriority.UseTextAlignment = false; + this.xrTableCell10.Text = "Urlaub"; + this.xrTableCell10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell10.Weight = 0.063119923713598564D; + // + // GroupHeader3 + // + this.GroupHeader3.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.lblMonat, + this.xrTable2}); + this.GroupHeader3.Font = new System.Drawing.Font("Arial", 10F); + this.GroupHeader3.HeightF = 120F; + this.GroupHeader3.Level = 1; + this.GroupHeader3.Name = "GroupHeader3"; + this.GroupHeader3.PageBreak = DevExpress.XtraReports.UI.PageBreak.BeforeBand; + this.GroupHeader3.StylePriority.UseFont = false; + // + // lblMonat + // + this.lblMonat.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "ReportStartDate", "Stundenkonto {0:MMMM yy}")}); + this.lblMonat.Font = new System.Drawing.Font("Arial", 14F, System.Drawing.FontStyle.Bold); + this.lblMonat.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.lblMonat.Multiline = true; + this.lblMonat.Name = "lblMonat"; + this.lblMonat.SizeF = new System.Drawing.SizeF(700.0001F, 25F); + this.lblMonat.StyleName = "Title"; + this.lblMonat.StylePriority.UseFont = false; + this.lblMonat.Text = "lblMonat"; + // + // xrTable2 + // + this.xrTable2.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.xrTable2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 47.91663F); + this.xrTable2.Name = "xrTable2"; + this.xrTable2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTable2.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRow1, + this.xrTableRow8, + this.xrTableRow10}); + this.xrTable2.SizeF = new System.Drawing.SizeF(552.2002F, 54F); + this.xrTable2.StylePriority.UseBorders = false; + this.xrTable2.StylePriority.UseFont = false; + this.xrTable2.StylePriority.UsePadding = false; + this.xrTable2.StylePriority.UseTextAlignment = false; + this.xrTable2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRow1 + // + this.xrTableRow1.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell1, + this.xrTableCell25}); + this.xrTableRow1.Name = "xrTableRow1"; + this.xrTableRow1.Weight = 0.75540991165010141D; + // + // xrTableCell1 + // + this.xrTableCell1.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); + this.xrTableCell1.Name = "xrTableCell1"; + this.xrTableCell1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTableCell1.StylePriority.UseFont = false; + this.xrTableCell1.StylePriority.UsePadding = false; + this.xrTableCell1.StylePriority.UseTextAlignment = false; + this.xrTableCell1.Text = "Mitarbeiter/in:"; + this.xrTableCell1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell1.Weight = 0.138246012405208D; + // + // xrTableCell25 + // + this.xrTableCell25.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.FullName")}); + this.xrTableCell25.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); + this.xrTableCell25.Multiline = true; + this.xrTableCell25.Name = "xrTableCell25"; + this.xrTableCell25.StylePriority.UseFont = false; + this.xrTableCell25.StylePriority.UseTextAlignment = false; + this.xrTableCell25.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell25.Weight = 0.49791629021026568D; + // + // xrTableRow8 + // + this.xrTableRow8.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell6, + this.cellRegelarbeitszeit}); + this.xrTableRow8.Name = "xrTableRow8"; + this.xrTableRow8.Weight = 0.75540991165010141D; + // + // xrTableCell6 + // + this.xrTableCell6.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); + this.xrTableCell6.Name = "xrTableCell6"; + this.xrTableCell6.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTableCell6.StylePriority.UseFont = false; + this.xrTableCell6.StylePriority.UsePadding = false; + this.xrTableCell6.StylePriority.UseTextAlignment = false; + this.xrTableCell6.Text = "Regelarbeitszeit:"; + this.xrTableCell6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell6.Weight = 0.138246012405208D; + // + // cellRegelarbeitszeit + // + this.cellRegelarbeitszeit.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Regelarbeitszeit")}); + this.cellRegelarbeitszeit.Name = "cellRegelarbeitszeit"; + this.cellRegelarbeitszeit.StylePriority.UseFont = false; + this.cellRegelarbeitszeit.StylePriority.UseTextAlignment = false; + this.cellRegelarbeitszeit.Text = "cellRegelarbeitszeit"; + this.cellRegelarbeitszeit.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.cellRegelarbeitszeit.Weight = 0.49791629021026573D; + // + // xrTableRow10 + // + this.xrTableRow10.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell21, + this.xrTableCell24, + this.xrTableCell28, + this.xrTableCell23}); + this.xrTableRow10.Name = "xrTableRow10"; + this.xrTableRow10.Weight = 0.75540991165010141D; + // + // xrTableCell21 + // + this.xrTableCell21.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); + this.xrTableCell21.Name = "xrTableCell21"; + this.xrTableCell21.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTableCell21.StylePriority.UseFont = false; + this.xrTableCell21.StylePriority.UsePadding = false; + this.xrTableCell21.StylePriority.UseTextAlignment = false; + this.xrTableCell21.Text = "Soll-Stunden:"; + this.xrTableCell21.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell21.Weight = 0.138246012405208D; + // + // xrTableCell24 + // + this.xrTableCell24.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.StundenSollMax", "{0:0.00}")}); + this.xrTableCell24.Name = "xrTableCell24"; + this.xrTableCell24.StylePriority.UseTextAlignment = false; + this.xrTableCell24.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell24.Weight = 0.17215478017129932D; + // + // xrTableCell28 + // + this.xrTableCell28.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); + this.xrTableCell28.Name = "xrTableCell28"; + this.xrTableCell28.StylePriority.UseFont = false; + this.xrTableCell28.StylePriority.UseTextAlignment = false; + this.xrTableCell28.Text = "Arbeitstage diesen Monat:"; + this.xrTableCell28.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell28.Weight = 0.213129273221085D; + // + // xrTableCell23 + // + this.xrTableCell23.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.ArbeitstageImBerichtszeitraum", "{0:0}")}); + this.xrTableCell23.Name = "xrTableCell23"; + this.xrTableCell23.StylePriority.UseFont = false; + this.xrTableCell23.StylePriority.UseTextAlignment = false; + this.xrTableCell23.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell23.Weight = 0.11263223681788141D; + // + // GroupFooter2 + // + this.GroupFooter2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTable4, + this.xrTable1}); + this.GroupFooter2.Font = new System.Drawing.Font("Arial", 10F); + this.GroupFooter2.HeightF = 85F; + this.GroupFooter2.KeepTogether = true; + this.GroupFooter2.Name = "GroupFooter2"; + this.GroupFooter2.StylePriority.UseFont = false; + // + // xrTable4 + // + this.xrTable4.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.xrTable4.LocationFloat = new DevExpress.Utils.PointFloat(110F, 0F); + this.xrTable4.Name = "xrTable4"; + this.xrTable4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTable4.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRow9}); + this.xrTable4.SizeF = new System.Drawing.SizeF(560F, 22F); + this.xrTable4.StylePriority.UseBorders = false; + this.xrTable4.StylePriority.UseFont = false; + this.xrTable4.StylePriority.UsePadding = false; + this.xrTable4.StylePriority.UseTextAlignment = false; + this.xrTable4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRow9 + // + this.xrTableRow9.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell64, + this.cellSumMinutesTotalDecimal, + this.xrTableCell16, + this.cellSumHoursSickDecimal, + this.cellSumHoursInVacationDecimal}); + this.xrTableRow9.Name = "xrTableRow9"; + this.xrTableRow9.Weight = 0.87999999999999978D; + // + // xrTableCell64 + // + this.xrTableCell64.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrTableCell64.Name = "xrTableCell64"; + this.xrTableCell64.StylePriority.UseFont = false; + this.xrTableCell64.StylePriority.UseTextAlignment = false; + this.xrTableCell64.Text = "Summe:"; + this.xrTableCell64.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell64.Weight = 0.25247701505767106D; + // + // cellSumMinutesTotalDecimal + // + this.cellSumMinutesTotalDecimal.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.fieldHours")}); + this.cellSumMinutesTotalDecimal.Name = "cellSumMinutesTotalDecimal"; + this.cellSumMinutesTotalDecimal.StylePriority.UseTextAlignment = false; + xrSummary1.FormatString = "{0:0.00}"; + xrSummary1.IgnoreNullValues = true; + xrSummary1.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.cellSumMinutesTotalDecimal.Summary = xrSummary1; + this.cellSumMinutesTotalDecimal.Text = "cellSumMinutesTotalDecimal"; + this.cellSumMinutesTotalDecimal.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.cellSumMinutesTotalDecimal.Weight = 0.0631192496629693D; + // + // cellSumHoursSickDecimal + // + this.cellSumHoursSickDecimal.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursSick")}); + this.cellSumHoursSickDecimal.Multiline = true; + this.cellSumHoursSickDecimal.Name = "cellSumHoursSickDecimal"; + this.cellSumHoursSickDecimal.StylePriority.UseTextAlignment = false; + xrSummary3.FormatString = "{0:0.00}"; + xrSummary3.IgnoreNullValues = true; + xrSummary3.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.cellSumHoursSickDecimal.Summary = xrSummary3; + this.cellSumHoursSickDecimal.Text = "cellSumHoursSickDecimal"; + this.cellSumHoursSickDecimal.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.cellSumHoursSickDecimal.Weight = 0.063119254525531576D; + // + // cellSumHoursInVacationDecimal + // + this.cellSumHoursInVacationDecimal.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursInVacation")}); + this.cellSumHoursInVacationDecimal.Multiline = true; + this.cellSumHoursInVacationDecimal.Name = "cellSumHoursInVacationDecimal"; + this.cellSumHoursInVacationDecimal.StylePriority.UseBackColor = false; + this.cellSumHoursInVacationDecimal.StylePriority.UseTextAlignment = false; + xrSummary4.FormatString = "{0:0.00}"; + xrSummary4.IgnoreNullValues = true; + xrSummary4.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.cellSumHoursInVacationDecimal.Summary = xrSummary4; + this.cellSumHoursInVacationDecimal.Text = "cellSumHoursInVacationDecimal"; + this.cellSumHoursInVacationDecimal.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.cellSumHoursInVacationDecimal.Weight = 0.063119249464816507D; + // + // xrTable1 + // + this.xrTable1.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTable1.LocationFloat = new DevExpress.Utils.PointFloat(9.536743E-05F, 25F); + this.xrTable1.Name = "xrTable1"; + this.xrTable1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTable1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRow4, + this.xrTableRow5, + this.xrTableRow6}); + this.xrTable1.SizeF = new System.Drawing.SizeF(669.9999F, 60F); + this.xrTable1.StylePriority.UseBorders = false; + this.xrTable1.StylePriority.UseFont = false; + this.xrTable1.StylePriority.UsePadding = false; + this.xrTable1.StylePriority.UseTextAlignment = false; + this.xrTable1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRow4 + // + this.xrTableRow4.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell46, + this.cellSumMinutesTotalDecimal2, + this.xrTableCell17, + this.xrTableCell15, + this.xrTableCell41, + this.xrTableCell55}); + this.xrTableRow4.Name = "xrTableRow4"; + this.xrTableRow4.Weight = 0.8D; + // + // xrTableCell46 + // + this.xrTableCell46.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top))); + this.xrTableCell46.Name = "xrTableCell46"; + this.xrTableCell46.StylePriority.UseBorders = false; + this.xrTableCell46.StylePriority.UseTextAlignment = false; + this.xrTableCell46.Text = "Arbeitszeit:"; + this.xrTableCell46.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell46.Weight = 0.0899362101431268D; + // + // cellSumMinutesTotalDecimal2 + // + this.cellSumMinutesTotalDecimal2.Borders = DevExpress.XtraPrinting.BorderSide.Top; + this.cellSumMinutesTotalDecimal2.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.fieldHours")}); + this.cellSumMinutesTotalDecimal2.Name = "cellSumMinutesTotalDecimal2"; + this.cellSumMinutesTotalDecimal2.StylePriority.UseBorders = false; + this.cellSumMinutesTotalDecimal2.StylePriority.UseTextAlignment = false; + xrSummary5.FormatString = "{0:0.00}"; + xrSummary5.IgnoreNullValues = true; + xrSummary5.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.cellSumMinutesTotalDecimal2.Summary = xrSummary5; + this.cellSumMinutesTotalDecimal2.Text = "cellSumMinutesTotalDecimal2"; + this.cellSumMinutesTotalDecimal2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.cellSumMinutesTotalDecimal2.Weight = 0.071948964683863317D; + // + // xrTableCell17 + // + this.xrTableCell17.Borders = DevExpress.XtraPrinting.BorderSide.Top; + this.xrTableCell17.Name = "xrTableCell17"; + this.xrTableCell17.StylePriority.UseBorders = false; + this.xrTableCell17.StylePriority.UseTextAlignment = false; + this.xrTableCell17.Text = "berstunden neu:"; + this.xrTableCell17.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell17.Weight = 0.14389792524594167D; + // + // xrTableCell15 + // + this.xrTableCell15.Borders = DevExpress.XtraPrinting.BorderSide.Top; + this.xrTableCell15.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Ueberstunden", "{0:0.00}")}); + this.xrTableCell15.Name = "xrTableCell15"; + this.xrTableCell15.StylePriority.UseBorders = false; + this.xrTableCell15.StylePriority.UseTextAlignment = false; + this.xrTableCell15.Text = "xrTableCell15"; + this.xrTableCell15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell15.Weight = 0.0719489609431911D; + // + // xrTableCell41 + // + this.xrTableCell41.Borders = DevExpress.XtraPrinting.BorderSide.Top; + this.xrTableCell41.Name = "xrTableCell41"; + this.xrTableCell41.StylePriority.UseBorders = false; + this.xrTableCell41.StylePriority.UseTextAlignment = false; + this.xrTableCell41.Text = "berstunden Gesamt:"; + this.xrTableCell41.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell41.Weight = 0.14389779473226938D; + // + // xrTableCell55 + // + this.xrTableCell55.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Right))); + this.xrTableCell55.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.fieldUeberstundenGesamt", "{0:0.00}")}); + this.xrTableCell55.Name = "xrTableCell55"; + this.xrTableCell55.StylePriority.UseBorders = false; + this.xrTableCell55.StylePriority.UseTextAlignment = false; + this.xrTableCell55.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell55.Weight = 0.080942610501736539D; + // + // xrTableRow5 + // + this.xrTableRow5.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.sollStundenMonatLabelTableCell, + this.xrTableCell50, + this.xrTableCell51, + this.xrTableCell18, + this.xrTableCell11, + this.xrTableCell13}); + this.xrTableRow5.Name = "xrTableRow5"; + this.xrTableRow5.Weight = 0.8D; + // + // sollStundenMonatLabelTableCell + // + this.sollStundenMonatLabelTableCell.Borders = DevExpress.XtraPrinting.BorderSide.Left; + this.sollStundenMonatLabelTableCell.Name = "sollStundenMonatLabelTableCell"; + this.sollStundenMonatLabelTableCell.StylePriority.UseBorders = false; + this.sollStundenMonatLabelTableCell.StylePriority.UseTextAlignment = false; + this.sollStundenMonatLabelTableCell.Text = "Soll-Stunden:"; + this.sollStundenMonatLabelTableCell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.sollStundenMonatLabelTableCell.Weight = 0.0899362025013637D; + // + // xrTableCell50 + // + this.xrTableCell50.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; + this.xrTableCell50.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.StundenSollMax", "{0:0.00}")}); + this.xrTableCell50.Name = "xrTableCell50"; + this.xrTableCell50.StylePriority.UseBorders = false; + this.xrTableCell50.StylePriority.UseTextAlignment = false; + this.xrTableCell50.Text = "xrTableCell50"; + this.xrTableCell50.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell50.Weight = 0.071948963831937288D; + // + // xrTableCell51 + // + this.xrTableCell51.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.xrTableCell51.Name = "xrTableCell51"; + this.xrTableCell51.StylePriority.UseBorders = false; + this.xrTableCell51.StylePriority.UseFont = false; + this.xrTableCell51.StylePriority.UseTextAlignment = false; + this.xrTableCell51.Text = "berstunden Vormonat:"; + this.xrTableCell51.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell51.Weight = 0.14389792921032482D; + // + // xrTableCell18 + // + this.xrTableCell18.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; + this.xrTableCell18.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.UeberstundenVormonat", "{0:0.00}")}); + this.xrTableCell18.Name = "xrTableCell18"; + this.xrTableCell18.StylePriority.UseBorders = false; + this.xrTableCell18.StylePriority.UseTextAlignment = false; + this.xrTableCell18.Text = "xrTableCell18"; + this.xrTableCell18.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell18.Weight = 0.071948964692321912D; + // + // xrTableCell11 + // + this.xrTableCell11.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.xrTableCell11.Name = "xrTableCell11"; + this.xrTableCell11.StylePriority.UseBorders = false; + this.xrTableCell11.StylePriority.UseTextAlignment = false; + this.xrTableCell11.Text = "davon ausbezahlt:"; + this.xrTableCell11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell11.Weight = 0.14389779185300228D; + // + // xrTableCell13 + // + this.xrTableCell13.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell13.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.UeberstundenAusbezahlt", "{0:0.00}")}); + this.xrTableCell13.Name = "xrTableCell13"; + this.xrTableCell13.StylePriority.UseBorders = false; + this.xrTableCell13.StylePriority.UseTextAlignment = false; + this.xrTableCell13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell13.Weight = 0.0809426141611789D; + // + // xrTableRow6 + // + this.xrTableRow6.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell48, + this.xrTableCell57, + this.xrTableCell58, + this.xrTableCell26, + this.xrTableCell12, + this.xrTableCell14}); + this.xrTableRow6.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); + this.xrTableRow6.Name = "xrTableRow6"; + this.xrTableRow6.StylePriority.UseFont = false; + this.xrTableRow6.Weight = 0.8D; + // + // xrTableCell48 + // + this.xrTableCell48.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell48.Name = "xrTableCell48"; + this.xrTableCell48.StylePriority.UseBorders = false; + this.xrTableCell48.StylePriority.UseFont = false; + this.xrTableCell48.StylePriority.UseTextAlignment = false; + this.xrTableCell48.Text = "Differenz:"; + this.xrTableCell48.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell48.Weight = 0.0899362025013648D; + // + // xrTableCell57 + // + this.xrTableCell57.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell57.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Ueberstunden", "{0:0.00}")}); + this.xrTableCell57.Name = "xrTableCell57"; + this.xrTableCell57.StylePriority.UseBorders = false; + this.xrTableCell57.StylePriority.UseFont = false; + this.xrTableCell57.StylePriority.UseTextAlignment = false; + this.xrTableCell57.Text = "xrTableCell57"; + this.xrTableCell57.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell57.Weight = 0.071948963831938426D; + // + // xrTableCell58 + // + this.xrTableCell58.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; + this.xrTableCell58.Name = "xrTableCell58"; + this.xrTableCell58.StylePriority.UseBorders = false; + this.xrTableCell58.StylePriority.UseFont = false; + this.xrTableCell58.StylePriority.UseTextAlignment = false; + this.xrTableCell58.Text = "berstunden Gesamt:"; + this.xrTableCell58.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell58.Weight = 0.14389792921032421D; + // + // xrTableCell26 + // + this.xrTableCell26.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; + this.xrTableCell26.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.fieldUeberstundenGesamt", "{0:0.00}")}); + this.xrTableCell26.Name = "xrTableCell26"; + this.xrTableCell26.StylePriority.UseBorders = false; + this.xrTableCell26.StylePriority.UseTextAlignment = false; + this.xrTableCell26.Text = "xrTableCell26"; + this.xrTableCell26.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell26.Weight = 0.071948964692321371D; + // + // xrTableCell12 + // + this.xrTableCell12.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell12.Name = "xrTableCell12"; + this.xrTableCell12.StylePriority.UseBorders = false; + this.xrTableCell12.StylePriority.UseFont = false; + this.xrTableCell12.StylePriority.UseTextAlignment = false; + this.xrTableCell12.Text = "bertrag Folgemonat:"; + this.xrTableCell12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell12.Weight = 0.14389779185300169D; + // + // xrTableCell14 + // + this.xrTableCell14.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell14.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.UeberstundenGesamt", "{0:0.00}")}); + this.xrTableCell14.Name = "xrTableCell14"; + this.xrTableCell14.StylePriority.UseBorders = false; + this.xrTableCell14.StylePriority.UseTextAlignment = false; + this.xrTableCell14.Text = "xrTableCell14"; + this.xrTableCell14.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell14.Weight = 0.080942614161178317D; + // + // bindingSource1 + // + this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO); + // + // Title + // + this.Title.BackColor = System.Drawing.Color.White; + this.Title.BorderColor = System.Drawing.SystemColors.ControlText; + this.Title.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.Title.BorderWidth = 1F; + this.Title.Font = new System.Drawing.Font("Times New Roman", 24F); + this.Title.ForeColor = System.Drawing.Color.Black; + this.Title.Name = "Title"; + // + // FieldCaption + // + this.FieldCaption.BackColor = System.Drawing.Color.White; + this.FieldCaption.BorderColor = System.Drawing.SystemColors.ControlText; + this.FieldCaption.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.FieldCaption.BorderWidth = 1F; + this.FieldCaption.Font = new System.Drawing.Font("Times New Roman", 10F, System.Drawing.FontStyle.Bold); + this.FieldCaption.ForeColor = System.Drawing.Color.Black; + this.FieldCaption.Name = "FieldCaption"; + // + // PageInfo + // + this.PageInfo.BackColor = System.Drawing.Color.White; + this.PageInfo.BorderColor = System.Drawing.SystemColors.ControlText; + this.PageInfo.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.PageInfo.BorderWidth = 1F; + this.PageInfo.Font = new System.Drawing.Font("Times New Roman", 8F); + this.PageInfo.ForeColor = System.Drawing.Color.Black; + this.PageInfo.Name = "PageInfo"; + // + // DataField + // + this.DataField.BackColor = System.Drawing.Color.White; + this.DataField.BorderColor = System.Drawing.SystemColors.ControlText; + this.DataField.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.DataField.BorderWidth = 1F; + this.DataField.Font = new System.Drawing.Font("Times New Roman", 8F); + this.DataField.ForeColor = System.Drawing.SystemColors.ControlText; + this.DataField.Name = "DataField"; + // + // topMarginBand1 + // + this.topMarginBand1.HeightF = 50F; + this.topMarginBand1.Name = "topMarginBand1"; + // + // bottomMarginBand1 + // + this.bottomMarginBand1.HeightF = 50F; + this.bottomMarginBand1.Name = "bottomMarginBand1"; + // + // fieldSumSpecial + // + this.fieldSumSpecial.DataMember = "EmployeeDetailList.Days"; + this.fieldSumSpecial.Expression = "Sum([SpecialHours])"; + this.fieldSumSpecial.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldSumSpecial.Name = "fieldSumSpecial"; + // + // fieldSumSonntag + // + this.fieldSumSonntag.DataMember = "EmployeeDetailList.Days"; + this.fieldSumSonntag.Expression = "Sum([HoursSunday])"; + this.fieldSumSonntag.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldSumSonntag.Name = "fieldSumSonntag"; + // + // fieldSumFeiertag + // + this.fieldSumFeiertag.DataMember = "EmployeeDetailList.Days"; + this.fieldSumFeiertag.Expression = "Sum([HoursHoliday])"; + this.fieldSumFeiertag.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldSumFeiertag.Name = "fieldSumFeiertag"; + // + // fieldHours + // + this.fieldHours.DataMember = "EmployeeDetailList.Days"; + this.fieldHours.Expression = "[MinutesTotal]/60"; + this.fieldHours.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldHours.Name = "fieldHours"; + // + // fieldSick + // + this.fieldSick.DataMember = "EmployeeDetailList.Days"; + this.fieldSick.Expression = "Iif([HoursSick] > 0, \'x\', \'\')"; + this.fieldSick.FieldType = DevExpress.XtraReports.UI.FieldType.String; + this.fieldSick.Name = "fieldSick"; + // + // fieldVacation + // + this.fieldVacation.DataMember = "EmployeeDetailList.Days"; + this.fieldVacation.Expression = "Iif([HoursInVacation] > 0, \'x\', \'\')"; + this.fieldVacation.FieldType = DevExpress.XtraReports.UI.FieldType.String; + this.fieldVacation.Name = "fieldVacation"; + // + // calculatedField1 + // + this.calculatedField1.DataMember = "EmployeeDetailList.Days"; + this.calculatedField1.DisplayName = "fieldSumSamstag"; + this.calculatedField1.Expression = "Sum([HoursSaturday])"; + this.calculatedField1.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.calculatedField1.Name = "calculatedField1"; + // + // fieldSumHours + // + this.fieldSumHours.DataMember = "EmployeeDetailList.Days"; + this.fieldSumHours.Expression = "Sum([MinutesTotal]/60)"; + this.fieldSumHours.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldSumHours.Name = "fieldSumHours"; + // + // fieldSumHoliday2 + // + this.fieldSumHoliday2.DataMember = "EmployeeDetailList.Days"; + this.fieldSumHoliday2.Expression = "Sum([HoursHoliday2])"; + this.fieldSumHoliday2.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldSumHoliday2.Name = "fieldSumHoliday2"; + // + // fieldIstArbeitszeit + // + this.fieldIstArbeitszeit.DataMember = "EmployeeDetailList"; + this.fieldIstArbeitszeit.Expression = "[StundenGesamtIst]+[UeberstundenVormonat]"; + this.fieldIstArbeitszeit.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldIstArbeitszeit.Name = "fieldIstArbeitszeit"; + // + // fieldUeberstundenGesamt + // + this.fieldUeberstundenGesamt.DataMember = "EmployeeDetailList"; + this.fieldUeberstundenGesamt.Expression = "Iif([Ueberstunden] == ?, 0, [Ueberstunden])+Iif([UeberstundenVormonat] == ?, 0," + + " [UeberstundenVormonat])"; + this.fieldUeberstundenGesamt.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldUeberstundenGesamt.Name = "fieldUeberstundenGesamt"; + // + // xrTableCell4 + // + this.xrTableCell4.Name = "xrTableCell4"; + this.xrTableCell4.StylePriority.UseTextAlignment = false; + this.xrTableCell4.Text = "Pause"; + this.xrTableCell4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.xrTableCell4.Weight = 0.063119931160787124D; + // + // xrTableCell9 + // + this.xrTableCell9.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.PauseInMinuten", "{0:0.00}")}); + this.xrTableCell9.Name = "xrTableCell9"; + this.xrTableCell9.StylePriority.UseTextAlignment = false; + this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell9.Weight = 0.0631199300127915D; + // + // xrTableCell16 + // + this.xrTableCell16.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.PauseInMinuten")}); + this.xrTableCell16.Name = "xrTableCell16"; + this.xrTableCell16.StylePriority.UseTextAlignment = false; + xrSummary2.FormatString = "{0:0.00}"; + xrSummary2.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.xrTableCell16.Summary = xrSummary2; + this.xrTableCell16.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell16.Weight = 0.063119254525531562D; + // + // Mitarbeiterarbeitszeitkonto + // + this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail, + this.DetailReport, + this.topMarginBand1, + this.bottomMarginBand1}); + this.CalculatedFields.AddRange(new DevExpress.XtraReports.UI.CalculatedField[] { + this.fieldSumSpecial, + this.fieldSumSonntag, + this.fieldSumFeiertag, + this.fieldHours, + this.fieldSick, + this.fieldVacation, + this.calculatedField1, + this.fieldSumHours, + this.fieldSumHoliday2, + this.fieldIstArbeitszeit, + this.fieldUeberstundenGesamt}); + this.DataSource = this.bindingSource1; + this.DisplayName = "Mitarbeiterstundenkonto"; + this.Font = new System.Drawing.Font("Arial", 8F); + this.Margins = new System.Drawing.Printing.Margins(75, 50, 50, 50); + this.PageHeight = 1169; + this.PageWidth = 827; + this.PaperKind = System.Drawing.Printing.PaperKind.A4; + this.StyleSheet.AddRange(new DevExpress.XtraReports.UI.XRControlStyle[] { + this.Title, + this.FieldCaption, + this.PageInfo, + this.DataField}); + this.Version = "17.1"; + ((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); + + } + + #endregion + + private DevExpress.XtraReports.UI.DetailBand Detail; + private System.Windows.Forms.BindingSource bindingSource1; + private DevExpress.XtraReports.UI.DetailBand Detail1; + private DevExpress.XtraReports.UI.DetailReportBand DetailReport; + private DevExpress.XtraReports.UI.XRControlStyle Title; + private DevExpress.XtraReports.UI.XRControlStyle FieldCaption; + private DevExpress.XtraReports.UI.XRControlStyle PageInfo; + private DevExpress.XtraReports.UI.XRControlStyle DataField; + private DevExpress.XtraReports.UI.XRTable xrTableHeader; + private DevExpress.XtraReports.UI.XRTableRow xrTableRowHeader; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell5; + private DevExpress.XtraReports.UI.XRTable xrTableDetail; + private DevExpress.XtraReports.UI.XRTableRow xrTableRowDetail; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell3; + private DevExpress.XtraReports.UI.TopMarginBand topMarginBand1; + private DevExpress.XtraReports.UI.BottomMarginBand bottomMarginBand1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell2; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell8; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell10; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell20; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell27; + private DevExpress.XtraReports.UI.XRTable xrTable1; + private DevExpress.XtraReports.UI.DetailReportBand DetailReport1; + private DevExpress.XtraReports.UI.DetailBand Detail2; + private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader2; + private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader3; + private DevExpress.XtraReports.UI.GroupFooterBand GroupFooter2; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow4; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow5; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell50; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell51; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow6; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell57; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell58; + private DevExpress.XtraReports.UI.CalculatedField fieldSumSpecial; + private DevExpress.XtraReports.UI.CalculatedField fieldSumSonntag; + private DevExpress.XtraReports.UI.CalculatedField fieldSumFeiertag; + private DevExpress.XtraReports.UI.CalculatedField fieldHours; + private DevExpress.XtraReports.UI.CalculatedField fieldSick; + private DevExpress.XtraReports.UI.CalculatedField fieldVacation; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell7; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell31; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell46; + private DevExpress.XtraReports.UI.XRTableCell sollStundenMonatLabelTableCell; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell48; + private DevExpress.XtraReports.UI.XRTableCell cellSumMinutesTotalDecimal2; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell41; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell55; + private DevExpress.XtraReports.UI.CalculatedField calculatedField1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell11; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell13; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell12; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell14; + private DevExpress.XtraReports.UI.CalculatedField fieldSumHours; + private DevExpress.XtraReports.UI.CalculatedField fieldSumHoliday2; + private DevExpress.XtraReports.UI.XRTable xrTable2; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell25; + private DevExpress.XtraReports.UI.XRTable xrTable4; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow9; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell64; + private DevExpress.XtraReports.UI.XRTableCell cellSumMinutesTotalDecimal; + private DevExpress.XtraReports.UI.XRTableCell cellSumHoursSickDecimal; + private DevExpress.XtraReports.UI.XRTableCell cellSumHoursInVacationDecimal; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell67; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell17; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell15; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell18; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell26; + private DevExpress.XtraReports.UI.CalculatedField fieldIstArbeitszeit; + private DevExpress.XtraReports.UI.XRLabel lblMonat; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell1; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow8; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell6; + private DevExpress.XtraReports.UI.XRTableCell cellRegelarbeitszeit; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow10; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell21; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell24; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell28; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell23; + private DevExpress.XtraReports.UI.CalculatedField fieldUeberstundenGesamt; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell9; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell4; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell16; + } +} diff --git a/ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.resx b/ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.resx new file mode 100644 index 000000000..d25f3eba2 --- /dev/null +++ b/ReportImp/DieDueneReports/Mitarbeiterarbeitszeitkonto.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.cs b/ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.cs new file mode 100644 index 000000000..f94c81aa5 --- /dev/null +++ b/ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.cs @@ -0,0 +1,28 @@ +using System; +using BeWo.Report; +using BeWo.Report.ReportObjects; +using BS.Shared.Core; + + +namespace BeWo.DieDueneReports +{ + [IDSpecificClass(Identifier = "MitarbeiterstundenkontoJahr")] + public partial class MitarbeiterstundenkontoJahr : DevExpress.XtraReports.UI.XtraReport, IBeWoReport + { + + + public MitarbeiterstundenkontoJahr() + { + InitializeComponent(); + } + + public void SetReportDataSource(MitarbeiterstundenkontoMonateRO pRO) + { + var msb = new CustomMitarbeiterstundenkontoBerechnungMonate(); + msb.CreateReport(pRO); + + this.bindingSource1.DataSource = pRO; + } + + } +} diff --git a/ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.designer.cs b/ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.designer.cs new file mode 100644 index 000000000..cce2b97c5 --- /dev/null +++ b/ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.designer.cs @@ -0,0 +1,761 @@ +using BeWo.Report.ReportObjects; +namespace BeWo.DieDueneReports +{ + partial class MitarbeiterstundenkontoJahr + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + DevExpress.XtraReports.UI.XRSummary xrSummary1 = new DevExpress.XtraReports.UI.XRSummary(); + DevExpress.XtraReports.UI.XRSummary xrSummary2 = new DevExpress.XtraReports.UI.XRSummary(); + DevExpress.XtraReports.UI.XRSummary xrSummary3 = new DevExpress.XtraReports.UI.XRSummary(); + DevExpress.XtraReports.UI.XRSummary xrSummary4 = new DevExpress.XtraReports.UI.XRSummary(); + DevExpress.XtraReports.UI.XRSummary xrSummary5 = new DevExpress.XtraReports.UI.XRSummary(); + this.Detail = new DevExpress.XtraReports.UI.DetailBand(); + this.xrTableDetail = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRowDetail = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell20 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell28 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell23 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell21 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell25 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell24 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell26 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableHeader = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRowHeader = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTable1 = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell35 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell37 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell39 = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellSollGesamt = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellFLSSollGesamt = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellFLSIstGesamt = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellFLSPlusMinusGesamt = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellGesamtGesamt = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellRelationGesamt = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell47 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell48 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell51 = new DevExpress.XtraReports.UI.XRTableCell(); + this.pageFooterBand1 = new DevExpress.XtraReports.UI.PageFooterBand(); + this.xrPageInfo2 = new DevExpress.XtraReports.UI.XRPageInfo(); + this.xrPageInfo1 = new DevExpress.XtraReports.UI.XRPageInfo(); + this.Title = new DevExpress.XtraReports.UI.XRControlStyle(); + this.FieldCaption = new DevExpress.XtraReports.UI.XRControlStyle(); + this.PageInfo = new DevExpress.XtraReports.UI.XRControlStyle(); + this.DataField = new DevExpress.XtraReports.UI.XRControlStyle(); + this.fieldFLS = new DevExpress.XtraReports.UI.CalculatedField(); + this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand(); + this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand(); + this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand(); + this.Detail2 = new DevExpress.XtraReports.UI.DetailBand(); + this.DetailReport2 = new DevExpress.XtraReports.UI.DetailReportBand(); + this.Detail3 = new DevExpress.XtraReports.UI.DetailBand(); + this.GroupHeader2 = new DevExpress.XtraReports.UI.GroupHeaderBand(); + this.GroupHeader3 = new DevExpress.XtraReports.UI.GroupHeaderBand(); + this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel(); + this.GroupFooter2 = new DevExpress.XtraReports.UI.GroupFooterBand(); + this.fieldRelationGesamt = new DevExpress.XtraReports.UI.CalculatedField(); + this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); + ((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); + // + // Detail + // + this.Detail.HeightF = 0F; + this.Detail.Name = "Detail"; + this.Detail.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.Detail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; + // + // xrTableDetail + // + this.xrTableDetail.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableDetail.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrTableDetail.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrTableDetail.Name = "xrTableDetail"; + this.xrTableDetail.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTableDetail.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRowDetail}); + this.xrTableDetail.SizeF = new System.Drawing.SizeF(1005F, 25F); + this.xrTableDetail.StylePriority.UseBorders = false; + this.xrTableDetail.StylePriority.UseFont = false; + this.xrTableDetail.StylePriority.UsePadding = false; + this.xrTableDetail.StylePriority.UseTextAlignment = false; + this.xrTableDetail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRowDetail + // + this.xrTableRowDetail.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell3, + this.xrTableCell19, + this.xrTableCell20, + this.xrTableCell28, + this.xrTableCell16, + this.xrTableCell27, + this.xrTableCell22, + this.xrTableCell23, + this.xrTableCell21, + this.xrTableCell25, + this.xrTableCell24, + this.xrTableCell26}); + this.xrTableRowDetail.Name = "xrTableRowDetail"; + this.xrTableRowDetail.Weight = 1D; + // + // xrTableCell3 + // + this.xrTableCell3.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.Monat", "{0:MMMM}")}); + this.xrTableCell3.Name = "xrTableCell3"; + this.xrTableCell3.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell3.StylePriority.UseFont = false; + this.xrTableCell3.StylePriority.UsePadding = false; + this.xrTableCell3.StylePriority.UseTextAlignment = false; + this.xrTableCell3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell3.Weight = 0.15329125338142471D; + // + // xrTableCell19 + // + this.xrTableCell19.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.StundenSollMax", "{0:0.00}")}); + this.xrTableCell19.Name = "xrTableCell19"; + this.xrTableCell19.Text = "xrTableCell19"; + this.xrTableCell19.Weight = 0.081154151689479551D; + // + // xrTableCell20 + // + this.xrTableCell20.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.UrlaubUndKrankheit", "{0:0.00}")}); + this.xrTableCell20.Name = "xrTableCell20"; + this.xrTableCell20.Text = "xrTableCell20"; + this.xrTableCell20.Weight = 0.094679933071566441D; + // + // xrTableCell28 + // + this.xrTableCell28.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.StundenSollOhneUrlaubKrankheit", "{0:0.00}")}); + this.xrTableCell28.Name = "xrTableCell28"; + this.xrTableCell28.Text = "xrTableCell28"; + this.xrTableCell28.Weight = 0.0721370604147881D; + // + // xrTableCell16 + // + this.xrTableCell16.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.FlsSoll", "{0:0.00}")}); + this.xrTableCell16.Name = "xrTableCell16"; + this.xrTableCell16.Text = "xrTableCell16"; + this.xrTableCell16.Weight = 0.063119927862939587D; + // + // xrTableCell27 + // + this.xrTableCell27.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.FlsIst", "{0:0.00}")}); + this.xrTableCell27.Name = "xrTableCell27"; + this.xrTableCell27.Text = "xrTableCell27"; + this.xrTableCell27.Weight = 0.063119927862939615D; + // + // xrTableCell22 + // + this.xrTableCell22.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.FlsDiff", "{0:0.00}")}); + this.xrTableCell22.Name = "xrTableCell22"; + this.xrTableCell22.Text = "xrTableCell22"; + this.xrTableCell22.Weight = 0.063119927862939587D; + // + // xrTableCell23 + // + this.xrTableCell23.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.StundenGesamtIst", "{0:0.00}")}); + this.xrTableCell23.Name = "xrTableCell23"; + this.xrTableCell23.Text = "xrTableCell23"; + this.xrTableCell23.Weight = 0.063119927862939559D; + // + // xrTableCell21 + // + this.xrTableCell21.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.RelationFlsZuMittelbar", "{0:0.00}")}); + this.xrTableCell21.Name = "xrTableCell21"; + this.xrTableCell21.Text = "xrTableCell21"; + this.xrTableCell21.Weight = 0.063119927862939615D; + // + // xrTableCell25 + // + this.xrTableCell25.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.Ueberstunden", "{0:0.00}")}); + this.xrTableCell25.Name = "xrTableCell25"; + this.xrTableCell25.Text = "xrTableCell25"; + this.xrTableCell25.Weight = 0.063119927862939587D; + // + // xrTableCell24 + // + this.xrTableCell24.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.LaufendeGesamtsumme", "{0:0.00}")}); + this.xrTableCell24.Name = "xrTableCell24"; + this.xrTableCell24.Text = "xrTableCell24"; + this.xrTableCell24.Weight = 0.0631199278629396D; + // + // xrTableCell26 + // + this.xrTableCell26.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.UeberstundenGesamt", "{0:0.00}")}); + this.xrTableCell26.Name = "xrTableCell26"; + this.xrTableCell26.Text = "xrTableCell26"; + this.xrTableCell26.Weight = 0.063119927862939573D; + // + // xrTableHeader + // + this.xrTableHeader.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableHeader.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Bold); + this.xrTableHeader.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrTableHeader.Name = "xrTableHeader"; + this.xrTableHeader.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTableHeader.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRowHeader}); + this.xrTableHeader.SizeF = new System.Drawing.SizeF(1005F, 70F); + this.xrTableHeader.StylePriority.UseBorders = false; + this.xrTableHeader.StylePriority.UseFont = false; + this.xrTableHeader.StylePriority.UsePadding = false; + this.xrTableHeader.StylePriority.UseTextAlignment = false; + this.xrTableHeader.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRowHeader + // + this.xrTableRowHeader.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell5, + this.xrTableCell4, + this.xrTableCell2, + this.xrTableCell9, + this.xrTableCell8, + this.xrTableCell10, + this.xrTableCell7, + this.xrTableCell11, + this.xrTableCell12, + this.xrTableCell13, + this.xrTableCell14, + this.xrTableCell15}); + this.xrTableRowHeader.Name = "xrTableRowHeader"; + this.xrTableRowHeader.Weight = 2.8D; + // + // xrTableCell5 + // + this.xrTableCell5.Name = "xrTableCell5"; + this.xrTableCell5.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell5.StylePriority.UsePadding = false; + this.xrTableCell5.StylePriority.UseTextAlignment = false; + this.xrTableCell5.Text = "Monat"; + this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell5.Weight = 0.15329125016467182D; + // + // xrTableCell4 + // + this.xrTableCell4.Name = "xrTableCell4"; + this.xrTableCell4.Text = "Regulre SOLL Stunden"; + this.xrTableCell4.Weight = 0.081154192324637608D; + // + // xrTableCell2 + // + this.xrTableCell2.Name = "xrTableCell2"; + this.xrTableCell2.Text = "Fehlzeiten Urlaub Krankheit(Tage)"; + this.xrTableCell2.Weight = 0.094679896646570338D; + // + // xrTableCell9 + // + this.xrTableCell9.Multiline = true; + this.xrTableCell9.Name = "xrTableCell9"; + this.xrTableCell9.Text = "Tatschliche SOLL Stunden"; + this.xrTableCell9.Weight = 0.072137063712635591D; + // + // xrTableCell8 + // + this.xrTableCell8.Name = "xrTableCell8"; + this.xrTableCell8.Text = "FLS Stunden SOLL"; + this.xrTableCell8.Weight = 0.063119927721024038D; + // + // xrTableCell10 + // + this.xrTableCell10.Name = "xrTableCell10"; + this.xrTableCell10.StylePriority.UseBackColor = false; + this.xrTableCell10.Text = "FLS IST lfd. Monat"; + this.xrTableCell10.Weight = 0.063119927721024D; + // + // xrTableCell7 + // + this.xrTableCell7.Name = "xrTableCell7"; + this.xrTableCell7.Text = "FLS Plus/Minus lfd. Monat"; + this.xrTableCell7.Weight = 0.06311992757910842D; + // + // xrTableCell11 + // + this.xrTableCell11.Multiline = true; + this.xrTableCell11.Name = "xrTableCell11"; + this.xrTableCell11.StylePriority.UseBackColor = false; + this.xrTableCell11.Text = "Gesamt-\r\nstunden lfd. Monat"; + this.xrTableCell11.Weight = 0.063119927721024011D; + // + // xrTableCell12 + // + this.xrTableCell12.Name = "xrTableCell12"; + this.xrTableCell12.Text = "Relation FLS IST zu Mittelbare IST (in %)"; + this.xrTableCell12.Weight = 0.063119929511863376D; + // + // xrTableCell13 + // + this.xrTableCell13.Name = "xrTableCell13"; + this.xrTableCell13.Text = "berstd. neu"; + this.xrTableCell13.Weight = 0.063119928687401447D; + // + // xrTableCell14 + // + this.xrTableCell14.Multiline = true; + this.xrTableCell14.Name = "xrTableCell14"; + this.xrTableCell14.StylePriority.UseBackColor = false; + this.xrTableCell14.Text = "berstd.\r\ndieses Jahr"; + this.xrTableCell14.Weight = 0.063119928275170531D; + // + // xrTableCell15 + // + this.xrTableCell15.Multiline = true; + this.xrTableCell15.Name = "xrTableCell15"; + this.xrTableCell15.Text = "berstd. Gesamt"; + this.xrTableCell15.Weight = 0.0631199213956443D; + // + // xrTable1 + // + this.xrTable1.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrTable1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrTable1.Name = "xrTable1"; + this.xrTable1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTable1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRow1}); + this.xrTable1.SizeF = new System.Drawing.SizeF(1005F, 25F); + this.xrTable1.StylePriority.UseBorders = false; + this.xrTable1.StylePriority.UseFont = false; + this.xrTable1.StylePriority.UsePadding = false; + this.xrTable1.StylePriority.UseTextAlignment = false; + this.xrTable1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRow1 + // + this.xrTableRow1.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell35, + this.xrTableCell37, + this.xrTableCell39, + this.cellSollGesamt, + this.cellFLSSollGesamt, + this.cellFLSIstGesamt, + this.cellFLSPlusMinusGesamt, + this.cellGesamtGesamt, + this.cellRelationGesamt, + this.xrTableCell47, + this.xrTableCell48, + this.xrTableCell51}); + this.xrTableRow1.Name = "xrTableRow1"; + this.xrTableRow1.Weight = 1D; + // + // xrTableCell35 + // + this.xrTableCell35.Name = "xrTableCell35"; + this.xrTableCell35.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell35.StylePriority.UseFont = false; + this.xrTableCell35.StylePriority.UsePadding = false; + this.xrTableCell35.StylePriority.UseTextAlignment = false; + this.xrTableCell35.Text = "Gesamt"; + this.xrTableCell35.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell35.Weight = 0.15329126714047708D; + // + // xrTableCell37 + // + this.xrTableCell37.Name = "xrTableCell37"; + this.xrTableCell37.Weight = 0.081154151689479551D; + // + // xrTableCell39 + // + this.xrTableCell39.Name = "xrTableCell39"; + this.xrTableCell39.Weight = 0.094679919312514085D; + // + // cellSollGesamt + // + this.cellSollGesamt.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.StundenSollOhneUrlaubKrankheit")}); + this.cellSollGesamt.Name = "cellSollGesamt"; + xrSummary1.FormatString = "{0:0.00}"; + xrSummary1.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.cellSollGesamt.Summary = xrSummary1; + this.cellSollGesamt.Weight = 0.0721370604147881D; + // + // cellFLSSollGesamt + // + this.cellFLSSollGesamt.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.FlsSoll")}); + this.cellFLSSollGesamt.Name = "cellFLSSollGesamt"; + xrSummary2.FormatString = "{0:0.00}"; + xrSummary2.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.cellFLSSollGesamt.Summary = xrSummary2; + this.cellFLSSollGesamt.Weight = 0.063119927862939587D; + // + // cellFLSIstGesamt + // + this.cellFLSIstGesamt.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.FlsIst")}); + this.cellFLSIstGesamt.Name = "cellFLSIstGesamt"; + xrSummary3.FormatString = "{0:0.00}"; + xrSummary3.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.cellFLSIstGesamt.Summary = xrSummary3; + this.cellFLSIstGesamt.Weight = 0.063119927862939615D; + // + // cellFLSPlusMinusGesamt + // + this.cellFLSPlusMinusGesamt.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.FlsDiff")}); + this.cellFLSPlusMinusGesamt.Name = "cellFLSPlusMinusGesamt"; + xrSummary4.FormatString = "{0:0.00}"; + xrSummary4.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.cellFLSPlusMinusGesamt.Summary = xrSummary4; + this.cellFLSPlusMinusGesamt.Weight = 0.063119927862939587D; + // + // cellGesamtGesamt + // + this.cellGesamtGesamt.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.StundenGesamtIst")}); + this.cellGesamtGesamt.Name = "cellGesamtGesamt"; + xrSummary5.FormatString = "{0:0.00}"; + xrSummary5.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; + this.cellGesamtGesamt.Summary = xrSummary5; + this.cellGesamtGesamt.Weight = 0.063119927862939573D; + // + // cellRelationGesamt + // + this.cellRelationGesamt.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.fieldRelationGesamt", "{0:0.00}")}); + this.cellRelationGesamt.Name = "cellRelationGesamt"; + this.cellRelationGesamt.Text = "cellRelationGesamt"; + this.cellRelationGesamt.Weight = 0.0631199278629396D; + // + // xrTableCell47 + // + this.xrTableCell47.Name = "xrTableCell47"; + this.xrTableCell47.Weight = 0.063119927862939587D; + // + // xrTableCell48 + // + this.xrTableCell48.Name = "xrTableCell48"; + this.xrTableCell48.Weight = 0.063119927862939587D; + // + // xrTableCell51 + // + this.xrTableCell51.Name = "xrTableCell51"; + this.xrTableCell51.Weight = 0.063119927862939573D; + // + // pageFooterBand1 + // + this.pageFooterBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrPageInfo2, + this.xrPageInfo1}); + this.pageFooterBand1.HeightF = 48F; + this.pageFooterBand1.Name = "pageFooterBand1"; + // + // xrPageInfo2 + // + this.xrPageInfo2.Font = new System.Drawing.Font("Arial", 8F); + this.xrPageInfo2.Format = "Seite {0} von {1}"; + this.xrPageInfo2.LocationFloat = new DevExpress.Utils.PointFloat(864.9999F, 25F); + this.xrPageInfo2.Name = "xrPageInfo2"; + this.xrPageInfo2.SizeF = new System.Drawing.SizeF(139.9999F, 23F); + this.xrPageInfo2.StyleName = "PageInfo"; + this.xrPageInfo2.StylePriority.UseFont = false; + this.xrPageInfo2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight; + // + // xrPageInfo1 + // + this.xrPageInfo1.Font = new System.Drawing.Font("Arial", 8F); + this.xrPageInfo1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 25F); + this.xrPageInfo1.Name = "xrPageInfo1"; + this.xrPageInfo1.PageInfo = DevExpress.XtraPrinting.PageInfo.DateTime; + this.xrPageInfo1.SizeF = new System.Drawing.SizeF(260.0001F, 23F); + this.xrPageInfo1.StyleName = "PageInfo"; + this.xrPageInfo1.StylePriority.UseFont = false; + // + // Title + // + this.Title.BackColor = System.Drawing.Color.White; + this.Title.BorderColor = System.Drawing.SystemColors.ControlText; + this.Title.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.Title.BorderWidth = 1F; + this.Title.Font = new System.Drawing.Font("Times New Roman", 24F); + this.Title.ForeColor = System.Drawing.Color.Black; + this.Title.Name = "Title"; + // + // FieldCaption + // + this.FieldCaption.BackColor = System.Drawing.Color.White; + this.FieldCaption.BorderColor = System.Drawing.SystemColors.ControlText; + this.FieldCaption.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.FieldCaption.BorderWidth = 1F; + this.FieldCaption.Font = new System.Drawing.Font("Times New Roman", 10F, System.Drawing.FontStyle.Bold); + this.FieldCaption.ForeColor = System.Drawing.Color.Black; + this.FieldCaption.Name = "FieldCaption"; + // + // PageInfo + // + this.PageInfo.BackColor = System.Drawing.Color.White; + this.PageInfo.BorderColor = System.Drawing.SystemColors.ControlText; + this.PageInfo.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.PageInfo.BorderWidth = 1F; + this.PageInfo.Font = new System.Drawing.Font("Times New Roman", 8F); + this.PageInfo.ForeColor = System.Drawing.Color.Black; + this.PageInfo.Name = "PageInfo"; + // + // DataField + // + this.DataField.BackColor = System.Drawing.Color.White; + this.DataField.BorderColor = System.Drawing.SystemColors.ControlText; + this.DataField.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.DataField.BorderWidth = 1F; + this.DataField.Font = new System.Drawing.Font("Times New Roman", 8F); + this.DataField.ForeColor = System.Drawing.SystemColors.ControlText; + this.DataField.Name = "DataField"; + // + // fieldFLS + // + this.fieldFLS.DataMember = "FLSReportGroups"; + this.fieldFLS.Expression = "[TotalFLM] / 60"; + this.fieldFLS.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldFLS.Name = "fieldFLS"; + // + // topMarginBand1 + // + this.topMarginBand1.HeightF = 50F; + this.topMarginBand1.Name = "topMarginBand1"; + // + // bottomMarginBand1 + // + this.bottomMarginBand1.HeightF = 30F; + this.bottomMarginBand1.Name = "bottomMarginBand1"; + // + // DetailReport1 + // + this.DetailReport1.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail2, + this.DetailReport2}); + this.DetailReport1.DataMember = "EmployeeInfoList"; + this.DetailReport1.DataSource = this.bindingSource1; + this.DetailReport1.Level = 0; + this.DetailReport1.Name = "DetailReport1"; + // + // Detail2 + // + this.Detail2.HeightF = 0F; + this.Detail2.Name = "Detail2"; + this.Detail2.PageBreak = DevExpress.XtraReports.UI.PageBreak.BeforeBandExceptFirstEntry; + // + // DetailReport2 + // + this.DetailReport2.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail3, + this.GroupHeader2, + this.GroupHeader3, + this.GroupFooter2}); + this.DetailReport2.DataMember = "EmployeeInfoList.EmployeeDetails"; + this.DetailReport2.DataSource = this.bindingSource1; + this.DetailReport2.Level = 0; + this.DetailReport2.Name = "DetailReport2"; + // + // Detail3 + // + this.Detail3.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTableDetail}); + this.Detail3.Font = new System.Drawing.Font("Arial", 9.75F); + this.Detail3.HeightF = 25F; + this.Detail3.Name = "Detail3"; + this.Detail3.StylePriority.UseFont = false; + // + // GroupHeader2 + // + this.GroupHeader2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTableHeader}); + this.GroupHeader2.HeightF = 70F; + this.GroupHeader2.Name = "GroupHeader2"; + // + // GroupHeader3 + // + this.GroupHeader3.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrLabel1}); + this.GroupHeader3.HeightF = 35F; + this.GroupHeader3.Level = 1; + this.GroupHeader3.Name = "GroupHeader3"; + // + // xrLabel1 + // + this.xrLabel1.Font = new System.Drawing.Font("Arial", 14F, System.Drawing.FontStyle.Bold); + this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrLabel1.Multiline = true; + this.xrLabel1.Name = "xrLabel1"; + this.xrLabel1.SizeF = new System.Drawing.SizeF(1005F, 25F); + this.xrLabel1.StyleName = "Title"; + this.xrLabel1.StylePriority.UseFont = false; + this.xrLabel1.Text = "Stundenkonto [EmployeeInfoList.LastName], [EmployeeInfoList.FirstName] [ReportSta" + + "rtDate!yyyy]"; + // + // GroupFooter2 + // + this.GroupFooter2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTable1}); + this.GroupFooter2.HeightF = 25F; + this.GroupFooter2.Name = "GroupFooter2"; + // + // fieldRelationGesamt + // + this.fieldRelationGesamt.DataMember = "EmployeeInfoList.EmployeeDetails"; + this.fieldRelationGesamt.Expression = "(Sum([EmployeeDetail.FlsIst]) / Sum([EmployeeDetail.StundenGesamtIst])) * 100"; + this.fieldRelationGesamt.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldRelationGesamt.Name = "fieldRelationGesamt"; + // + // bindingSource1 + // + this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoMonateRO); + // + // MitarbeiterstundenkontoJahr + // + this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail, + this.pageFooterBand1, + this.topMarginBand1, + this.bottomMarginBand1, + this.DetailReport1}); + this.CalculatedFields.AddRange(new DevExpress.XtraReports.UI.CalculatedField[] { + this.fieldFLS, + this.fieldRelationGesamt}); + this.DataSource = this.bindingSource1; + this.DisplayName = "Mitarbeiterstundenkonto"; + this.Landscape = true; + this.Margins = new System.Drawing.Printing.Margins(75, 75, 50, 30); + this.PageHeight = 827; + this.PageWidth = 1169; + this.PaperKind = System.Drawing.Printing.PaperKind.A4; + this.StyleSheet.AddRange(new DevExpress.XtraReports.UI.XRControlStyle[] { + this.Title, + this.FieldCaption, + this.PageInfo, + this.DataField}); + this.Version = "17.1"; + ((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); + + } + + #endregion + + private DevExpress.XtraReports.UI.DetailBand Detail; + private System.Windows.Forms.BindingSource bindingSource1; + private DevExpress.XtraReports.UI.PageFooterBand pageFooterBand1; + private DevExpress.XtraReports.UI.XRPageInfo xrPageInfo2; + private DevExpress.XtraReports.UI.XRPageInfo xrPageInfo1; + private DevExpress.XtraReports.UI.XRControlStyle Title; + private DevExpress.XtraReports.UI.XRControlStyle FieldCaption; + private DevExpress.XtraReports.UI.XRControlStyle PageInfo; + private DevExpress.XtraReports.UI.XRControlStyle DataField; + private DevExpress.XtraReports.UI.XRTable xrTableHeader; + private DevExpress.XtraReports.UI.XRTableRow xrTableRowHeader; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell5; + private DevExpress.XtraReports.UI.XRTable xrTableDetail; + private DevExpress.XtraReports.UI.XRTableRow xrTableRowDetail; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell3; + private DevExpress.XtraReports.UI.CalculatedField fieldFLS; + private DevExpress.XtraReports.UI.TopMarginBand topMarginBand1; + private DevExpress.XtraReports.UI.BottomMarginBand bottomMarginBand1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell4; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell2; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell9; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell8; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell10; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell7; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell11; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell12; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell19; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell20; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell28; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell16; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell27; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell22; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell23; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell21; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell25; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell24; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell26; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell13; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell14; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell15; + private DevExpress.XtraReports.UI.XRTable xrTable1; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell35; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell37; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell39; + private DevExpress.XtraReports.UI.XRTableCell cellSollGesamt; + private DevExpress.XtraReports.UI.XRTableCell cellFLSSollGesamt; + private DevExpress.XtraReports.UI.XRTableCell cellFLSIstGesamt; + private DevExpress.XtraReports.UI.XRTableCell cellFLSPlusMinusGesamt; + private DevExpress.XtraReports.UI.XRTableCell cellGesamtGesamt; + private DevExpress.XtraReports.UI.XRTableCell cellRelationGesamt; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell47; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell48; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell51; + private DevExpress.XtraReports.UI.DetailReportBand DetailReport1; + private DevExpress.XtraReports.UI.DetailBand Detail2; + private DevExpress.XtraReports.UI.DetailReportBand DetailReport2; + private DevExpress.XtraReports.UI.DetailBand Detail3; + private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader2; + private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader3; + private DevExpress.XtraReports.UI.XRLabel xrLabel1; + private DevExpress.XtraReports.UI.GroupFooterBand GroupFooter2; + private DevExpress.XtraReports.UI.CalculatedField fieldRelationGesamt; + } +} diff --git a/ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.resx b/ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.resx new file mode 100644 index 000000000..d25f3eba2 --- /dev/null +++ b/ReportImp/DieDueneReports/MitarbeiterstundenkontoJahr.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.Designer.cs b/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.Designer.cs index 5761fdd2e..2cae200a9 100644 --- a/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.Designer.cs +++ b/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.Designer.cs @@ -30,65 +30,44 @@ { this.components = new System.ComponentModel.Container(); DevExpress.XtraReports.UI.XRSummary xrSummary1 = new DevExpress.XtraReports.UI.XRSummary(); - DevExpress.XtraReports.UI.XRSummary xrSummary2 = new DevExpress.XtraReports.UI.XRSummary(); - DevExpress.XtraReports.UI.XRSummary xrSummary3 = new DevExpress.XtraReports.UI.XRSummary(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BudgetnachweisAnhang)); this.Detail = new DevExpress.XtraReports.UI.DetailBand(); this.xrTable1 = new DevExpress.XtraReports.UI.XRTable(); this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell23 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell24 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell21 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell(); this.TopMargin = new DevExpress.XtraReports.UI.TopMarginBand(); this.BottomMargin = new DevExpress.XtraReports.UI.BottomMarginBand(); this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand(); this.Detail1 = new DevExpress.XtraReports.UI.DetailBand(); this.xrTable2 = new DevExpress.XtraReports.UI.XRTable(); this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell25 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell26 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell28 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell29 = new DevExpress.XtraReports.UI.XRTableCell(); this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand(); - this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLine1 = new DevExpress.XtraReports.UI.XRLine(); this.xrTable4 = new DevExpress.XtraReports.UI.XRTable(); this.xrTableRow5 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell35 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell36 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell37 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell38 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell39 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableRow6 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell30 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell31 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell32 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell33 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell34 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell(); + this.GroupHeader1 = new DevExpress.XtraReports.UI.GroupHeaderBand(); this.Einzahlungstextsichtbarkeitsformatierungsregel = new DevExpress.XtraReports.UI.FormattingRule(); this.Auszahlungstextsichtbarkeitsformatierungsregel = new DevExpress.XtraReports.UI.FormattingRule(); this.xrTable3 = new DevExpress.XtraReports.UI.XRTable(); this.xrTableRow3 = new DevExpress.XtraReports.UI.XRTableRow(); this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableRow7 = new DevExpress.XtraReports.UI.XRTableRow(); this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell40 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableRow8 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell41 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell42 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableRow9 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell43 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell44 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableRow11 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell51 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell52 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow(); this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell17 = new DevExpress.XtraReports.UI.XRTableCell(); @@ -97,50 +76,22 @@ this.xrTableCell20 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell(); this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand(); - this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel(); this.fieldFls = new DevExpress.XtraReports.UI.CalculatedField(); - this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand(); - this.Detail2 = new DevExpress.XtraReports.UI.DetailBand(); - this.xrTable6 = new DevExpress.XtraReports.UI.XRTable(); - this.xrTableRow8 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell45 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell41 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell42 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell43 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell44 = new DevExpress.XtraReports.UI.XRTableCell(); - this.GroupHeader1 = new DevExpress.XtraReports.UI.GroupHeaderBand(); - this.xrTable5 = new DevExpress.XtraReports.UI.XRTable(); - this.xrTableRow7 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell40 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell46 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell48 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell49 = new DevExpress.XtraReports.UI.XRTableCell(); - this.GroupFooter2 = new DevExpress.XtraReports.UI.GroupFooterBand(); - this.xrLine2 = new DevExpress.XtraReports.UI.XRLine(); - this.xrTable7 = new DevExpress.XtraReports.UI.XRTable(); - this.xrTableRow9 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell53 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell47 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell50 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell51 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell52 = new DevExpress.XtraReports.UI.XRTableCell(); this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); + this.xrRichText2 = new DevExpress.XtraReports.UI.XRRichText(); + this.xrPictureBox1 = new DevExpress.XtraReports.UI.XRPictureBox(); ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable6)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable5)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable7)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrRichText2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); // // Detail // - this.Detail.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrTable1}); - this.Detail.HeightF = 40F; + this.Detail.HeightF = 0F; this.Detail.Name = "Detail"; this.Detail.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); this.Detail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; @@ -155,7 +106,7 @@ this.xrTable1.Name = "xrTable1"; this.xrTable1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { this.xrTableRow1}); - this.xrTable1.SizeF = new System.Drawing.SizeF(689.9999F, 40F); + this.xrTable1.SizeF = new System.Drawing.SizeF(430F, 40F); this.xrTable1.StylePriority.UseBorders = false; this.xrTable1.StylePriority.UseFont = false; this.xrTable1.StylePriority.UseTextAlignment = false; @@ -164,58 +115,17 @@ // xrTableRow1 // this.xrTableRow1.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell9, - this.xrTableCell22, - this.xrTableCell1, this.xrTableCell14, - this.xrTableCell2, - this.xrTableCell23, - this.xrTableCell7, - this.xrTableCell24, - this.xrTableCell21, - this.xrTableCell3}); + this.xrTableCell7}); this.xrTableRow1.Name = "xrTableRow1"; this.xrTableRow1.StylePriority.UseBorders = false; this.xrTableRow1.Weight = 0.95999988281251425D; // - // xrTableCell9 - // - this.xrTableCell9.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top))); - this.xrTableCell9.CanGrow = false; - this.xrTableCell9.Multiline = true; - this.xrTableCell9.Name = "xrTableCell9"; - this.xrTableCell9.StylePriority.UseBorders = false; - this.xrTableCell9.StylePriority.UseTextAlignment = false; - this.xrTableCell9.Text = "Anzahl\r\nMonat"; - this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell9.Weight = 0.25384615971491892D; - // - // xrTableCell22 - // - this.xrTableCell22.Borders = DevExpress.XtraPrinting.BorderSide.Top; - this.xrTableCell22.Name = "xrTableCell22"; - this.xrTableCell22.StylePriority.UseBorders = false; - this.xrTableCell22.StylePriority.UsePadding = false; - this.xrTableCell22.StylePriority.UseTextAlignment = false; - this.xrTableCell22.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell22.Weight = 0.092307695242074855D; - // - // xrTableCell1 - // - this.xrTableCell1.Borders = DevExpress.XtraPrinting.BorderSide.Top; - this.xrTableCell1.CanGrow = false; - this.xrTableCell1.Multiline = true; - this.xrTableCell1.Name = "xrTableCell1"; - this.xrTableCell1.StylePriority.UseBorders = false; - this.xrTableCell1.StylePriority.UsePadding = false; - this.xrTableCell1.StylePriority.UseTextAlignment = false; - this.xrTableCell1.Text = "Entgeltzeit-\r\nraum"; - this.xrTableCell1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell1.Weight = 0.36923077216515177D; - // // xrTableCell14 // - this.xrTableCell14.Borders = DevExpress.XtraPrinting.BorderSide.Top; + this.xrTableCell14.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); this.xrTableCell14.CanGrow = false; this.xrTableCell14.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.xrTableCell14.Name = "xrTableCell14"; @@ -225,83 +135,35 @@ this.xrTableCell14.StylePriority.UsePadding = false; this.xrTableCell14.StylePriority.UseTextAlignment = false; this.xrTableCell14.Text = "Monat"; - this.xrTableCell14.Weight = 0.34615384908822872D; - // - // xrTableCell2 - // - this.xrTableCell2.Borders = DevExpress.XtraPrinting.BorderSide.Top; - this.xrTableCell2.CanGrow = false; - this.xrTableCell2.Name = "xrTableCell2"; - this.xrTableCell2.StylePriority.UseBorders = false; - this.xrTableCell2.StylePriority.UsePadding = false; - this.xrTableCell2.StylePriority.UseTextAlignment = false; - this.xrTableCell2.Text = "Jahr"; - this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell2.Weight = 0.3461538490882286D; - // - // xrTableCell23 - // - this.xrTableCell23.Borders = DevExpress.XtraPrinting.BorderSide.Top; - this.xrTableCell23.Name = "xrTableCell23"; - this.xrTableCell23.StylePriority.UseBorders = false; - this.xrTableCell23.StylePriority.UseTextAlignment = false; - this.xrTableCell23.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell23.Weight = 0.2307692160973181D; + this.xrTableCell14.Weight = 1.0615384762103743D; // // xrTableCell7 // - this.xrTableCell7.Borders = DevExpress.XtraPrinting.BorderSide.Top; + this.xrTableCell7.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); this.xrTableCell7.CanGrow = false; this.xrTableCell7.Multiline = true; this.xrTableCell7.Name = "xrTableCell7"; this.xrTableCell7.StylePriority.UseBorders = false; this.xrTableCell7.StylePriority.UseTextAlignment = false; - this.xrTableCell7.Text = "Erfassung\r\nD-FLMin"; + this.xrTableCell7.Text = "erbr. Leistungen\r\nFLS (Min)"; this.xrTableCell7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell7.Weight = 0.34615383148193346D; - // - // xrTableCell24 - // - this.xrTableCell24.Borders = DevExpress.XtraPrinting.BorderSide.Top; - this.xrTableCell24.Name = "xrTableCell24"; - this.xrTableCell24.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell24.StylePriority.UseBorders = false; - this.xrTableCell24.StylePriority.UsePadding = false; - this.xrTableCell24.StylePriority.UseTextAlignment = false; - this.xrTableCell24.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell24.Weight = 0.34615384908822872D; - // - // xrTableCell21 - // - this.xrTableCell21.Borders = DevExpress.XtraPrinting.BorderSide.Top; - this.xrTableCell21.CanGrow = false; - this.xrTableCell21.Name = "xrTableCell21"; - this.xrTableCell21.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell21.StylePriority.UseBorders = false; - this.xrTableCell21.StylePriority.UsePadding = false; - this.xrTableCell21.StylePriority.UseTextAlignment = false; - this.xrTableCell21.Text = "=D-FLS"; - this.xrTableCell21.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell21.Weight = 0.34615384908822866D; - // - // xrTableCell3 - // - this.xrTableCell3.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrTableCell3.Name = "xrTableCell3"; - this.xrTableCell3.StylePriority.UseBorders = false; - this.xrTableCell3.StylePriority.UsePadding = false; - this.xrTableCell3.StylePriority.UseTextAlignment = false; - this.xrTableCell3.Weight = 0.50769175015963064D; + this.xrTableCell7.Weight = 0.92307689666748016D; // // TopMargin // - this.TopMargin.HeightF = 50F; + this.TopMargin.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrPictureBox1}); + this.TopMargin.HeightF = 86.16664F; this.TopMargin.Name = "TopMargin"; this.TopMargin.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); this.TopMargin.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; // // BottomMargin // + this.BottomMargin.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrRichText2}); this.BottomMargin.HeightF = 50F; this.BottomMargin.Name = "BottomMargin"; this.BottomMargin.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); @@ -311,7 +173,8 @@ // this.DetailReport.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { this.Detail1, - this.GroupFooter1}); + this.GroupFooter1, + this.GroupHeader1}); this.DetailReport.DataMember = "MonatsZeilen"; this.DetailReport.DataSource = this.bindingSource1; this.DetailReport.Level = 0; @@ -327,15 +190,14 @@ // // xrTable2 // - this.xrTable2.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right) + this.xrTable2.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right) | DevExpress.XtraPrinting.BorderSide.Bottom))); this.xrTable2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.xrTable2.LocationFloat = new DevExpress.Utils.PointFloat(6.103516E-05F, 0F); this.xrTable2.Name = "xrTable2"; this.xrTable2.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { this.xrTableRow2}); - this.xrTable2.SizeF = new System.Drawing.SizeF(689.9999F, 20F); + this.xrTable2.SizeF = new System.Drawing.SizeF(430F, 20F); this.xrTable2.StylePriority.UseBorders = false; this.xrTable2.StylePriority.UseFont = false; this.xrTable2.StylePriority.UseTextAlignment = false; @@ -344,95 +206,25 @@ // xrTableRow2 // this.xrTableRow2.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell4, - this.xrTableCell5, - this.xrTableCell6, this.xrTableCell8, - this.xrTableCell10, - this.xrTableCell25, - this.xrTableCell26, - this.xrTableCell27, - this.xrTableCell28, - this.xrTableCell29}); + this.xrTableCell26}); this.xrTableRow2.Name = "xrTableRow2"; this.xrTableRow2.StylePriority.UseBorders = false; this.xrTableRow2.Weight = 0.47999994140625712D; // - // xrTableCell4 - // - this.xrTableCell4.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrTableCell4.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "MonatsZeilen.Monat")}); - this.xrTableCell4.Name = "xrTableCell4"; - this.xrTableCell4.StylePriority.UseBorders = false; - this.xrTableCell4.StylePriority.UseTextAlignment = false; - xrSummary1.FormatString = "{0}"; - xrSummary1.Func = DevExpress.XtraReports.UI.SummaryFunc.RecordNumber; - xrSummary1.Running = DevExpress.XtraReports.UI.SummaryRunning.Report; - this.xrTableCell4.Summary = xrSummary1; - this.xrTableCell4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell4.Weight = 0.25384615971491892D; - // - // xrTableCell5 - // - this.xrTableCell5.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrTableCell5.Name = "xrTableCell5"; - this.xrTableCell5.StylePriority.UseBorders = false; - this.xrTableCell5.StylePriority.UsePadding = false; - this.xrTableCell5.StylePriority.UseTextAlignment = false; - this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell5.Weight = 0.092307695242074855D; - // - // xrTableCell6 - // - this.xrTableCell6.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrTableCell6.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "MonatsZeilen.Entgeltzeitraum")}); - this.xrTableCell6.Multiline = true; - this.xrTableCell6.Name = "xrTableCell6"; - this.xrTableCell6.StylePriority.UseBorders = false; - this.xrTableCell6.StylePriority.UsePadding = false; - this.xrTableCell6.StylePriority.UseTextAlignment = false; - this.xrTableCell6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell6.Weight = 0.36923077216515177D; - // // xrTableCell8 // this.xrTableCell8.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) | DevExpress.XtraPrinting.BorderSide.Right))); this.xrTableCell8.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "MonatsZeilen.Monat", "{0:MMMM}")}); + new DevExpress.XtraReports.UI.XRBinding("Text", null, "MonatsZeilen.Monat", "{0:MMMM yyyy}")}); this.xrTableCell8.Name = "xrTableCell8"; this.xrTableCell8.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); this.xrTableCell8.StylePriority.UseBorders = false; this.xrTableCell8.StylePriority.UseFont = false; this.xrTableCell8.StylePriority.UsePadding = false; this.xrTableCell8.StylePriority.UseTextAlignment = false; - this.xrTableCell8.Weight = 0.34615384908822872D; - // - // xrTableCell10 - // - this.xrTableCell10.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrTableCell10.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "MonatsZeilen.Monat", "{0:yyyy}")}); - this.xrTableCell10.Name = "xrTableCell10"; - this.xrTableCell10.StylePriority.UseBorders = false; - this.xrTableCell10.StylePriority.UsePadding = false; - this.xrTableCell10.StylePriority.UseTextAlignment = false; - this.xrTableCell10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell10.Weight = 0.3461538490882286D; - // - // xrTableCell25 - // - this.xrTableCell25.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrTableCell25.Name = "xrTableCell25"; - this.xrTableCell25.StylePriority.UseBorders = false; - this.xrTableCell25.StylePriority.UseTextAlignment = false; - this.xrTableCell25.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell25.Weight = 0.2307692160973181D; + this.xrTableCell8.Weight = 1.0615384762103743D; // // xrTableCell26 // @@ -447,149 +239,26 @@ this.xrTableCell26.StylePriority.UsePadding = false; this.xrTableCell26.StylePriority.UseTextAlignment = false; this.xrTableCell26.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell26.Weight = 0.34615383148193346D; - // - // xrTableCell27 - // - this.xrTableCell27.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrTableCell27.Name = "xrTableCell27"; - this.xrTableCell27.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell27.StylePriority.UseBorders = false; - this.xrTableCell27.StylePriority.UsePadding = false; - this.xrTableCell27.StylePriority.UseTextAlignment = false; - this.xrTableCell27.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell27.Weight = 0.34615384908822872D; - // - // xrTableCell28 - // - this.xrTableCell28.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrTableCell28.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "MonatsZeilen.fieldFls", "{0:0.00}")}); - this.xrTableCell28.Name = "xrTableCell28"; - this.xrTableCell28.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell28.StylePriority.UseBorders = false; - this.xrTableCell28.StylePriority.UsePadding = false; - this.xrTableCell28.StylePriority.UseTextAlignment = false; - this.xrTableCell28.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell28.Weight = 0.34615384908822866D; - // - // xrTableCell29 - // - this.xrTableCell29.Borders = DevExpress.XtraPrinting.BorderSide.Right; - this.xrTableCell29.Name = "xrTableCell29"; - this.xrTableCell29.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 3, 2, 2, 100F); - this.xrTableCell29.StylePriority.UseBorders = false; - this.xrTableCell29.StylePriority.UsePadding = false; - this.xrTableCell29.StylePriority.UseTextAlignment = false; - this.xrTableCell29.Weight = 0.50769175015963064D; + this.xrTableCell26.Weight = 0.92307689666748016D; // // GroupFooter1 // this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrLabel6, - this.xrLabel5, - this.xrLabel4, - this.xrLabel3, - this.xrLabel2, - this.xrLine1, this.xrTable4}); - this.GroupFooter1.HeightF = 142F; + this.GroupFooter1.HeightF = 20F; this.GroupFooter1.Name = "GroupFooter1"; // - // xrLabel6 - // - this.xrLabel6.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(0F, 112F); - this.xrLabel6.Name = "xrLabel6"; - this.xrLabel6.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel6.SizeF = new System.Drawing.SizeF(665.62F, 30F); - this.xrLabel6.StylePriority.UseFont = false; - this.xrLabel6.StylePriority.UseForeColor = false; - this.xrLabel6.StylePriority.UseTextAlignment = false; - this.xrLabel6.Text = "3. Angaben zu den relevanten Entgeltzeiträumen:"; - this.xrLabel6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrLabel5 - // - this.xrLabel5.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrLabel5.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "RateFactor", "{0:0.0}%")}); - this.xrLabel5.LocationFloat = new DevExpress.Utils.PointFloat(505.0001F, 82.00003F); - this.xrLabel5.Multiline = true; - this.xrLabel5.Name = "xrLabel5"; - this.xrLabel5.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel5.SizeF = new System.Drawing.SizeF(75F, 20F); - this.xrLabel5.StylePriority.UseBorders = false; - this.xrLabel5.StylePriority.UseFont = false; - this.xrLabel5.StylePriority.UseForeColor = false; - this.xrLabel5.StylePriority.UseTextAlignment = false; - this.xrLabel5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - // - // xrLabel4 - // - this.xrLabel4.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(505.0001F, 62.00002F); - this.xrLabel4.Multiline = true; - this.xrLabel4.Name = "xrLabel4"; - this.xrLabel4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel4.SizeF = new System.Drawing.SizeF(75F, 20F); - this.xrLabel4.StylePriority.UseBorders = false; - this.xrLabel4.StylePriority.UseFont = false; - this.xrLabel4.StylePriority.UseForeColor = false; - this.xrLabel4.StylePriority.UseTextAlignment = false; - this.xrLabel4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrLabel3 - // - this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(25.83833F, 62.00002F); - this.xrLabel3.Multiline = true; - this.xrLabel3.Name = "xrLabel3"; - this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel3.SizeF = new System.Drawing.SizeF(479.1617F, 40.00003F); - this.xrLabel3.StylePriority.UseFont = false; - this.xrLabel3.StylePriority.UseForeColor = false; - this.xrLabel3.StylePriority.UseTextAlignment = false; - this.xrLabel3.Text = "2.1 lt. individueller Zeiterfassung in Stunden (manuelle Eingabe bei Ziffer 3)\r\n2" + - ".2 lt. individuellem %-Zeitzuschlag auf die Summe der D-FLS (max. 20%):"; - this.xrLabel3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrLabel2 - // - this.xrLabel2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrLabel2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 32F); - this.xrLabel2.Name = "xrLabel2"; - this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel2.SizeF = new System.Drawing.SizeF(665.62F, 30F); - this.xrLabel2.StylePriority.UseFont = false; - this.xrLabel2.StylePriority.UseForeColor = false; - this.xrLabel2.StylePriority.UseTextAlignment = false; - this.xrLabel2.Text = "2. Erklärung zur Abrechnung mittelbarer, leistungsberechtigterbezogener Tätigkeit" + - "en (M-FLS):"; - this.xrLabel2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrLine1 - // - this.xrLine1.LineWidth = 2; - this.xrLine1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); - this.xrLine1.Name = "xrLine1"; - this.xrLine1.SizeF = new System.Drawing.SizeF(690F, 2F); - // // xrTable4 // this.xrTable4.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) | DevExpress.XtraPrinting.BorderSide.Right) | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTable4.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTable4.LocationFloat = new DevExpress.Utils.PointFloat(0F, 2F); + this.xrTable4.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrTable4.LocationFloat = new DevExpress.Utils.PointFloat(9.536743E-05F, 0F); this.xrTable4.Name = "xrTable4"; this.xrTable4.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow5, - this.xrTableRow6}); - this.xrTable4.SizeF = new System.Drawing.SizeF(689.9999F, 30F); + this.xrTableRow5}); + this.xrTable4.SizeF = new System.Drawing.SizeF(430F, 20F); this.xrTable4.StylePriority.UseBorders = false; this.xrTable4.StylePriority.UseFont = false; this.xrTable4.StylePriority.UseTextAlignment = false; @@ -598,165 +267,55 @@ // xrTableRow5 // this.xrTableRow5.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell35, - this.xrTableCell36, - this.xrTableCell37, - this.xrTableCell38, - this.xrTableCell39}); + this.xrTableCell1, + this.xrTableCell2}); this.xrTableRow5.Name = "xrTableRow5"; this.xrTableRow5.StylePriority.UseBorders = false; - this.xrTableRow5.Weight = 0.47999994140625712D; + this.xrTableRow5.Weight = 0.47999994140625707D; // - // xrTableCell35 + // xrTableCell1 // - this.xrTableCell35.Borders = DevExpress.XtraPrinting.BorderSide.Left; - this.xrTableCell35.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell35.Name = "xrTableCell35"; - this.xrTableCell35.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell35.StylePriority.UseBorders = false; - this.xrTableCell35.StylePriority.UseFont = false; - this.xrTableCell35.StylePriority.UsePadding = false; - this.xrTableCell35.StylePriority.UseTextAlignment = false; - this.xrTableCell35.Text = "SUMME D-FLMin ="; - this.xrTableCell35.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell35.Weight = 1.6384615413959209D; - // - // xrTableCell36 - // - this.xrTableCell36.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right) + this.xrTableCell1.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTableCell36.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + this.xrTableCell1.CanGrow = false; + this.xrTableCell1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrTableCell1.Name = "xrTableCell1"; + this.xrTableCell1.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); + this.xrTableCell1.StylePriority.UseBorders = false; + this.xrTableCell1.StylePriority.UseFont = false; + this.xrTableCell1.StylePriority.UsePadding = false; + this.xrTableCell1.StylePriority.UseTextAlignment = false; + this.xrTableCell1.Text = "Summe"; + this.xrTableCell1.Weight = 1.0615384762103743D; + // + // xrTableCell2 + // + this.xrTableCell2.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell2.CanGrow = false; + this.xrTableCell2.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { new DevExpress.XtraReports.UI.XRBinding("Text", null, "MonatsZeilen.SummeMinuten")}); - this.xrTableCell36.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell36.Multiline = true; - this.xrTableCell36.Name = "xrTableCell36"; - this.xrTableCell36.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell36.StylePriority.UseBorders = false; - this.xrTableCell36.StylePriority.UseFont = false; - this.xrTableCell36.StylePriority.UsePadding = false; - this.xrTableCell36.StylePriority.UseTextAlignment = false; - xrSummary2.FormatString = "{0:0.##}"; - xrSummary2.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; - this.xrTableCell36.Summary = xrSummary2; - this.xrTableCell36.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell36.Weight = 0.34615383148193346D; + this.xrTableCell2.Multiline = true; + this.xrTableCell2.Name = "xrTableCell2"; + this.xrTableCell2.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); + this.xrTableCell2.StylePriority.UseBorders = false; + this.xrTableCell2.StylePriority.UsePadding = false; + this.xrTableCell2.StylePriority.UseTextAlignment = false; + xrSummary1.FormatString = "{0:0.##}"; + xrSummary1.Running = DevExpress.XtraReports.UI.SummaryRunning.Report; + this.xrTableCell2.Summary = xrSummary1; + this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.xrTableCell2.Weight = 0.92307689666748016D; // - // xrTableCell37 + // GroupHeader1 // - this.xrTableCell37.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrTableCell37.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell37.Name = "xrTableCell37"; - this.xrTableCell37.StylePriority.UseBorders = false; - this.xrTableCell37.StylePriority.UseFont = false; - this.xrTableCell37.StylePriority.UsePadding = false; - this.xrTableCell37.StylePriority.UseTextAlignment = false; - this.xrTableCell37.Text = ": 60 ="; - this.xrTableCell37.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell37.Weight = 0.34615384908822872D; - // - // xrTableCell38 - // - this.xrTableCell38.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTableCell38.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "MonatsZeilen.fieldFls")}); - this.xrTableCell38.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell38.Name = "xrTableCell38"; - this.xrTableCell38.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell38.StylePriority.UseBorders = false; - this.xrTableCell38.StylePriority.UseFont = false; - this.xrTableCell38.StylePriority.UsePadding = false; - this.xrTableCell38.StylePriority.UseTextAlignment = false; - xrSummary3.FormatString = "{0:0.00}"; - xrSummary3.Running = DevExpress.XtraReports.UI.SummaryRunning.Group; - this.xrTableCell38.Summary = xrSummary3; - this.xrTableCell38.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell38.Weight = 0.34615384908822866D; - // - // xrTableCell39 - // - this.xrTableCell39.Borders = DevExpress.XtraPrinting.BorderSide.Right; - this.xrTableCell39.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell39.Name = "xrTableCell39"; - this.xrTableCell39.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); - this.xrTableCell39.StylePriority.UseBorders = false; - this.xrTableCell39.StylePriority.UseFont = false; - this.xrTableCell39.StylePriority.UsePadding = false; - this.xrTableCell39.StylePriority.UseTextAlignment = false; - this.xrTableCell39.Text = "D-FLS"; - this.xrTableCell39.Weight = 0.50769175015963064D; - // - // xrTableRow6 - // - this.xrTableRow6.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell30, - this.xrTableCell31, - this.xrTableCell32, - this.xrTableCell33, - this.xrTableCell34}); - this.xrTableRow6.Name = "xrTableRow6"; - this.xrTableRow6.Weight = 0.23999997070312854D; - // - // xrTableCell30 - // - this.xrTableCell30.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTableCell30.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell30.Name = "xrTableCell30"; - this.xrTableCell30.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell30.StylePriority.UseBorders = false; - this.xrTableCell30.StylePriority.UseFont = false; - this.xrTableCell30.StylePriority.UsePadding = false; - this.xrTableCell30.StylePriority.UseTextAlignment = false; - this.xrTableCell30.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell30.Weight = 1.6384615413959209D; - // - // xrTableCell31 - // - this.xrTableCell31.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; - this.xrTableCell31.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell31.Name = "xrTableCell31"; - this.xrTableCell31.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell31.StylePriority.UseBorders = false; - this.xrTableCell31.StylePriority.UseFont = false; - this.xrTableCell31.StylePriority.UsePadding = false; - this.xrTableCell31.StylePriority.UseTextAlignment = false; - this.xrTableCell31.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell31.Weight = 0.34615383148193346D; - // - // xrTableCell32 - // - this.xrTableCell32.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; - this.xrTableCell32.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell32.Name = "xrTableCell32"; - this.xrTableCell32.StylePriority.UseBorders = false; - this.xrTableCell32.StylePriority.UseFont = false; - this.xrTableCell32.StylePriority.UseTextAlignment = false; - this.xrTableCell32.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell32.Weight = 0.34615384908822872D; - // - // xrTableCell33 - // - this.xrTableCell33.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; - this.xrTableCell33.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell33.Name = "xrTableCell33"; - this.xrTableCell33.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell33.StylePriority.UseBorders = false; - this.xrTableCell33.StylePriority.UseFont = false; - this.xrTableCell33.StylePriority.UsePadding = false; - this.xrTableCell33.StylePriority.UseTextAlignment = false; - this.xrTableCell33.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell33.Weight = 0.34615384908822866D; - // - // xrTableCell34 - // - this.xrTableCell34.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTableCell34.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTableCell34.Name = "xrTableCell34"; - this.xrTableCell34.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); - this.xrTableCell34.StylePriority.UseBorders = false; - this.xrTableCell34.StylePriority.UseFont = false; - this.xrTableCell34.StylePriority.UsePadding = false; - this.xrTableCell34.Weight = 0.50769175015963064D; + this.GroupHeader1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTable1}); + this.GroupHeader1.HeightF = 40F; + this.GroupHeader1.Name = "GroupHeader1"; + this.GroupHeader1.RepeatEveryPage = true; // // Einzahlungstextsichtbarkeitsformatierungsregel // @@ -777,13 +336,17 @@ this.xrTable3.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) | DevExpress.XtraPrinting.BorderSide.Right) | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(1.589457E-05F, 0F); + this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 41.94444F); this.xrTable3.Name = "xrTable3"; this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { this.xrTableRow3, + this.xrTableRow7, + this.xrTableRow8, + this.xrTableRow9, + this.xrTableRow11, this.xrTableRow4}); - this.xrTable3.SizeF = new System.Drawing.SizeF(689.9999F, 40F); + this.xrTable3.SizeF = new System.Drawing.SizeF(667F, 120F); this.xrTable3.StylePriority.UseBorders = false; this.xrTable3.StylePriority.UseFont = false; this.xrTable3.StylePriority.UsePadding = false; @@ -794,8 +357,7 @@ // this.xrTableRow3.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { this.xrTableCell11, - this.xrTableCell13, - this.xrTableCell15}); + this.xrTableCell13}); this.xrTableRow3.Name = "xrTableRow3"; this.xrTableRow3.StylePriority.UseBorders = false; this.xrTableRow3.Weight = 0.47999994140625712D; @@ -805,7 +367,7 @@ this.xrTableCell11.Name = "xrTableCell11"; this.xrTableCell11.StylePriority.UseBorders = false; this.xrTableCell11.StylePriority.UseTextAlignment = false; - this.xrTableCell11.Text = "Leistungsberechtigte/r:"; + this.xrTableCell11.Text = "Name"; this.xrTableCell11.Weight = 0.71538463885967563D; // // xrTableCell13 @@ -817,23 +379,114 @@ this.xrTableCell13.StylePriority.UseBorders = false; this.xrTableCell13.StylePriority.UsePadding = false; this.xrTableCell13.StylePriority.UseTextAlignment = false; - this.xrTableCell13.Text = "[CustomerDC.FirstName] [CustomerDC.LastName], [CustomerDC.Street], [CustomerDC.Po" + - "stalCode] [CustomerDC.Town]"; + this.xrTableCell13.Text = "[CustomerDC.FirstName] [CustomerDC.LastName]"; this.xrTableCell13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - this.xrTableCell13.Weight = 1.6153846074745404D; + this.xrTableCell13.Weight = 2.3630767634464904D; + // + // xrTableRow7 + // + this.xrTableRow7.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell15, + this.xrTableCell40}); + this.xrTableRow7.Name = "xrTableRow7"; + this.xrTableRow7.Weight = 0.47999994140625712D; // // xrTableCell15 // - this.xrTableCell15.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTableCell15.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "SettlementDC.CustomerReferenceNumber", "Az LWL: {0}")}); this.xrTableCell15.Name = "xrTableCell15"; - this.xrTableCell15.StylePriority.UseBorders = false; - this.xrTableCell15.StylePriority.UsePadding = false; - this.xrTableCell15.StylePriority.UseTextAlignment = false; - this.xrTableCell15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - this.xrTableCell15.Weight = 0.85384543402936586D; + this.xrTableCell15.Text = "Straße"; + this.xrTableCell15.Weight = 0.71538463885967563D; + // + // xrTableCell40 + // + this.xrTableCell40.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell40.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "CustomerDC.Street")}); + this.xrTableCell40.Name = "xrTableCell40"; + this.xrTableCell40.StylePriority.UseBorders = false; + this.xrTableCell40.StylePriority.UseTextAlignment = false; + this.xrTableCell40.Text = "xrTableCell40"; + this.xrTableCell40.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell40.Weight = 2.3630767634464904D; + // + // xrTableRow8 + // + this.xrTableRow8.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell41, + this.xrTableCell42}); + this.xrTableRow8.Name = "xrTableRow8"; + this.xrTableRow8.Weight = 0.47999994140625712D; + // + // xrTableCell41 + // + this.xrTableCell41.Name = "xrTableCell41"; + this.xrTableCell41.Text = "PLZ, Ort"; + this.xrTableCell41.Weight = 0.71538463885967563D; + // + // xrTableCell42 + // + this.xrTableCell42.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell42.Name = "xrTableCell42"; + this.xrTableCell42.StylePriority.UseBorders = false; + this.xrTableCell42.StylePriority.UseTextAlignment = false; + this.xrTableCell42.Text = "[CustomerDC.PostalCode] [CustomerDC.Town]"; + this.xrTableCell42.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell42.Weight = 2.3630767634464904D; + // + // xrTableRow9 + // + this.xrTableRow9.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell43, + this.xrTableCell44}); + this.xrTableRow9.Name = "xrTableRow9"; + this.xrTableRow9.Weight = 0.47999994140625712D; + // + // xrTableCell43 + // + this.xrTableCell43.Name = "xrTableCell43"; + this.xrTableCell43.Text = "Geburtsdatum"; + this.xrTableCell43.Weight = 0.71538463885967563D; + // + // xrTableCell44 + // + this.xrTableCell44.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell44.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "CustomerDC.DateOfBirth", "{0:dd.MM.yyyy}")}); + this.xrTableCell44.Name = "xrTableCell44"; + this.xrTableCell44.StylePriority.UseBorders = false; + this.xrTableCell44.StylePriority.UseTextAlignment = false; + this.xrTableCell44.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell44.Weight = 2.3630767634464904D; + // + // xrTableRow11 + // + this.xrTableRow11.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell51, + this.xrTableCell52}); + this.xrTableRow11.Name = "xrTableRow11"; + this.xrTableRow11.Weight = 0.47999994140625712D; + // + // xrTableCell51 + // + this.xrTableCell51.Name = "xrTableCell51"; + this.xrTableCell51.Text = "Aktenzeichen"; + this.xrTableCell51.Weight = 0.71538463885967563D; + // + // xrTableCell52 + // + this.xrTableCell52.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableCell52.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "SettlementDC.CustomerReferenceNumber")}); + this.xrTableCell52.Name = "xrTableCell52"; + this.xrTableCell52.StylePriority.UseBorders = false; + this.xrTableCell52.StylePriority.UseTextAlignment = false; + this.xrTableCell52.Text = "xrTableCell52"; + this.xrTableCell52.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell52.Weight = 2.3630767634464904D; // // xrTableRow4 // @@ -907,45 +560,31 @@ this.xrTableCell12.StylePriority.UsePadding = false; this.xrTableCell12.StylePriority.UseTextAlignment = false; this.xrTableCell12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell12.Weight = 1.1999994021514564D; + this.xrTableCell12.Weight = 1.0938461240940405D; // // ReportHeader // this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrLabel1, - this.xrLabel8, + this.xrLabel3, this.xrTable3}); - this.ReportHeader.HeightF = 130F; + this.ReportHeader.HeightF = 180F; this.ReportHeader.Name = "ReportHeader"; // - // xrLabel1 + // xrLabel3 // - this.xrLabel1.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(1.589457E-05F, 69.99998F); - this.xrLabel1.Name = "xrLabel1"; - this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 2, 0, 100F); - this.xrLabel1.SizeF = new System.Drawing.SizeF(690F, 60F); - this.xrLabel1.StylePriority.UseBorders = false; - this.xrLabel1.StylePriority.UseFont = false; - this.xrLabel1.StylePriority.UseForeColor = false; - this.xrLabel1.StylePriority.UsePadding = false; - this.xrLabel1.StylePriority.UseTextAlignment = false; - this.xrLabel1.Text = resources.GetString("xrLabel1.Text"); - this.xrLabel1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; - // - // xrLabel8 - // - this.xrLabel8.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(0F, 39.99999F); - this.xrLabel8.Name = "xrLabel8"; - this.xrLabel8.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel8.SizeF = new System.Drawing.SizeF(665.62F, 30F); - this.xrLabel8.StylePriority.UseFont = false; - this.xrLabel8.StylePriority.UseForeColor = false; - this.xrLabel8.StylePriority.UseTextAlignment = false; - this.xrLabel8.Text = "1. Zeiterfassung der direkten Betreuungsleistungen lt. den Quittierungsbelegen:"; - this.xrLabel8.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrLabel3.BackColor = System.Drawing.Color.Transparent; + this.xrLabel3.Font = new System.Drawing.Font("Arial", 11F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline)))); + this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 9.999996F); + this.xrLabel3.Multiline = true; + this.xrLabel3.Name = "xrLabel3"; + this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel3.SizeF = new System.Drawing.SizeF(666.9999F, 31.94444F); + this.xrLabel3.StylePriority.UseBackColor = false; + this.xrLabel3.StylePriority.UseFont = false; + this.xrLabel3.StylePriority.UseTextAlignment = false; + this.xrLabel3.Text = "Abrechnung FLS"; + this.xrLabel3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter; + this.xrLabel3.WordWrap = false; // // fieldFls // @@ -954,318 +593,27 @@ this.fieldFls.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; this.fieldFls.Name = "fieldFls"; // - // DetailReport1 - // - this.DetailReport1.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { - this.Detail2, - this.GroupHeader1, - this.GroupFooter2}); - this.DetailReport1.DataMember = "Entgeltzeitraeume"; - this.DetailReport1.DataSource = this.bindingSource1; - this.DetailReport1.Level = 1; - this.DetailReport1.Name = "DetailReport1"; - // - // Detail2 - // - this.Detail2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrTable6}); - this.Detail2.HeightF = 20F; - this.Detail2.KeepTogetherWithDetailReports = true; - this.Detail2.Name = "Detail2"; - // - // xrTable6 - // - this.xrTable6.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTable6.LocationFloat = new DevExpress.Utils.PointFloat(0.0001271566F, 0F); - this.xrTable6.Name = "xrTable6"; - this.xrTable6.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow8}); - this.xrTable6.SizeF = new System.Drawing.SizeF(689.9999F, 20F); - this.xrTable6.StylePriority.UseBorders = false; - this.xrTable6.StylePriority.UseFont = false; - this.xrTable6.StylePriority.UseTextAlignment = false; - this.xrTable6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrTableRow8 - // - this.xrTableRow8.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell45, - this.xrTableCell41, - this.xrTableCell42, - this.xrTableCell43, - this.xrTableCell44}); - this.xrTableRow8.Name = "xrTableRow8"; - this.xrTableRow8.StylePriority.UseBorders = false; - this.xrTableRow8.Weight = 0.47999994140625707D; - // - // xrTableCell45 - // - this.xrTableCell45.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top))); - this.xrTableCell45.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "Entgeltzeitraeume.Index")}); - this.xrTableCell45.Name = "xrTableCell45"; - this.xrTableCell45.StylePriority.UseBorders = false; - this.xrTableCell45.StylePriority.UsePadding = false; - this.xrTableCell45.StylePriority.UseTextAlignment = false; - this.xrTableCell45.Text = "xrTableCell45"; - this.xrTableCell45.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrTableCell45.Weight = 0.25384557577279909D; - // - // xrTableCell41 - // - this.xrTableCell41.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top))); - this.xrTableCell41.Multiline = true; - this.xrTableCell41.Name = "xrTableCell41"; - this.xrTableCell41.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); - this.xrTableCell41.StylePriority.UseBorders = false; - this.xrTableCell41.StylePriority.UsePadding = false; - this.xrTableCell41.StylePriority.UseTextAlignment = false; - this.xrTableCell41.Text = "[Start!dd.MM.yyyy] bis [Ende!dd.MM.yyyy]"; - this.xrTableCell41.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - this.xrTableCell41.Weight = 1.2596164497962366D; - // - // xrTableCell42 - // - this.xrTableCell42.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrTableCell42.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "Entgeltzeitraeume.SummeFLStunden", "{0:0.00}")}); - this.xrTableCell42.Multiline = true; - this.xrTableCell42.Name = "xrTableCell42"; - this.xrTableCell42.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell42.StylePriority.UseBorders = false; - this.xrTableCell42.StylePriority.UsePadding = false; - this.xrTableCell42.StylePriority.UseTextAlignment = false; - this.xrTableCell42.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell42.Weight = 0.47115334730881858D; - // - // xrTableCell43 - // - this.xrTableCell43.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrTableCell43.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "Entgeltzeitraeume.SummeFaktorStunden", "{0:0.00}")}); - this.xrTableCell43.Name = "xrTableCell43"; - this.xrTableCell43.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell43.StylePriority.UseBorders = false; - this.xrTableCell43.StylePriority.UsePadding = false; - this.xrTableCell43.StylePriority.UseTextAlignment = false; - this.xrTableCell43.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell43.Weight = 0.69230769817645732D; - // - // xrTableCell44 - // - this.xrTableCell44.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrTableCell44.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "Entgeltzeitraeume.SummeGesamtStunden", "{0:0.00}")}); - this.xrTableCell44.Name = "xrTableCell44"; - this.xrTableCell44.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell44.StylePriority.UseBorders = false; - this.xrTableCell44.StylePriority.UsePadding = false; - this.xrTableCell44.StylePriority.UseTextAlignment = false; - this.xrTableCell44.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell44.Weight = 0.50769175015963064D; - // - // GroupHeader1 - // - this.GroupHeader1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrTable5}); - this.GroupHeader1.HeightF = 20F; - this.GroupHeader1.KeepTogether = true; - this.GroupHeader1.Name = "GroupHeader1"; - // - // xrTable5 - // - this.xrTable5.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTable5.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTable5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); - this.xrTable5.Name = "xrTable5"; - this.xrTable5.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow7}); - this.xrTable5.SizeF = new System.Drawing.SizeF(689.9999F, 20F); - this.xrTable5.StylePriority.UseBorders = false; - this.xrTable5.StylePriority.UseFont = false; - this.xrTable5.StylePriority.UseTextAlignment = false; - this.xrTable5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrTableRow7 - // - this.xrTableRow7.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell40, - this.xrTableCell46, - this.xrTableCell48, - this.xrTableCell49}); - this.xrTableRow7.Name = "xrTableRow7"; - this.xrTableRow7.StylePriority.UseBorders = false; - this.xrTableRow7.Weight = 0.47999994140625707D; - // - // xrTableCell40 - // - this.xrTableCell40.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top))); - this.xrTableCell40.Multiline = true; - this.xrTableCell40.Name = "xrTableCell40"; - this.xrTableCell40.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); - this.xrTableCell40.StylePriority.UseBorders = false; - this.xrTableCell40.StylePriority.UsePadding = false; - this.xrTableCell40.StylePriority.UseTextAlignment = false; - this.xrTableCell40.Text = "Entgeltzeiträume von/bis:"; - this.xrTableCell40.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - this.xrTableCell40.Weight = 1.5134620255690356D; - // - // xrTableCell46 - // - this.xrTableCell46.Borders = DevExpress.XtraPrinting.BorderSide.Top; - this.xrTableCell46.Multiline = true; - this.xrTableCell46.Name = "xrTableCell46"; - this.xrTableCell46.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell46.StylePriority.UseBorders = false; - this.xrTableCell46.StylePriority.UsePadding = false; - this.xrTableCell46.StylePriority.UseTextAlignment = false; - this.xrTableCell46.Text = "Summe D-FLS"; - this.xrTableCell46.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell46.Weight = 0.47115334730881858D; - // - // xrTableCell48 - // - this.xrTableCell48.Borders = DevExpress.XtraPrinting.BorderSide.Top; - this.xrTableCell48.Name = "xrTableCell48"; - this.xrTableCell48.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell48.StylePriority.UseBorders = false; - this.xrTableCell48.StylePriority.UsePadding = false; - this.xrTableCell48.StylePriority.UseTextAlignment = false; - this.xrTableCell48.Text = "+ Summe M-FLS ="; - this.xrTableCell48.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell48.Weight = 0.69230769817645732D; - // - // xrTableCell49 - // - this.xrTableCell49.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Right))); - this.xrTableCell49.Name = "xrTableCell49"; - this.xrTableCell49.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell49.StylePriority.UseBorders = false; - this.xrTableCell49.StylePriority.UsePadding = false; - this.xrTableCell49.StylePriority.UseTextAlignment = false; - this.xrTableCell49.Text = "Gesamt-FLS"; - this.xrTableCell49.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell49.Weight = 0.50769175015963064D; - // - // GroupFooter2 - // - this.GroupFooter2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrLine2, - this.xrTable7}); - this.GroupFooter2.HeightF = 28.25F; - this.GroupFooter2.Name = "GroupFooter2"; - // - // xrLine2 - // - this.xrLine2.LineWidth = 2; - this.xrLine2.LocationFloat = new DevExpress.Utils.PointFloat(580F, 20.00001F); - this.xrLine2.Name = "xrLine2"; - this.xrLine2.SizeF = new System.Drawing.SizeF(110F, 6F); - // - // xrTable7 - // - this.xrTable7.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTable7.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTable7.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); - this.xrTable7.Name = "xrTable7"; - this.xrTable7.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow9}); - this.xrTable7.SizeF = new System.Drawing.SizeF(689.9999F, 20F); - this.xrTable7.StylePriority.UseBorders = false; - this.xrTable7.StylePriority.UseFont = false; - this.xrTable7.StylePriority.UseTextAlignment = false; - this.xrTable7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrTableRow9 - // - this.xrTableRow9.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell53, - this.xrTableCell47, - this.xrTableCell50, - this.xrTableCell51, - this.xrTableCell52}); - this.xrTableRow9.Name = "xrTableRow9"; - this.xrTableRow9.StylePriority.UseBorders = false; - this.xrTableRow9.Weight = 0.47999994140625707D; - // - // xrTableCell53 - // - this.xrTableCell53.Borders = DevExpress.XtraPrinting.BorderSide.Top; - this.xrTableCell53.Name = "xrTableCell53"; - this.xrTableCell53.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); - this.xrTableCell53.StylePriority.UseBorders = false; - this.xrTableCell53.StylePriority.UsePadding = false; - this.xrTableCell53.StylePriority.UseTextAlignment = false; - this.xrTableCell53.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - this.xrTableCell53.Weight = 0.25384642087496256D; - // - // xrTableCell47 - // - this.xrTableCell47.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTableCell47.Multiline = true; - this.xrTableCell47.Name = "xrTableCell47"; - this.xrTableCell47.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 0, 0, 0, 100F); - this.xrTableCell47.StylePriority.UseBorders = false; - this.xrTableCell47.StylePriority.UsePadding = false; - this.xrTableCell47.StylePriority.UseTextAlignment = false; - this.xrTableCell47.Text = "Summe FLS:"; - this.xrTableCell47.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - this.xrTableCell47.Weight = 1.2596156046940732D; - // - // xrTableCell50 - // - this.xrTableCell50.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTableCell50.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "SummeFLStunden", "{0:0.00}")}); - this.xrTableCell50.Multiline = true; - this.xrTableCell50.Name = "xrTableCell50"; - this.xrTableCell50.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell50.StylePriority.UseBorders = false; - this.xrTableCell50.StylePriority.UsePadding = false; - this.xrTableCell50.StylePriority.UseTextAlignment = false; - this.xrTableCell50.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell50.Weight = 0.47115334730881858D; - // - // xrTableCell51 - // - this.xrTableCell51.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "SummeFaktorStunden", "{0:0.00}")}); - this.xrTableCell51.Name = "xrTableCell51"; - this.xrTableCell51.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell51.StylePriority.UseBorders = false; - this.xrTableCell51.StylePriority.UsePadding = false; - this.xrTableCell51.StylePriority.UseTextAlignment = false; - this.xrTableCell51.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell51.Weight = 0.69230769817645732D; - // - // xrTableCell52 - // - this.xrTableCell52.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "SummeGesamtStunden", "{0:0.00}")}); - this.xrTableCell52.Name = "xrTableCell52"; - this.xrTableCell52.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 3, 0, 0, 100F); - this.xrTableCell52.StylePriority.UseBorders = false; - this.xrTableCell52.StylePriority.UsePadding = false; - this.xrTableCell52.StylePriority.UseTextAlignment = false; - this.xrTableCell52.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell52.Weight = 0.50769175015963064D; - // // bindingSource1 // this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.BudgetnachweisAnhangRO); // + // xrRichText2 + // + this.xrRichText2.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrRichText2.LocationFloat = new DevExpress.Utils.PointFloat(200.6112F, 0F); + this.xrRichText2.Name = "xrRichText2"; + this.xrRichText2.SerializableRtfString = resources.GetString("xrRichText2.SerializableRtfString"); + this.xrRichText2.SizeF = new System.Drawing.SizeF(466.3887F, 17.37499F); + this.xrRichText2.StylePriority.UseFont = false; + // + // xrPictureBox1 + // + this.xrPictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("xrPictureBox1.Image"))); + this.xrPictureBox1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 35.41667F); + this.xrPictureBox1.Name = "xrPictureBox1"; + this.xrPictureBox1.SizeF = new System.Drawing.SizeF(134.1903F, 50.74997F); + this.xrPictureBox1.Sizing = DevExpress.XtraPrinting.ImageSizeMode.ZoomImage; + // // BudgetnachweisAnhang // this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { @@ -1273,8 +621,7 @@ this.TopMargin, this.BottomMargin, this.DetailReport, - this.ReportHeader, - this.DetailReport1}); + this.ReportHeader}); this.CalculatedFields.AddRange(new DevExpress.XtraReports.UI.CalculatedField[] { this.fieldFls}); this.DataSource = this.bindingSource1; @@ -1282,16 +629,17 @@ this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { this.Einzahlungstextsichtbarkeitsformatierungsregel, this.Auszahlungstextsichtbarkeitsformatierungsregel}); - this.Margins = new System.Drawing.Printing.Margins(80, 80, 50, 50); + this.Margins = new System.Drawing.Printing.Margins(80, 80, 86, 50); + this.PageHeight = 1169; + this.PageWidth = 827; + this.PaperKind = System.Drawing.Printing.PaperKind.A4; this.Version = "17.1"; ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable6)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable5)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable7)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrRichText2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); } @@ -1306,10 +654,6 @@ private System.Windows.Forms.BindingSource bindingSource1; private DevExpress.XtraReports.UI.XRTable xrTable1; private DevExpress.XtraReports.UI.XRTableRow xrTableRow1; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell1; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell2; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell3; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell9; private DevExpress.XtraReports.UI.FormattingRule Einzahlungstextsichtbarkeitsformatierungsregel; private DevExpress.XtraReports.UI.FormattingRule Auszahlungstextsichtbarkeitsformatierungsregel; private DevExpress.XtraReports.UI.XRTableCell xrTableCell7; @@ -1317,7 +661,6 @@ private DevExpress.XtraReports.UI.XRTableRow xrTableRow3; private DevExpress.XtraReports.UI.XRTableCell xrTableCell11; private DevExpress.XtraReports.UI.XRTableCell xrTableCell13; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell15; private DevExpress.XtraReports.UI.XRTableRow xrTableRow4; private DevExpress.XtraReports.UI.XRTableCell xrTableCell16; private DevExpress.XtraReports.UI.XRTableCell xrTableCell17; @@ -1326,70 +669,32 @@ private DevExpress.XtraReports.UI.XRTableCell xrTableCell20; private DevExpress.XtraReports.UI.ReportHeaderBand ReportHeader; private DevExpress.XtraReports.UI.XRTableCell xrTableCell14; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell21; private DevExpress.XtraReports.UI.XRTableCell xrTableCell12; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell22; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell23; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell24; - private DevExpress.XtraReports.UI.XRLabel xrLabel1; - private DevExpress.XtraReports.UI.XRLabel xrLabel8; private DevExpress.XtraReports.UI.XRTable xrTable2; private DevExpress.XtraReports.UI.XRTableRow xrTableRow2; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell4; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell5; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell6; private DevExpress.XtraReports.UI.XRTableCell xrTableCell8; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell10; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell25; private DevExpress.XtraReports.UI.XRTableCell xrTableCell26; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell27; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell28; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell29; private DevExpress.XtraReports.UI.CalculatedField fieldFls; private DevExpress.XtraReports.UI.GroupFooterBand GroupFooter1; - private DevExpress.XtraReports.UI.XRTable xrTable4; - private DevExpress.XtraReports.UI.XRTableRow xrTableRow5; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell35; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell36; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell37; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell38; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell39; - private DevExpress.XtraReports.UI.XRLine xrLine1; - private DevExpress.XtraReports.UI.XRLabel xrLabel2; - private DevExpress.XtraReports.UI.XRTableRow xrTableRow6; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell30; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell31; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell32; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell33; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell34; private DevExpress.XtraReports.UI.XRLabel xrLabel3; - private DevExpress.XtraReports.UI.XRLabel xrLabel5; - private DevExpress.XtraReports.UI.XRLabel xrLabel4; - private DevExpress.XtraReports.UI.DetailReportBand DetailReport1; - private DevExpress.XtraReports.UI.DetailBand Detail2; - private DevExpress.XtraReports.UI.XRTable xrTable6; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow7; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell15; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell40; private DevExpress.XtraReports.UI.XRTableRow xrTableRow8; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell45; private DevExpress.XtraReports.UI.XRTableCell xrTableCell41; private DevExpress.XtraReports.UI.XRTableCell xrTableCell42; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow9; private DevExpress.XtraReports.UI.XRTableCell xrTableCell43; private DevExpress.XtraReports.UI.XRTableCell xrTableCell44; - private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader1; - private DevExpress.XtraReports.UI.XRTable xrTable5; - private DevExpress.XtraReports.UI.XRTableRow xrTableRow7; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell40; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell46; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell48; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell49; - private DevExpress.XtraReports.UI.GroupFooterBand GroupFooter2; - private DevExpress.XtraReports.UI.XRTable xrTable7; - private DevExpress.XtraReports.UI.XRTableRow xrTableRow9; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell47; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell50; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow11; private DevExpress.XtraReports.UI.XRTableCell xrTableCell51; private DevExpress.XtraReports.UI.XRTableCell xrTableCell52; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell53; - private DevExpress.XtraReports.UI.XRLabel xrLabel6; - private DevExpress.XtraReports.UI.XRLine xrLine2; + private DevExpress.XtraReports.UI.XRTable xrTable4; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow5; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell2; + private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader1; + private DevExpress.XtraReports.UI.XRRichText xrRichText2; + private DevExpress.XtraReports.UI.XRPictureBox xrPictureBox1; } } diff --git a/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.cs b/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.cs index 3a8b9c432..567cfa579 100644 --- a/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.cs +++ b/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.cs @@ -27,5 +27,6 @@ namespace KompassBeWoWesel bindingSource1.DataSource = pRO; } - } + + } } diff --git a/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.resx b/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.resx index 93ae7f041..dbfed30ef 100644 --- a/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.resx +++ b/ReportImp/KompassBeWoWesel/BudgetnachweisAnhang.resx @@ -117,10 +117,10367 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 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 + jcOO04/kkPaSCJMblC6VQZZWl2uYgJmWmqybwZzQneCe8KAAoRGiIqM0pEalWKZrp36okamlqrmrzazi + rfevDLAhsTWySLNctHC1hbaZt664w7nYuu68BL0avjC/R8BdwXTCjMOjxLvF08brx/7JEMoiyzXMSM1b + zm7PgtCW0arSv9PV1OvWAtcZ2DDZSNph23rclN2u3snf5eEA4hTjI+Qy5ULmUudk6IDpnOq469Xs8e4O + 7yzwSvFp8onzqvTM9e33Dvgu+U76bfuK/Kf9w/7g//8AAADIAZACVwMfA+gEsQV6BkUHDwfbCKcJdApC + CwoL0gybDWUOLw76D8YQkxFgEi8S/xPQFKEVcRZBFxAX4RiyGYUaWBssHAEc1h2tHoQfXCA1IQ0h5yLA + I5skdyVTJjEnDyfuKM4pryqRK3QsVS00LhQu9S/XMLoxnjKDM2g0TzU2Nh83CDfzONs5wjqpO5I8fD1n + PlM/QEAuQR1CDUL+Q/FE5EXVRsVHtUimSZlKjUuCTHhNb05oT2JQXVFZUlZTVFRNVUdWQlc+WDtZOlo6 + WzxcP11DXkhfT2BXYWBiZ2NqZG9ldWZ9Z4Voj2maaqdrtWzEbdRu5m/5cQ1yIHMtdDx1TXZed3F4hHmZ + eq97xnzfffh/E4AugUuCaYOChJmFsIbJh+KI/YoYizSMUY1vjo6PrpDOke+TEpQ0lViWdJeOmKmZxJrg + m/ydGZ43n1WgdKGTorKj0qTyphOnNKhWqXiqmau4rNit+K8XsDixWLJ4s5m0urXbtvy4Hbk/umC7gryj + vcW+58AIwSrCTMNnxIDFmcazx8zI5cn+yxfMMM1JzmLPe9CT0azSxtPf1PnWE9ct2EfZYdp825fcst3N + 3uff8eD74gXjD+Qa5STmLuc56EXpXep064vsou257s/v5vD88hPzKvRD9Vv2cfeH+Jv5rvq/+8382v3m + /vL//wAAAMoBkwJbAyQD7AS1BX4GRwcRB9sIpQlvCjgLAQvLDJUNYA4rDvcPwxCPEVwSLBL8E8wUnBVs + Fj4XDxfiGLQZiBpcGzAcBhzbHbIeiR9gIDghECHpIsMjnSR4JVQmMCcNJ+soySmmKoQrYixBLSEuAS7j + L8QwpzGKMm0zUjQ3NRs2ADbmN8w4szmbOoM7bTxXPUE+LT8ZQAZA80HgQs5DvESrRZtGjEd+SHBJY0pX + S0xMQk05Ti9PJVAdURVSDlMHVAJU/lX6VvdX9Vj0WfRa9Vv2XPZd9175X/xhAGIEYwpkEGUXZh9nJ2gx + aTtqR2tSbFxtZ25zb39wjHGacqlzuXTJddp27Hf+eRJ6JXs6fE19YH5zf4iAnIGygsiD3oT1hg2HJYg+ + iVeKcYuLjKWNwY7Zj/GRCZIikzuUVZVvlomXpJi/mdqa9pwSnS6eSp9noIShoaK+o9uk96YUpzGoTqlr + qomrpqzDreGu/7AcsTqyWLN1tJO1sbbOt+y5Cbonu0S8X715vpO/rcDGweDC+sQTxS3GRsdfyHjJkcqq + y8PM2830zwzQJdE+0lfTcNSJ1aPWvdfW2PHaBdsY3CvdPt5R32TgeOGL4p/js+TI5dzm8+gY6T3qYeuG + 7Krtzu7z8BjxPfJk84z0tPXa9wD4JPlI+mn7iPyl/cL+4P//AAAAxQGKAk8DEwPWBJkFWwYdBt4HoAhg + CSEJ4gqjC2QMJgzoDaoObQ8vD/IQtRF7EkITChPRFJkVYhYqFvMXvBiFGU8aGRrkG68ceh1GHhIe3h+r + IHkhRyIVIuQjsySCJVEmISbxJ8EokilkKjUrByvaLK0tgC5TLyYv+jDPMaQyeTNPNCU0+zXSNqo3gjha + OTI6CzrkO748mD1zPk4/KUAFQOJBv0KdQ3tEWUU3RhZG9kfWSLZJl0p5S1tMPk0hTgVO6U/OULNRmFJ+ + U2RUS1UzVhtXA1fsWNZZwFqrW5Zcgl1uXlpfR2A0YSJiEWMAY+9k32XQZsFns2ilaZhqjGuAbHRtaW5e + b1RwSnFBcjhzMHQpdSN2HXcXeBN5D3oLewl8B30FfgR/AoACgQKCA4MEhAeFCoYOhxKIF4kdiiSLLIw0 + jT2OR49SkF6RapJ3k4SUkpWilrKXwpjUmeaa+ZwNnSKeN59OoGWhfKKVo66kyKXjpv+oG6k4qlWrcqyQ + ra+uzq/usRCyMbNUtHe1m7bAt+a5Dbo0u1y8hb2vvtnABcExwl7DjcS8xe3HH8hTyYbKuMvrzR/OVc+N + 0MbSAdM+1HzVu9b92D/ZhNrK3BHdWt6p4BPhgOLv5GDl1OdL6MTqQuvD7Uru1/Bo8frzjPUf9rH4QfnM + +1X83v5r////AIAAgADkb3/af3rJu3/Cfxeu13+/fuOTqH/QftF3+3/yfs1bXIAqfsE8gYCZfpsVeIIa + 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 + iZnCUmgzzC+tX2n3xDyYrGu8vG2EHm2HtOZvbW9VrahaYXEUppRE+HKgn2QuP3Ozlx0VDnQZisjEYnmW + a3OvZHoibSyaWnq0bu2FHntOcK5vfHvxcmNZOHyhc/lCBH1ldV8oL35jdiYIZ4BodhzBknc+dsCsw3f/ + d0qYBHjDd+qDKnmJeJxt+XpTeVNYMXsgefxBl3vweoMonnzJepsKaX6Heh6+9XVOggiqZXYygXSV4Xcd + gO6BVXgIgJJse3jvgEdXGnnUf/tBAnqvf5go1Xtsfu8MInzrfaG8hnPYjUKoKHTWi5CT7HXRift/pnbV + iIFrIXfShzdWInjEhfZAhnmjhKUpCHpLgysNmHuMgJy6SXLImHumGXPTla6SFHTdkwN+HHXkkIVp7Hbu + jipVQHfqi/JAEnjIia0pLXldh1AO03pmgxy4SHIJo7ukQXMZn9aQbnQnnBZ8sHUzmI9oy3Y9lTJUfnc7 + ke0/rngWjqwpSHidi1wP1nl0hSy2lnF8rw2isXKOqgqPCXOcpS97fnSpoJZn0XW1nDFTy3ayl+I/W3eH + k5ApYHgCjzUQp3iwhtW1KnEcunqhYnIttFSN3nM4rld6gXRDqJ9nAXVOoydTJXZMnc8/AncbmGApZ3eL + kmsRTHgWiCWz+nDkxhigS3HvvsWM5nL1t5p5rnP8sLdmWHUDqhtSp3X/o6c+onbLnR0pT3cylPERzHee + iSq004IbaoyhH4H0bEKNc4HTbgd5q4G9b9dlhoG4caNQwIHPc1k7E4IadOUivYMEdeAGUoQgd2iyQ3/0 + dTSewX/5ddeLW4AAdpR344AOd2ZkHYAmeEJPxIBPeRU6poCWec0jMYE1eikIKoIceuWv7n4Rf++co345 + f4aJbn5gfyt2UH6Pfv9i7X6/fuhPAn75ftU6a389frIjsX+lfloJv4BifeWtu3yvipeaoHzoiSOHtn0g + h8101H1ihpdhuH2khZFOJH3lhJU5+n4jg5Aj7X5cgnELF37qgHCrtHuplTKYxnvvkreGEHw1kF9zdnx5 + jjRgqnzCjC5NY30Giks5on05iGEkKH1Mhm0MN32vgpOp43run9SXG3s8nFGElHuFmPVyMHvMldNfq3wS + kttMwnxSj/05WXx5jSgkWHxtik4NJnyqhFaoWXpkqoOVs3q0pfSDVHr+oY5xH3tGnWpezXuKmXtMJ3vF + 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 + cs55m3U+dBRlqHZ/dVNRFHe6dno7qXjqd3IjvXnxd9AHy3zZeBOxhm8Ne4aeRnCBe56LE3H6e7x3z3Nr + e/lkNHTRfD1QBnYsfHQ7HXdtfIkkA3hefDUJbntEe6qvE203homcDG7OhYuJJHBdhKR2LnHxg8xi53N1 + gxhPHHTkgmI6rnYwgZQkR3cQgIAK0nnrfres02vVkX6aAG2Bj26HVG8mjXp0rXDDi6hhwXJcie5OR3Pb + iEs6SXUrhpUkfXYAhLEL/HjKgUaqzmrTnG2YK2yJmU+Ftm44lk9zS2/gk35gqXF9kM1NlnMFjis59XRY + i4gkp3UjiMYM83fcg2OpGWoOp2SWnmvLozKEWW1+nyJyIm8sm0lfuHDPl5pM7HJbk/05sHOtkFwkzXRy + jJ8NuXcchRanqmmCsmeVUWtArRuDNWz1p/RxLm6jowle8XBJnlZMSnHZmb85XnMplRUk33Poj8YOVXaF + hm6meGknvYGUPGritxOCQmyUsMtwY25AqsVeUW/mpQFL1XF2n2I5AXLGmbEkyHOAkjsOz3YPh3moTXyA + ZIWVw3zdZsuDRH0+aRxwpX2la3FdoX4ZbbpJ8X6kb+E1UX9acc0d2oCbcvQEEoJPdXOltnnZbxWTZHpv + cE6BLXsEcZxu4XuacvdcPXw0dFRI/XzZdZ407n2Qdr8eZH6Dd1YF0oBXeQyjW3eKebaRRXhLeel/SXkM + eihtV3nKeopbFnqFevlIQ3tBe2M0vXv8e7Ae9ny4e6MHUn6nfCOhIXXEhCePQ3aig1l9knd6gqVr4XhW + ggZZ53kpgY1Ha3nzgRY0VXqtgI0fQns8f80ImX03fsOfFnRyjoaNa3VjjLl78nZNiwpqincwiYFY5ngR + iBJGtnjkhr00CHmYhVsfjHoEg9oJqnwDgPadQnN1mOCLxHRxlhV6fnVlk2tpTXZPkPJX7ncyjpxGIXgH + jFozy3i0ihsfynkFh8sKjXsEgsebtnK0ozyKXXO2n255RXSum8RoRXWemFRXGXaDlRJFj3dXkeUznHf8 + jrsgAXg4iz0LQno4hD2aaXInrZ+JMXMtqMd4P3QmpBhnbHUVn6hWanX8m3NFAHbRl1wzWndukz0gIHeZ + jfgL0nmWhWWZVHHJuBKIOHLOsil3ZnPFrGpmuXSypvNV33WXocBEnHZqnLMzCHcFl3EgEXchkBQMQnkY + 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 + Y/9lBGYKZxFoFWkYahtrH2wkbSpuMG84cEBxSnJUc190a3V3doV3k3iceaZ6sHu7fMZ9037gf+6A/YIM + gxyELYU+hlGHY4h3iYeKlYukjLONw47Tj+SQ9pIIkxuULpVBllaXa5iAmZaarJvBnNCd4J7woAChEaIi + ozSkRqVYpmunfqiRqaWquavNrOKt968MsCGxNbJIs1y0cLWFtpm3rrjDudi67rwEvRq+ML9HwF3BdMKM + w6PEu8XTxuvH/skQyiLLNcxIzVvObs+C0JbRqtK/09XU69YC1xnYMNlI2mHbetyU3a7eyd/l4QDiFOMj + 5DLlQuZS52TogOmc6rjr1ezx7g7vLPBK8WnyifOq9Mz17fcO+C75Tvpt+4r8p/3D/uD//wAAAMgBkAJX + Ax8D6ASxBXoGRQcPB9sIpwl0CkILCgvSDJsNZQ4vDvoPxhCTEWASLxL/E9AUoRVxFkEXEBfhGLIZhRpY + GywcARzWHa0ehB9cIDUhDSHnIsAjmyR3JVMmMScPJ+4ozimvKpErdCxVLTQuFC71L9cwujGeMoMzaDRP + NTY2HzcIN/M42znCOqk7kjx8PWc+Uz9AQC5BHUINQv5D8UTkRdVGxUe1SKZJmUqNS4JMeE1vTmhPYlBd + UVlSVlNUVE1VR1ZCVz5YO1k6WjpbPFw/XUNeSF9PYFdhYGJnY2pkb2V1Zn1nhWiPaZpqp2u1bMRt1G7m + b/lxDXIgcy10PHVNdl53cXiEeZl6r3vGfN99+H8TgC6BS4Jpg4KEmYWwhsmH4oj9ihiLNIxRjW+Ojo+u + kM6R75MSlDSVWJZ0l46YqZnEmuCb/J0ZnjefVaB0oZOisqPSpPKmE6c0qFapeKqZq7is2K34rxewOLFY + snizmbS6tdu2/LgduT+6YLuCvKO9xb7nwAjBKsJMw2fEgMWZxrPHzMjlyf7LF8wwzUnOYs970JPRrNLG + 09/U+dYT1y3YR9lh2nzbl9yy3c3e59/x4PviBeMP5BrlJOYu5znoReld6nTri+yi7bnuz+/m8PzyE/Mq + 9EP1W/Zx94f4m/mu+r/7zfza/eb+8v//AAAAygGTAlsDJAPsBLUFfgZHBxEH2wilCW8KOAsBC8sMlQ1g + DisO9w/DEI8RXBIsEvwTzBScFWwWPhcPF+IYtBmIGlwbMBwGHNsdsh6JH2AgOCEQIekiwyOdJHglVCYw + Jw0n6yjJKaYqhCtiLEEtIS4BLuMvxDCnMYoybTNSNDc1GzYANuY3zDizOZs6gzttPFc9QT4tPxlABkDz + QeBCzkO8RKtFm0aMR35IcEljSldLTExCTTlOL08lUB1RFVIOUwdUAlT+VfpW91f1WPRZ9Fr1W/Zc9l33 + Xvlf/GEAYgRjCmQQZRdmH2cnaDFpO2pHa1JsXG1nbnNvf3CMcZpyqXO5dMl12nbsd/55Enolezp8TX1g + fnN/iICcgbKCyIPehPWGDYcliD6JV4pxi4uMpY3BjtmP8ZEJkiKTO5RVlW+WiZekmL+Z2pr2nBKdLp5K + n2eghKGhor6j26T3phSnMahOqWuqiaumrMOt4a7/sByxOrJYs3W0k7Wxts637LkJuie7RLxfvXm+k7+t + wMbB4ML6xBPFLcZGx1/IeMmRyqrLw8zbzfTPDNAl0T7SV9Nw1InVo9a919bY8doF2xjcK90+3lHfZOB4 + 4Yvin+Oz5Mjl3Obz6BjpPeph64bsqu3O7vPwGPE98mTzjPS09dr3APgk+Uj6afuI/KX9wv7g//8AAADF + AYoCTwMTA9YEmQVbBh0G3gegCGAJIQniCqMLZAwmDOgNqg5tDy8P8hC1EXsSQhMKE9EUmRViFioW8xe8 + GIUZTxoZGuQbrxx6HUYeEh7eH6sgeSFHIhUi5COzJIIlUSYhJvEnwSiSKWQqNSsHK9osrS2ALlMvJi/6 + MM8xpDJ5M080JTT7NdI2qjeCOFo5MjoLOuQ7vjyYPXM+Tj8pQAVA4kG/Qp1De0RZRTdGFkb2R9ZItkmX + SnlLW0w+TSFOBU7pT85Qs1GYUn5TZFRLVTNWG1cDV+xY1lnAWqtbllyCXW5eWl9HYDRhImIRYwBj72Tf + ZdBmwWezaKVpmGqMa4BsdG1pbl5vVHBKcUFyOHMwdCl1I3Yddxd4E3kPegt7CXwHfQV+BH8CgAKBAoID + gwSEB4UKhg6HEogXiR2KJIssjDSNPY5Hj1KQXpFqkneThJSSlaKWspfCmNSZ5pr5nA2dIp43n06gZaF8 + opWjrqTIpeOm/6gbqTiqVatyrJCtr67Or+6xELIxs1S0d7WbtsC35rkNujS7XLyFva++2cAFwTHCXsON + xLzF7ccfyFPJhsq4y+vNH85Vz43QxtIB0z7UfNW71v3YP9mE2srcEd1a3qngE+GA4u/kYOXU50voxOpC + 68PtSu7X8Gjx+vOM9R/2sfhB+cz7Vfze/mv///8AgACAAOTnf9p/fcrJf8N/HbCmf8F+7JaBf9J+3nxd + f/N+4WI5gCV+5EgXgHl+5C34gRR+w/wzfnOMQuIkfmqKSMg3fnOIi65pfo6HFZS0fryF2HsRfveEtWGM + f0CDjUgtf6OCXC87gDSA5vmXfTKYj9+hfTuVMMXOfVaR/6xTfYuPR5MFfc+M0HnafiGKe2Dmfn2IGEg2 + fu2FojBJf3uCw/cjfEqk5t1AfF6gJMOpfH+boqpafL+XepFufRaTy3iwfXWQNGBAfd6MhEgwfliIszEq + fuOEXvTde7CxRdsMe8WrIMGee+ylSKihfCuf1Y/wfIeat3eWfPKV2F+bfWGQyEgdfeCLiDHifmiFvfLR + e1O9qNkSe2S2JL/Ge4eu66cFe8ioJ46ofCKhsXaRfIybT17/fP6U00gBfYCOGjJ5fgSG4vEVexbKD9dl + eyLBIr42e0C4e6Wje36wTY2Ie9iocnW9fEKgmV55fLGYi0fmfTSQWDLwfbWH0O+eevbWedX9evzMFLzm + exPB76R5e0u4PYyPe6Ou43UIfA+llV4IfHqb9UfMfPuSSDNOfXiIj+5leu7i49TReu3W8LvPev3LNaOB + ey6/6Iu/e4G083Roe+mqEV2mfFWe/ke1fNOT8zOWfUmJJezPiQt+LtSKh+194bxNhuZ9t6QShgF9uovV + hT194nOdhJN+HVuGg/9+YkOUg5d+tiw1g3J/Feo6h56JpdIAhpaH/rn2haiGj6INhNqFYIo5hC2EaXJ5 + g5eDjVrzgw6CtUO3gqeB4y1pgmaA9OfWhnOVM8+6hYGSRrfMhKSPhaAug++NKYi4g1OLB3FmgsyJBVpn + gk2G+kPQgeSE5y5rgYiCk+WShaOgxM2MhLucj7XXg+WYkp5ngzOU4YdLgqaRl3BggiWOYFncgaqLFEPZ + gT+Hsi9BgNKD9+N6hResYMuHhDGm4bP4g2Cho5zVgq6cuYX3gh2YFm9pgaSTpVlTgSiPB0PWgLiKRC/y + gD2FJOGWhMG4Acm2g9ixOLJIgwSqrZtcglOkhITNgb+emG6HgTyYuVjTgL+Sv0PLgEuMlDCBf8WGH9/9 + hInDncgsg5y7f7DagsOznJoagg6sG4PIgXmk2m3KgPKdllhlgGuWI0PAf/OOljD0f2aG696lhGvPMMbh + g3nFsa+ngpm8ZZkMgd6zdYLngUWqyW0kgMCiIFgEgDGZN0Owf7GQTTFNfxyHjd2FhGPatcXMg2vPvq6m + goTE9JgqgcG6gIItgSOwUWyXgJmmLleqgAqb6kObf4SRwTGSfuOIDNsYkk98xcSXkDh8nK4sjjx8l5fK + jG98woFois99FWsUiU59gVUCh+J9/z9DhqV+nSqbhZx/ZNi9kQyHcsJSjwqGFqwcjSOE8pYGi2qEA4AG + idiDR2oiiGGCp1SYhvWCDj+AhaaBiSvBhGqBAtaij+6SSsBQjf+Pu6ozjB2NVZRqineLSH7GiPKJbmlK + h4SHtFQ8hhuF9j+zhMWEPiy4g22CZ9SejySdKL5gjT2Za6h5i2yV35LcicaSmH2FiE2Po2hmhuGMwFPH + hXWJyz/JhBGGyy2FgpyDl9K5jqSoAbyQjL+jEqbOivOeWpF1iUuZ6Xxeh8aVsmeThl2RoVNbhOqNaj/W + g3qJGS4ugfGEl9EEjlSy27rtjG2st6VKip2mxpAjiPShJntVh2ubtmbVhfGWTlL3hHiQzT/bgv+LKS63 + gWaFbM+Tjh69p7mKjDS2Q6QBil+vDo8EiLGoKXpthyWhdmYxhaWavFKhhByT3D/egpuM7y8kgPiGF85c + jgDIXLhfjBO/q6Ltije3JI4TiIGu5nmnhvCm3GWdhXCe0VJQg9uWmT/agk+Oby96gKOGn81XjfXS8bdl + jATI4KIGiiG+8o1JiGO1S3kDhsur2GUjhUWib1IAg7CY+T/IghuPsC+9gGGHCsndm8x757UUmLx70qBw + lct75IvekxB8KndRkId8mmLdjiF9KU7Ni8x9zzs7iZ9+oykph5R/rsfZmpuF6rMml5mEv56wlL6DxYpi + khKDBHYrj5SCc2IbjTGB/06GitKBmDuKiIiBTCpDhkKBD8Xwma+P6rFflrmNtp0Fk+GLmIj+kT6J1XUY + jsWIN2FnjGGGt05CifqFNTvLh5mDvysuhSmCPsREmNmaH6/DlfGWy5uVkyOTkoe8kHOQn3QnjgKN8mDO + i5+LU04PiTKIqDwHhseF/ivzhECDPsKkmFOkP64tlWqfxpojkpybfIaGj/iXcHMtjXmTl2AcixWP2E23 + iJ6L+TwfhiCIDSyUg4GEFcElmAOuT6zBlRqotJjUkkijR4Vij6KeHHJIjRuZGF+CiqCUGU1uiB+PBDwz + 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 + gAd8qyBAgNV+SUUqd21z5j+VeBh1VDo5ePF2xjT2egV4QC/Ze0d5wCsNfJx7PybYfep8qiM4fyV99yCe + gBZ+/URhdVR5yj71djd6hTnEd0V7RTSkeJJ8DC+eehB82Cr8e5d9oScBfQd+XSN3fmx/CSDof39/jkPA + c5R/QT51dKp/RTlkdeh/UzRld2N/ai9/eQ9/hyrlesx/qCcefFd/xiOsfdl/5yEifweAAUMzckaEFj4M + c3eDbzkmdMuC2DRWdl+CTy+ReC2BzysIehCBWCcme8+A8CPBfW+AmyFPfquAXEH6kQtQ2zzzjqlVxjf7 + jKFa0DLiiwBgBi2uibNlaSiliJ5q6iRDh7pwYiBhhwp1th2Oho56XkDOjH1YKzvriplcezceiQtg3jJB + h9ZlZS1Thu1qCiiXhjduwiR/hadzYiDlhUF31B5LhPx7mT+2iHpfKDr2hwJi6TZihdVmpTG0hQhqdy0F + hHxuXyiLhB5yTySyg9x2GyFVg7l5sh7qg6d8qT63hQNlxDogg+po5zWvgxdsDTFLgpZvJizHgmFyUyiF + glF1gCTgglR4hCG0gm57UR9vgol9kj3Vgg5sAjlogUNuhDUcgMBw/zDbgIlzdiylgJB15yiFgMl4WCUL + gQl6oCIFgVl8tB/dgZt+Vz0Pf45x4jjKfwZzvzSmfsF1kzCAfs13XyxrfxN5JCiSf3x63SU0f/R8dSJJ + gHR94iA3gNh++zxqfXp3WjhHfSt4jjRHfRp5ujA/fVt63ixAfdl7+iiIfnR9CyVWfxJ+ASKDf7p+2yB+ + gD1/fzvie8p8Vjfbe6l85DP5e8N9bjAPfCx98CwlfNl+bSh0faZ+4iVkfmN/SyKsfyl/pSC3f8J/6Dtx + enaAxTeDeniAtTO6erGApi/pezuAlCwUfAuAfyh1fPuAaiVkfd+AViLAfr2ARiDif2SAOwAA//8AAP// + AAD//wAAbWZ0MQAAAAADBCEAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAECAwQF + BgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB + QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9 + fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5 + uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T1 + 9vf4+fr7/P3+/wABAQICAwMEBAUGBgcHCAgJCQoLCwwMDQ0ODw8QEBEREhMTFBQVFhYXFxgZGRoaGxwc + HR4eHyAgISIiIyQkJSYmJygpKSorLC0tLi8wMTIyMzQ1Njc4OTo7PD0+P0BCQ0RFRkhJSkxNT1BSU1VX + WFpcXmBiZGZoam1vcXR2eXx+gYOGiYuOkJKVl5mbnZ+ho6WnqKqsra+wsrO1tre5uru8vb/AwcLDxMXG + x8jJysvMzc3Oz9DR0tLT1NXW1tfY2dna29vc3d3e39/g4eHi4+Pk5eXm5ufo6Onp6uvr7Ozt7u7v7/Dw + 8fLy8/P09PX29vf3+Pj5+fr7+/z8/f3+/v8AAQECAgMDBAQFBgYHBwgICQkKCwsMDA0NDg8PEBARERIT + ExQUFRYWFxcYGRkaGhscHB0eHh8gICEiIiMkJCUmJicoKSkqKywtLS4vMDEyMjM0NTY3ODk6Ozw9Pj9A + QkNERUZISUpMTU9QUlNVV1haXF5gYmRmaGptb3F0dnl8foGDhomLjpCSlZeZm52foaOlp6iqrK2vsLKz + tba3ubq7vL2/wMHCw8TFxsfIycrLzM3Nzs/Q0dLS09TV1tbX2NnZ2tvb3N3d3t/f4OHh4uPj5OXl5ubn + 6Ojp6err6+zs7e7u7+/w8PHy8vPz9PT19vb39/j4+fn6+/v8/P39/v7/97oxG/i6Pzb6uExU+LdXbvG+ + XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6 + Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1 + ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65 + fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHC + ZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+ + XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6 + Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1 + ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65 + fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHC + ZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+ + XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6 + Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1 + ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65 + fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHC + ZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6Pzb6uExU+LdXbvG+ + XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/97oxG/i6 + Pzb6uExU+LdXbvG+XYHsw2OU6cNjpeHCZLXZwGnE07xz0M65fdrKt4XixraM6MS1ku7BtJnzvrWh+bu5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/97oxG/i7Pzb6uExU97lXbfDAXYDrxWGS6cZgpOLGYLPbxWPB1MNszdDBddbMwHzdycCC48W8 + huvCuobyu72K+LK6pvyyuqb8srqm/LK6pvyyuqb8srqm/LK6pvyyuqb8srqm/LK6pvyyuqb8srqm/LK6 + pvyyuqb8srqm/LK6pvyyuqb89rsxG/e7Pzb5uUxU9rpWbO7CXX/qxl6R58leouPKXbHczVy+181jyNLN + a9HMyHDdyMVw5cLDdey6wIrytL2Z9qy8ofmsvKH5rLyh+ay8ofmsvKH5rLyh+ay8ofmsvKH5rLyh+ay8 + ofmsvKH5rLyh+ay8ofmsvKH5rLyh+ay8ofmsvKH59rsxGve8Pzb5uUxU9LxWbOzFXX3oyVyP5cxbn+HQ + Wa3d1li51tZaxs3PZdTGym7ev8Z55rrDiOy2wJTwrr+X9Ka9nfemvZ33pr2d96a9nfemvZ33pr2d96a9 + nfemvZ33pr2d96a9nfemvZ33pr2d96a9nfemvZ33pr2d96a9nfemvZ339rwxGva8PzX4ukxU875VaurH + XHzmzFmN4dFXnNzYVajW3Ve3ztVdyMXOa9W+yXffusaF5rfDkOqwwpHuqcCU8aG/mfShv5n0ob+Z9KG/ + mfShv5n0ob+Z9KG/mfShv5n0ob+Z9KG/mfShv5n0ob+Z9KG/mfShv5n0ob+Z9KG/mfShv5n09bwxGva9 + PzX4ukxU8cBVaenJWXrjz1aK3ddUmNXfWqXQ3Ve6x9Riyr/Octa6yoDet8eN5LHFjeiqw47so8GR753A + lvGdwJbxncCW8Z3AlvGdwJbxncCW8Z3AlvGdwJbxncCW8Z3AlvGdwJbxncCW8Z3AlvGdwJbxncCW8Z3A + lvGdwJbx9b0xGvW9PzX3u0xU78NVaObMVnff01OG1t5YkdDjWqjK3Fm8wdRpy7rOedW2yofdsciJ4qvG + iualxIvpn8OO65jCk+6YwpPumMKT7pjCk+6YwpPumMKT7pjCk+6YwpPumMKT7pjCk+6YwpPumMKT7pjC + k+6YwpPumMKT7pjCk+6YwpPu9L0xGvS+PzX2vExU7MZUZePPU3Ta2k+A0uNaksvlW6rE21+9vNRuy7fP + f9SxzIXbq8mF36XIh+KgxonlmsWM6JXEkOqVxJDqlcSQ6pXEkOqVxJDqlcSQ6pXEkOqVxJDqlcSQ6pXE + kOqVxJDqlcSQ6pXEkOqVxJDqlcSQ6pXEkOqVxJDq874xGfO/PzX1vUxU6cpUY+DTT2/U4Fd4zeZalcbk + Xay+22S9t9R0ybLQftKszYHYpsuC3KDJhN+byIbhlseJ5JHGjeaRxo3mkcaN5pHGjeaRxo3mkcaN5pHG + jeaRxo3mkcaN5pHGjeaRxo3mkcaN5pHGjeaRxo3mkcaN5pHGjeaRxo3m8r8xGfLAPzTzwExS5c1RX9ra + SmjQ5Vh7yOtcl8DjYa253Gm8stV1x6vSec+lz33UoM2A15vMgtqWy4TdkcmH343Ji+GNyYvhjcmL4Y3J + i+GNyYvhjcmL4Y3Ji+GNyYvhjcmL4Y3Ji+GNyYvhjcmL4Y3Ji+GNyYvhjcmL4Y3Ji+GNyYvh8cAxGfHC + PzTuxUtP4NNMWNPiVF/L6ll/wu1fmbvkZq2z3Wy6qthwxKPUdcqd0njPmNB70pTPftSRzoHXjc2F2YnM + iNqJzIjaicyI2onMiNqJzIjaicyI2onMiNqJzIjaicyI2onMiNqJzIjaicyI2onMiNqJzIjaicyI2onM + iNqJzIja78IxGO/EQDPny0tI2NxHTc3oVGTF71uCvO1jmrTlaauq32i3odpsv5rXcMSV1XTIkdN3y43S + es2K0X7Ph9GB0YTQhdKE0IXShNCF0oTQhdKE0IXShNCF0oTQhdKE0IXShNCF0oTQhdKE0IXShNCF0oTQ + hdKE0IXShNCF0oTQhdKE0IXS7cUxF+zHQDLf00U+0OROR8fvVmi+9V+Etu5nmKvnZKeg4WWxmN5ouJLb + bb2N2nHAidh0wobYd8SD1nrGgdV9x37Vgcl+1YHJftWByX7Vgcl+1YHJftWByX7Vgcl+1YHJftWByX7V + gcl+1YHJftWByX7Vgcl+1YHJftWByX7Vgcl+1YHJ6cgwFefLQDDU30Usye1PTb/1WWu3+WODrPBhlKDq + YaCX5mKpj+Jlr4ngarOF3262gt5xuH/ddLp93He7e9t6vXnbfb55232+edt9vnnbfb55232+edt9vnnb + fb55232+edt9vnnbfb55232+edt9vnnbfb55232+edt9vnnbfb55232+5cwwE9vYOSDM6UgxwfVRUbj7 + XWus+1x/ofNcjZfuXZiO6mCfhuhjpIHmZ6h95Wure+RurHnjca534nSvdeJ2sHPhebFz4Xmxc+F5sXPh + ebFz4Xmxc+F5sXPhebFz4Xmxc+F5sXPhebFz4Xmxc+F5sXPhebFz4Xmxc+F5sXPhebFz4Xmx4NEvEdDk + QBnE8ks3ufxTUq7/VWii/lZ4l/hXhY30Wo2F8F6Uf+5imHrsZZt262iedOprn3LqbqFx6XCib+lzo27o + daRu6HWkbuh1pG7odaRu6HWkbuh1pG7odaRu6HWkbuh1pG7odaRu6HWkbuh1pG7odaRu6HWkbuh1pG7o + daRu6HWk1N4yBsfvRB67+0k5r/9MUKP/TmKX/1Bvjf1UeoT6WIJ991yHePVgi3TzY45x8maQb/JpkW3x + a5Js8W6TavBwlGnwcpVp8HKVafBylWnwcpVp8HKVafBylWnwcpVp8HKVafBylWnwcpVp8HKVafBylWnw + cpVp8HKVafBylWnwcpVp8HKV/7IsFf+yOi3/r0dJ/69SYPq1WXL2uF+D8blklOq4aKPjtG2x3bBzvNir + fMbUpoPO0KKK1M6ekNnMmpbdypad4ciRqOTHj7rnvJK657ySuue8krrnvJK657ySuue8krrnvJK657yS + uue8krrnvJK657ySuue8krrnvJK657ySuue8krrn/7IsFf+yOi3/r0dJ/69SYPq1WXL2uF+D8blklOq4 + aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6ekNnMmpbdypad4ciRqOTHj7rnvJK657ySuue8krrnvJK657yS + uue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrn/7IsFf+yOi3/r0dJ/69SYPq1 + WXL2uF+D8blklOq4aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6ekNnMmpbdypad4ciRqOTHj7rnvJK657yS + uue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrn/7IsFf+y + Oi3/r0dJ/69SYPq1WXL2uF+D8blklOq4aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6ekNnMmpbdypad4ciR + qOTHj7rnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657yS + uue8krrn/7IsFf+yOi3/r0dJ/69SYPq1WXL2uF+D8blklOq4aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6e + kNnMmpbdypad4ciRqOTHj7rnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657yS + uue8krrnvJK657ySuue8krrn/7IsFf+yOi3/r0dJ/69SYPq1WXL2uF+D8blklOq4aKPjtG2x3bBzvNir + fMbUpoPO0KKK1M6ekNnMmpbdypad4ciRqOTHj7rnvJK657ySuue8krrnvJK657ySuue8krrnvJK657yS + uue8krrnvJK657ySuue8krrnvJK657ySuue8krrn/7IsFf+yOi3/r0dJ/69SYPq1WXL2uF+D8blklOq4 + aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6ekNnMmpbdypad4ciRqOTHj7rnvJK657ySuue8krrnvJK657yS + uue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrn/7IsFf+yOi3/r0dJ/69SYPq1 + WXL2uF+D8blklOq4aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6ekNnMmpbdypad4ciRqOTHj7rnvJK657yS + uue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrn/7IsFf+y + Oi3/r0dJ/69SYPq1WXL2uF+D8blklOq4aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6ekNnMmpbdypad4ciR + qOTHj7rnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657yS + uue8krrn/7IsFf+yOi3/r0dJ/69SYPq1WXL2uF+D8blklOq4aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6e + kNnMmpbdypad4ciRqOTHj7rnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657yS + uue8krrnvJK657ySuue8krrn/7IsFf+yOi3/r0dJ/69SYPq1WXL2uF+D8blklOq4aKPjtG2x3bBzvNir + fMbUpoPO0KKK1M6ekNnMmpbdypad4ciRqOTHj7rnvJK657ySuue8krrnvJK657ySuue8krrnvJK657yS + uue8krrnvJK657ySuue8krrnvJK657ySuue8krrn/7IsFf+yOi3/r0dJ/69SYPq1WXL2uF+D8blklOq4 + aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6ekNnMmpbdypad4ciRqOTHj7rnvJK657ySuue8krrnvJK657yS + uue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrn/7IsFf+yOi3/r0dJ/69SYPq1 + WXL2uF+D8blklOq4aKPjtG2x3bBzvNirfMbUpoPO0KKK1M6ekNnMmpbdypad4ciRqOTHj7rnvJK657yS + uue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrnvJK657ySuue8krrn/7IsFf+y + Oi3/r0dJ/7BSYPi3WHH0u16C8b1jk+q8Z6LkuWuv3rZwu9mxeMXUrIDN0aiH1M6jjdnMnpPeyZmb48eT + qOfAkrnptpW56raVueq2lbnqtpW56raVueq2lbnqtpW56raVueq2lbnqtpW56raVueq2lbnqtpW56raV + ueq2lbnq/rIsFP+zOi3/sEdJ/rJRX/e5WHDyvV6B78BjkevAZqDkvmmu37tsudq4dMPVtHzL0a+D0s6r + itjMpY/eyZ2X48aVqOm3lrjsr5m47K+ZuOyvmbjsr5m47K+ZuOyvmbjsr5m47K+ZuOyvmbjsr5m47K+Z + uOyvmbjsr5m47K+ZuOyvmbjs/rMsFP+zOi3/sEdJ/bNRXva7V2/wwF2A7MNikOvDZJ/mwmar4MFottu+ + bsDXu3XI07h9z9C1hNXNrYjcxaOQ5LqcouqtnLfuqJ237aidt+2onbftqJ237aidt+2onbftqJ237aid + t+2onbftqJ237aidt+2onbftqJ237aidt+2onbft/rMsFP6zOi3/sUdJ/LRRXvS8V27uwl1/68VgjunG + YZznx2Op4sdks93IZ7zax27D1sZ1ytC+eNTGtIDcuquK5K2lnOuipLbvoaK27qGitu6horbuoaK27qGi + tu6horbuoaK27qGitu6horbuoaK27qGitu6horbuoaK27qGitu6horbu/bMsFP60Oi3/sUdJ+7ZQXfO+ + V23sxFx96cdejOfKXprlzGCl4s9hr9/TZLbc2Ge90s9tycjGdNO9vXzcsbWG5KKvluuXr7bvmai27pmo + tu6ZqLbumai27pmotu6ZqLbumai27pmotu6ZqLbumai27pmotu6ZqLbumai27pmotu6ZqLbu/bQsFP20 + Oi3/skdJ+rdQXPHAVmzqx1x858pciuTOXJfh0l2h3Nlfqdbfba3S3Gu8ytVtyMHPcdO1yHjbqMGC45i8 + kuqMv7bukbC37pGwt+6RsLfukbC37pGwt+6RsLfukbC37pGwt+6RsLfukbC37pGwt+6RsLfukbC37pGw + t+6RsLfu/bQsFP21Oi3/skdJ+LlPW+/CVmvpyVp65c1Zh+DTWZPb2luc1OFpo9DharHK22+9wtV2yLnQ + fNKvzH/aociC4pLEkOmIw6nsiru37Iq7t+yKu7fsiru37Iq7t+yKu7fsiru37Iq7t+yKu7fsiru37Iq7 + t+yKu7fsiru37Iq7t+yKu7fs/LUsFP21Oi3/s0dJ97tPWu3FVWnny1h34tFXhNvaV47U4WWVz+Rmp8rf + aLXC2W/ButR3yrPQf9KpzILZncmF4JHGjuaIxKDphsSz6obEs+qGxLPqhsSz6obEs+qGxLPqhsSz6obE + s+qGxLPqhsSz6obEs+qGxLPqhsSz6obEs+qGxLPq/LUsFPy2Oiz+s0dJ9b1OWevHVWfkzlV03dZUf9Xg + X4bQ5WOZyuVlqsPeaLi72HDDtNN6zKvPfdOjzIHZmcqF3o/HjeOHxprmhcWp54XFqeeFxannhcWp54XF + qeeFxannhcWp54XFqeeFxannhcWp54XFqeeFxannhcWp54XFqeeFxann+7YsE/u2Oiz+tEdJ879OV+jK + VWTh0lJw2N1VedHkYIjL6GOcxONlrb3dabq113TErdN4zKXQfNOdzYDYlcuE3I3Ji+CGx5bjg8eh5IPH + oeSDx6Hkg8eh5IPHoeSDx6Hkg8eh5IPHoeSDx6Hkg8eh5IPHoeSDx6Hkg8eh5IPHoeSDx6Hk+rYsE/u3 + Oiz9tUZI8MNNVeXNUmHc2E9q0+Jdc83oYIvG6mOfvuJnr7fcbbuu13LFpdN2zJ7QetGYzn7VkcyD2YrL + id2EyZLfgcmb4YHJm+GByZvhgcmb4YHJm+GByZvhgcmb4YHJm+GByZvhgcmb4YHJm+GByZvhgcmb4YHJ + m+GByZvh+rcrE/q4Oiz6uUVG7MZNUuHSTlvV31Rhzudcd8fsYI/A6WWiuOJqsa/cbLym2HDEntR0ypjS + ec+S0H3Sjc6C1YjNiNiCzI/af8uV3H/Lldx/y5Xcf8uV3H/Lldx/y5Xcf8uV3H/Lldx/y5Xcf8uV3H/L + ldx/y5Xcf8uV3H/Lldx/y5Xc+LgrE/i5Oiv2vUVD58xNTNvZSFPQ5Vdgyexce8HxYpK56GijsOJpsabd + arqe2W7Bl9Zzx5HUd8uN0nvOiNGA0ITQhdOAz4vVfc6R1n3OkdZ9zpHWfc6R1n3OkdZ9zpHWfc6R1n3O + kdZ9zpHWfc6R1n3OkdZ9zpHWfc6R1n3OkdZ9zpHW97orEve7OivwwkU/4NJJRNPhUUbL61hlwvJef7vw + ZZSy6Gejp+Jlr57eZ7eW2229kNlxwovXdcWH1XnIg9R9yoDTgsx80ofOetKMz3rSjM960ozPetKMz3rS + jM960ozPetKMz3rSjM960ozPetKMz3rSjM960ozPetKMz3rSjM960ozP9bwrEfS+OiroykQ32NxDN83o + UkzE8VlqvPdhgrPwZZSo6WKhneRjq5ThZbKO3mu4idxwu4XbdL6B2nfAftl7wnvYf8R41oTFdtaHxnbW + h8Z21ofGdtaHxnbWh8Z21ofGdtaHxnbWh8Z21ofGdtaHxnbWh8Z21ofGdtaHxnbWh8Z21ofG8r8rEPHB + Oyne1EAr0OVKM8bwU1K991xttPlhgqjxX5Ge7F+dlOdhpYzkZKuG4mmwguBus37fcrV83nW3ed54uHfd + fLp13IC7c9yDvHPcg7xz3IO8c9yDvHPcg7xz3IO8c9yDvHPcg7xz3IO8c9yDvHPcg7xz3IO8c9yDvHPc + g7xz3IO878IqD+fLOB/T4EEbyO1MOb74VFa0/lttqftaf570W4yU712Wi+xgnYTpY6J+52eme+ZrqXjl + b6t25HKsdON1rXLjeK9w4nywb+J/sW/if7Fv4n+xb+J/sW/if7Fv4n+xb+J/sW/if7Fv4n+xb+J/sW/i + f7Fv4n+xb+J/sW/if7Fv4n+x6scpDdnaMA/K6kUhwPZPPrX/Ulep/1Rqnv5VeZP4V4SK9FuNg/Ffk33v + Ypd47WaadOxpnXLrbZ5w6m+gbupyoW3pdaJr6Xijauh6pGroeqRq6Hqkauh6pGroeqRq6Hqkauh6pGro + eqRq6Hqkauh6pGroeqRq6Hqkauh6pGroeqRq6Hqk4s8kCM3mOw3C9Egmtv9JP6r/S1Se/01lk/9RcYn9 + VHuB+ViCe/ddh3b1YYty9GSNb/Noj23ya5Fr8W2SavFvk2nwcpRn8HSVZu92lWbvdpVm73aVZu92lWbv + dpVm73aVZu92lWbvdpVm73aVZu92lWbvdpVm73aVZu92lWbvdpVm73aV0uEdAcPxOhK3/kAoq/9APZ7/ + RE6T/0hcif9MZ4D/UW95/1Z1dP5bem/8X31s+2J/avplgWj5aIJm+WqDZfhshGT4boVj93CGYvdyhmL3 + coZi93KGYvdyhmL3coZi93KGYvdyhmL3coZi93KGYvdyhmL3coZi93KGYvdyhmL3coZi93KG/6onD/+q + NiX/p0I+/6dOVP+sVWX+r1t1+a9hhfGtZpTrqGuh5aJxrOGcerXdl4O92pKLw9iOk8fVipvL1IeiztOF + qtDSgrXS0YHE1MaExdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOG + xdTDhsXU/6onD/+qNiX/p0I+/6dOVP+sVWX+r1t1+a9hhfGtZpTrqGuh5aJxrOGcerXdl4O92pKLw9iO + k8fVipvL1IeiztOFqtDSgrXS0YHE1MaExdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOG + xdTDhsXUw4bF1MOGxdTDhsXU/6onD/+qNiX/p0I+/6dOVP+sVWX+r1t1+a9hhfGtZpTrqGuh5aJxrOGc + erXdl4O92pKLw9iOk8fVipvL1IeiztOFqtDSgrXS0YHE1MaExdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOG + xdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXU/6onD/+qNiX/p0I+/6dOVP+sVWX+r1t1+a9hhfGt + ZpTrqGuh5aJxrOGcerXdl4O92pKLw9iOk8fVipvL1IeiztOFqtDSgrXS0YHE1MaExdTDhsXUw4bF1MOG + xdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXU/6onD/+qNiX/p0I+/6dOVP+s + VWX+r1t1+a9hhfGtZpTrqGuh5aJxrOGcerXdl4O92pKLw9iOk8fVipvL1IeiztOFqtDSgrXS0YHE1MaE + xdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXU/6onD/+q + NiX/p0I+/6dOVP+sVWX+r1t1+a9hhfGtZpTrqGuh5aJxrOGcerXdl4O92pKLw9iOk8fVipvL1IeiztOF + qtDSgrXS0YHE1MaExdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOG + xdTDhsXU/6onD/+qNiX/p0I+/6dOVP+sVWX+r1t1+a9hhfGtZpTrqGuh5aJxrOGcerXdl4O92pKLw9iO + k8fVipvL1IeiztOFqtDSgrXS0YHE1MaExdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOG + xdTDhsXUw4bF1MOGxdTDhsXU/6onD/+qNiX/p0I+/6dOVP+sVWX+r1t1+a9hhfGtZpTrqGuh5aJxrOGc + erXdl4O92pKLw9iOk8fVipvL1IeiztOFqtDSgrXS0YHE1MaExdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOG + xdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXU/6onD/+qNiX/p0I+/6dOVP+sVWX+r1t1+a9hhfGt + ZpTrqGuh5aJxrOGcerXdl4O92pKLw9iOk8fVipvL1IeiztOFqtDSgrXS0YHE1MaExdTDhsXUw4bF1MOG + xdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXU/6onD/+qNiX/p0I+/6dOVP+s + VWX+r1t1+a9hhfGtZpTrqGuh5aJxrOGcerXdl4O92pKLw9iOk8fVipvL1IeiztOFqtDSgrXS0YHE1MaE + xdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXUw4bF1MOGxdTDhsXU/6onD/+q + NiX/qEI+/6hOVP+uVGT8sVp0+bJghPKwZZPrrGqg5qdvq+Ggd7Xdm4C92pWIw9aRkcjUjZnM04mh0NKG + qtLQhLfUzIPE1sCIxNa+iMTWvojE1r6IxNa+iMTWvojE1r6IxNa+iMTWvojE1r6IxNa+iMTWvojE1r6I + xNa+iMTW/6snD/+rNiX/qEI+/6pNU/6xU2P6tFlz97ZfgvO1ZJHssWie5qxtquGmcrTdoHy82pqEw9aV + jcnUkJbO0oyf0tCIqtXPhbvXxIfC2bmKwtm3i8LZt4vC2beLwtm3i8LZt4vC2beLwtm3i8LZt4vC2beL + wtm3i8LZt4vC2beLwtm3i8LZ/6snD/+rNiX/qUI+/6xMUv2zU2L4t1hy9blegfS5Yo/ttmac57JqqOKt + b7Lep3e72qB/wtaaiMnTlJLO0Y+c08+KqtfMh7/avIrB27ONwdywjsHcsI7B3LCOwdywjsHcsI7B3LCO + wdywjsHcsI7B3LCOwdywjsHcsI7B3LCOwdywjsHc/6snD/+sNiX/qUI+/61MUvu1UmH2ulhw87xdf/G9 + YY3uvGWa6bhopeS0bK/frnG426d5wNeggsfQmY3Oy5OY1MWPpdnAjLjctI2/3qyQwN6qkcDdqpHA3aqR + wN2qkcDdqpHA3aqRwN2qkcDdqpHA3aqRwN2qkcDdqpHA3aqRwN2qkcDd/6wmDv+sNiX/qkI+/69LUfq2 + UWD0vFdv8b9cfu7BYYvuwGSY6r9no+W7aqzft2212LF2vdCnf8fIn4jPwpmT1buUn9q0kbLerJG+4KaT + v9+llL/fpZS/36WUv9+llL/fpZS/36WUv9+llL/fpZS/36WUv9+llL/fpZS/36WUv9+llL/f/6wmDv+t + NiX/qkI+/7BLUPm4UV/zvldu7sJcfOzEYInrxWKV6cRln+LDZ6jbwW2w0rZzvcmsfMfBpITPuZ6O1rKa + m9url63fpJe+4aCXvuCgl77goJe+4KCXvuCgl77goJe+4KCXvuCgl77goJe+4KCXvuCgl77goJe+4KCX + vuCgl77g/6wmDv+tNSX/q0I+/7FKUPe6UF7xwFZs7MVceunHXofnyWCS5cpim9/MZaPWxmmwzbtxvcOx + ece6qoHPsqSL1qqgl9uinqrgnJ294pqbvuGam77hmpu+4ZqbvuGam77hmpu+4ZqbvuGam77hmpu+4Zqb + vuGam77hmpu+4ZqbvuGam77h/60mDv+tNST/q0I+/7NKT/a7UF3vwlZr6sdbeOfKXITkzV6O4NFhltzU + YaDSymevx8BuvL23dse0sH7Pq6qH1qKnk9uZpabgk6O94pSfveKVnr7hlZ6+4ZWevuGVnr7hlZ6+4ZWe + vuGVnr7hlZ6+4ZWevuGVnr7hlZ6+4ZWevuGVnr7h/60mDv+uNST/q0I+/bRJTvS9UFztxVZp6MpaduTO + WoHg01yK29pgkNjaXp/Nz2SvwsZsvLi9c8aut3zPpLKF1ZuukNuSrKLgi6y94o6kveKPo77hj6O+4Y+j + vuGPo77hj6O+4Y+jvuGPo77hj6O+4Y+jvuGPo77hj6O+4Y+jvuGPo77h/60mDv+uNST/rEI+/LVJTfO/ + UFrrx1Zn5cxYc+DSWH3b2luE1eBnjNHeYZ/J1GKuvcxpu7LEccWovnnOnrqC1ZS2jdqKtZ7fg7e94oir + vuGJqb7hiam+4YmpvuGJqb7hiam+4YmpvuGJqb7hiam+4YmpvuGJqb7hiam+4YmpvuGJqb7h/64mDv+v + NST/rEI++7dJTPDBUFnoylZl4tBVb9zYVnfV4GZ70ORri8vjZ57D3GKtuNNnuqzMbsShx3bNl8N+043B + idmCwZvee8W+4IG0vuCDsL7gg7C+4IOwvuCDsL7gg7C+4IOwvuCDsL7gg7C+4IOwvuCDsL7gg7C+4IOw + vuCDsL7g/64mDv+vNST/rUI++LlISu7ET1blzVRh3tVSatbfXW/Q5Wd8y+hqjsXobJ284mmssdtluaXV + asOa0HLLj8570YbNh9d9y5jbd8qx3nu/wN58u8DefLvA3ny7wN58u8DefLvA3ny7wN58u8DefLvA3ny7 + wN58u8DefLvA3ny7wN58u8De/68mDv+wNST/r0E99rxISOrIT1Ph0VBc2dxSYtHkYWzL6WWBxe1okr7p + aqG142quqt5puJ/ZbsGV1XTJjNJ8zoTPhdN9zZLXeMyk2XbMvtp2ycHadsnB2nbJwdp2ycHadsnB2nbJ + wdp2ycHadsnB2nbJwdp2ycHadsnB2nbJwdp2ycHa/7AmDf+xNST/skE78sBIRubMT07c10xV0+JbWczo + YHHG7mSFv+9nlrboaqWs4mewod1puZfZbsGP1nXHiNN8y4HRhM980I7Sd8+b1XXOr9V2zrbVds621XbO + ttV2zrbVds621XbOttV2zrbVds621XbOttV2zrbVds621XbOttV2zrbV/7EmDf+yNSP8tkA57sRHQeHR + S0jV31FJzudbXsfuYHa/82SKuO1omq3nZaei4mWxmd1puZDab7+J2HXEhNV7x3/Ugsp60orNdtGUz3PR + otFy0afRctGn0XLRp9Fy0afRctGn0XLRp9Fy0afRctGn0XLRp9Fy0afRctGn0XLRp9Fy0afR/rIlDf60 + NSP3uj8158pGO9raQz3P5VRJyO1bZMD0YHq59GaNruxkm6TnY6eZ4mSvkd9ptorcb7uE2nS/gNl6wnzX + f8V41obHdNWOyXHUmctw1JzLcNScy3DUnMtw1JzLcNScy3DUnMtw1JzLcNScy3DUnMtw1JzLcNScy3DU + nMtw1JzL/LQlDPy2NSPxwT4v4NJEMdLiTTPJ61VPwfNbabn5Yn2v82GOpe1gm5roYaWR5GSsiuFpsoTf + brZ/3XS5fNx4vHjbfb512oPActmJwW/YkcNu2JTDbtiUw27YlMNu2JTDbtiUw27YlMNu2JTDbtiUw27Y + lMNu2JTDbtiUw27YlMNu2JTD+rYlC/m4NSLoyTwm1t1AIsvpTjnC81ZVuvpdbLD7Xn+l9F2Nm+5emJHq + YKGJ52OnguRoq37iba964XKxd+B2s3Xfe7Vy3n+3b96EuG3di7ps3Y26bN2Numzdjbps3Y26bN2Numzd + jbps3Y26bN2Numzdjbps3Y26bN2Numzdjbps3Y2697kkCvK/NBzd1TcYzuZGI8TxUD+7+lhYsP9YbaX8 + WH2b9VmKkfFck4ntX5qC6mOffOhno3jnbKZ15nCoc+V0qnDkeKtu5HytbOOArmriha9p4oewaeKHsGni + h7Bp4oewaeKHsGnih7Bp4oewaeKHsGnih7Bp4oewaeKHsGnih7Bp4oew870jCebLLRDR4jwPxu9JKbz5 + UUOx/1FZpf9Sa5r+VHmQ+VeDiPVai4HyX5F772OVdu5mmXLtaptw7G6dbutxnmzqdaBq6nihaOl8omfo + gKNm6IGkZuiBpGbogaRm6IGkZuiBpGbogaRm6IGkZuiBpGbogaRm6IGkZuiBpGbogaRm6IGk7sIhB9bc + JALI7EEUvfhILbH/SESl/0pXmv9NZpD/UXKH/VR7f/pZgXn3XYZ09WGKcPRljW3zaY9r8myQavFvkWjx + cpJn8HWTZfB4lWPve5Zj73yWY+98lmPvfJZj73yWY+98lmPvfJZj73yWY+98lmPvfJZj73yWY+98lmPv + fJZj73yW4NEMAMrpKwW+9z0Zsv9AL6b/QEKa/0VSj/9JX4b/TWh+/1Jwd/9XdnL+XHpt/GB9avtjf2j6 + Z4Fm+WqCZflsg2T4boRi+HGFYfdzhl/3dodf93eHX/d3h1/3d4df93eHX/d3h1/3d4df93eHX/d3h1/3 + d4df93eHX/d3h1/3d4df93eHzdkHAL/1Kwiz/zYapv84LZr/Oj2P/z9Khf9FVXz/Sl11/09kb/9VaGv/ + WWxn/11vZf9hcGP/ZHJh/2ZzYP9odF7/anVd/2x2XP9udlv/cXda/3J4Wv9yeFr/cnha/3J4Wv9yeFr/ + cnha/3J4Wv9yeFr/cnha/3J4Wv9yeFr/cnha/3J4/6IiCv+jMR7/oD41/59KSv+lUVn/p1do/6ded/mk + ZIXyn2qS7ZlxneiTeabljoOt4omMs+CFlLfegZy73H6kvdt7rMDbebXB2ne/w9l2zMTOec7EyHzOxMh8 + zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7E/6IiCv+jMR7/oD41/59KSv+l + UVn/p1do/6ded/mkZIXyn2qS7ZlxneiTeabljoOt4omMs+CFlLfegZy73H6kvdt7rMDbebXB2ne/w9l2 + zMTOec7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7E/6IiCv+j + MR7/oD41/59KSv+lUVn/p1do/6ded/mkZIXyn2qS7ZlxneiTeabljoOt4omMs+CFlLfegZy73H6kvdt7 + rMDbebXB2ne/w9l2zMTOec7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8 + zsTIfM7E/6IiCv+jMR7/oD41/59KSv+lUVn/p1do/6ded/mkZIXyn2qS7ZlxneiTeabljoOt4omMs+CF + lLfegZy73H6kvdt7rMDbebXB2ne/w9l2zMTOec7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8 + zsTIfM7EyHzOxMh8zsTIfM7E/6IiCv+jMR7/oD41/59KSv+lUVn/p1do/6ded/mkZIXyn2qS7ZlxneiT + eabljoOt4omMs+CFlLfegZy73H6kvdt7rMDbebXB2ne/w9l2zMTOec7EyHzOxMh8zsTIfM7EyHzOxMh8 + zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7E/6IiCv+jMR7/oD41/59KSv+lUVn/p1do/6ded/mk + ZIXyn2qS7ZlxneiTeabljoOt4omMs+CFlLfegZy73H6kvdt7rMDbebXB2ne/w9l2zMTOec7EyHzOxMh8 + zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7E/6IiCv+jMR7/oD41/59KSv+l + UVn/p1do/6ded/mkZIXyn2qS7ZlxneiTeabljoOt4omMs+CFlLfegZy73H6kvdt7rMDbebXB2ne/w9l2 + zMTOec7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7E/6IiCv+j + MR7/oD41/59KSv+lUVn/p1do/6ded/mkZIXyn2qS7ZlxneiTeabljoOt4omMs+CFlLfegZy73H6kvdt7 + rMDbebXB2ne/w9l2zMTOec7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8zsTIfM7EyHzOxMh8 + zsTIfM7E/6MhCv+jMR7/oT41/6FJSf+nUFj/qlZn/6pcdvmnYoTzo2iR7Z1vnOmWdqXlkYCt4oyJs9+H + krjdg5u83H+jv9p8rMLZerbE2XjCxdR4zcbJfM3Gw37NxsN+zcbDfs3Gw37NxsN+zcbDfs3Gw37NxsN+ + zcbDfs3Gw37NxsN+zcbDfs3G/6MhCv+kMR3/oT41/6NISP+pT1f/rVVm/65bdfqsYIP0qWaP7qNsm+mc + cqXllnut4ZCFtN6Ljrrchpi+2oGhwtl+rMXYe7jH1nnIyMx8y8nBgMvJvIHLyryBy8q8gcvKvIHLyryB + y8q8gcvKvIHLyryBy8q8gcvKvIHLyryBy8q8gcvK/6QhCv+kMR3/oj01/6VHR/+sTlb/sFRk/LJac/ux + X4H1rmSN76lpmeqibqPlm3Ws4ZWAtN6PirrciZS/2YSfxNh/rMfVfLrK0XzKy8SAysy6g8nMtYTJzbWE + yc21hMnNtYTJzbWEyc21hMnNtYTJzbWEyc21hMnNtYTJzbWEyc21hMnN/6QhCv+lMR3/oz01/6dHR/+u + TVX9s1Nj+rVYcfi1XX/2s2KL8K9ml+upa6HlonGq4Jt7s9uUhbrWjpDA0Yibxc2Ep8nKgbTMx4DGzruD + yM+zhsjPr4fIz6+HyM+vh8jPr4fIz6+HyM+vh8jPr4fIz6+HyM+vh8jPr4fIz6+HyM+vh8jP/6UhCv+l + MR3/oz01/6hGRv+wTFT6tVNi97hYb/W5XXzzuGGJ7bRllOevaZ/hqW6o26J4sNSagrnOk4zByY2Wx8SJ + ocvAhq/OvIXB0LSHx9GsicfRqYrH0amKx9GpisfRqYrH0amKx9GpisfRqYrH0amKx9GpisfRqYrH0amK + x9GpisfR/6UhCf+mMR3/pD01/6pGRf6yTFP4t1Jg9LtYbvK8XHrwvGCG6bpkkeO2Z5vdsW2l1ah2r86f + f7nHmIjBwZKSx7yOncy3i6rQs4m80qyKxdOnjMbTpI3G0qSNxtKkjcbSpI3G0qSNxtKkjcbSpI3G0qSN + xtKkjcbSpI3G0qSNxtKkjcbS/6UhCf+mMR3/pD01/6tFRP20TFL3uVJf8r5XbO/AXHjtwGCE58BjjuC9 + ZpjZt2yi0Kx0r8ikfLnBnIXBupePyLSSms2vj6bRq46406WOxdWhj8XUn5DF05+QxdOfkMXTn5DF05+Q + xdOfkMXTn5DF05+QxdOfkMXTn5DF05+QxdOfkMXT/6YhCf+nMR3/pD01/6xFRPu1TFH1u1Jd8MBXauzD + XHbqxV+B5MViit3EZZPUu2mizLFxr8Ooebm7oILBtJuLyK6Xls2olKPRo5O11J+TxNack8TVm5PF1JuT + xdSbk8XUm5PF1JuTxdSbk8XUm5PF1JuTxdSbk8XUm5PF1JuTxdSbk8XU/6YhCf+nMR3/pT01/65FQ/q3 + S0/zvVJc7cNXaOnGW3PmyV594stghtrJYZHQv2ihx7Vvrr6sd7m2pX/Brp+IyKeck86hmqDSnJmy1ZiY + xNeXlsTWlpbF1ZaWxdWWlsXVlpbF1ZaWxdWWlsXVlpbF1ZaWxdWWlsXVlpbF1ZaWxdWWlsXV/6YhCf+n + MR3/pT01/69FQvi4S07xwFFa68ZXZebKWnDjzVt539JegNbNXpHMw2ahw7ltrrmxdbmwqnzBqKWFyKGi + kM6aoJ3SlZ+u1ZCew9eRmsTWkZnE1ZGZxNWRmcTVkZnE1ZGZxNWRmcTVkZnE1ZGZxNWRmcTVkZnE1ZGZ + xNWRmcTV/6chCf+oMR3/pj01/7BFQfa6S03vwlFY6MlWY+PNWGzf01lz29lZfdLRXJDIyGOgvr5rrbS3 + criqsHrBoquDyJqojc6TppnSjaar1Yilw9eKn8TXjJ3E1YydxNWMncTVjJ3E1YydxNWMncTVjJ3E1Yyd + xNWMncTVjJ3E1YydxNWMncTV/6cgCf+oMR3/pj01/7JEQPS8S0vsxVFW5cxVX+DSVWfa21lr1d5bfM7W + Wo/DzWGfucRora6+cLekt3fAm7OAx5Ovic2MrZXRha6n1YCvw9eDpsTWhqPE1YajxNWGo8TVhqPE1Yaj + xNWGo8TVhqPE1YajxNWGo8TVhqPE1YajxNWGo8TV/6ggCf+pMR3/qD00/bREP/K/SknpyFBS4tBSWtvZ + Ul/U4WJkz+Nge8ncW46+01+es8tmrKjFbbaewHS/lLt8xoy4hsyEt5LQfbik1He7xNV8r8TVf6rF1H+q + xdR/qsXUf6rF1H+qxdR/qsXUf6rF1H+qxdR/qsXUf6rF1H+qxdR/qsXU/6ggCf+pMRz/qjwz+rdDPe/C + SkblzFBO3dZOU9XgXFXP5WVkyudmesLiY424212drNNiqqHNabWXyXG9jcZ5xITEg8p9w4/OdcWh0W/J + wtN1usbTeLPG03izxtN4s8bTeLPG03izxtN4s8bTeLPG03izxtN4s8bTeLPG03izxtN4s8bT/6kgCf+q + MBz/rDwx97pDOuvGSULh0UxH191QSdDkXlXK6WNpxOtne7znaYuy4mSbpd1hqJrYZrKP1G27htJ2wX3R + gMZ10Y3Kb9KezWvRt89uycjPcb/H0HG/x9Bxv8fQcb/H0HG/x9Bxv8fQcb/H0HG/x9Bxv8fQcb/H0HG/ + x9Bxv8fQ/6ogCP+rMBz/sDsv875CNubLSDzb2UY+0eNXRMvpXVvE72Nvve5mgbTrZpCp6GKdnuVip5Li + ZbCJ3m23gdt1vXrZf8J014nFb9WWyGzUqMlq1MLJas7Ky2rOystqzsrLas7Ky2rOystqzsrLas7Ky2rO + ystqzsrLas7Ky2rOystqzsrL/6sgCP+tMBz9tDss7sNBMeDSRTTU4E8xzOhXSsXvXWC+9WJ0tfNkhavx + YJOg62CeleZip4vjZq+E4G61fd11uXjbfb1z2oW/b9mPwmvYnMRp167FaNe+xGjXvsRo177EaNe+xGjX + vsRo177EaNe+xGjXvsRo177EaNe+xGjXvsRo177E/60fCP+uMBv4uTon58o/KtjbQCfO5lA3xu5YT771 + XmW2+mB4rPdeh6HwXZSW61+ejedipYXkZ6t+4m6weeB0tHXfe7dx3YK5btyJu2vbk71o26C+Ztqqv2ba + qr9m2qq/Ztqqv2baqr9m2qq/Ztqqv2baqr9m2qq/Ztqqv2baqr9m2qq//68fB/+xMBvwwDch3tM7HtDj + SCPH7VI8v/VZVbf8XGms/Vp6ovZaiJfxXJKO7V6bhulioX7nZ6Z65W2qdeNzrXLiea9v4X6xbOCFs2nf + jLVn35a2Zd6dt2Xenbdl3p23Zd6dt2Xenbdl3p23Zd6dt2Xenbdl3p23Zd6dt2Xenbdl3p23/7EeBvu1 + LxjnyjMW1N89EMnrSinA9FNCt/xXWK3/VWui/VZ6mPdYho7zW4+G716Wf+1jm3nqZ5906W2icehypW/n + d6ds5nuoauWAqmfkhqtl442tY+OTrmPjk65j45OuY+OTrmPjk65j45OuY+OTrmPjk65j45OuY+OTrmPj + k65j45Ou/LQdBvHAKw/a2CgJzOhCFsHzTS63/FBGrf9PWqL/UWqX/1N3jvpWgYb2Wol+816OefFjk3Pv + Z5Zw7myZbe1wm2vsdJxp63ieZ+t8n2XqgaBj6YeiYemLo2Hpi6Nh6YujYemLo2Hpi6Nh6YujYemLo2Hp + i6Nh6YujYemLo2Hpi6Nh6Yuj97kbBePNHgTO5TEGw/FDG7j8SDKt/0hHof9JWJf/TWaN/1Bxhf5Uen36 + WYB3+F2FcvZiiG71Zotr9GqNafNuj2fycZBm8XWSZPF4k2LwfJRg8IGVX++Ell/vhJZf74SWX++Ell/v + hJZf74SWX++Ell/vhJZf74SWX++Ell/vhJZf74SW7sITAdPfDQDE8DMKufs+H63/QTOh/0FFlv9FVIz/ + SWCD/05pfP9TcHb/WHVw/lx5bPxgfGn7ZH5n+miAZflrgmP5boNi+HGEYPh0hV73d4Zd93uHW/Z+iFv2 + fohb9n6IW/Z+iFv2fohb9n6IW/Z+iFv2fohb9n6IW/Z+iFv2fohb9n6I0cwFAMbuGAG5+zAOrf83IKH/ + OTGV/ztAi/9ATYL/Rld6/0tec/9RZG7/VWlp/1psZv9eb2T/YnFh/2VyYP9oc17/anRd/211W/9vdlr/ + cndZ/nV4V/54eVf+eHlX/nh5V/54eVf+eHlX/nh5V/54eVf+eHlX/nh5V/54eVf+eHlX/nh5xdIDALr6 + GgKu/yoPov8vHpX/MSyK/zU5gP88Q3j/Qkxx/0hSa/9NV2b/Ultj/1deYP9bYF7/XmFc/2FjWv9jZFn/ + ZWVX/2dmVv9qZlX/bGdU/29oU/9xaVP/cWlT/3FpU/9xaVP/cWlT/3FpU/9xaVP/cWlT/3FpU/9xaVP/ + cWlT/3Fp/5kcBv+aLRf/mDos/5dGP/+cTU7/n1Rc/55bav+bYnf6lmmD9ZBwjfCJeZbthIOd6oCNo+h7 + lqfmeJ6q5XWmreRyrq/jcLew4m7AsuJtyrPfbdSz1HHYtM502LPOdNizznTYs8502LPOdNizznTYs850 + 2LPOdNizznTYs8502LPOdNiz/5kcBv+aLRf/mDos/5dGP/+cTU7/n1Rc/55bav+bYnf6lmmD9ZBwjfCJ + eZbthIOd6oCNo+h7lqfmeJ6q5XWmreRyrq/jcLew4m7AsuJtyrPfbdSz1HHYtM502LPOdNizznTYs850 + 2LPOdNizznTYs8502LPOdNizznTYs8502LPOdNiz/5kcBv+aLRf/mDos/5dGP/+cTU7/n1Rc/55bav+b + Ynf6lmmD9ZBwjfCJeZbthIOd6oCNo+h7lqfmeJ6q5XWmreRyrq/jcLew4m7AsuJtyrPfbdSz1HHYtM50 + 2LPOdNizznTYs8502LPOdNizznTYs8502LPOdNizznTYs8502LPOdNiz/5kcBv+aLRf/mDos/5dGP/+c + TU7/n1Rc/55bav+bYnf6lmmD9ZBwjfCJeZbthIOd6oCNo+h7lqfmeJ6q5XWmreRyrq/jcLew4m7AsuJt + yrPfbdSz1HHYtM502LPOdNizznTYs8502LPOdNizznTYs8502LPOdNizznTYs8502LPOdNiz/5kcBv+a + LRf/mDos/5dGP/+cTU7/n1Rc/55bav+bYnf6lmmD9ZBwjfCJeZbthIOd6oCNo+h7lqfmeJ6q5XWmreRy + rq/jcLew4m7AsuJtyrPfbdSz1HHYtM502LPOdNizznTYs8502LPOdNizznTYs8502LPOdNizznTYs850 + 2LPOdNiz/5kcBv+aLRf/mDos/5dGP/+cTU7/n1Rc/55bav+bYnf6lmmD9ZBwjfCJeZbthIOd6oCNo+h7 + lqfmeJ6q5XWmreRyrq/jcLew4m7AsuJtyrPfbdSz1HHYtM502LPOdNizznTYs8502LPOdNizznTYs850 + 2LPOdNizznTYs8502LPOdNiz/5ocBv+aLRf/mDos/5dGP/+dTU3/oFNc/59aav+cYXf6l2iD9ZFwjfCK + eJbthYKd6oCMo+h8lafmeJ2r5XWlruNzrrDjcLex4m/As+Fty7TdbtS003LXtMx117TMdde0zHXXtMx1 + 17TMdde0zHXXtMx117TMdde0zHXXtMx117TMdde0/5ocBv+bLRf/mTos/5pFPv+gS0z/o1Ja/6NYaP+h + X3X7nWWC9ZdsjfCQdJbsin6e6YSIpOd/kanle5ut43eksOJ0rrPhcri14HDEtuBv0bfVctW3y3fVt8R4 + 1bjEeNW4xHjVuMR41bjEeNW4xHjVuMR41bjEeNW4xHjVuMR41bjEeNW4/5scBv+cLRf/mjks/51EPf+j + Skv/p1BZ/6hWZv+mXHT7omKA9pxpi/GWcJXtjnme6YmEpeaDjqrkfpiv4nmis+F2rbXfc7q433HJudly + 07rNdtO6w3nTu71707u9e9O7vXvTu71707u9e9O7vXvTu71707u9e9O7vXvTu71707u9e9O7/5wcBv+d + LBf/mjks/59DPP+mSUr/qlBX/6tWZP6qW3L4p2F+86Jnie+bbZTqlHSd5o1/pOOHiqvggpSw3H2ftdp5 + q7jWdre61HXGvNB10r3FetK9vHzRvrd90b63fdG+t33Rvrd90b63fdG+t33Rvrd90b63fdG+t33Rvrd9 + 0b63fdG+/5wcBv+dLBf/mzks/6FCO/+oSUj/rU9V/q9VY/uuWm/1rF9876dlh+qha5LlmnGb4JN8pNyN + hqvYh5Cx04KbttB+prrNe7K9ynnAv8h40MC+fNDAtn/QwbGA0MGxgNDBsYDQwbGA0MGxgNDBsYDQwbGA + 0MGxgNDBsYDQwbGA0MGxgNDB/50bBv+eLBf/nDks/6JCO/+qSEf/r09U/LJUYfiyWW3ysF557K1jhean + aI/hoHCZ25l5otWSg6rQjI2yzIaXt8iCobzEf62/wX27wb98zMK2f8/Dr4HPw6uDz8Krg8/Cq4PPwquD + z8Krg8/Cq4PPwquDz8Krg8/Cq4PPwquDz8Krg8/C/50bBv+eLBb/nDks/6RBOv+sSEb9sU5S+bRUX/W2 + WWvvtV136LJiguKtZozcp26W1Z93oc+XgKvKkImyxYuTuMCGnb28g6nBuIG3w7aAyMSvgs3FqoTOxaaF + zsSmhc7EpoXOxKaFzsSmhc7EpoXOxKaFzsSmhc7EpoXOxKaFzsSmhc7E/50bBv+fLBb/nTks/6VBOf+u + SEX7tE5R97dTXfO5WGjsuVx05bdgft+0ZInYrWyU0KN0ocqbfavDlIazvo+PubmLmb60h6XCsIWzxa2E + xMaohczHpIfNxqGIzcWhiM3FoYjNxaGIzcWhiM3FoYjNxaGIzcWhiM3FoYjNxaGIzcWhiM3F/54bBv+f + LBb/nTks/6dBOP+vR0T5tk1P9LpTW/C9V2bpvltw4r1fety7Y4TUsWqTzKdyoMSfequ9mIOzt5OMurKP + lr+tjKHDqYqvxqWJwMihiczInorMx5yLzMeci8zHnIvMx5yLzMeci8zHnIvMx5yLzMeci8zHnIvMx5yL + zMeci8zH/54bBv+fLBb/njks/6hAN/6xR0L3uE1N8r1SWO3AV2Pnw1ps4MNedtm/YIPPtWiTx6xwoL+j + eKu4nYCzsZiJuquUk7+mkZ7EoY+sx56OvcmajcvJmI7LyZiOzMiYjszImI7MyJiOzMiYjszImI7MyJiO + zMiYjszImI7MyJiOzMiYjszI/54bBv+gLBb/njks/6pANvyzR0H1ukxL78BRVurEVl/kyFpo3spccNTD + XoLMuWaSw7BtoLqodaqyoX2zq5yGuqWZkMCflpvEmpSpx5aTusqTk8rKk5HLyZORy8iTkcvIk5HLyJOR + y8iTkcvIk5HLyJORy8iTkcvIk5HLyJORy8iTkcvI/58bBf+gLBb/nzkr/6tANfq1Rj/yvUxJ7MNRU+fJ + VVvizVhi289WbtHGXILHvWSSvrRrn7Wtc6qtpnqzpaGDup+ejcCZnJjEk5qmyI+Zt8qMmMrLjZbKyo6U + y8mOlMvJjpTLyY6Uy8mOlMvJjpTLyY6Uy8mOlMvJjpTLyY6Uy8mOlMvJ/58bBf+hLBb/oTkq/60/NPi3 + Rj7wwEtH6cdQT+PNU1be01Vb1tNTbs3KW4HDwWKRurlpnrCycKmnrHiyn6iAupikisCSoZXEjKCiyIef + tMqEn8rLhpvKyoiZy8mImcvJiJnLyYiZy8mImcvJiJnLyYiZy8mImcvJiJnLyYiZy8mImcvJ/6AbBf+h + LBb/ojgq/68/M/a6RTvtw0tE5ctPSt/SUE/a21FW09dRbMnPWYC/x2CQtb9nnqu4bqmis3Wyma59uZGr + hr+KqJHEhaifx4Cnscp8qMrLf6HKyoKey8mCnsvJgp7LyYKey8mCnsvJgp7LyYKey8mCnsvJgp7LyYKe + y8mCnsvJ/6AaBf+iLBb/pDgp/rE+MfO9RDnpx0o/4dBNRNraTUbT31ZVztxTa8TUVn+6zV2Pr8ZknKXA + a6ebunKxk7Z6uIqzg76DsY7DfbGbxnixrslzs8rKeKnLyXuly8h7pcvIe6XLyHuly8h7pcvIe6XLyHul + y8h7pcvIe6XLyHuly8h7pcvI/6EaBf+jLBb/pzcn/LQ+L/DAQzXly0g63NZIPNTgWjrO5FtTx+Faar/b + Vn2001uNqc1hm57IaKaVw2+vi8B3toO+gLx8vIvAdbyYxHC9q8Zrv8nIcLTMx3StzMd0rczHdK3Mx3St + zMd0rczHdK3Mx3StzMd0rczHdK3Mx3StzMd0rczH/6IaBf+kLBX/qjcl+Lg9LOvFQjDg0UYy1t5OMM/k + WT/J6V9SweZhZ7nhXnut3FqLotZemJfRZaONzmyshMt0s3zKfbl1yYi9bsqWwGnLqcNkzcjEacLOxGy5 + zsRsuc7EbLnOxGy5zsRsuc7EbLnOxGy5zsRsuc7EbLnOxGy5zsRsuc7E/6MaBf+lLBX/rTYj9Lw8J+bL + QCnZ2j8n0ONSMMnpWUXC7F9Yu+pjarLnYnqn5GCJm+BflZDdY6CG22mofdlxr3XZerRu2Ya4aNqUu2Tb + pr1g27++Y9LRvmbH0b9mx9G/ZsfRv2bH0b9mx9G/ZsfRv2bH0b9mx9G/ZsfRv2bH0b9mx9G//6QZBP+m + KxX+sjQf7sI5Id/SPSDS4UkgyulSNcPwWUu88V9es+9eb6jsXX6d6lyLk+lelYjnYZ5+52ekd+VvqnHj + ea5s4YOyaOCOtGXfmrZi3qu3YN7Ft2DY1Lhg2NS4YNjUuGDY1Lhg2NS4YNjUuGDY1Lhg2NS4YNjUuGDY + 1Lhg2NS4/6YZBP+oKxT4uDIa5so2GdbdPBLM50slxO9UO7z2WlCz9lpjqfRZc57zWYCU81qLivBdlIHt + Ypt56megdOhvpG/md6hr5X+rZ+OIrWTika9h4p2wX+GusV3hwLJd4cCyXeHAsl3hwLJd4cCyXeHAsl3h + wLJd4cCyXeHAsl3hwLJd4cCy/6gYBP+sKhPwwC4S3dQuDc7kQRTF7k0qvfZVQbP7VVWp/FVmn/xUdJT7 + VYCL9lmJg/JdkHvvYpZ07WiacOtunWzqdaBp6XyjZuiDpWPniqZh5pOoXuWfqVzlq6pc5auqXOWrqlzl + q6pc5auqXOWrqlzlq6pc5auqXOWrqlzlq6pc5auq/6sXA/u1JgzlyyYI0uAyBsfsRRm99k0wtP5PRan/ + T1ef/09mlP9Rc4v8VHyD+FmEfPVeinXzYo9w8WiSbPBulWnuc5dm7XmZZO1+m2LshJ1f64ueXeqUoFvq + nKFb6pyhW+qcoVvqnKFb6pyhW+qcoVvqnKFb6pyhW+qcoVvqnKFb6pyh/64VAvDAHQTY2xEAyeo2Cr71 + Qx+0/0g0qf9JR57/SVeU/0tkiv9PboL/VHd7/Fh9dfldgnD4YoVs9meIafVsi2b0cY1k83WPYfJ6kGDy + fpFd8YSTW/CLlFnvkZVZ75GVWe+RlVnvkZVZ75GVWe+RlVnvkZVZ75GVWe+RlVnvkZVZ75GV/LMTAdfN + BwDL6BwBv/U2D7T/PiKp/0E1nv9CRpP/RFSJ/0lfgf9OZ3r/U250/1hzbv9cd2r9YXtn/GZ9ZPtqf2L6 + boFg+XKCXvl1g1z4eYVb936GWPeDh1f2iIhX9oiIV/aIiFf2iIhX9oiIV/aIiFf2iIhX9oiIV/aIiFf2 + iIhX9oiI1b8DAMvTBgC/9CEDtP8yEqn/OCOd/zo0kv89Qoj/QE5//0ZXeP9MXnL/UWRs/1ZoaP9ba2X/ + X25i/2NwYP9ncl7/anNc/210Wv9wdVn/dHZX/3d4Vf58eVP+gHpT/oB6U/6AelP+gHpT/oB6U/6AelP+ + gHpT/oB6U/6AelP+gHpT/oB6ycUCAMDZBAC0/yAFqf8sEp3/MSGR/zQvh/83O33/PUV2/0NNb/9JU2r/ + Tldl/1NbYf9YXl//XGBc/2BiWv9jY1j/ZmRX/2hlVf9rZlT/bmdS/3FoUf91aU//eGpP/3hqT/94ak// + eGpP/3hqT/94ak//eGpP/3hqT/94ak//eGpP/3hqwM8BALTwCQCo/xsFnP8lEJH/KR2G/y0ofP8xMnP/ + ODps/z9BZ/9FRmL/S0pe/09NW/9UT1j/V1FW/1tSVP9eU1L/YFRR/2NVUP9lVk7/aFdN/2pYS/9uWUr/ + cVpK/3FaSv9xWkr/cVpK/3FaSv9xWkr/cVpK/3FaSv9xWkr/cVpK/3Fa/5AZBP+QKRH/jjYk/45DNf+T + SUL/lVFQ/5RYXf+RYGn/jGh0/IZwfvh/eob1e4SN8naOkvByl5bvbqCZ7myom+1psZ3sZ7mf62bDoOtl + zaHpZNmi4mbdotlq4KLSbeGi0m3hotJt4aLSbeGi0m3hotJt4aLSbeGi0m3hotJt4aLSbeGi/5AZBP+Q + KRH/jjYk/45DNf+TSUL/lVFQ/5RYXf+RYGn/jGh0/IZwfvh/eob1e4SN8naOkvByl5bvbqCZ7myom+1p + sZ3sZ7mf62bDoOtlzaHpZNmi4mbdotlq4KLSbeGi0m3hotJt4aLSbeGi0m3hotJt4aLSbeGi0m3hotJt + 4aLSbeGi/5AZBP+QKRH/jjYk/45DNf+TSUL/lVFQ/5RYXf+RYGn/jGh0/IZwfvh/eob1e4SN8naOkvBy + l5bvbqCZ7myom+1psZ3sZ7mf62bDoOtlzaHpZNmi4mbdotlq4KLSbeGi0m3hotJt4aLSbeGi0m3hotJt + 4aLSbeGi0m3hotJt4aLSbeGi/5AZBP+QKRH/jjYk/45DNf+TSUL/lVFQ/5RYXf+RYGn/jGh0/IZwfvh/ + eob1e4SN8naOkvByl5bvbqCZ7myom+1psZ3sZ7mf62bDoOtlzaHpZNmi4mbdotlq4KLSbeGi0m3hotJt + 4aLSbeGi0m3hotJt4aLSbeGi0m3hotJt4aLSbeGi/5AZBP+QKRH/jjYk/45DNf+TSUL/lVFQ/5RYXf+R + YGn/jGh0/IZwfvh/eob1e4SN8naOkvByl5bvbqCZ7myom+1psZ3sZ7mf62bDoOtlzaHpZNmi4mbdotlq + 4KLSbeGi0m3hotJt4aLSbeGi0m3hotJt4aLSbeGi0m3hotJt4aLSbeGi/5AYBP+QKRH/jjYk/49CNP+V + SEL/l1BP/5dXXP+UXmn/j2Z0/IhufviBd4b1fIKN8niMk/BzlpfucJ+a7W2nnexqsJ/raLqh6mbEoupl + z6PnZdqj3mjdpNVs4KTPb+Ckz2/gpM9v4KTPb+Ckz2/gpM9v4KTPb+Ckz2/gpM9v4KTPb+Ck/5EYBP+R + KRH/jzYk/5JANP+YR0H/m05O/5tVW/+ZXGf/lGNz/Y5rffiHc4b0gH6O8XuJlO92kpntcpyd626moOpr + sKLpabuk6WfHpehm1abgaNun1mzep81w36fHct6ox3LeqMdy3qjHct6ox3LeqMdy3qjHct6ox3LeqMdy + 3qjHct6o/5IYBP+SKBH/kDYk/5U/M/+bRj//n01M/59UWf+dWmb9mWFx+JNofPSMcIbxhXqO7oCFlex6 + j5rpdZmf53GjouVurqXkbLmn4mrGqOFp1KnZbNyqz3HdqcZz3avBdNyrwXTcq8F03KvBdNyrwXTcq8F0 + 3KvBdNyrwXTcq8F03KvBdNyr/5IYBP+TKBH/kTYk/5c/Mv+eRj7/okxL/6NTV/6hWWT4nl9w9Jhme++S + bYXri3eO6IWBleV/i5viepWg4HafpN1yqqfbb7ap2W7Dq9ht0qzRcNysyHPbrcB12667d9uuu3fbrrt3 + 2667d9uuu3fbrrt32667d9uuu3fbrrt32667d9uu/5MXBP+UKBH/kjYk/5k+Mf+gRT3/pUxJ/6ZSVful + WGL1ol5u8J1keeuXa4PmkHSM44p+ld+EiJvbf5Kh2HqcptV2pqnSc7Ks0HG/rs5xzq/KctqvwXbasLp4 + 2bC1edmxtXnZsbV52bG1edmxtXnZsbV52bG1edmxtXnZsbV52bG1edmx/5MXBP+UKBH/kjYk/5s+MP+j + RTv/p0tH/qpRU/epV1/xp1xr7KNiduadaIHhlnGL3ZB7k9iJhZvTg46i0H6Yp8x6oqvJd62ux3W6scV1 + ybLCddiyunjYs7N62LOve9izr3vYs6972LOve9izr3vYs6972LOve9izr3vYs6972LOve9iz/5QXBP+V + KBH/kzYk/509L/+lRDr/qkpF/K1QUfStVV3urFto6Khgc+KjZn7dnG+I15V5ktGOgZzNiIqjyIOUqcR/ + na3BfKixvnq1s7x4xLS6eNa1s3vWta191rWpfta1qX7Wtal+1rWpfta1qX7Wtal+1rWpfta1qX7Wtal+ + 1rWpfta1/5QXA/+VKBH/lDYk/589Lv+nQzn/rUlE+bBPT/GxVFrrsVll5K5ecN6pZHrYom2G0Zp2ksuS + fpzGjYekwYeQqr2Dmq+5gKSytn6xtbN8wLexfNG3rH7Vt6eA1bekgdW3pIHVt6SB1bekgdW3pIHVt6SB + 1bekgdW3pIHVt6SB1bekgdW3/5UXA/+WKBH/lTUj/6E8Lf+pQzf+r0lC9rNOTO+1U1fotVhh4bRca9uw + Y3bTp2uFzJ5zksaXe5zAkYSkuoyMq7aIlrCxhKG0roKtt6uBvLiogM65pYLUuaGD1LmfhNS4n4TUuJ+E + 1LifhNS4n4TUuJ+E1LifhNS4n4TUuJ+E1LifhNS4/5UWA/+WKBH/lzUj/6M8LP+rQjb7skg/9LZNSey5 + UlPlulZd3rpaZte0YHXPq2iFx6JwksCbeJy6lYGktJCJq6+Mk7CqiZ21poepuKOFuLqghcq7noXTu5uG + 07qah9S5mofUuZqH1Lmah9S5mofUuZqH1Lmah9S5mofUuZqH1Lmah9S5/5UWA/+XKBH/mDUi/6Q7K/+t + QjT5tEc98rpMRum9UU/iwFVY3MBXYtO3XnTLr2aEw6dukbufdpy0mX6krpSGq6mRkLGkjpq1n4umuZyK + tbuZice8l4rSvJWK07uVitO6lYrTupWK07qVitO6lYrTupWK07qVitO6lYrTupWK07qVitO6/5YWA/+X + KBD/mjQh/6Y7Kv+vQTP3t0Y7771LQ+fCT0vgxVNS2MRUYc+7XXTHs2SEvqtskbakdJuvnnukqJmDq6OV + jbGek5e2mZCjuZWPsrySj8W9kI7RvpCO0ryQjdO7kI3Tu5CN07uQjdO7kI3Tu5CN07uQjdO7kI3Tu5CN + 07uQjdO7/5YWA/+YJxD/mzQh/6g7KfyyQDH0ukY47cFKQOXGTkbey1JM1cdSYMy/W3PDt2KDuq9qkLKo + cZuqonmko56Bq52airGXmJS2kpaguo6Vr72KlMK+iZPRvoqS0r2KkdK8ipHSvIqR0ryKkdK8ipHSvIqR + 0ryKkdK8ipHSvIqR0ryKkdK8/5cWA/+YJxD/nTMg/6o6J/q0QC/xvUU16sVJO+LLTUDb0UtJ0ctRX8jD + WXK+u2GCtbRoj62tb5qlqHajnaR+q5agh7GRnpG2i5yduoebrL2Dmr++gZnRv4OW0r2FldK8hZXSvIWV + 0ryFldK8hZXSvIWV0ryFldK8hZXSvIWV0ryFldK8/5cVA/+ZJxD/nzMf/6w5Jvi3PyzuwUQx5slHNt/R + SjjX1UZHzc9PXcTHV3G6wF+BsbpmjqizbZmfrnSjl6p7qpCnhLCKpI62hKOaun+iqbx7ory+eaHRvnyc + 0r1/mtK8f5rSvH+a0rx/mtK8f5rSvH+a0rx/mtK8f5rSvH+a0rx/mtK8/5gVA/+aJxD/oTId/645JPS6 + PinqxUIt4c9FLtraRi7S2kZGydNNXL/NVW+1xlx/q8BjjaK6apiZtnGhkbJ4qYmuga+DrIq0fauWuHir + prtzq7m9cavRvnWk0r14oNO7eKDTu3ig07t4oNO7eKDTu3ig07t4oNO7eKDTu3ig07t4oNO7/5kVA/+b + JxD/pDEc/bI3IfG+PCTlykAm3NZBJdPfTCzM3kxExNlMWrrSUm2vzVl9pcdgi5zCZ5aTvm6firt1p4O4 + fq18toeydbWTtnC1o7lstra7abfTu26u07txqdO6canTunGp07pxqdO6canTunGp07pxqdO6canTunGp + 07pxqdO6/5oUAv+cJxD/pzAa+bY2HezEOh/g0Twe1d5IGM7kUirG4lRCvt9TWLTaUWup1Fd7n89diZXL + ZJSMyGudg8VypHzDe6p0woWvbsKRs2nCoLVkw7S3YcXUuGa61bhps9W3abPVt2mz1bdps9W3abPVt2mz + 1bdps9W3abPVt2mz1bdps9W3/5sUAv+dJw//qy8X9Ls0GObKNhfY2jcSz+NKHcjoUy/A51lCuOVbVa7h + WGii3VZ4mNpbhY7WYZCF02iZfNFvoHXQeKVu0IKqaNCPrWLRn7Be0rOyWtTUsmDJ2LJiwdizYsHYs2LB + 2LNiwdizYsHYs2LB2LNiwdizYsHYs2LB2LNiwdiz/5wTAv+fJg//sC0T7sEwEt7TLw7R4T8QyelMIsHs + VDW561dIsOpYWqboWGmb5Vl3keNbgofiX4x+4WaTd+Bumm/gdp9p4ICjY+GNpl/inKhb466qWOXKq1vb + 26pd0NysXdDcrF3Q3Kxd0NysXdDcrF3Q3Kxd0NysXdDcrF3Q3Kxd0Nys/54SAv+jJQ34tykN5sooCtTd + LwXK6EMUwvBOKLnwUjuw8FNOpu9UXpzuVWyS7Vd3iO1agX/sXol37GSPcOxrlGrtdJhl7H2cYeuInl3q + k6Fa6aCiWOixo1boyqRY49qjWOPao1jj2qNY49qjWOPao1jj2qNY49qjWOPao1jj2qNY49qj/6ASAf+q + IQjwvyIG29YXAczmNAjC8EQaufVLLbD2TUCm909RnPdQYJL2UmyJ9lV2gPdZfnj3XYRx9mOJa/RqjWfy + cpFj8HqTYO+Cll3ui5ha7ZSaV+2gm1XssZxT7MGdU+zBnVPswZ1T7MGdU+zBnVPswZ1T7MGdU+zBnVPs + wZ1T7MGd/6MQAfu0GQPkyxAA0OMaAcTvNgy6+EIfsPtHMqb9SUOc/ktSkv9NX4j/T2mA/1NyeP5YeHL8 + XX1s+mOBaPhphWT3cIhh9XaKXvR9jFvzhI5Z84uPVvKUkVPxn5JS8auTUvGrk1Lxq5NS8auTUvGrk1Lx + q5NS8auTUvGrk1Lxq5NS8auT/KcOAdy/BgDQ0gYAxe4iArr5NhCw/z4ipf9CNJv/RESR/0ZRh/9JXH7/ + TWR3/1Jrcf9XcGz/XXRn/2J4ZP1oemH8bX1e+3J/W/p4gVn5fYJX+YOEVPiKhVL3k4ZQ95uIUPebiFD3 + m4hQ95uIUPebiFD3m4hQ95uIUPebiFD3m4hQ95uI2rEBAM/FBADG2AYAuvklBa//MxSl/zkkmv88NJD/ + P0GG/0JMff9GVXb/S1xw/1Fiav9WZmb/W2pi/2BsX/9lb13/anFa/25yWP9zdFb/d3VU/3x2Uv+CeE/+ + iXlN/Y96Tf2Pek39j3pN/Y96Tf2Pek39j3pN/Y96Tf2Pek39j3pN/Y96zrsBAMTMAwC65ggAr/8kB6T/ + LhWZ/zMjj/83MIX/Ojx7/z5FdP9DTG3/SlJo/09XY/9UWmD/WV1d/15fWv9iYVj/ZWNW/2lkVP9tZlL/ + cWdQ/3VoTv96aUz/f2pK/4RrSv+Ea0r/hGtK/4RrSv+Ea0r/hGtK/4RrSv+Ea0r/hGtK/4RrxMQBALrV + AQCu/xABo/8fB5j/KBON/y0fg/8xKnr/NTNx/zo7av9AQWX/RkZg/0xKXP9RTVn/VU9W/1lRVP9dU1L/ + YFRQ/2RVTv9nVk3/a1hL/25ZSf9yWkj/d1tG/3tcRv97XEb/e1xG/3tcRv97XEb/e1xG/3tcRv97XEb/ + e1xG/3tcu84AAK/cAACi/w8Clv8XBoz/IA+C/yYZeP8rIm//MCln/zYwYf88NVz/QjlY/0c8Vf9MPlL/ + UEBQ/1RCTf9XQ0z/WkRK/11FSP9gRkf/Y0dF/2ZIRP9qSUL/bkpB/3FLQf9xS0H/cUtB/3FLQf9xS0H/ + cUtB/3FLQf9xS0H/cUtB/3FL/4YYBf+EJQ3/gjQc/4Q/K/+KRjf/i05E/4pWUP+GXlz/gWdm/3pwb/91 + e3b9cIZ8+2yQgflomYX4ZKKH92KrivZgtIv1Xr2N9F3HjvNc0o/xW9+P7FzkkOVf5pDdY+iQ2Gbpj9hm + 6Y/YZumP2Gbpj9hm6Y/YZumP2Gbpj9hm6Y/YZumP/4YYBf+EJQ3/gjQc/4Q/K/+KRjf/i05E/4pWUP+G + Xlz/gWdm/3pwb/91e3b9cIZ8+2yQgflomYX4ZKKH92KrivZgtIv1Xr2N9F3HjvNc0o/xW9+P7FzkkOVf + 5pDdY+iQ2Gbpj9hm6Y/YZumP2Gbpj9hm6Y/YZumP2Gbpj9hm6Y/YZumP/4YYBf+EJQ3/gjQc/4Q/K/+K + Rjf/i05E/4pWUP+GXlz/gWdm/3pwb/91e3b9cIZ8+2yQgflomYX4ZKKH92KrivZgtIv1Xr2N9F3HjvNc + 0o/xW9+P7FzkkOVf5pDdY+iQ2Gbpj9hm6Y/YZumP2Gbpj9hm6Y/YZumP2Gbpj9hm6Y/YZumP/4YYBf+E + JQ3/gjQc/4Q/K/+KRjf/i05E/4pWUP+GXlz/gWdm/3pwb/91e3b9cIZ8+2yQgflomYX4ZKKH92KrivZg + tIv1Xr2N9F3HjvNc0o/xW9+P7FzkkOVf5pDdY+iQ2Gbpj9hm6Y/YZumP2Gbpj9hm6Y/YZumP2Gbpj9hm + 6Y/YZumP/4cYBf+FJQz/gzQc/4Y+Kv+MRjf/jk1D/41VUP+KXVv/hGVm/31ub/94eXf9c4N9+m6Ogvhp + l4b3ZqGJ9mOqi/VhtI30X76P817IkPJc1JHwXOGR6F/kkuFi5pLZZuiR02jpktNo6ZLTaOmS02jpktNo + 6ZLTaOmS02jpktNo6ZLTaOmS/4gYBf+GJQz/hDMc/4k9Kv+PRTb/kkxC/5FTTv+OW1r/imNl/oNrb/t8 + dHf5d4B+9nKKg/VtlIjzaZ6L8manjvBksZDvYryS7mHHk+xg05TqX+GV4mLkldpm55XRauiVzGvolsxr + 6JbMa+iWzGvolsxr6JbMa+iWzGvolsxr6JbMa+iW/4kYBP+HJQz/hTMc/4w8Kf+SRDX/lUtB/5VSTf+T + WVn9jmFk+YhpbvaBcXfze3x+8HaHhO5ykInsbpqN62qkkOlorpPoZriV5mTEluVj0JfiY9+X22bll9Jq + 55fKbOeZxm3mmcZt5pnGbeaZxm3mmcZt5pnGbeaZxm3mmcZt5pnGbeaZ/4kXBP+IJQz/hTMc/487KP+V + QzP/mUo//5lRS/6XV1f5k19i9Y1mbfGGbnbugHl+63uDheh2jYrmcpeP5G6gkuJrqpXgabWX32fBmd5n + zpnbZ96a1Grlmcxt5ZvEb+WcwHDlnMBw5ZzAcOWcwHDlnMBw5ZzAcOWcwHDlnMBw5ZzAcOWc/4oXBP+I + JAz/hjMc/5E7J/+YQjL/nEk9/51PSfubVlX1mF1g8JJka+yMbHXohnZ+5YCAheJ7iovfdpOQ3XKdlNpv + p5fYbLKa1mu+m9RqzJzSatydzW3kncVv5J6+ceOfunLjn7py45+6cuOfunLjn7py45+6cuOfunLjn7py + 45+6cuOf/4oXBP+JJAz/iDMc/5Q6Jv+bQTH/n0g8/qBOR/efVFLxnVte7JhhaeeSaXPji3N934Z9hduA + hozYe5CR1HaZltFzo5rPcK2dzW+5n8tux6DJbtahxXDiob1y4qG3dOGitHXhorR14aK0deGitHXhorR1 + 4aK0deGitHXhorR14aK0deGi/4sWBP+KJAz/ijIb/5Y5Jf+eQC//okY5+6RMRPSkUlDtolhb6J1fZuOY + ZnHekXB62Yt6g9SFg4zQgIyTzHuVmMl3npzGdaifxHO0osJywqPAcdGkvHPgpLZ14KWwd+ClrXfgpa13 + 4KWtd+ClrXfgpa134KWtd+ClrXfgpa134KWtd+Cl/4wWBP+LJAz/jDEb/5g5JP+gPy3/pUU3+KhLQvCo + UUzqp1ZX5KNcYt6eZG3ZmG540pB3g82KgI3JhYiUxYCRmsF8mp6+eaSiu3evpLl2vaa3dc2ntHbep694 + 3qeqed+np3rfp6d636enet+np3rfp6d636enet+np3rfp6d636enet+n/4wWBP+LJAz/jjEa/5o4I/+j + Piz+qEQ19atKP+2tT0nmrFRT4KlaXtqlY2nTnGt3zZV0g8eOfI3CiYWVvoSNm7qBlqC2faCjs3urprB6 + uaiuecmqrHncqqh73aqkfN2pon3eqaJ93qmifd6pon3eqaJ93qmifd6pon3eqaJ93qmifd6p/40WBP+M + JAz/kDAZ/5w3Iv+lPir7q0Mz8q9JPOqxTUXjsVJP3bBXWdWpYGjOoWl3yJlxg8KTeY28jYKVt4mKm7OF + k6Gvgpylq3+nqKh+taqmfcWspH3ZrKF+3KyegNyrnIDdqpyA3aqcgN2qnIDdqpyA3aqcgN2qnIDdqpyA + 3aqcgN2q/40WA/+MJAz/kjAZ/543If+nPSj5rkIw8LNHOOi1TEHht1BK2rVWVdGtXmfKpWd2w51vg7yX + d423kn+VsY2HnKyJj6GohpmmpISkqaGCsayegcKtnIHVrpqC262Yg9ysl4PcrJeD3KyXg9ysl4PcrJeD + 3KyXg9ysl4PcrJeD3KyXg9ys/44VA/+NIwz/ky8Y/6A2H/+pPCb3sUEu7bZGNeW6SjzevE5E1rhTVM6w + XGbGqWV2vqJsgribdI2xlnyVq5GEnKaOjaKii5amnYihqpqGrq2Xhr+vlYbSr5OG2q+ShtuukobbrZKG + 262ShtutkobbrZKG262ShtutkobbrZKG262Shtut/44VA/+OIwz/lS8X/6I1Hv+sOyX1tEAr67pEMeO/ + STfcwks+07xSU8q0W2XCrWN1uqZqgrOfcoysmnmVppaBnKCSiqKcj5Onl42eq5OLrK6QirywjovQsI2K + 2rCNitqujYnbro2J266NiduujYnbro2J266NiduujYnbro2J266Niduu/48VA/+OIwz/ly4W/6Q1Hf6u + OiLytz8o6L5DLeDERzHZxkc9z79QUse4WWS+sWF0tqpoga6kcIynn3eVoZp/nJuXh6KWlZGnkZKcq4yR + qa6JkLmwh5DNsYaP2bGHjtqviI3broiN266IjduuiI3broiN266IjduuiI3broiN266Ijduu/48VA/+P + Iwz/mS0V/6Y0G/yxOSDwuj0k5sJBKN7JRCrVyUU8zMNPUcO8V2O6tV9zsa5mgKmpbYuipHWUm6B8nJWc + hKKPmo6nipiZq4aWpq+Clbaxf5bLsn+V2bGBktqwgpHar4KR2q+CkdqvgpHar4KR2q+CkdqvgpHar4KR + 2q+Ckdqv/5AUA/+QIwv/my0U/6gzGfm0Nx3tvjsg48c+ItvQPyTRzUQ6yMdNT7/AVWK2ul1yrbRkf6Sv + a4qdqnKTlqZ5m4+jgaGJoIunhJ6Vq3+do657nLOweJzIsXib2bF6mNqwfJbar3yW2q98ltqvfJbar3yW + 2q98ltqvfJbar3yW2q98ltqv/5AUA/+QIwv/nSwT/6sxF/a4Nhnqwzkb4M07GtjVNyLN0EI4xMtLTbrF + U2CxwFtwqLpifZ+1aYmXsW+SkK13momqf6CCqIilfaaSqneln61zpbCvcKXGsHCk2bBzn9qvdZzbrnWc + 2651nNuudZzbrnWc2651nNuudZzbrnWc2651nNuu/5EUA/+RIwv/oCsR/68wFPK8MxXmyTUU29U1ENPa + NyDJ1UA2v9BJS7XLUV6rxlhuosFfe5m9ZoeRuW2QibZ0mIKzfJ57sYWjda+PqHCvnatsrq6taK/Ermiu + 2q5sp9uubqTbrW6k261upNutbqTbrW6k261upNutbqTbrW6k261upNut/5ITAv+TIgv/pCkP+rMtEO3C + Lw/g0C4M1N04CczeQB7E20A0utZGSa/STlulzVVrnMlceZPFY4SKwmqNg8BxlHu9eZt1vIKgbruNpGm6 + mqhkuquqYbvCq2C73Ktls92rZ67dq2eu3atnrt2rZ67dq2eu3atnrt2rZ67dq2eu3atnrt2r/5MTAv+W + IQr/qCYM9bkpC+bJKAjY2iUDzuM9DcbiSRu94Esws95KRanaTFif1lJoldJZdYzPYICEzWeJfMtukHXK + dpZuyX+baMiLn2PImKJeyaqkW8rBpVnK36ZewN+mYLvfpmC736Zgu9+mYLvfpmC736Zgu9+mYLvfpmC7 + 36Zgu9+m/5USAv+bHwf/riMI78AiBd7SGgLQ4iwExuY/Eb7mSSG25U4zreRQRKPiU1SY4FRjjt1YcIXb + Xnt92mSDddlrim7YdJBo2H6UYtiJmF3Zl5tZ2aidVtvAnlTc4J5Y0OOeWsnjoFrJ46BayeOgWsnjoFrJ + 46BayeOgWsnjoFrJ46BayeOg/5cRAv+hGwX5tRwD5skTAdPeEgDI6TEHv+tAFrbrRyet60s4o+pOSZnp + UFeQ6FNjhudXbn7mXHZ25mJ+b+Zqg2nmcohk5nuMX+eGj1rnkpJW6aKUU+q2lVHs0JVU5OKVVdvlllXb + 5ZZV2+WWVdvlllXb5ZZV2+WWVdvlllXb5ZZV2+WW/5kQAf+oFAHovg0A09AHAMnoGwG/7jQLtvA/G63x + RSyj8Ug9mfFLS5DxTliH8VJjfvFWa3fxW3Jv8WB4afJnfGTyb4Bf83eEWvSBhlb0jIlS9ZmLUPSnjE70 + uI1M89KOTfDgjk3w4I5N8OCOTfDgjk3w4I5N8OCOTfDgjk3w4I5N8OCO/5wNAd+xBQDSxAUAytQHAMDx + IgO29DUPrPY9IKL4QTCZ+UU/j/lIS4b6TFZ++lBfdvtVZm/7WWxp/F9wZP1ldF/+bHdb/XN6V/x7fFT7 + hH5R+o2ATvmYgkz5pINK+LWESfjChUn4woVJ+MKFSfjChUn4woVJ+MKFSfjChUn4woVJ+MKF56YDANK4 + AgDIyQMAwNoGALX4JQWr+zMTov05Ipj/PjGO/0E+hf9FSXz/SVJ1/05Zbv9TX2j/WGNj/11nXv9jalv/ + aWxY/29vVf91cVL/fHNP/4R0TP+Mdkr/lXdI/qF5R/6qeUf+qnlH/qp5R/6qeUf+qnlH/qp5R/6qeUf+ + qnlH/qp51LAAAMjBAQC/0QMAtPQPAKr/JQeg/y8Vlv81Ioz/OS+D/z06e/9CQ3P/Rkps/0tQZv9QVWH/ + VVld/1tcWf9gXlb/ZWBU/2piUf9wZE7/dWZM/3tnSv+CaEj/iWpF/5NrRP+ZbET/mWxE/5lsRP+ZbET/ + mWxE/5lsRP+ZbET/mWxE/5lsybkAAL/KAQC12AIAqf8UAZ//IQiV/yoUi/8wIIH/NSp5/zozcf8/O2r/ + Q0Fk/0hGXv9NSVr/UkxX/1dPVP9cUVH/YFNP/2VUTP9pVkr/bldI/3NZRv95WkT/f1tC/4ZcQP+LXUD/ + i11A/4tdQP+LXUD/i11A/4tdQP+LXUD/i11A/4tdwMMAALXSAACp6AQAnf8SApL/GweJ/yQRf/8qGnf/ + MCNv/zUqZ/86MGH/QDVc/0Q5V/9JPFP/Tj9Q/1NBTv9XQkv/W0RJ/19FR/9jR0X/Z0hD/2tJQf9wSj// + dUs9/3tMPP9/TTz/f008/39NPP9/TTz/f008/39NPP9/TTz/f008/39Nt80AAKrZAACd9QQAkf8MAob/ + EwV8/xwLdP8jE2z/Khpk/zAfXv81JFj/OyhT/z8rT/9ELkz/SDBJ/0wxRv9QM0T/VDRC/1c1QP9bNj7/ + Xzc9/2I4O/9mOTn/ajo3/3A7Nv9zPDb/czw2/3M8Nv9zPDb/czw2/3M8Nv9zPDb/czw2/3M8/3wYBf94 + JAr/dDIV/3k8If9/RC3/gU05/39VRP97Xk//dWdY/3ByYP9rfGf/Zods/2GRcP9dm3P/WqV2/liueP1W + t3n8VcB6+1TKe/lT1Hz3UuF99VLqfe5V7X3oV+994Vzxfd9e8XzfXvF8317xfN9e8XzfXvF8317xfN9e + 8XzfXvF8/3wYBf94JAr/dDIV/3k8If9/RC3/gU05/39VRP97Xk//dWdY/3ByYP9rfGf/Zods/2GRcP9d + m3P/WqV2/liueP1Wt3n8VcB6+1TKe/lT1Hz3UuF99VLqfe5V7X3oV+994Vzxfd9e8XzfXvF8317xfN9e + 8XzfXvF8317xfN9e8XzfXvF8/3wYBf94JAr/dDIV/3k8If9/RC3/gU05/39VRP97Xk//dWdY/3ByYP9r + fGf/Zods/2GRcP9dm3P/WqV2/liueP1Wt3n8VcB6+1TKe/lT1Hz3UuF99VLqfe5V7X3oV+994Vzxfd9e + 8XzfXvF8317xfN9e8XzfXvF8317xfN9e8XzfXvF8/30YBf95JAr/dTIV/3s7If+CRC3/g0w4/4JURP9+ + XE7/eWVY/3NwYP9uemf/aYVt/mSPcf1gmXT7XaJ3+lureflZtHv4V758+FbIffVV0n7zVd9/8VTpf+tX + 7X/kWu9/3V/xfttg8X/bYPF/22Dxf9tg8X/bYPF/22Dxf9tg8X/bYPF//30YBf96Iwr/djEV/386IP+F + Qiz/h0o3/4ZSQv+DWk3/fmNX/3dsYP1yd2j6bYJu+WmMc/dklXb1YZ959F+ofPNdsX3yW7p/8VrFgPBZ + 0IHtWd2B6ljoguVb7YLeX++B1mLwgtNj8YPTY/GD02Pxg9Nj8YPTY/GD02Pxg9Nj8YPTY/GD/34YBf97 + Iwr/dzEV/4I5IP+IQSv/i0k2/4pRQf+HWEz/g2FX+3xpYPh2dGj1cn5u822IdPFpknjwZZt77mOkfu1h + roDsX7eB6l7Cg+ldzYTnXNuE5FznhN9f7oTYY++Ez2Xwhs1m8YbNZvGGzWbxhs1m8YbNZvGGzWbxhs1m + 8YbNZvGG/38XBf97Iwr/eTAV/4U4H/+LQCr/jkg1/45PQP+MV0v7h19W94FnX/N6cGjwdntv7nGFdett + j3nqaZh96GahgOZkqoLlYrSE5GG/heNgy4bhYNmH3mDmhtlj7obQZe+IyWjvicZo74rGaO+KxmjvisZo + 74rGaO+KxmjvisZo74rGaO+K/4AXBf98Igr/fDAV/4g3Hv+PPyj/kkYz/5JNPvyQVUn2jFxU8oZkXu6A + bWfre3hv6HaCdeVxjHvjbpV/4Wqegt9op4XeZrGH3GW8iNtkyYnZZNiJ1WXmidBm7orJaO6MwmrtjcBr + 7Y3Aa+2NwGvtjcBr7Y3Aa+2NwGvtjcBr7Y3Aa+2N/4EXBP99Ign/fy8U/4s3Hf+SPif/lkUx/pZLPPiV + UkfykVpS7YxiXOmGamblgHVu4nt/dd92iHvccpGA2W+ahNZspIfUaq6K02i5jNFnxY3PZ9OOzWjjjshp + 7I7Ca+yPu23rkLlu65C5buuQuW7rkLlu65C5buuQuW7rkLlu65C5buuQ/4EWBP9+Ign/gi4T/402HP+V + PCX/mUMv+5tKOfSaUETul1dP6JJeWeSMZ2TfhnJt24F7ddd8hXzTd42C0HOWh85wn4rMbqmNymy0j8hr + wJHGa86SxGvfksBt6pK6buqTtHDqk7Jx6pOyceqTsnHqk7Jx6pOyceqTsnHqk7Jx6pOyceqT/4IWBP9/ + IQn/hC0T/5A0G/+YOyP/nUIs959INvCeTkDpnFVL5JhbVt+SZWHajW9q1IZ4ddCBgX3MfImEyXiSicZ1 + m43DcqSQwXGvkr5vu5S9b8qVu2/blrhw6JaycuiWrXPolqx06JasdOiWrHTolqx06JasdOiWrHTolqx0 + 6JasdOiW/4MWBP+AIQn/hywS/5MzGv+bOiH9oEAq9KNGM+yjTD3molJH4J5YUtqZY1zTkmxqzot1dcmG + fX7FgYWFwX2Oir55lo+7d6CSuHWqlbZzt5e0csWYsnLWma9z5pmrdeaZp3bnmaV355ild+eYpXfnmKV3 + 55ild+eYpXfnmKV355ild+eY/4MWBP+AIQn/iSsR/5UyGP+eOR/6oz8n8adEL+moSjjip09C3KRXTNWe + YFvOlmlpyJBydcOKen6+hYKFuoGKi7d+k5Cze5yUsHmml613s5qrdsGbqXbSnKd35ZykeOWboHnlm596 + 5pufeuabn3rmm5965pufeuabn3rmm5965pufeuab/4QVBP+BIQn/iysQ/5cyF/+gOB73pz0k7qtDLOat + SDTfrU092KlUStCiXlvKm2dpw5Rvdb6Od365in+GtIaHjLCCj5Gsf5iWqX2jmaZ7r5yjer6doXrPnqB7 + 456dfOSdmnzknZp95ZyafeWcmn3lnJp95ZyafeWcmn3lnJp95ZyafeWc/4QVBP+CIAn/jSoQ/5kxFv+j + Nxz1qjwi665BKOOxRS/cs0o31K1SSMymXFrFn2Rov5htdLmTdX6zjnyGroqEjaqHjJKmhJWXooGfmp9/ + q52cfrqfmn7MoJh/4aCWf+OflYDknpSA5J6UgOSelIDknpSA5J6UgOSelIDknpSA5J6UgOSe/4UVBP+C + IAn/jikP/5swFP6lNRrzrTof6bI/JOG2QyrZt0g00bBRR8mpWlnBo2JnupxqdLSXcn6uknqGqY6BjaSL + ipKfiJKXm4Wcm5iEqJ6Vg7egk4LJoZGD36KQg+Khj4Pjn4+D45+Pg+Ofj4Pjn4+D45+Pg+Ofj4Pjn4+D + 45+Pg+Of/4YVBP+DIAj/kCgO/54vE/yoNBjwsDkc5rY9IN67QSTWukUyzbRPRsWtWFe9pmFmtqBoc6+b + cH2plneGo5J/jZ6Ph5KajJCYlYqanJKIpp+Oh7WhjIfHo4qH3aOKh+KiiobioIqG46CKhuOgiobjoIqG + 46CKhuOgiobjoIqG46CKhuOg/4YUA/+DIAj/kicN/6AuEvqqMxXuszcZ5Ls6G9zBPh7TvUQxyrdORcKx + V1a5ql9lsqVmcqufbn2km3WFnpd8jJmUhZOUkY2Yj4+XnIuNo6CIjLKihYzEo4SM2qSEi+GjhYrioYWK + 4qCFiuKghYrioIWK4qCFiuKghYrioIWK4qCFiuKg/4cUA/+EIAj/lCYM/6IsEPetMRPrtzQV4r83FtnF + OBvQwUIwx7tMQ761VVW1r11kralkcaakbHyfoHOFmZx6jJOZgpKOl4uYiZSUnIWToKCBka+ifpHBpH2S + 2KR9kOGjf47ioX+O4qF/juKhf47ioX+O4qF/juKhf47ioX+O4qF/juKh/4cUA/+FHwj/lyUL/6UrDvWx + LxDouzEQ38UzENXJNRnMxEEuw79LQrq5U1OxtFtjqa5icKGqaXuapnCElKJ3i46ff5KInYiXg5uRnH6Z + naB6mKyid5i/pHWY1aR2luGjeZPionmT4qF5k+KheZPioXmT4qF5k+KheZPioXmT4qF5k+Kh/4gUA/+I + Hgf/mSQK/6gpC/G1LAzlwC0L3MssCdLMMxjIyD8sv8NIQLW+UVKsuVlhpLRgbpywZ3mVrG6Cjql1ioim + fJGCpIWWfKKPm3egmp9zn6mhcJ+8o26g06NvnuGjcprioXOY4qFzmOKhc5jioXOY4qFzmOKhc5jioXOY + 4qFzmOKh/4kTA/+LHQb/nCII/awmCe65JwjixyYG2NIiBc3QMRbEzT0quslGPbDET0+nv1Zfn7tdbJa3 + ZHePtGuAiLFyiIGueo57rIKUdaqMmXCpl51sqaafaKm6oWap0aFnp+Kha6LjoGyg46BsoOOgbKDjoGyg + 46BsoOOgbKDjoGyg46BsoOOg/4oTA/+OGwX/oB8G+LAhBem/IAPdzxgB0tYfBMnVLxO/0jontc5EOqvL + TEyhx1RcmcNbaZC/YXSJvWh9grpvhXu4d4t1tn+Rb7WJlWm0lZlltKScYbS3nV+10J5gs+SeY6zknWSp + 5J1kqeSdZKnknWSp5J1kqeSdZKnknWSp5J1kqeSd/4sSAv+SGQT/pRsD87YaAuTHEgDV1ggAzNwiAsLb + MBG52TgkrtVBN6XSSUmbz1FYksxYZYrJX3CCx2V5e8VtgHTDdIZuwn2MaMGHkGPBk5RewaKWW8G2mFjD + 0JlZweeYXLjmmV215pldteaZXbXmmV215pldteaZXbXmmV215pldteaZ/40RAv+YFQL8qxQB5b0MANTN + BwDN3gsAw+ApBLvgORCy30EgqN1EM57bSESU2U5Ti9ZVYIPUXGp70mNzddFqem7QcoBo0HuFY8+FiV3P + kYxZ0KGPVdG1kFPS0JFT0emRVsfqklfE6pNXxOqTV8Tqk1fE6pNXxOqTV8Tqk1fE6pNXxOqT/48QAv6e + EAHfsgcA08IGAMzQBgDE4xYAu+UuCLLlOxWp5UIkoORHNJfjS0KN4k9PhOFUWn3gWmR132Fsb99ocmnf + cHdk33l8Xt+DgFrfj4NW4J6FUuGxh1DjyYdP4+aHUdnsiFLU7IlS1OyJUtTsiVLU7IlS1OyJUtTsiVLU + 7IlS1OyJ/5IOAeWmBQDTtwMAy8YDAMTUBgC76R4CsuoxDKnrOhqg60AplutFN43rSUSE605PfOtTWHXq + WGBu615maOtla2PrbXBe63VzWux+d1XtiXlS7pZ8Tu+mfUzwun5K8dN/S+3pf0zo635M6Ot+TOjrfkzo + 635M6Ot+TOjrfkzo635M6Ot+9ZsGANWuAQDLvgIAw8wDALraBwCx7yIEqPExEJ/yOR6V8z4sjPNDOIT0 + SEN89ExMdPVRVG71V1po9lxfY/ZjY173aWda93FqVfh5bFH5gm9N+o5xSfubc0f8qnRE/b11Qv7cdkH/ + 53ZB/+d2Qf/ndkH/53ZB/+d2Qf/ndkH/53ZB/+d22qUAAMy2AADDxQEAutMEALDzEQCm9iQGnfgvEpT6 + Nh+L+zwrgvxANnr9RT9z/kpHbP9PTWf/VFJh/1pWXf9gWVn/ZlxV/2xfUf9zYU3/e2NJ/4RlRf+PZ0L/ + m2hA/6hpPv+6az7/w2s+/8NrPv/Daz7/w2s+/8NrPv/Daz7/w2s+/8Nrzq4AAMO+AAC6zQEAr9kDAKX6 + FQGb/iIIkv8sE4n/Mx6A/zgoeP89MXH/Qzlq/0g/Zf9NRF//Ukhb/1dLV/9cTlP/YVBP/2dSTP9tVEj/ + c1ZE/3tYQf+DWT//jFs8/5dcOv+jXTr/qV46/6leOv+pXjr/qV46/6leOv+pXjr/qV46/6lexbgAALvH + AACw1AAApOsGAJn/FAKP/x4Ihv8nEX7/Lhp2/zQjbv86Kmj/PzBi/0Q1Xf9JOVj/TjxU/1M+UP9XQU3/ + XENK/2FERv9mRkP/a0hA/3JJPf94Szv/gEw5/4dNNv+STzX/lk81/5ZPNf+WTzX/lk81/5ZPNf+WTzX/ + lk81/5ZPvMIAALHQAACk2gAAmPYGAI3/EAKD/xcGe/8hDXP/KRRr/y8bZf81IF//OyVZ/0ApVf9FLFH/ + SS9N/04xSv9SM0b/VjRD/1o2Qf9eNz7/Yzg7/2g6OP9uOzb/dDw0/3o9Mf+CPjD/hT8w/4U/MP+FPzD/ + hT8w/4U/MP+FPzD/hT8w/4U/sssAAKXWAACY3gAAjPkBAIH/CQJ3/xEEbv8ZB2f/IQxg/ygRWv8vFVX/ + NBlQ/zocTP8+Hkj/QyBF/0ciQv9KJD//TiU9/1ImOv9WJzj/Wig1/14pMv9jKjD/aCst/20sK/90Lir/ + di4q/3YuKv92Lir/di4q/3YuKv92Lir/di4q/3Yu/3AYBf9rJAr/ZDEP/206GP90QyP/dkwu/3RVOP9w + XkL/a2hK/2ZzUf9hflf/XIhc/1iSX/9VnGL/UqRk/1GtZf5PtWf9Tr5o/E3HafpM0Wn4TNxq9kvnavRL + 72ryS/dq7E/4auVU+mnlVPpp5VT6aeVU+mnlVPpp5VT6aeVU+mnlVPpp/3AYBf9rJAr/ZDEP/206GP90 + QyP/dkwu/3RVOP9wXkL/a2hK/2ZzUf9hflf/XIhc/1iSX/9VnGL/UqRk/1GtZf5PtWf9Tr5o/E3HafpM + 0Wn4TNxq9kvnavRL72ryS/dq7E/4auVU+mnlVPpp5VT6aeVU+mnlVPpp5VT6aeVU+mnlVPpp/3EYBf9s + JAr/ZTEP/3A5GP92QiP/eEsu/3dTOP9zXUL/bmZK/2lxUv9kfFj/X4Zc/1qQYP5XmmP9VaJl/FOrZ/tS + s2j6ULxp+U/FavhPz2v1Tttr803mbPFN72zvTvdr6VL4a+JW+mviVvpr4lb6a+JW+mviVvpr4lb6a+JW + +mviVvpr/3IYBf9tJAr/Zy8P/3M4GP96QSL/fEkt/3tSN/93W0H/cmRK/21vUv9oeVj9Y4Ne+1+NYvlb + l2X4WZ9n91eoafZVsGv1VLls9FPCbfNSzG3xUdlu7lHkbuxR7m7pUvZu5Ff4bdxZ+W/cWflv3Fn5b9xZ + +W/cWflv3Fn5b9xZ+W/cWflv/3MYBf9uIwr/ai4O/3Y3F/99PyL/gEgs/39QNv97WUD/dmFK/XFsUvps + dln4Z4Ff9mOKY/RflGbzXJxp8lqla/BZrW3vV7Zu7lbAb+1WynDrVdZw6VXjcOZV7XDkV/Zw3lr4cdVc + +HLVXPhy1Vz4ctVc+HLVXPhy1Vz4ctVc+HLVXPhy/3QXBf9vIwr/bS0O/3o2F/+BPiH/g0Yr/4NONf+A + Vj/9e19J+XVoUvZwc1nza35f8WeHZO9jkWjtYJlr7F6ibepcqm/pW7Nx6Fq9cudZyHLmWdRz41nic+Ba + 7XLeW/Zz1l33dc5f+HbOYPh2zmD4ds5g+HbOYPh2zmD4ds5g+HbOYPh2/3QXBf9wIwn/cSwO/300Fv+E + PB//h0Qp/4dMNP2EVD74gF1I9HplUfB0cFntcHpg62uEZelojWnnZZZt5WKfcORgp3LiX7Bz4V67dOBd + xnXfXdN13F3hddlf7XXWXvZ3zmD3ecdj+HrHY/h6x2P4esdj+HrHY/h6x2P4esdj+HrHY/h6/3UXBf9x + Ign/dCsN/4EzFf+IOx7/i0In/4tKMvmJUjzzhVpG74BiUOt6bFjndXdg5XGBZuJtimvgaZNv3mebctxl + pHTaY6522WK4d9dhxHjVYNF502HgedBi7HrNYvZ8xmT2fcBm9n7AZvZ+wGb2fsBm9n7AZvZ+wGb2fsBm + 9n7AZvZ+/3YWBf9yIgn/eCoM/4QyFP+LORz/j0Al+5BIL/SOTznui1dE6YZfTuWAaVfhe3Nf3nZ9Ztty + hmzYbo9w1WuXdNNpoHfRZ6l6z2azfM5lv33MZMx+ymTcfsdm6n7EZvSAvmf0gbhp9IG4afSBuGn0gbhp + 9IG4afSBuGn0gbhp9IG4afSB/3cWBf9zIQn/eykM/4cwE/+POBr/kz8j95VFLPCUTDbqkVRA5IxbS+CH + ZlXbgXBe1nx5ZtN3gm3Qc4tzzXCTd8ptm3vIa6R9xmqugMRpuoHDaMeCwWjWg75p54O8afKEtmvyhLFs + 8oWxbfKFsW3yhbFt8oWxbfKFsW3yhbFt8oWxbfKF/3gWBP90IQn/ficL/4ovEf+SNhj8lz0g85lDKeyZ + SjLlllA84JJZR9qNY1HUh21d0IF2Zsx8fm7IeIZ0xXWPecJyl33AcKCAvW6qg7tttYW5bMOGuGzSh7Vs + 44ezbfCHrm7wiKpw8IeqcPCHqnDwh6pw8IeqcPCHqnDwh6pw8IeqcPCH/3kWBP91IQn/gCYK/40uEP+W + NBb5mzsd8J5BJeieRy7inE0325lXQtWSYFDPjGpcyoZyZ8WBe2/BfYN2vnqLe7t3k3+4dJyDtXKlhrNx + sYixcL6Kr2/Oiq1w4IurcO6Lp3LuiqNz74qjc++Ko3PviqNz74qjc++Ko3PviqNz74qjc++K/3oVBP92 + IQn/gyUJ/5AsD/+ZMxT2nzka7aI+IeWjRCneokoy155UP9CXXk/KkGdcxItvZ7+Gd2+7gn92t36HfLN7 + j4GweJiFrXaiiKt1rYuodLqMpnPKjaVz3Y6jdO2NoHXtjZ127oyddu6MnXbujJ127oyddu6MnXbujJ12 + 7oyddu6M/3oVBP93IAn/hSQJ/5IrDf6bMRLzojcY6qY8HeKoQSTbqEgs06JSPsubW07FlWRbv49tZrqK + dW+1hnx3sYKEfa1/jIKpfZWGpnqeiqN5qY2heLePn3fHkJ132pCceOuQmXnsj5d57Y6Xee2Ol3ntjpd5 + 7Y6Xee2Ol3ntjpd57Y6Xee2O/3sVBP94IAj/hyMI/5QqDPyeLxDxpTUV56o5Gd+tPh/XrEUrz6VQPcif + WU3BmWJaupNqZrWOcm+vinp3q4eBfaeDiYOjgZKHoH+bi5x9po6afLOQmHvEkpZ715KVfOqSk3zrkZJ9 + 7JCSfeyPkn3sj5J97I+SfeyPkn3sj5J97I+SfeyP/3sVBP96Hwj/iSIH/5coC/qhLg7uqDIS5K43Fd2y + OxnUr0Qpy6lOO8SjV0y9nWBZtpdoZbCTcG+rjnd3pot/faGIhoOdhY+ImYOYjJaBo4+TgLCSkX/Bk49/ + 1JSOgOiTjYDqko2A65GNgOuRjYDrkY2A65GNgOuRjYDrkY2A65GNgOuR/3wUBP98Hgf/iyEG/5knCvej + LAzsrDAP4rI0Edq3OBXQskIoyKxMOsCmVkq5oV5YsptmZKuXbm6mknV2oY98fZyMhIOYiYyIlIeWjZCF + oZCNhK6TioO+lIiE0pWIhOeViITqk4iD6pKIg+qSiIPqkoiD6pKIg+qSiIPqkoiD6pKIg+qS/30UBP9+ + HQf/jSAG/5slCPWmKQrpry0L4LcwDNa6NRTNtUEmxbBLOb2qVEm1pVxXrp9kY6eba26hl3N2nJN6fZeQ + gYOSjoqIjoyTjYqKnpGHiauThIi8lYKI0JaBiOWWgojplIKH6pOCh+qSgofqkoKH6pKCh+qSgofqkoKH + 6pKCh+qS/30UBP+AHQb/jx4F/54jB/KpJwjmsykI3bwrCNO9MxPKuT8lwbNJN7muUkixqVtWqqRiYqOg + aW2cnHB1l5h4fZGWf4ONk4eIiJGRjYSPm5GAjqmUfY25lnuNzZZ6jeSWfIzplX2L6pN9i+qTfYvqk32L + 6pN9i+qTfYvqk32L6pN9i+qT/34UBP+DGwb/kh0E/qAhBfCtIwXjuCQE2sIjA9DAMhHHvD4jvrdINbWy + UEatrVlUpalgYZ6lZ2uYoW50kp51fIybfYKHmYWIgpeOjX6VmZF6lKaUdpO2lnSTy5Zzk+KWdZLplXeP + 6pN3j+qTd4/qk3eP6pN3j+qTd4/qk3eP6pN3j+qT/38TA/+FGgX/lRsD+6QdA+yxHgPgvRwB1cUfAszE + Lw/DwDwhurxGM7G3TkSos1ZToK9eX5mrZWqSp2xzjKVzeoaieoGBoIKHfJ6Li3eclpBzm6OTb5u0lW2b + yZZsm+GVbpnplHCV6pNwleqTcJXqk3CV6pNwleqTcJXqk3CV6pNwleqT/4ATA/+JGAT/mBgC96gYAei2 + FgDcxA0A0ckcAcjILQ2+xTkftcFEMay9TEGjuVRQm7VbXZSyYmeNr2lwhqxweICqd397qH+EdaaIiXCk + k45spKCRaKOxk2akx5RlpOCUZqHqk2mc6pJpnOqSaZzqkmmc6pJpnOqSaZzqkmmc6pJpnOqS/4ESA/+M + FgP/nRQB8awRANm8CADUyAcAzM0YAcPNKgu5yjccsMdBLqbESj6ewFJNlb1ZWo66YGSHt2ZtgLVtdXqz + dXt0sX2Bb7CGhmqukIplrp6NYa6vj1+uxZBdrt+QX6vrkGKl7JBipeyQYqXskGKl7JBipeyQYqXskGKl + 7JBipeyQ/4MSA/+REwHzoQ0A2bEGANO/BgDNywQAxtITAL3SJwmz0DQZqs4+KqDLRzqYyE9Jj8VWVojD + XWCBwWRper9rcHS9cnduvHp8abuDgWO6joVfupyIW7qtili7w4tXu9+LWLjui1ux7oxbse6MW7HujFux + 7oxbse6MW7HujFux7oxbse6M/4QRA/6WDQDcqAMA07UEAMzCAwDGzgUAv9gNALbZJAat2DEVo9U7JprT + RDaR0UxEic9TUIHNWlp6zGFjdMpoam7JcHBoyXh1Y8iBel7IjH5ZyJqBVcisg1LJw4RRyt+EUsfyhFS/ + 8YVUvvGFVL7xhVS+8YVUvvGFVL7xhVS+8YVUvvGF/4oNAeqdBQDUrQIAzLsCAMXHAgC90gYAtt4VAK7f + Kgel3zYTnd4+IZPdQzCK3Eo+gtpRSXrZV1N02F5bbdhlYmjXbWhi1nVtXdZ/cVnXi3RU2Jl3UdireU7a + wXpN2t56Tdnyek7P9HxOz/R8Ts/0fE7P9HxOz/R8Ts/0fE7P9HxOz/R8/JIHANmkAADNswEAxcABAL3M + AwC12AcArOQdAqTlLQuc5jcXk+Y+JIrlRDGC5Uk8euRPRnPkVU5t5FxUZ+RjWmLkal9e5HNjWeV8ZlXl + hmpR5pNsTuejbkvotm9K6c5vSerpb0nh9XBJ4fVwSeH1cEnh9XBJ4fVwSeH1cEnh9XBJ4fVw3poAANCr + AADGugAAvccBALTSBACr6Q0AoushBJrtLg6S7TYaie49JoHuQzF57kg6cu9OQmzvU0hm71lNYfBgUl3w + Z1ZZ8W5ZVPF3XFDygF9M84thSfSZY0b1qGVE9rtmQvfTZ0D38mdA9/JnQPfyZ0D38mdA9/JnQPfyZ0D3 + 8mdA9/Jn06MAAMezAAC+wQAAtM4BAKrYAwCh8RQBmPMiBo/1LRCH9jQbf/c7JXj3QS5x+EY1a/lMO2X5 + UUFg+ldFW/tdSFf7Y0xT/GlOT/xxUUz9eVNI/oJVRP+OV0H/mlk+/6lb/+LwAElDQ19QUk9GSUxFAAMK + PP+6XDr/1V06/9VdOv/VXTr/1V06/9VdOv/VXTr/1V06/9Vdya0AAL+8AAC1yQAAqtQAAJ/kBQCV+RUC + jPsgB4T9Kg99/jEYdf84IW7/Piho/0QuY/9JM13/TjdZ/1M6Vf9ZPVH/XkBO/2RCSv9qREf/cUZD/3lI + QP+CSjz/jUw5/5hNN/+lTjT/t1A0/7hQNP+4UDT/uFA0/7hQNP+4UDT/uFA0/7hQwLcAALbFAACr0AAA + n9kAAJPxBgCK/xICgf8bBnn/JQ1y/y0Ua/80GmX/OiBf/0AlWv9FKVb/SixS/08vTv9UMUv/WDNI/101 + Rf9jN0H/aTg+/3A6O/93PDf/fz00/4g+Mf+TQC//oEEv/6FBL/+hQS//oUEv/6FBL/+hQS//oUEv/6FB + uMAAAKzNAACf1gAAkt0AAIj3AwB+/w0Cdf8XBW3/Hwhn/ycNYf8uElv/NRdW/zoaUv9AHU7/RCBK/0ki + R/9NJET/UiVB/1YnPv9bKDv/YCo4/2YrNf9sLDL/cy4v/3ovLf+BMCn/jDEp/4wxKf+MMSn/jDEp/4wx + Kf+MMSn/jDEp/4wxrskAAKHTAACT2gAAhuAAAHv6AABy/wcBaf8QA2L/GAZb/yAIVf8mClD/LQxM/zIP + SP84EUX/PBNB/0EUPv9FFjz/SBc5/0wYNv9RGTT/VRsx/1ocL/9gHSz/ZR4p/2sfJ/9xICT/eiEk/3oh + JP96IST/eiEk/3ohJP96IST/eiEk/3oh/2QaBv9eJgn/WDMN/2A3EP9nQRr/aksk/2hULf9lXzX/YGk9 + /1t0Q/9Wf0j/UolL/0+TTv9MnFH/SqRS/0msVP9Is1X+R7tV/UbEVvxFzVf6RdhX+ETiV/ZE61fzRPNX + 8kT6V/BF/1btSf9W7Un/Vu1J/1btSf9W7Un/Vu1J/1btSf9W/2QaBv9eJgn/WTIN/2I3EP9pQBr/bEoj + /2pTLf9mXjX/Ymg9/11zQ/9Zfkj/VIhM/1GRT/9OmlH/TKJT/kuqVf1Kslb8SbpX+0jDV/pHzFj4R9ZY + 9UbhWPNG61jxRvNY70b6WO5I/1fqS/9Y6kv/WOpL/1jqS/9Y6kv/WOpL/1jqS/9Y/2UZBv9fJgn/XDAN + /2Y2EP9tPxn/cEgj/25SLP9qWzX/ZmY9/2FxRP9de0n/WIVN/VWPUfxSl1P6UKBV+U6oV/hNr1j3TLdZ + 9kvAWfZLyVrzStRa8UrgW+9J6lvsSvJa60v6WulM/1rlTv9b5U7/W+VO/1vlTv9b5U7/W+VO/1vlTv9b + /2YZBf9gJQn/Xy4N/2k0EP9xPhn/c0cj/3JQLP9uWTX/amM9/2VuRP1geEr7XINO+ViMUvdVlVX2U51X + 9VKlWfRQrVrzT7Vb8k6+XPFOx1zvTdJd7U3fXepN6V3oTfJc5k/6XORP/13fUf9e31H/Xt9R/17fUf9e + 31H/Xt9R/17fUf9e/2cYBf9hJQn/YywM/20zD/90PBj/d0Ui/3ZOK/9zVzT/bmA9+2lrRPhldkv2YIBQ + 9F2JU/JZklbxV5pZ71WiW+5UqlztU7Nd7FK8XutRxV/qUdBf6FHdX+VR6F/jUvJe4VL6X95T/2HZVf9i + 2VX/YtlV/2LZVf9i2VX/YtlV/2LZVf9i/2gYBf9jJAn/ZysM/3ExD/94Ohf/e0Mh/3tMKv94VDP6c148 + 9m5nRPNpckvwZXxQ7mGGVexej1jrXJdb6VqfXehYp17nV7Bg5la5YeVVw2HjVc5i4VXcYd5W6GHcV/Ji + 2lb7ZNVX/2XQWf9m0Fn/ZtBZ/2bQWf9m0Fn/ZtBZ/2bQWf9m/2kXBf9kJAn/ayoL/3UwDv99ORb/gEEf + /4BJKPp9UjL1eVo78XNkQ+1ub0vqanlR6GaCVuZji1rkYJRd4l6cX+FdpGHfW61i3lq2Y91awWTcWs1k + 2lrbZNZb6GTTWvJn0Vr7aMxb/2rIXf9qyF3/ashd/2rIXf9qyF3/ashd/2rIXf9q/2oXBf9lIwn/bygK + /3kuDf+BNhX/hD4d/IVGJvWCTzDwflc563lgQud0a0rkcHVR4Wx/V99oiFvdZZBf22OYYtlhoWTXYKpm + 1V6zZ9NevmjSXcpp0F3Yas5e5mrLXvJryF77bcRf/m7AYf5uwGH+bsBh/m7AYf5uwGH+bsBh/m7AYf5u + /2sWBf9mIgn/cicK/30sDP+FNBP/iTwb94pEI/GITC3rhFQ25n9dQOF6aEnednJR2nF7V9ZuhF3Uaoxh + 0WiUZc9mnGjOZKVqzGOubMpiuW3JYcVux2HTb8Vi4m/CYu9wwGL6cbtj/HK4ZPxyuGT8crhk/HK4ZPxy + uGT8crhk/HK4ZPxy/2wWBf9nIgn/diUJ/4ErC/+JMhH8jToY849BIOyOSCnmilAz4YZaPdyBZEbWfG5Q + 0nd3WM9zgF/Mb4hkyW2QaMdqmGvFaaBuw2epcMFmtHK/ZcBzvmXOdLxl33S5Zu11t2b4dbNn+nawaPp2 + sGj6drBo+nawaPp2sGj6drBo+nawaPp2/20WBf9rIAj/eSQI/4QpCv+MMA/4kTcV75M+HeiTRSXhkUwu + 3I1XONWHYUTQgWtQzHxzWch4fGDEdYRmwXKLar9vk268bZxxumuldLhqr3a2abx3tGnKeLNp23mwaep5 + rmr3eatr+HmobPh5qGz4eahs+HmobPh5qGz4eahs+HmobPh5/24VBf9uHwj/fCIH/4cnCP+QLg31lTQS + 7Jg7GeSZQSDdl0kp1pJUNtCMXkTKhmdPxYFwWcF9eGG9eYBnunaIbLd0j3C0cZh0sm+hd7Buq3mubbd7 + rGzGfKps13yobeh8pm31fKNv93yhb/d8oW/3fKFv93yhb/d8oW/3fKFv93yhb/d8/28VBf9wHgf/fyEH + /4olB/2TKwvymTIP6J04FeGePhvZnEck0pdRNMuRW0PFi2RPwIZtWbuCdWG3fn1os3uEbbB4jHKtdpR2 + qnSdeahyp3umcbR+pHDCf6Jw03+gceZ/n3H0f5xy9X6bc/V+m3P1fptz9X6bc/V+m3P1fptz9X6bc/V+ + /28VBP9zHQf/gSAG/4wjBvqWKQnvnS8N5aE0Ed2jOhbVoEQjzptPM8eVWULAj2JOu4pqWbaGcmGxgnpo + rX+Bbqp8iXOnepF3pHiae6F2pH6edbCAnHS/gZp00IKZdOSCmHXygZZ29ICVdvSAlXb0gJV29ICVdvSA + lXb0gJV29ICVdvSA/3AVBP91HAb/hB8F/48iBfiZJwfsoCwK4qUxDduoNxHSpEIhyp5NMsOZV0G8k2BN + to5oWLGKcGGshndoqIN+bqSAhnOgfo54nXyXfJp6oX+Xea2ClXi8g5N4zYSSeOKEkXnxg5B584KPefSB + j3n0gY959IGPefSBj3n0gY959IGPefSB/3EVBP93Gwb/hh0E/5EgBPWcJAXppCgH4KktCderNA/Op0Eg + xqJLML+cVT+4l15MspJmV6yObWCninVoo4d8bp6Eg3Sbgot5l4CUfZR+noCRfaqDj3y5hY18y4aLfOCG + i33whYp98oSKffODin3zg4p984OKffODin3zg4p984OKffOD/3EUBP95GgX/iBwE/5QeA/OeIQTnpyUF + 3a4oBdSuMg7Lqj8ew6VKL7ugUz60m1xLrpZjVqiSa2CjjnJonot5bpmJgXSVhol5koSRfY6DnIGLgaiE + iIC3hoaAyYeFgN6HhYHvhoWA8oWFgPKEhYDyhIWA8oSFgPKEhYDyhIWA8oSFgPKE/3IUBP98GQT/ihoD + /5YbAvChHgLkqyAC2rIhAtGxMQ3Irj0dwKlILbikUT2wn1pKqppiVaSWaV+ek3BnmZB3bpSNfnSQi4Z5 + jImPfoiHmYKFhqWFgoW0h4CEx4h/hdyIf4Xuh3+E8YaAg/KFgIPyhYCD8oWAg/KFgIPyhYCD8oWAg/KF + /3MUBP9+GAT/jRkC/JkZAe2kGQHhrhkB17YeAc60LwzFsTwbvKxGLLSoUDuto1hJpp9gVJ+bZ16al25m + lJV1bY+SfHSLkIR5h46NfoOMl4J/i6OFfIqyh3qJxIl4itqJeIrtiHmI8YZ6iPGFeojxhXqI8YV6iPGF + eojxhXqI8YV6iPGF/3QUBP+AFwP/jxYC+ZwVAeqoEwDesxAA07kbAcq4LQrBtToaubBFKrCsTjmpqFZH + oaReU5ugZV2VnWxlj5pzbIqXenOFlYF4gZOKfX2SlIF5kKCFdZCvh3OPwolyj9iJco/siHOO8YZ0jPGF + dIzxhXSM8YV0jPGFdIzxhXSM8YV0jPGF/3UTBP+DFQL/khQB858QAN+sCgDWtwgAz7wYAMa7Kwm9uTgY + tbVDKKyxTDekrVRFnalbUZamYluQo2lkiqBwa4Wed3GAnH93e5qHfHaYkYByl52Eb5athmyWv4hqltaI + a5brh2yU8YZukvGFbpLxhW6S8YVukvGFbpLxhW6S8YVukvGF/3YTBP+HEwL7lhAA46MJANavBgDRuQYA + y8AVAMLAKAe5vTYVsLpAJae2STWfs1FCmK9ZTpGsYFmKqmdhhaduaX+ldW96o3x1daGFenCgj35sn5uC + aJ+qhWWevYZjn9SGY57qhmWb8oVnmfKEZ5nyhGeZ8oRnmfKEZ5nyhGeZ8oRnmfKE/3gSA/+LEAHumgkA + 2KcEANGyBADMvQMAxcQQAL3FJQW0wzMTq8A+IqK9RzGauk8/krdWS4u0XVWFsmRef7BrZXmucmx0rHpy + b6uCd2qpjHtlqZh/YaiogV6ou4NcqNKDXKjqg16l84JfovOCX6Lzgl+i84JfovOCX6Lzgl+i84JfovOC + /30PAv2PCwDcnwIA0qsDAMy2AwDGwQEAv8kLALfKIQOuyTAQpcc7H5zERC2Uwkw7jL9UR4W9W1F/u2JZ + ebloYXO4cGdutndtaLWAcmO0inZftJZ5W7SlfFi0uX1WtNF+VrTqfVaw9n5YrPV+WKz1flis9X5YrPV+ + WKz1flis9X5YrPV+/4MLAeuUBADVowEAzbABAMa7AAC+xQEAt84GAK/QHAKn0CwMns43GpbMQSmNykk2 + hslRQX/HWEt4xl9TcsRmW23DbWFownVmY8J+a17BiG9ZwZRyVcGkdFLBuHZQwtF2UMHqdlC/+XdRuvl4 + Ubr5eFG6+XhRuvl4Ubr5eFG6+XhRuvl4/4kGANuaAADPqQAAxrUAAL/AAAC3ygMArtIGAKfYFgCf2CgI + l9c0FY/WPSOH1EYwf9NOO3jSVURy0VxMbNBjUmfQalhiz3JdXc97YljPhmVUz5NoUM+ia03Qt2xL0dBt + S9DpbErP+m5LyvtvS8r7b0vK+29LyvtvS8r7b0vK+29Lyvtv55EAANKhAADIrwAAwLsAALfGAQCuzwQA + pdgHAJ7fGwKX4CoJj+A1FIfgPR9/30QqeN9LM3LeUzxs3lpDZ95hSWLeaE5d3nBSWd55VlXeg1pR35Bd + Td+fX0vgsWBJ4clgSOLjYEbg92FF3f1jRd39Y0Xd/WNF3f1jRd39Y0Xd/WNF3f1j2ZkAAMupAADBtgAA + uMIAAK/MAQCl1AQAnOUNAJTnHwON6CwLheg1Fn7oPR936EMocOhKMGrpUDdk6VY8X+ldQVvqZEVX6mxJ + U+p0TFDrfU9M7IhSSeyWVEbtplZD7rlXQu/PWEDw6lhA7vpXQO76V0Du+ldA7vpXQO76V0Du+ldA7vpX + zqIAAMKxAAC5vgAAr8kAAKXRAQCa2QMAku0TAYrvIAWD8CsMe/E0FXXyOx1u8kIlaPNIK2PzTTBe9FM0 + WvVZOFb1YDtS9mc+TvZuQUv3dkRH+IBGQ/iMSED5mUo++qhMPPu5TTr8z004/eNOOP3jTjj94044/eNO + OP3jTjj94044/eNOxKwAALq5AACxxgAApc8AAJrWAACP5QQAh/YUAX/3HgV4+SgLcfoxEmv7OBll/D8e + YP1FI1v+SidX/k8rU/9VLk//WzBM/2EzSf9nNUX/bjdC/3c5Pv+AOzr/jD04/5g/Nv+lQDT/tUEy/8NC + Mv/DQjL/w0Iy/8NCMv/DQjL/w0Iy/8NCvLUAALLDAACmzQAAmtQAAI7bAACE8QUAe/8RAXT/GwRt/yQI + Z/8sDWH/NBJc/zoWV/9AGlP/RR1P/0ogTP9PIkn/VSRG/1omQv9gKD//Zio8/20sOf91LTX/fi8y/4gw + L/+TMi3/nzMs/6k0LP+pNCz/qTQs/6k0LP+pNCz/qTQs/6k0s78AAKjKAACb0gAAjtkAAIHeAAB49wEA + cP8MAWj/FgNi/x8GXP8mCFb/LQtS/zMNTv85EEr/PhJH/0MUQ/9IFkD/TBg+/1EZO/9WGjj/XBw1/2Id + Mv9pHy//cSAs/3khKf+BIib/iyQk/5MkJP+TJCT/kyQk/5MkJP+TJCT/kyQk/5MkqsgAAJ3QAACP1gAA + gd0AAHXiAABs/AAAZP8GAVz/EAJW/xgEUP8fBkv/JgdH/ywJQ/8xCkD/Ngs8/zoMOf8+DTb/Qg40/0YO + Mf9LDy//UBAs/1URKf9bESf/YhIk/2kTIf9wFB//dxUd/34WHf9+Fh3/fhYd/34WHf9+Fh3/fhYd/34W + /1ceBv9QKQn/TjEL/1Y2Dv9bPxH/Xkka/11UIv9bXyn/Vmow/1J0Nf9Nfzn/Sok8/0aSP/9FmkD/Q6JC + /0KpQ/5BsET9QbhE/UDARfs/yEX5P9JG9z7dRvU+50bzPu9F8T73Re8//UXuQP9E7kD/Re5A/0XuQP9F + 7kD/Re5A/0XuQP9F/1gdBv9RKQn/UTAL/1o1Df9fPRH/Ykga/2FSIv9eXCr/Wmgw/1VyNv9RfTr/TYY9 + /0qQQP1ImEL8R6BD+0WnRfpErkb5RLZG+UO+R/hCxkf2QtBH9EHcSPJB5kfvQe9H7UH2R+xD/UbrQ/9H + 60P/SOtD/0jrQ/9I60P/SOtD/0jrQ/9I/1kdBv9SKQn/VC4L/100Df9jPBH/ZUYa/2RQIv9hWir/XmUw + /1lwNv9Vejv9UYQ/+06NQfpLlkP4Sp5F90mlRvZIrEf1R7RI9Ua8SfRFxUnzRc5J8EXaSe5E5UnrRe5J + 6UX2SOhH/UjnRv9K50b/S+dG/0vnRv9L50b/S+dG/0vnRv9L/1ocBf9TKAn/VywL/2EyDf9nOhH/aUQZ + /2lOIv9lWCn/YWMx/l1uN/tZeDz5VYJA91KLQ/VPk0X0TptH80yjSPJLqknxSrFK8Em6S+9Jw0vuScxL + 7EjZS+lI5EvmSO5L5Ur2SuRK/kziSf9O4kn/TuJJ/07iSf9O4kn/TuJJ/07iSf9O/1scBf9UKAn/XCoK + /2UxDP9rORD/bkIY/21MIf9qVSn9ZmAx+WJqN/ZddT30Wn9B8laIRPBUkEfuUphJ7VCgSuxPp0zrTq9M + 6k63TelNwE7oTctO5kzXTuNM407hTu5N3073Tt5N/lDcTf9S203/UttN/1LbTf9S203/UttN/1LbTf9S + /1wbBf9VJwn/YCkK/2ovC/9wNg//c0AX/3NJIPxwUij3a1ww9GdnN/BjcT3uX3tC61uERupZjUnoV5VL + 51WdTeVUpE7kU6xP41K1UOJSvlDhUclR4FHVUNxS41DaU+1R2FL3U9VR/lXTUv9W0lL/V9JS/1fSUv9X + 0lL/V9JS/1fSUv9X/10aBf9YJQj/ZScJ/28tC/91NA7/eD0W/XhGHvd2TyfycVgv7mxiN+pobT3nZHdD + 5WGBR+NeiUvhXJFN31qZT95ZoVHcWKlS21eyU9pXvFPYVsdU1lXUVNRX4lTRV+1Wzlb3WMxW/1rKVv9b + yVb/W8lW/1vJVv9byVb/W8lW/1vJVv9b/14aBf9cIwj/aSUI/3MrCv95Mg3/fToU+X5DHPJ7SyTsd1Ut + 6HJfNeRuaT3hanRD3md9SNtkhUzZYY5P1l+WUtVdnVTTXKVW0VuuWNBauFnPWsNazVnQWsta31vIW+tc + xlr3XcRa/1/BWv9fwFv/YMBb/2DAW/9gwFv/YMBb/2DAW/9g/18ZBf9fIAf/biQH/3cpCP9+Lwv8gjcR + 9IM/Ge2BSCHnflAq4nlbM951ZjvacXBC1mx5SdNpgU7QZolTzmSRVsximFnKYaBbyGCpXcdfs17FXr5f + xF7LYMJe22C/X+lhvV71Yrte/mO4X/9kt1//ZLdf/2S3X/9kt1//ZLdf/2S3X/9k/2EYBf9jHgf/ciIH + /3snB/+CLAn4hzQP74g8FuiHRB7ihEwm3IBYMNd7YjnSdmxDznJ1S8tvfVHIbIVVxmmMWcNnlFzBZpxf + v2SkYb5jrmO8YrlkumLHZblh1ma2YuZmtGLzZ7Ji/WevY/9nrmP/Z65j/2euY/9nrmP/Z65j/2euY/9n + /2IYBf9nHQb/dSAG/38lBv+GKQf0izEM6404EuSNQBndi0ki1oZULdGBXznMfGhDx3dxTMR0eVLAcYFX + vm6IXLtskF+5aphit2igZbVnqmezZrVosWbCarBl0mquZuNqq2bxa6pm/GunZ/9rpmf/a6Zn/2umZ/9r + pmf/a6Zn/2umZ/9r/2IXBf9qGwb/eB8F/4IiBfyKJwbwjy0J55I0DuCTOxXZkUYd0YtRLMuGXDjGgWVD + wXxtTL15dVO6dX1ZtnOEXrRwjGGxbpRlr22caK1rpmqqarFsqWq/badpzm6lauBuo2rvbqJq+26ga/9u + n2v/bp9r/26fa/9un2v/bp9r/26fa/9u/2MXBf9tGgX/ex0E/4YgBPiNJATtkykH5JcwCtyYNxDUlUMc + zZBPKsaKWTfAhmJDu4FqTLd9clOzenpasHeBX611iGOqc5Bnp3GZaqVvom2jbq1voW27cJ9ty3Gdbd5y + nG7tcZtu+nGZb/1wmG/9cJhv/XCYb/1wmG/9cJhv/XCYb/1w/2QWBf9wGQT/fhsD/4geA/aRIQPqlyUE + 4ZsrB9idNAzQmUEbyZRMKcKPVja8il9CtoVoS7KCb1Oufndaqnx+X6d5hWSkd41ooXWVbJ5zn2+ccqpx + mXG4c5hxyHSWcdt0lXLsdJRy+XOTc/xyknP8cpJz/HKSc/xyknP8cpJz/HKSc/xy/2UWBf9yGAT/gBoD + /4scAvOUHgLnmiEC3qAmBNSgMgvMnD8ZxZhKKL6TVDW3jl1BsoplS62GbVOognRapIB7YKF9gmWee4pp + m3mSbZh3nHCVdqdzk3W1dZF1xXaPddl2jnXqdo52+HWNdvt0jXb7dI12+3SNdvt0jXb7dI12+3SNdvt0 + /2YWBP91FwP/ghgC/40ZAfCWGgHknhwB26QgAdGjMArJoD0YwZtIJrqWUjSzkltAro5jSqiKa1OkhnJa + n4R5YJyBgGWYf4dqlX2QbpJ7mXGPeqR0jHmyd4p5w3iJedZ4iHnpeIh593aHefp1h3n7dYd5+3WHeft1 + h3n7dYd5+3WHeft1/2YVBP93FgP/hRYB/ZAWAe6ZFgDhoRYA2KcdAM6mLgnGozwWvp9HJbaaUDOwllk/ + qpFhSaSOaFKfi29Zm4h2X5eFfWWTg4Vqj4GNboyAl3KJfqJ1hn2weIR9wHmDfdR6gn3oeYJ99niCffp2 + gn36doJ9+naCffp2gn36doJ9+naCffp2/2cVBP95FQL/hxQB+pITAOucEQDepQ4A1KoaAMupLAjCpjoV + uqJFI7OeTjGsmVc+ppVfSKCSZlGbj21Zlox0X5KJe2WOh4NqioaLb4eElXODgqB2gYGueX6Bvnp9gdJ7 + fIHnenyB9nl9gfl3fYD5d32A+Xd9gPl3fYD5d32A+Xd9gPl3/2kTBP97EwL/iRIA85UOAOGfCgDYqAgA + 0KwYAMisKga/qjgTt6ZDIq+iTTConlU8oppdR5yWZFCWk2tYkZFyX42OeWWJjIBqhYqJb4GJknN+h512 + e4areXiGvHt2htB7doble3aG9Xl3hfl4d4T5d3eE+Xd3hPl3d4T5d3eE+Xd3hPl3/2wSA/9+EQH9jA4A + 55gJANiiBgDTqgYAza8VAMSwKAW8rTYSs6pBIKymSy6kolM6np5bRZebYk+SmGlXjZZwXoiUd2SEkn5p + f5CGbnuOkHJ4jZt2dIypeXKLuXtwi857b4vke3CL9Hlxivl4cYn5eHGJ+Xhxifl4cYn5eHGJ+Xhxifl4 + /28QA/+BDgH0jwoA25sEANSlBQDPrQQAyLMRAMCzJQS4sTQQr64/HqerSSygp1E4maRZQ5OhYE2NnmdV + iJxtXIOadGJ+mHxoepaEbXWVjXFxk5h1bpKmeGuSt3ppkst6aZLjemmR83lrj/l4a4/5d2uP+Xdrj/l3 + a4/5d2uP+Xdrj/l3/3MOAv+EDADnkgUA1p4DAM+oAwDKsAIAxLYNALu4IwOztjENq7M9G6OwRimbrU81 + lKpWQY6nXUqIpWRTgqNrWn2hcmB5n3lmdJ2Ba2+ci29rm5ZzZ5qkdmSatXhimsp5YpnheGKZ83hjlvl3 + ZJb6dmSW+nZklvp2ZJb6dmSW+nZklvp2/3cMAfqIBwDblgAA0aIBAMusAQDEtAAAvrsIALa8HwKuuy4L + prk6GJ63RCaWtEwyj7FUPYivW0eCrWJPfatpVnipb11zp3dibqZ/Z2mliGxlpJNwYaOhc16jsnVbo8h1 + W6PgdVui8nVcn/t0XZ77dF2e+3Rdnvt0XZ77dF2e+3Rdnvt0/3wJAeqNAQDVmgAAzKYAAMWwAAC+uAAA + t78DALDCGgGowisIoMA3FZi+QSKQvEouiblROYK3WEJ8tl9Ld7RmUnKybVhtsXRdaLB8YmOvhmdfrpFr + W66fbleusG9VrsZwVK7gcFSt8nBUqv1wVan9cFWp/XBVqf1wVan9cFWp/XBVqf1w/4IEANySAADQnwAA + x6sAAL+1AAC4vQAAsMQBAKjIFAChySYFmcgzEZHGPh2KxEcpg8NONHzBVj12wF1Fcb5jS2y9alFnvHJX + Yrx6XF27hGBZuo9jVbqdZlK6r2hPu8VpTrvgaU658mlNt/9qTrb/ak62/2pOtv9qTrb/ak62/2pOtv9q + 7YgAANSYAADKpQAAwbAAALm6AACwwgAAqMkDAJ/PDACZ0CEDktAvDIrPOhiDzkMjfM1LLXbMUzZwy1o9 + a8phQ2bJaElhyW9OXMh4U1jIgldUyI1aUMibXU3IrV5LycRfScnfX0nI8l9Hxv9hR8X/YkfF/2JHxf9i + R8X/YkfF/2JHxf9i3I8AAM2fAADDrAAAurcAALLAAACoyAEAn84EAJbVCACQ2RoBitoqCIPZNhF82T8c + ddhIJW/YTy1q11c0ZdZeOmDWZT9c1m1EV9Z1SFPWf0tP1otOTNiZUUnYq1NH2cJTRdndU0XY71ND1v5W + Qtb/VkLW/1ZC1v9WQtb/VkLW/1ZC1v9W0pgAAMamAAC8swAAs74AAKnGAACfzQEAldMEAIzgCwCH4R4C + gOIrCHrjNRBz4z0ZbeNFIGfjTCZi41MsXuNaMVrjYTVW5Gk5UuRxPU/kekBL5YVDSOaSRUXmokdD57VI + QejMSEDp5Ug/5vtIP+X+ST/l/kk/5f5JP+X+ST/l/kk/5f5JyaEAAL6vAAC1uwAAq8UAAKDMAACV0gAA + itkDAIPpEQB96h8DdusqCHDsNA9q7TwWZe1DG2DuSSBb7k8lV+5WKVPvXSxQ72QvTfBrMknxczVG8X03 + QvKJOj/zljw99KY9OvW4Pjn1zT839uc/N/btPzf27T839u0/N/btPzf27T839u0/wKsAALa3AACswwAA + ocsAAJXRAACJ1wAAf+ICAHnyEwFy9B4DbPUoB2b2MQxh9zgRXPc/FVj4RRlU+UscUPlRH036VyJK+l0k + RvtkJkP8aylA/HQrPP1+LTn+ii82/5cxNP+lMjL/tDMw/8k0MP/ONDD/zjQw/840MP/ONDD/zjQw/840 + uLQAAK7AAACiyQAAldAAAInVAAB92wAAde8DAG78EQFo/RsDYv4kBVz/LAhX/zMLU/85DU//PxBM/0UT + SP9KFUX/UBdC/1UZP/9bGjz/Yhw5/2oeNv9yIDL/fCEv/4cjLf+TJCv/niUp/60mKP+xJyj/sSco/7En + KP+xJyj/sSco/7Enr70AAKTIAACXzwAAidQAAH3aAABx3wAAafYAAGL/CwBc/xYCVv8eBFH/JgVN/ywH + Sf8yCUX/OApC/z0LPv9CDTz/Rg45/0sPNv9RDzP/VxAx/14RLv9lEyr/bhQn/3cVJf+BFiL/ihcg/5YY + IP+ZGSD/mRkg/5kZIP+ZGSD/mRkg/5kZpsYAAJjNAACL0wAAfdkAAHDeAABl4wAAXfwAAFb/BQBQ/w4B + S/8XAkb/HgNB/yQEPv8qBTr/LwY3/zMHNP83CDH/PAku/0AJK/9FCij/Sgsl/1ALIv9WDB//Xg0d/2YN + Gv9uDhf/dg4U/38PFP+CDxT/gg8U/4IPFP+CDxT/gg8U/4IP/0ohBf9CLQj/RjAJ/001C/9SPQ7/U0cR + /1NTGP9RXh7/TWkk/0l0KP9Ffiv/Qocu/z+QMP8+mDL+PZ8z/TymM/w7rTT7O7Q1+jq7Nfo5wzX4Ocw1 + 9jnWNfQ44jXyOOs17zjzNe45+jTtOv807Dr/New6/zXsOv817Dr/New6/zXsOv81/0sgBf9DLQj/SC4J + /1E0C/9VPA3/VkUR/1ZRGP9UXB//UGck/0xyKf9IfCz/RYUv/UOOMfxBljP7QJ00+j+kNfk+qzb4PrI2 + 9z26N/Y8wjf1PMs38zzVN/E74TfuO+o27DvyNuo9+jXqPf826Tz/OOk8/zjpPP846Tz/OOk8/zjpPP84 + /0wgBf9ELAj/SywJ/1QyC/9ZOg3/WkQR/1pPGP9YWh//VGUl/1BwKv1Mei37SYMw+kaMM/hFlDT3Q5s2 + 9kKiN/VCqTf0QbA480C4OPJAwDnxP8k57z/TOe0/4DjqP+k46D/yOOdB+jjmQP865T//O+U//zvlP/87 + 5T//O+U//zvlP/87/00fBf9GKwj/UCoJ/1kxCv9eOQ3/X0IR/19MGP9cVx//WWIl/FVtKvlRdy73ToEy + 9UuJNPNJkTbySJk38UegOfBGpznvRa467kS2Ou1EvjvsQ8c760PSO+hD3zvlQ+k640XyOeJE+jzhRP89 + 4EP/P+BD/z/gQ/8/4EP/P+BD/z/gQ/8//04fBf9KKAf/VSgI/14vCv9jNgz/ZT8Q/2RJF/9hUx/6Xl4l + 91ppK/RWdC/xU30z71CGNu1OjjjsTZY660udO+pKpDzpSqs850mzPeZJvD3lSMU95EjQPeJI3j3fSek8 + 3UnyPttI+0DaSP9C2Ej/Q9hI/0PYSP9D2Ej/Q9hI/0PYSP9D/08eBf9OJQf/WiYH/2MsCf9oNAv/ajwP + /2pGFvlnUB71Y1ol8WBlK+1ccDDrWHo06VaDOOdUizrlUpI85FGaPeNQoT7hT6g/4E6wQN9OuUDeTcRA + 3U3PQNpO3T/YTulA1U3zQ9JN+0XQTf9Hz03/SM9N/0jPTf9Iz03/SM9N/0jPTf9I/1AeBf9SIgf/XyQH + /2gqCP9uMQr/cDkO+nBCFfRuTBzvaVYk62VhK+dibDDkXnY14lx/Od9ZhzzeV48+3FaWQNtVnkHZVKVC + 2FOuQ9ZSt0TUUsFF01LNRdFS20XOU+hGzFLzSclS+0vIUf9Mx1H/TcdR/03HUf9Nx1H/TcdR/03HUf9N + /1IdBf9WHwb/ZCIG/20oB/9zLgn9djYM9XY/E+50SBrpcFIi5GxdKeBoaDDdZXI22mJ7Othfgz7VXYtB + 01uSRNFamUbQWaFHzlipSc1XskrLVrxLylbIS8hW1kzGV+VMw1bxTsFW+1C/Vv9Rvlb/Ub5W/1G+Vv9R + vlb/Ub5W/1G+Vv9R/1McBf9bHAX/aSAF/3IlBv94Kwf5ezIK8Hw7EOl6RBfjd00f3nNZJ9pvZC/Va202 + 0md2PM9lfkHMYoZFymCNSMhflUrHXZxMxVykTsNbrU/CW7hRwFrEUb9a0lK8W+JSulrvVLha+VW2Wv9V + tVr/VrVa/1a1Wv9WtVr/VrVa/1a1Wv9W/1QcBf9fGwX/bR4E/3YjBP99KAb0gC4I64E2DeSBPxTefkob + 2HpVJNJ1YC/OcWk3ym1yPsdqekPEaIJIwmaJS8BkkE6+YphQvGGgUrpgqVS4X7NWt16/V7VezlezXt5Y + sV/sWK9f+FmuX/9ZrV//Wa1f/1mtX/9ZrV//Wa1f/1mtX/9Z/1UbBf9jGQT/cRwD/3ogA/uBJQTwhSoG + 54cxCd+HOg/ZhEYY0n9SJMx7XC7HdmY4w3NuP8BwdkW9bX5KumqFTrhojFG1Z5NUs2WbVrFkpFiwY69a + rmO7W6xiylyrYttcqGPqXadj9l2mY/9dpWP/XaVj/12lY/9dpWP/XaVj/12lY/9d/1YbBf9nGAT/dBoD + /34dAviFIQPsiSYE44wsBtuMNgvTiUMWzIVPI8eAWS7BfGI3vXhrP7l0cka2cnpLs2+BULBtiFOua5BX + rGqYWalooVynZ6tepWa4X6RmxmCiZthhoGboYZ9n9WGeZ/9gnWf/YJ1n/2CdZ/9gnWf/YJ1n/2CdZ/9g + /1kYBP9qFgP/dxgC/4EaAfSIHQHojSEC35EnA9aRMwnPjUAVyIlMIcGFVi28gF83t3xoP7N5b0avdnZM + rHR+UalxhVWncIxYpG6UXKJsnV6ga6hhnmq0Ypxqw2SaatRkmWrmZJhr9GOXa/9jlmv/YpZr/2KWa/9i + lmv/YpZr/2KWa/9i/1wWBP9tFQP/ehYB/4QXAfGLGQDlkRwA25UgAdKVMAfLkT4Tw41JIL2JVCy3hV02 + soFlP659bUaqenRMpnh7UqN2glagdIlannKRXZtwmmCZb6Rjl26xZZVuwGaTbtFnkm7kZ5Fu82aQb/5l + kG//ZJBv/2SQb/9kkG//ZJBv/2SQb/9k/14UBP9vFAL/fBQB/YYUAO6OFADilBUA2JgcAM+YLgbHlTwS + wJFHH7mNUSuziVo1roViPqmBakalfnFMoXx4Up56f1abeIZbmHaOXpV0l2KSc6JlkHKuZ45yvWiMcc9p + i3LjaYty8miKcv1ninP/Zopz/2aKc/9minP/Zopz/2aKc/9m/2ATA/9yEgL/fxIA+YkRAOuRDgDflw0A + 1JsaAMubLAXEmToRvJVFHbWRTyqvjFg0qYlgPqSFaEWggm9MnIB1Upl+fFeVfIRbknqMX494lWOMd59m + inasaIh1u2qGdc1rhXXha4V28WqFdv1ohHb/Z4R2/2eEdv9nhHb/Z4R2/2eEdv9n/2IRA/90EQH/gQ8A + 8IsMAN+TCADYmggA0Z4XAMieKgTAnDgPuZhDHLKUTSirkFYzpY1ePaCJZUWchmxMmIRzUZSCelaQgIFb + jX6JYIp8kmSHe51nhHqpaoJ5uWuAectsf3ngbH958Gt/evxqf3r/aX96/2l/ev9pf3r/aX96/2l/ev9p + /2UQA/92DgH8gwwA5o0IANmWBQDUnAYAzaAUAMWhKAS9nzYOtZxBGq6YSyenlFQyopFcPJyNY0SXi2pL + k4hxUY+GeFaLhH9biIKHYIWBkGSBf5tof36nanx9t2x6fclteX3ebXl972x6fvxren3/aXp9/2l6ff9p + en3/aXp9/2l6ff9p/2gOAv95DAD0hQkA3JADANWYBADQnwUAyqMRAMGkJQO6ojQMsp9AGaqcSSWkmFIw + npVaOpiSYUOTj2hKj41vUIqLdlaHiX1bg4eFYH+FjmR8hJhoeYOla3aCtG10gsduc4LdbnOC7mx0gvtr + dIH/anSB/2p0gf9qdIH/anSB/2p0gf9q/2sMAv97CgDqiAUA2JMCANGbAwDMogMAxqYOAL6oIwK2pjIL + rqM+F6egSCOgnVAvmplYOZSXX0GPlGZJipJtT4aQdFWCjntbfoyDX3qLi2R2iZZoc4ija3CIsm1uh8Vu + bYfbbm2H7W1uh/trbob/am6G/2puhv9qbob/am6G/2puhv9q/24LAf5+BwDeiwAA1JYBAM2eAgDHpQEA + waoKALqrIAGyqjAJqqg8FaOlRSGcok4slZ9WN4+cXT+KmmRHhZhqToGWcVR8lHhZeJKAXnSRiWNwkJNn + bY+gamqOsGxojsNtZo3ZbWeN7GxnjfpraIz/amiM/2pojP9qaIz/amiM/2pojP9q/3IIAfSBAwDajgAA + 0JkAAMmhAADDqAAAvK0GALWvHACtry0Hpq05Ep6qQx6Xp0wqkKVTNIqjWz2FoGFFgJ5oTHudb1J3m3ZX + c5l+XG6Yh2Fql5FlZpaeaGOVrWphlcBrYJXXa2CU62tglPpqYZP/aWGT/2lhk/9pYZP/aWGT/2lhk/9p + /3YFAOaFAADVkgAAzJ0AAMSlAAC9rAAAtrIBAK+0GACotCkFoLM2EJmwQBuSrkkmi6xRMYWqWDmAqF9B + e6ZmSHakbE5xo3RUbaJ7WWighF1kn49hYJ+bZF2eq2danr5oWZ7VaFmd6mhZnPlnWZv/Z1mb/2dZm/9n + WZv/Z1mb/2dZm/9n/3oBANyKAADQlwAAx6EAAL+qAAC4sQAAsLcAAKi6EwCiuiUDmrkzDJO4PReMtkYi + hbROLH+yVjV6sF09da9jQ3CuaklrrHFPZ6t5VGKqglheqYxcWqmZX1eoqWJUqL1jU6jUY1On6mNSpvlj + UqX/Y1Kl/2NSpf9jUqX/Y1Kl/2NSpf9j7oAAANaPAADKnAAAwaYAALqvAACytgAAqbwAAKHACwCbwSAB + lMEvCY3AOhOGvkMdf71MJ3m7Uy90ulo3b7lhPWq4aENmt29IYbZ3TV21gFFYtYpVVLSXWFG0p1pOtLtc + TbXTXE2z6ltMsvldS7H/XUux/11Lsf9dS7H/XUux/11Lsf9d3ocAAM+WAADEogAAvKwAALS1AACrvAAA + ocEAAJjHBACSyRkAjMkpBYXINg5/yD8YecdIIHPGUChuxVcvacReNWTDZTtgw2xAXMJ0RFfCfUhTwohM + T8GVT0zBpVFKwrlSSMLSUkjB6lJGwPpTRb//VUW//1VFv/9VRb//VUW//1VFv/9V1o4AAMicAAC+qAAA + trIAAK27AACjwQAAmccAAI/MBACI0RAAg9IjAn3SMAl30jsRctFEGWzRTCBn0FMmY9BbLF7QYjFaz2k1 + Vs9xOVLPez1Oz4ZAS8+TQ0fQo0VF0LdGQ9HRR0PQ6EZCz/dIQM3/SkDN/0pAzf9KQM3/SkDN/0pAzf9K + zZcAAMGkAAC4sAAAr7kAAKXBAACaxwAAj8wAAIbSBAB92QkAedwdAXTdKwVv3TYLat1AEmXdSBhg3VAd + XN1XIljdXiZV3WYqUd5uLk3edzFK3oI0R9+ONkTfnjhC4LE5QOHIOj/i4jk+3/M6PN7+PDze/jw83v48 + PN7+PDze/jw83v48xKAAALmsAACwtwAApsAAAJvHAACQzAAAhdEAAHvYAwB15A8AcOUfAmvmKgVl5zQJ + Yec8DlzoRBNY6EoXVOlRGlHpWR5N6WAhSupoJEfqcCZE63opQeyGKz7sky077aMvOe62MDfvzDE27+Qx + Ne70MTXu9DE17vQxNe70MTXu9DE17vQxvKkAALK1AACovwAAnMcAAJDMAACF0QAAetYAAHDcAABr7hEA + Zu8eAmHwKARc8TEHWPI4ClPzPw1Q80UPTPRMEkn0UhVG9VkXQ/VgGUD2aBs993EeOvd7IDf4hyI0+ZQj + MvqkJTD7tCYu+8cmLfzbJy382yct/NsnLfzbJy382yct/NsntLIAAKq+AACexgAAkcwAAIXRAAB51gAA + btsAAGbrAQBh+A8AW/obAVb7JANS/CwFTv0zB0r9OQhH/j8KQ/5EDED/Sg0+/1AOO/9WDzj/XRE1/2US + Mv9vFC//eRUs/4UXKf+SGCf/nxkm/60aJP+7GyT/uxsk/7sbJP+7GyT/uxsk/7sbrLwAAKDFAACTywAA + hdAAAHnVAABt2wAAYuAAAFr0AABV/woAUP8UAUv/HQJH/yUDQ/8rBED/MQU8/zYGOf87Bzb/QAgz/0UJ + MP9LCS3/UQoq/1gLJ/9gDCT/ag0h/3QOHv9/Dxz/ig8a/5UQGf+fEBn/nxAZ/58QGf+fEBn/nxAZ/58Q + osQAAJXLAACH0AAAedUAAGzbAABg4AAAVeQAAE77AABJ/wIARP8MAD//FQE7/xwBOP8iAjT/JwMx/ywD + Lf8wBCr/NQQn/zkFJP8+BSL/RAYe/0oHG/9RBxj/WQgU/2IIEf9rCQ3/dQkL/34KCf+HCgn/hwoJ/4cK + Cf+HCgn/hwoJ/4cK/zwkBf82Lwf/PC4H/0M0Cf9HPQv/SUcN/0dREP9FXRT/QmgY/z5zHP87fR//OYch + /zePIv42liP9NZ0k/DSjJfs0qiX6M7Am+TO3Jvgyvyb3Mscm9jLRJvMx3CbxMeYl7zHvJe0x9iTsM/0k + 6zL/Jusy/ybrMv8m6zL/Jusy/ybrMv8m/z0kBf84LQf/PywH/0cyCP9LOwr/TEUN/0tQEP9JWxX/RmYZ + /0JxHf8/eyD+PIUi/DuNI/s5lCX6OJsl+TiiJvg3qCf3Nq8n9ja2J/U1vSf0NcYn8zXPJ/A12yfuNOYn + 6zTuJuk19ibpNv0n6DX/KOg1/ynoNf8p6DX/Keg1/ynoNf8p/z4kBf87Kwb/QyoH/0swCP9QOQr/UUMN + /1BNEP9NWRX/SmQa/kdvHvxEeSH6QYIj+D+LJfc9kib1PJkn9DygKPM7pijyOq0p8Tq0KfA5vCnvOcQp + 7jnOKew52inpOeUo5znuKOU69yjkOf0q4zn/LOM5/yzjOf8s4zn/LOM5/yzjOf8s/z8jBf8/KAb/SCcH + /1EuCP9VNwr/VkAN/1VKEP9TVhX9UGEa+kxsH/dJdiL1Rn8l80SIJ/FCjyjwQZYp70CdKu5ApCrtP6or + 7D+xK+s+uSvqPsIr6T7MK+c+2SvkPuQq4j/uKuA+9yzfPv4u3j3/MN09/zDdPf8w3T3/MN09/zDdPf8w + /0EiBf9DJQb/TiUG/1YsB/9bNAn/XD0M/1tHEPxYUhX4VV0b9FJoH/FPciPvTHwm7UqEKOtIjCrpR5Mr + 6EaaLOdFoS3mRagt5USvLuREty7jQ8Au4kPLLuBD2C3dROQt20TuL9lD9zHXQ/4z1EP/NNRD/zXUQ/81 + 1EP/NdRD/zXUQ/81/0IhBf9IIQX/VCMF/1wqBv9hMQj/YjoL/WFDD/deTRXyW1ka7lhkIOpVbiToUngn + 5lCAKuROiCziTZAt4UyXLuBLni/eSqUw3UqsMNxJtTDbSb8w2knKMNhJ1jDVSuQx0knuNM9I+DfOSP84 + zEj/OcxI/zrMSP86zEj/OsxI/zrMSP86/0QhBf9NHgX/WSEF/2InBf9nLgf/aTYK92g/DvFlSRPrYVQa + 519fH+RbaiThWXQp3lZ9LNxUhS7aU4ww2VKTMddQmjLVUKE01E+pNdJOsTbRTrs20E3GN85N0zfMTuE3 + yU7tOsdN+DzFTf89xE3/P8NM/z/DTP8/w0z/P8NM/z/DTP8//0UgBf9RGwT/Xx8E/2gkBP9tKwb6bzII + 8W47DOtsRBHlaU8Y4WZbHt1iZiTZX28p1lx4LdNagDHRWIg0z1ePNs5WljjMVZ05y1SkO8lTrTzIU7Y9 + xlLBPcVSzj7DUt4+wFLrQL5S9kK8Uv9DulL/Q7pS/0S6Uv9EulL/RLpS/0S6Uv9E/0keBP9XGQT/ZBwD + /2whA/9yJwT1dS4G7HU2CeVzPw/fcEsV2m1XHNVpYSTRZWsrzmJ0MMtgfDTJXoM4x1yKOsVbkTzDWpg+ + wVmfQMBYqEG+V7JDvVe9Q7tWykS6VtpEt1foRbVW9EezVv1Islb/SLFW/0ixVv9IsVb/SLFW/0ixVv9I + /0wbBP9bFwP/aBoC/3EeAvt3IwPweikE53oxB+B5OgvZd0cS03NTHM5vXSXKbGcsxmhvMsNmdzfAZH47 + vmKFPrxgjEC6X5NDuF2bRbdcpEa1XK1Is1u5SbJbxkqwWtZKrlvmS6xb8kyqW/xMqVv/TKlb/0ypW/9M + qVv/TKlb/0ypW/9M/1AYBP9gFQL/bBgC/3UaAfd7HwHrfiQC4oArBNuANgfTfUMRzXlPG8h1WiXDcWMt + v25rM7xrczm5aXo9tmeBQLRliESyY49GsGKXSK5hn0qsYKlMql+1Tqlfwk+nX9JPpV/jT6Rf8VCiX/tQ + oV//UKFf/1ChX/9QoV//UKFf/1ChX/9Q/1MVA/9jEwL/cBUB/3kXAPN/GgDngx4B3oUkAdWFMgbOgkAQ + yH5MGsJ6ViS9dl8tuXNoNLVwbzqybnc+r2t+Qq1qhEaqaIxJqGaTS6ZlnE6kZKVQomOxUqFjv1OfY89T + nWPhVJxj71SbY/pTmmP/U5pk/1OaZP9TmmT/U5pk/1OaZP9T/1YSA/9nEgH/cxIA/nwTAO+CFADjhhcA + 2YkeANGJLwXJhj0Ow4NJGb1/UyO4e1wss3hlNK91bDqscnM/qXB6RKZugUekbIhLoWuQTp9pmFCdaKJT + m2euVZlnvFaXZsxXlmffV5Rn7leUZ/lWk2j/VZNo/1WTaP9Vk2j/VZNo/1WTaP9V/1gQAv9qEAH/dhAA + +H4OAOuFDgDfiQ4A1YwaAM2NLATFijsNvodGGLiDUSKzf1osrnxiM6p5aTqmdnBAo3R3RKByfkidcIVM + m2+NT5htlVKWbJ9VlGurV5JruVmQaslaj2rcWo5r7FmNa/hZjWv/WIxr/1eMa/9XjGv/V4xr/1eMa/9X + /1sNAv9sDgH/eAwA7oEKAN+HBwDZjAgA0Y8XAMmQKgPBjjgMuotEF7SHTiGug1crqYBfM6V9Zzqhem5A + nnh1RJp2e0mYdIJNlXOKUZJxk1SQcJxXjW+oWYtvtluKbsdciG7aXIdu61uHb/hah2//WYdv/1mHb/9Z + h2//WYdv/1mHb/9Z/14MAv9vDAD5egkA5IMFANmKBQDUjwYAzpIUAMaTJwK+kTYLt45CFbCLTCCqh1Uq + pYRdMqGBZTmdfmw/mXxyRJV6eUmSeIBNj3eHUY11kFWKdJpYh3OmW4VytF2DcsVegnLYXoJy6l2Bcvdc + gXP/W4Fz/1qBc/9agXP/WoFz/1qBc/9a/2ELAf9xCgDyfAYA3IUCANWNBADQkgQAypURAMKWJQK7lTQK + s5JAFK2OSh+ni1MpoYhbMZyFYjiYgmk/lIBwRJB+dkmNfX1NinuFUod5jlaEeJhZgnejXIB2sl5+dsNf + fHbWX3x26V98dvZdfHb/XHx2/1x8dv9cfHb/XHx2/1x8dv9c/2MKAf9zCADpfgIA2YgBANKPAgDNlAMA + x5gOAL+ZIgG3mDIIsJU+E6mSSB2jj1EnnYxZMJiJYDeUh2c+kIRuRIyCdEmJgXtNhX+DUoJ+jFZ/fJZa + fHuhXXp6sF94esFgd3rUYHZ66GB3evZed3r/XXd6/1x3ev9cd3r/XHd6/1x3ev9c/2YIAf51BQDfgQAA + 1YsAAM6SAQDJlwEAw5sLALucIAG0mzAHrJk8EaaWRhyfk08mmpBXL5SNXjaQi2U9i4lsQ4iHc0iEhXlN + gYSBUn2CilZ6gZNad4CfXXR/rV9yfr9hcX7TYXF+52BxfvVfcX7/XXF+/11xfv9dcX7/XXF+/11xfv9d + /2kGAPd4AgDchAAA0o0AAMuVAADFmgAAv54HALegHQCwny0GqZ06D6KaRBqbl00klpVVLZCSXDWLkGM8 + h45qQoOMcEh/indNfIl/UXiHh1Z0hpFZcYWdXW6Eq19shL1ga4PRYWuD5mBrg/Rfa4P/XmuD/11rg/9d + a4P/XWuD/11rg/9d/2wEAO17AADYhwAAzpEAAMeYAADBngAAuqEEALOjGgCsoysEpaE3DZ6fQhiXnEsi + kZpTK4yYWjOHlmE6gpRnQH6SbkZ6kHVLdo99UHKNhVRvjI9Ya4ubXGiKqV5mirpgZInPYGSJ5WBlifRf + ZYj/XWWI/11liP9dZYj/XWWI/11liP9d/3ABAOB+AADUiwAAypQAAMOcAAC8oQAAtaUAAK6nFgCnqCcD + oKY1C5mkPxWSokgfjKBQKIeeWDCCnF44fZplPnmYbER1l3NJcZZ6Tm2Ug1Jpk4xWZZKYWmKRp1xgkbhe + XpHNXl6Q5F5ej/NdXo//XF6P/1xej/9cXo//XF6P/1xej/9c/HQAANyDAADPjwAAxpgAAL6gAAC3pgAA + r6oAAKisEQChrSQCm6wxCZSqPBKNqUYch6dOJYKlVS19o1w0eKJjO3SgaUBvn3BGa514SmecgE9jm4pT + X5qWVlyapFlZmbZbV5nLW1eZ41tXmPJaV5f/WleX/1pXl/9aV5f/WleX/1pXl/9a7XgAANaHAADKkwAA + wZ0AALqkAACyqgAAqa8AAKGyCgCbsx8BlbMuBo6xOQ+IsEMYgq5LIXytUyl3q1owcqpgNm6pZzxqqG5B + Zad1RWGmfkpdpYhOWaSUUVajolRTo7RWUaPKVlGi4lZQofJWUKD/VlCg/1ZQoP9WUKD/VlCg/1ZQoP9W + 4H4AANCNAADFmQAAvKIAALSqAACssAAAo7QAAJm4AwCTuhgAjropBIe5NQuBuD8TfLdIHHa2UCNxtVcq + bbReMGizZDVksms6YLFzP1ywfENXr4ZHVK+SSlCvoE1NrrJOS67IT0uu4U9KrfJPSav/UEmr/1BJq/9Q + Sav/UEmr/1BJq/9Q2YUAAMqTAAC/nwAAt6gAAK6vAACltQAAm7oAAJG+AACKwREAhsIjAYDCMQd6wTsO + dcFEFnDATR1rv1QjZ75bKGK+Yi1evWkyWrxxNla8eTpSvIM+TruQQUu7nkRIu7BFRrvHRka74EVFuvJG + RLj/SEO4/0hDuP9IQ7j/SEO4/0hDuP9I0I0AAMOaAAC6pQAAsa4AAKi2AACeuwAAk8AAAInEAACAyQcA + fMsbAHfLKgNyyzYJbctAD2nLSBVkylAaYMpXH1zKXiRYyWYoVMluLFHJdjBNyYEzScmNNkbJnDhDya46 + QsrFOkHK3zpAyPE7Psb+PT7G/z0+xv89Psb/PT7G/z0+xv89x5YAALyiAACzrQAAqrUAAKC8AACVwQAA + isYAAIDKAAB3zwQAcNQQAG3VIQBp1i8DZdY6CGDWQw1c1ksRWdZTFlXWWhlS1mIdTtZqIUvXcyRH130n + RNiKKUHYmSs/2astPdrBLTza3C082O0tOtb6MDnW/jA51v4wOdb+MDnW/jA51v4wv58AALWqAACstAAA + orwAAJfCAACLxwAAgMsAAHbQAABt1QMAZd8MAGLgHQBf4SoCW+E0BVfiPQhT4kQLUONMDk3jVBFK5FwU + R+RkF0TkbBlB5XYcPuWCHjvmjyA5558iN+iyIzXoySM06eEjM+f1IzPm+iMz5vojM+b6IzPm+iMz5voj + t6gAAK6zAACkvAAAmMMAAIzIAACAzAAAddAAAGvVAABi2wEAXekOAFnqHQBV6ycCUuwwA07tOAVK7j8H + R+5GCUTvTAtC71MNP/BbDjzwYxA58WwSNvJ3FDPygxYx85EXL/ShGS31tBkr9scaKvbfGir25Roq9uUa + KvblGir25Roq9uUasLEAAKa7AACawwAAjcgAAIHMAAB10QAAadUAAF/bAABX5QAAU/QNAE/1GQBL9iIB + R/cqAkT4MQNB+TgEPvo+BTv6RAY4+0oHNftQCTL8WAov/WALLP1qDCn+dQ0m/4IOJP+PDyL/nhAh/60Q + H/++EB//xBAf/8QQH//EEB//xBAf/8QQqLoAAJzCAACPyAAAgs0AAHXRAABo1gAAXdsAAFPgAABM8AAA + R/8HAEP/EgA//xsAPP8iATn/KQE2/y4CMv8zAy//OQMs/z4EKv9EBCf/SwUj/1IGIP9bBx3/ZQcZ/3AI + Fv98CRT/iQkT/5UKEf+iChH/pgoR/6YKEf+mChH/pgoR/6YKnsIAAJHIAACDzQAAddIAAGjWAABc3AAA + UOAAAEblAABA+AAAO/8AADf/CQAz/xEAMP8YAC3/HgAq/yQBJv8oASP/LQEg/zECHf83Ahr/PAIW/0MD + E/9LAw//VAQL/10ECP9oBQT/cwUC/30GAP+IBgD/jAYA/4wGAP+MBgD/jAYA/4wG/y8oBP8uLQX/MywG + /zkxBv89Owj/PUYK/ztRDP84XA3/NWgP/zNyEf8wfBP/LoUV/i6NFv0tlBf8LJsX+yuhGPorpxj5K60Y + +CqzGPcquxj2KcMY9inLGPMp1hjxKOIX7ijrF+wo8xbrKvoW6in/GOop/xnqKf8Z6in/Geop/xnqKf8Z + /zAoBP8wKwX/NikF/z0wBv9BOQj/QkQK/0BPDP89Wg7/OmYP/zdwEv41ehT8M4MW+zKLF/kxkhj4MJkY + 9y+fGfYvpRn1LqsZ9C6yGfMuuRrzLcEZ8i3KGfAt1RntLeEZ6izqGOgt8xjnLfoZ5y3/GuYt/xzmLf8c + 5i3/HOYt/xzmLf8c/zEnBP80KAX/OicF/0IuBv9GNwf/R0IJ/0ZMDP9DVw7/QGMQ/T1uE/o6dxX4OIEX + 9jeJGPU2kBnzNZca8jSdGvE0oxvwM6kb7zOwG+4ytxvuMr8b7DLJG+sy0xvoMuAa5jLqGuQz8xrjMvoc + 4jL/HuEx/x/hMf8f4TH/H+Ex/x/hMf8f/zImBP84JAX/QCUF/0gsBf9MNQf/TT4J/0xJDP9JVA77Rl8R + 90NqFPVAdBfyPn0Z8TyGGu87jRvuO5Qc7DqaHOs5oB3qOacd6TitHeg4tR3nOL0d5jjHHeU30h3iN98c + 4DjpHN448x7dN/sg2zf/Ito3/yPaN/8j2jf/I9o3/yPaN/8j/zQmBP89IQT/RyME/08pBf9TMQb/UzsI + /1JFC/pQUA71TFsR8UpmFe5HcRjsRXoa6kOCHOhCih3nQZEe5kCXH+Q/nh/jP6Qf4j+rH+E+sx/gPrsf + 3z7GH94+0R/bPt8e2T7qINY98yPUPfsl0j3/J9E9/yjRPf8o0T3/KNE9/yjRPf8o/zcjBP9BHQT/TSAE + /1UnBP9ZLgX/WzcH+llBCvRWSw7vU1cR61BiFudObBnlS3Yc40p+HuFIhh/fR40g3keUId1GmiHbRaEi + 2kWoItlFsSLYRLoj1kTEI9VDzyPSRN0k0ETpJs1D9CnLQ/wryUP/LMhC/y3IQv8tyEL/LchC/y3IQv8t + /zwfBP9GGQP/VB4D/1sjA/9gKwT8YTMG9GA8Ce1dRg3oWlER5FddFuBVaBrdU3Id21F6H9lPgiHWTokj + 1U2QJNNMlybSS50n0EqkKM9KrCjOSbUpzEm/KstJyyrJSdoqxknnLMRJ8i7CSPwwwUj/Mb9I/zK/SP8y + v0j/Mr9I/zK/SP8y/0AcA/9NFwP/WRsC/2EgAv9mJgP2aC4E7mc3B+dkQQvhYk0Q3V9ZFdlcYxrVWW0e + 0ld1Is9VfSXNVIQozFKLKcpRkivJUZgsx1CgLsZPpy/ET7Aww067MMFOxzHATtUxvU7kMrtO8DS5Tfo1 + t03/NrZN/ze2Tf83tk3/N7ZN/ze2Tf83/0UYA/9SFQL/XxgB/2YcAfxrIgLxbSkD6G0xBeFrOwjbaUgN + 1WZUFNBjXxvNYGghyl1xJcdbeCnFWoArw1iGLsFXjTC/VpQxvlWbM7xUozS7U6w1uVO3NrhSwze2UtE4 + tFPhOLJS7jqwUvk7rlL/O65S/zuuUv87rlL/O65S/zuuUv87/0kVA/9XEwH/YxUB/2sYAPdwHQHrciMB + 4nMrAttyNgXUcEQMzmxQFMlpWhzFZmQiwmNsJ79hdCu8X3svul6CMbhciTS3W482tVqXOLNZnzmxWKg7 + sFeyPK5Xvz2tV809q1ffPqlX7D+nV/g/plf/QKVX/0ClV/9ApVf/QKVX/0ClV/9A/0wRAv9cEAH/ZxIA + /28UAPJ0FwDmdxwA3XcjANV4MgTOdkALyHJMFMNvVxy+bGAju2loKLhncC21ZHcxsmN+NLBhhDeuYIs5 + rF+TO6tdmz2pXaQ/p1yuQaVbu0KkW8pColvcQ6Bb60OfW/ZDnlv/Q51b/0OdW/9DnVv/Q51b/0OdW/9D + /08OAv9gDgH/aw4A+nIOAO53EADiehMA2HwdANB9LgPJez0KwnhJE710Uxu4cV0jtG5lKbFsbC6uaXMy + q2h6NqlmgTmnZIg8pWOPPqNil0GhYaBDn2CrRZ1fuEacX8dHml/ZR5lf6UeXYPVHlmD/R5Zg/0aWYP9G + lmD/RpZg/0aWYP9G/1ILAf9jCwD/bgsA8HUJAON6CQDbfQkA04AZAMuBKwLEfzoJvnxGErh5UBuzdlki + r3NiKatwaS+obnAzpWx3N6JqfTugaYQ+nmeMQZxmlEOaZZ1GmGSoSJZktUmUY8RKk2PVS5Fj50qQZPRK + kGT+SY9k/0mPZP9Jj2T/SY9k/0mPZP9J/1YKAf9mCQD5cAcA5HgEANp9BADVgQYAz4MVAMeFKAHAgzcI + uYFDEbN9TRquelciqndfKaZ1Zi+icm00n3B0OJxvejyabYE/l2yJQpVqkUWTaZpIkWilSo9oskyNZ8FN + jGfTTopn5k2KZ/NMiWj9TIlo/0uJaP9LiWj/S4lo/0uJaP9L/1kIAf9oBwDwcwQA3HsBANWBAwDRhAUA + y4cSAMOIJQG8hzQHtYRAEK+BSxmqflQhpXtcKKF5ZC6ddms0mnRxOJdzeDyUcX9AknCGQ49ujkeNbZdK + imyiTIhrr06Ha79PhWvRUIRr5E+Ea/JOg2v9TYNr/02Da/9Ng2v/TYNr/02Da/9N/1wHAP9rBQDndQAA + 2X4AANKEAgDNhwMAx4oPAL+LIwC4ijIGsYg+D6uFSRimglIgoX9aJ519YS6ZemgzlXhvOJJ3dTyPdXxA + jHSDRIpyjEiHcZVLhXCgToJvrVCBb71Rf27PUn5u41F+b/JQfm/8T35v/05+b/9Ofm//Tn5v/05+b/9O + /14FAPxtAgDfdwAA1YAAAM6HAADJigEAw40MALyOIAC1jjAFrow8DaiJRxaihlAfnYNYJpiBXy2UfmYz + kXxsN417czyKeXpAh3iBRIV2iUiCdZNMf3SeT31zq1F7crtSenLNU3ly4lN5cvFReXL8UHly/095cv9P + eXL/T3ly/095cv9P/2EDAPVvAADcegAA0oMAAMuJAADGjQAAwJAIALiRHQCxkS0Eqo86DKSMRRWeik4e + mYdWJZSFXSyQgmQyjIBrN4l/cTyGfXhAg3x/RYB6h0l9eZFMenicT3h3qVJ2drlTdHbMVHN24VRzdvBS + dHb8UXR2/1B0dv9QdHb/UHR2/1B0dv9Q/2QBAO1xAADZfQAAz4YAAMiMAADCkAAAvJMFALSUGgCulCsD + p5M4C6CQQhSbjkwclYtUJJCJWyuMh2IxiIVpNoWDbzuBgnZAfoB9RHt/hUl4fo9MdXyaT3J7p1Jwe7dU + bnrKVG5631Rueu9Tbnr7Um56/1Fuev9Rbnr/UW56/1Fuev9R/2YAAON0AADVgAAAzIkAAMWPAAC+lAAA + uJYBALCYFwCqmCgCo5c1CZ2UQBKXkkkbkZBSIoyOWSqIjGAwhIpnNYCIbTt9h3Q/eYV7RHaEg0hyg41M + b4KYT2yBpVJqgLVUaIDIVGh/3lRof+9TaH/7Uml//1Fpf/9RaX//UWl//1Fpf/9R/2oAAN94AADSgwAA + yYwAAMGTAAC6lwAAs5oAAKybEwClnCUBn5szCJmZPhCSl0cYjZVPIIiTVyiDkV4uf5BkNHuOazl4jHI+ + dIt5QnCKgUdtiYpLaYeVTmaHo1FkhrNTYobGU2KF3VNihe5SYoT6UWOE/1FjhP9RY4T/UWOE/1FjhP9R + 9m0AANt8AADOhwAAxZAAAL2XAAC2mwAArp4AAKagDgCgoSIBmqAwBpSfOw6OnUUWiJtNHoOZVCV/l1ss + epZiMXaUaDdyk288b5J3QGuQf0Vnj4hJZI6TTGCNoE9ejbFRXIzEUluM21Fbi+1RXIv6UFyK/1Bciv9Q + XIr/UFyK/1Bciv9Q6HEAANaAAADKiwAAwZQAALmbAACxoAAAqKMAAKGkCQCbph0AlaYsBI+lOAuJo0IT + g6JKG36gUiJ5nlkodZ1fLnGcZjNtm204aZl0PWWYfEFhl4ZFXpaRSVqWnkxYla9OVpXCTlWU2k5Vk+xO + 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 + zX4AAMWEAAC/hwAAuYgDALGKFwCriikBpYk2B5+HQQ6ZhUoVlYJSHJCAWiKMfmAniXxnK4V7bTCCenQ0 + gHh7OH13gzx6dow/d3WXQ3V0o0Vzc7JHcXLESHBy2EhwcupHcHL3RnFy/0Rxcv9EcXL/RHFy/0Rxcv9E + /2EAAOBuAADTeQAAyoIAAMKHAAC7igAAtYsAAK2NFACnjSYBoYwzBpuLPg2WiUgUkYZQG4yEWCGIg18m + hYFlK4F/bC9+fnI0e315OHh7gTx1eoo/cnmVQ3B4oUVtd7BHbHfCSGt31khrdulHa3b2Rmt2/0Vrdv9F + a3b/RWt2/0Vrdv9F+GMAAN1xAADQfQAAx4UAAL+KAAC4jgAAsY8AAKmQEQCjkSMAnZAxBZePPAuSjUYS + jYtOGYiJVh+Eh1wlgIZjKn2Eai96g3AzdoJ3N3OBfztwf4g/bX6TQmp9n0VofK5HZnzASGV81Ehle+hH + ZXv1RmZ7/0Vme/9FZnv/RWZ7/0Vme/9F7mcAANl1AADNgAAAw4gAALuOAAC0kQAArJMAAKWUDACflR8A + mZUuA5OTOgmOkkMQiJBMF4SOUx2AjVojfIthKHiKZy11iW4ycYd1Nm6GfTprhYY+Z4SQQWSDnURigqxG + YIK+R1+C00dfgedHX4D1RmCA/0VggP9FYID/RWCA/0VggP9F5GsAANV5AADJhAAAwIwAALiSAACwlQAA + p5cAAJ+YCACZmRsAlJorAo6ZNgiJl0AOhJZJFX+UURt7k1ghd5JeJnOQZStwj2wvbI5zNGmNezhljIQ8 + YouOP1+Km0JciapEWom8RVmI0UVZiOZFWYf0RFmG/0RZhv9EWYb/RFmG/0RZhv9E4HAAANB+AADFiAAA + vJAAALOWAACrmgAAopwAAJmdAgCTnxYAjp8mAYmfMwWEnj0Lf5xGEnqbThh2mlUecplcI26YYydqlmks + Z5VxMGOUeDRgk4E4XJKMPFmSmT9WkahBVJC6QlKQz0JSj+VCUo70QlKO/0FSjf9BUo3/QVKN/0FSjf9B + 2nYAAMuDAADAjQAAt5UAAK+bAACnnwAAnaEAAJOjAACMpRAAh6UhAIOlLwN+pToIeaRDDnSjSxRwolMZ + bKFZHmigYCNln2cnYZ5uLF2ddjBanH8zVpuKN1ObljpQmqY8Tpq4PUyZzj1MmeQ9TJfzPUuW/z5Llv8+ + S5b/PkuW/z5Llv8+03wAAMaJAAC7kwAAs5sAAKqhAAChpQAAl6cAAIuqAACEqwgAf6wbAHutKgF3rDYF + cqxACm6rSA9qqlAUZqlWGWOpXR1fqGQhW6drJVindClUpn0tUKWIME2llDNKpKM1SKS2NkakzDZGo+M2 + RaLzN0Wg/zhFoP84RaD/OEWg/zhFoP84zIMAAMCPAAC2mQAArqEAAKWmAACbqwAAka4AAIawAAB7swAA + drQTAHK1IwBvtTACa7U7Bme0RApjtEwOYLNTE1yzWhdZsmEaVbJpHlKxcSFOsXolS7CFKEiwkitFsKEs + QrC0LkGwyi5Br+MtQK3yLz+s/jA+rP8wPqz/MD6s/zA+rP8wxYsAALqXAACxoAAAqacAAJ+tAACUsQAA + ibQAAH+2AABzugAAbLwJAGi+GgBlvikAYr41Al++PwVbvkcIWL5PDFW+Vg9Svl0ST71lFUy9bhhIvXcb + Rb2CHkK9jyA/vZ8iPb2yIzu9yCM7vOEjOrvyJDm5/iY4uf8mOLn/Jji5/yY4uf8mvpMAALSeAACrpwAA + oq4AAJezAACMtwAAgboAAHa9AABrwAAAYcUAAFvHDgBYyB4AVskrAFTJNgFSykADT8pIBUzKUAdKylgK + R8pgDETKaQ9BynMRPsp+EzvKixU5y5sXN8uuGDXLxhg1y+AYNMrwGTLI/BsyyP4bMsj+GzLI/hsyyP4b + t5wAAK6mAAClrwAAmrUAAI65AACCvQAAd8AAAGzDAABixwAAWMsAAE/QBABJ0xAAR9QdAEbUKgBE1TQA + Q9Y+AEHWRwE/1lADPddYBDvYYgY42GwHNtl4CTTZhQsx2pUML9uoDC7bvw0t3NoMLNrsDSrZ+A8q2foP + Ktn6DyrZ+g8q2foPsKUAAKevAACctgAAkLsAAIS/AAB4wgAAbMYAAGHJAABXzQAATtEAAEXWAQA92wYA + O+AUADnhIAA44ioANuIzADTjPAAz5EQBMeRNAS/lVwIt5WEDK+ZsBCjneQUm6IgGJOmZByLprQch6sMI + IOvbBx/q7wce6fMHHunzBx7p8wce6fMHqa4AAJ+2AACTvAAAhsEAAHnEAABsyAAAYcsAAFbPAABM0wAA + QtgAADrcAAA06AQAMuwQAC/tGQAt7iIAK+4qACnvMQAn8DgAJfFAACLxSQAg8lIBHfNdARr0agIX9XcD + FfaHAxP3mAQS96sEEPi+BA/50wQO+dkEDvnZBA752QQO+dkEobYAAJW9AACIwgAAesYAAG3KAABgzQAA + VNEAAEnWAAA/2gAANt4AAC7iAAAq8gAAJ/gIACT5EQAi+hgAH/sfABz7JQAZ/CsAF/0yABT+OgAR/kIA + Df9MAAr/WAAG/2UBA/9zAQH/gwEA/5MCAP+iAgD/sgIA/7YCAP+2AgD/tgIA/7YCl70AAIrDAAB8xwAA + bssAAGHPAABU1AAASNkAAD3dAAAz4QAAKuQAACPsAAAf+gAAHP8AABn/BgAW/w0AEv8TAA7/GAAL/x0A + CP8jAAX/KgAB/zIAAP86AAD/RQAA/1EAAP9eAAD/bAAA/3oAAP+HAAD/lAEA/5cBAP+XAQD/lwEA/5cB + /xctA/8cKQP/HigD/yMvA/8lOAP/I0ME/yBOBP8dWgX/G2UF/xhwBf8WeQX+FoEF/BWJBfsVjwX6FJYF + +RSbBPgToQT3E6YE9hOsBPUTsgT0ErkE8xLCBPIRywTwEdYE7RDiA+sQ6wPoEPMD6BH7BOcR/wXnEf8F + 5xH/BecR/wXnEf8F/xsqA/8gJgL/IiUC/yktA/8rNgP/KkAE/ydMBP8kVwX/IWIG/h9tBvwcdwb6HH8G + +BuHBvYbjQX1GpMF9BqZBfManwXyGaQF8RmqBfAZsAXvGLgF7hjABe0YyQXrF9UE6RfhBOYW6gTkF/QF + 4xj7BuMY/wfiGP8H4hj/B+IY/wfiGP8H/x8nA/8kIgL/KCIC/y8qAv8yNAP/Mj0E/y9JBP8sVAX9KV8G + +SZqBvYkdAb0I3wG8iOEBvEiiwbvIpEG7iGXBu0hnAbsIKIG6yCoBuogrgbpILYG6B++BucfyAbmH9QF + 4x7gBeAf6wXfH/QH3h/8Cdwf/wrbIP8K2yD/Ctsg/wrbIP8K/yMjAv8oHQL/MB8C/zYnAv85MAL/OjoD + /zdFBPs0UAX2MVwG8y9mB/AtcAftK3kH7CqBB+oqhwfpKY4H6CmUB+YpmgflKJ8I5CimB+MorAfiJ7QH + 4Se9B+AnxwffJ9MH3CfgBton6wjYJ/UK1Sj8DNMo/w3SKP8O0ij/DtIo/w7SKP8O/ygeAv8tGAL/NxwB + /z4jAf9ALAL/QTYD+kBBBPQ8TAXvOVcG7DdiB+k1bAjmNHUI5DN9COMyhAjhMosJ4DGRCd8xlwneMJ0J + 3TCjCdswqgnaMLIJ2TC7CdgvxgnWL9IJ0zDgCtAv6wzOMPUPzDD9EMsv/xHKL/8Syi//Esov/xLKL/8S + /ywZAv80FAH/PxkB/0UfAf9IJwH8SDAC80c7A+1ERgToQVIG5D9dB+E9aAjePHEJ3Dt5Cdo7gArZOocK + 1zmNC9U5kwzUOJkM0zigDdE4pw3QOK8Nzze4Ds43wg7MN84OyjfdD8c36RHFN/QUwzf9FcI2/xbBNv8X + wTb/F8E2/xfBNv8X/zEUAf87EQH/RhYA/0wbAP9PIgD1TysB7E01AuVLQAPgSUwF3EdYBtlGYwjVRGwK + 0kN0DNBCfA7PQoIPzUGJEMxAjxHLQJURyUCbEsg/ohPHP6oTxT+zFMQ+vhTCPsoUwT7ZFb4+5xe8PvIZ + uj38Grg9/xu4Pf8cuD3/HLg9/xy4Pf8c/zYQAf9CDgD/TBIA/1IWAPlVHADuVSQA5VQuAd5SOQLZUUcD + 01BTB89OXgrMTGcNyktvEMhKdxHGSX0TxEiEFMJIihbBR5AXwEaXF75Gnhi9RaYZu0WvGrpEuhq4RMcb + t0TVG7VE5ByyRPEesET6H69D/yCvQ/8gr0P/IK9D/yCvQ/8g/zoLAf9ICwD/Ug0A/1cQAPNaFADnWhsA + 3lkkANdZMwDRWUIEzFdOCMhWWQzEVGIPwVJqEr9RchW9UHkXu09/GblOhRq4TYsbtkySHLVLmR6zS6Ef + skqrH7BKtiCvSsMhrUnRIatK4iKpSe8jp0n5JKZJ/yWmSf8lpkn/JaZJ/yWmSf8l/z8GAP9NBwD/VwgA + 9FwJAOxeDADhXhEA2F4dANBgLwDKYD0DxV9KCMBdVA28W14RuVlmFbdXbRe0VnQaslR7HLFTgR6vU4cf + rVKOIaxRlSKqUJ0jqVCnJadPsialT78mpE7OJ6JP3yegTu0on074KZ5O/ymdTv8pnU7/KZ1O/ymdTv8p + /0QEAP9SBAD3WwMA5WACANxiBADYYggA0WUYAMpnKgDDZzkDvmVFCLljUA21YVkSsl9iFq9daRmtW3Ac + q1p3H6lZfSGnWIMjpVeKJKNWkSaiVZoooFSjKZ5UriqdU7wrm1PLLJpT3SyYU+wtl1P3LZZT/y2VU/8t + lVP/LZVT/y2VU/8t/0gCAP9WAADrXgAA3GQAANVoAgDSaQUAy2oTAMRsJgC+bDUDuGpCCLNoTQ2vZlYS + rGReF6liZRqmYGwepF9zIKFeeSOfXYAlnlyGJ5xbjimaWpYrmFmgLZZYqy6VWLgwk1jIMJJY2jGQWOox + j1j2MI9Y/zCOWP8wjlj/MI5Y/zCOWP8w/0wAAPpZAADhYgAA2GkAANFtAADMbgIAx28PAL9xIgC5cTIC + s28+B65tSQ2qa1MSpmlbF6NnYhugZWkfnWRvIptidiSZYXwnl2CDKZVfiyyTXpMukV2dMI9dqDKNXLYz + jFzGNIpc2DSJXOk0iFz1M4hc/jOIXP8yiFz/Mohc/zKIXP8y/1AAAPJcAADdZgAA020AAMxyAADHcwAA + wnMLALt1HwC0dS8CrnQ7BqlyRgylb1ASoW1YF51rXxuaamYfl2hsIpVncyWTZnkokGSAK45jiC2MYpAw + imGaMohhpTSGYLM2hWDDNoRg1TeDYOc2gmD0NoJg/jWCYP80gmD/NIJg/zSCYP80/1IAAOleAADaaQAA + 0HEAAMl1AADDdwAAvXcIALZ4GwCweSwBqng5BaV2RAugdE0RnHFVFphvXRuVbmMfkmxqIpBrcCaNancp + i2h+LIlnhS+GZo4xhGWYNIJlozaAZLE4f2TBOX5j1Dl9ZOY4fGT0N3xk/Td8ZP82fGT/Nnxk/zZ8ZP82 + /1UAAONhAADWbQAAzXQAAMZ5AAC/egAAunoEALJ8GACsfCkBpns2BaF6QQqceEsQmHVTFZR0WhqRcmEe + jXBnIotvbiWIbnQphmx7LINrgy+Baosyf2mVNX1ooTh7aK85eWe/Onhn0jt3Z+U6d2fzOXdn/Th3Z/83 + d2f/N3dn/zd3Z/83/VgAAOBlAADTcAAAyncAAMJ8AAC8fgAAtn4BAK9/FQCogCYAo380BJ19PwmYe0gP + lHlRFZB4WBmMdl8eiXRlIYZzayWDcnIpgXF5LH5vgTB8bokzem2TNndsnzl1bK06dGu+PHJr0Dxya+Q7 + cmvyOnJr/Dlya/84cmv/OHJr/zhya/849loAAN1oAADQcwAAx3oAAL9/AAC5gQAAsoEAAKuCEgClgyMA + n4MxA5qBPAiUf0YOkH1OFIx8VhmIel0dhXhjIYJ3aiV/dnApfHV3LHpzfzB3cogzdXGSN3JwnTlwcKs7 + bm+8PG1vzz1tb+M8bW7yO21u/Dptbv85bW7/OW1u/zltbv857l0AANpsAADOdgAAxH4AALyCAAC1hAAA + roQAAKeFDgChhiAAm4YvApaFOgeRg0QNjIJMEoiAVBiEflscgX1iIH57aCV7em4oeHl1LHV4fTByd4Yz + b3aQN211mzlrdKo7aXO6PWhzzj1nc+I9aHPxO2hy/Dpocv86aHL/Omhy/zpocv865mAAANdvAADLeQAA + wYEAALmGAACyiAAAqogAAKKJCgCcih0Al4osApKJOAaNiEILiIZKEYSFUhaAg1kbfYJfIHmAZiR2f2wo + c35zLHB9ey9tfIQzanuONmh6mjlleag7Y3i5PGJ4zD1ieOE9YnfxO2J3+zpjd/86Y3f/OmN3/zpjd/86 + 4mUAANNzAADHfQAAvoQAALaJAACujAAApYwAAJ6NBgCYjhkAko4pAY2ONQWIjD8KhItID3+KTxV8iFcZ + eIddHnWGZCJyhWomboRxKmuDeS5ogoEyZYCMNWJ/lzhgf6Y6Xn63O1x+yjxcfeA8XH3wO1x8+zpdfP85 + XXz/OV18/zldfP8532kAAM93AADEgQAAuogAALKNAACqkAAAoJAAAJiSAQCSkxUAjZMlAIiTMgODkjwI + f5FFDXuQTRJ3jlQXc41bHHCMYSBti2gkaYpvKGaJdyxjiH8wX4eJM1yGlTZahaQ4V4W1OlaEyTpWhN86 + VoPvOVaC+jlWgv84VoL/OFaC/zhWgv842m8AAMt8AADAhgAAt40AAK6SAACmlQAAm5UAAJKXAACMmA8A + h5kgAIOZLgJ+mDkGepdCC3WWShBylVEUbpRYGWuTXx1nkmYhZJFtJWGQdCldj30sWo6HMFaOkzNUjaI1 + UYyzNlCMxzdPjN42T4ruNk+K+jZQif82UIn/NlCJ/zZQif821HUAAMaBAAC7iwAAs5IAAKqXAAChmQAA + lpoAAIucAACFnggAgJ8aAHyfKQF4nzUDc54+CG+eRwxsnU4RaJxVFWWbXBlimmMdXplqIFuZciRXmHso + VJeFK1GWkS5Olp8wS5WxMUqVxTJJldwySZPuMkmS+TJJkf8ySZH/MkmR/zJJkf8yznsAAMGHAAC3kAAA + rpcAAKadAACbngAAkaAAAIWjAAB9pQEAd6YTAHSmIwBwpzABbaY6BGmmQwhlpUsMYqVSEF+kWRRbo2AX + WKNnG1Wibx5SoXghTqGDJUugjydIoJ0qRZ+uK0SfwytDn9srQ53tLEKc+SxCm/8tQpv/LUKb/y1Cm/8t + x4IAALuOAACylgAAqp0AAKGiAACWpAAAi6YAAICpAAB0rAAAbq0KAGquGwBnryoAZK81AmGvPwRerkcH + W65OCliuVg1VrV0RUq1kFE+sbBdLrHUaSKuAHUWrjB9Cq5shQKusIz6qwSM9qtojPansIzyn+SU7p/8l + O6f/JTun/yU7p/8lwIoAALaVAACtnQAApaQAAJupAACPqwAAhK4AAHqwAABuswAAZLYAAF+3EgBcuCEA + WrgtAFi4OAFVuEEDU7hJBVC4UQdNuFgKS7hgDEi4aQ9FuHIRQrd9FD+3iRY8t5gYOrepGTi3vxk3t9gZ + N7XrGjW0+Bs1s/8cNbP/HDWz/xw1s/8cuZIAALCcAACopAAAnqsAAJOvAACIsgAAfLUAAHG3AABmugAA + XL0AAFPABgBPwhUATcIjAEvDLgBKwzgASMRBAUbESgJExFIDQsRaBT/EYwc9xG0JOsR4CzfEhQ01xJQO + M8WmDzHFuw8wxdQPL8TqDy7C+BEtwf4SLcH+Ei3B/hItwf4Ss5sAAKqkAAChrAAAlrEAAIq1AAB+uAAA + c7sAAGe9AABdwAAAU8QAAEnIAABBzAYAPc0UADzOIAA6zisAOc81ADjPPgA30EcANdBRADPRWgEy0WUC + L9JxAy3SfgQr040FKdOgBifUtgYm1NAGJdPnBiTS8wgk0foIJNH6CCTR+ggk0foIraQAAKSsAACZswAA + jbgAAIC7AAB0vgAAaMEAAF3EAABSxwAASMsAAD/OAAA30gEAL9YGACraDgAp2xoAKNwlACfdLwAm3TkA + Jd5CACTfTQAj31gAIeBkACDhcgEe4oEBHOOTAhrjpwIY5L4CF+XYAhbk7AIW4vcCFuL3Ahbi9wIW4vcC + pqwAAJu0AACPuQAAgr0AAHXAAABpwwAAXMcAAFHKAABHzgAAPdEAADTVAAAs2QAAJN0AACHmCQAg5xMA + HugcABvpJAAZ6iwAF+o1ABXrPgAT7EgAEe1UAA7uYQAM73AACvCBAAnxkwAH8qcABfO9AQT00gEE9OIB + BPTiAQT04gEE9OIBnrQAAJG6AACEvwAAd8IAAGnGAABcygAAUM0AAEXRAAA61QAAMdkAACjcAAAg3wAA + GuYAABfzAgAV9AoAEvUSAA/2GAAM9x8ACfcmAAb4LwAD+TgAAPpCAAD7TwAA/F0AAPxsAAD8fQAA/I8A + AP2gAAD9sQAA/b0AAP29AAD9vQAA/b0AlLsAAIfAAAB5xAAAa8gAAF3MAABQ0AAAQ9QAADjZAAAu3QAA + JOAAABzjAAAU5QAAEPEAAAz7AAAJ/wAABv8GAAL/CwAA/xEAAP8YAAD/HwAA/ycAAP8wAAD/OwAA/0gA + AP9XAAD/ZgAA/3YAAP+FAAD/kwAA/5wAAP+cAAD/nAAA/5wA/w4pAv8TJQL/EiUB/xYsAf8WNgL/FEAC + /xFMAv8NWAL/CmMC/whuAv8HdwL9Bn8C+wWGAfoFjQH5BJMB9wSYAfYDnQH2A6IB9QKoAfQBrgDzAbUA + 8QC9AO8AxQDuAM8A7ADcAOoA5gDnAPAA5gD4AOYA/gDlAP8B5QD/AeUA/wHlAP8B/xQmAv8WIgH/GCEB + /x4qAf8eNAH/HD4C/xlJAv8WVQL/E2AC/RBrAvoOdAL4Dn0C9g2EAvUMigLzDJAB8guWAfELmwHwCqAB + 7wqmAe4JrAHtCbMA7Ai7AOsIxADqB88A5wbbAOUF5gDjB/AA4Qj4AeEJ/wHgCv8C4Ar/AuAK/wLgCv8C + /xgiAv8bHQH/Hx4B/yUnAf8nMQH/JTsB/yJGAv8fUgL7HF0C9xloAvQXcQLyF3oC8BaBAu8VhwLtFY4C + 7BSTAusUmQHqE54B6ROkAegTqgHnErEB5hK5AeURwwHkEc4B4RDbAN4Q5gDdEvAB2xP5AtkU/wPYFf8E + 2BX/BNgV/wTYFf8E/xweAf8fGAH/JxwB/y0jAf8vLQH/LjcB/ytCAvkoTgL0JVkC8CNkAu0hbQLrIHYC + 6R9+AucehALmHooC5R6QAuQdlgLjHZsC4hyhAuEcqAHfHK8B3hu4Ad0bwQHcG80B2hrbAdYc5wLUHPED + 0h76BdAe/wbPHv8Gzx7/Bs8e/wbPHv8G/yEZAf8lEwH/LxgA/zQfAP82KAD/NjIB9zQ+AfExSQLsLlUC + 6CxfAuUqaQPjKXID4Sl6A98ogQPeKIcD3SeNA9snkwLaJ5kC2SafAtgmpgLWJq0C1Sa2A9MmwAPSJcsD + 0SXZA84m5gXLJ/EGySf6CMgn/wnHJ/8Kxyf/Cscn/wrHJ/8K/yYUAf8tEAD/NxUA/zwbAP8+IwD4PSwA + 8Dw4Aek5QwHkN08C4DVaAt00ZQLaM24D2DJ2A9YyfQTUMYME0zGJBNExjwXQMJUFzzCbBs4wogbNMKkG + yzCyBsowvAfJL8gHxy/VB8Qw4wjCMO8LwC/5DL4v/w29L/8OvS//Dr0v/w69L/8O/ysOAP81DAD/PhAA + /0MVAPxEHADwRCUA6EIwAOFAPADcPkkB2D5VAtQ9YAPRPGkFzjxxBsw7eAfLO38HyTqFCMg6ignHOZAJ + xTmWCsQ5nQrDOaULwTitC8A4uAy+OMQMvTfRDLs44Q24N+0Ptjf4EbU3/xK0N/8StDf/ErQ3/xK0N/8S + /zAIAP88CAD/RQsA/0kPAPRKFQDpSR0A4EcnANlHNQDTR0MBz0dQA8tGWgXIRWQHxURsCcNEcwrBQ3oL + wEKADL5Chg29QYwOvECSD7pAmQ+5QKAQtz+pEbY/tBG1P8ASsz7OErE/3hKvPusUrT72Fqw+/harPv8X + qz7/F6s+/xerPv8X/zUDAP9CBAD/SgYA9U4IAO1PDADiThMA2U0eANFPLwDMUD4Bx1BKA8NPVQa/TV8J + vUxnC7tLbg25SnUPt0l7ELVIgRG0SIcSskeOE7FGlRSvRpwVrkWlFqxFsBerRbwXqUTKGKhE2xilROkZ + pET1GqNE/RuiRP8bokT/G6JE/xuiRP8b/zsAAP9HAQD1TwAA5FMAANxUAwDZUggA0VUYAMpXKgDEWDkB + v1dGBLtWUQe4VFoKtVNiDbJRag+wUHERrk93E61OfRWrToMWqU2JF6hMkBmmTJgapUuhG6NLrByiSrgd + oErHHZ9K2B6dSucem0r0H5pK/B+ZSv8fmUr/H5lK/x+ZSv8f/0AAAP9MAADnUwAA3FkAANVcAQDRWwQA + y1sUAMReJgC+XzUBuV5CBLRcTQixW1YLrVleDqtXZhGpVmwUplVzFqVUeRejU38ZoVKGG6BSjRyeUZUe + nFCeH5pQqCCZT7Uhl0/EIpZP1CKUT+Yjk0/yI5JP/CORT/8jkU//I5FP/yORT/8j/0QAAPVQAADfWAAA + 1l8AAM9iAADLYgEAxWEOAL5kIQC4ZDEBs2Q+BK5iSQiqYFIMp15aD6RdYhKiW2kVn1pvF51ZdRqbWHsb + mleCHZhWiR+WVpEhlFWaI5JUpSSRVLIlj1TBJo5U0ieNVOQni1TxJotU+yaKVP8milT/JopU/yaKVP8m + /0gAAOpTAADbXgAA0WQAAMtoAADGaAAAwGcKALloHQCzaS0Armk6A6lnRQelZU8LoWNXD55iXhObYGUW + mV9sGJdechuVXXgdk1x/H5FbhiGPWo4jjVqXJYtZoieKWK8oiFi+KYdY0CqFWOIqhVjwKYRY+imEWP8o + hFj/KIRY/yiEWP8o/0sAAONXAADYYgAAzmkAAMZsAADBbQAAu2wGALRtGgCubioAqW03A6RsQgegakwL + nGhUD5lmXBOWZWIWk2RpGZFjbxyPYXUejWB8IYtggyOJX4slh16VKIVdoCmDXa0rgVy8LIBczi1/XOEt + flzvLH5c+it+XP8qflz/Kn5c/yp+XP8q+k4AAOBbAADUZgAAym0AAMNwAAC9cQAAt3ADALBxFgCqcicA + pXE0AqBwPwabbkkLl2xRD5RrWRORaWAWjmhmGYxnbByJZnMfh2V5IYVkgSSDY4kngWKTKX9hnit9Yast + e2C6LnpgzC95YOAveWDvLnhg+S14YP8seGD/LHhg/yx4YP8s81EAAN5fAADRaQAAx3AAAMB0AAC5dQAA + s3MAAKx0EwCmdSQAoXUyApx0PQWXckcKk3BPDo9vVhKMbV0WiWxjGYdrahyEanAfgml3IoBofyV9Z4co + e2aQKnllnC13ZKkudmS4MHRkyjBzY94wc2TuL3Nk+S5zY/8tc2P/LXNj/y1zY/8t61QAANtiAADObQAA + xHMAAL13AAC2eAAAr3cAAKh4EACieCEAnXkvAZh3OgWTdkQJj3RNDYtzVBGIcVsVhXBhGIJvZxt/bm4f + fW11IntsfCV5a4UodmqPK3Rpmi5yaKcwcGi3MW9nyTFuZ90xbmftMG5n+C9uZ/8ubmf/Lm5n/y5uZ/8u + 5lcAANhmAADLcAAAwncAALp6AACzfAAAq3oAAKR7DACefB4AmXwsAZR7OASPekIIi3hKDYd3UhGEdVkU + gXRfGH5zZht7cmwfeXFzInZweyV0b4MocW6NK29tmC5tbKUwa2y1MmprxzJpa9wyaWvsMWlr+DBqav8v + amr/L2pq/y9qav8v41sAANRpAADIcwAAv3oAALd+AACvfwAAp30AAKB/CQCafxoAlYApAJB/NQOLfkAH + h3xIDIN7UBCAelcUfXheF3p3ZBt3dmoedHVxInJ0eSVvc4EobHKLK2pxli5ocaMwZnCzMmVwxjJkb9sy + ZG/sMWRv9zBlbv8vZW7/L2Vu/y9lbv8v4F8AANFtAADFdwAAvH0AALSBAACsgwAAo4EAAJuCBQCVgxcA + kIQmAIyDMwKHgj0Gg4FGCn+ATg98flUTeH1cFnV8Yhpze2gecHpvIW15dyRqeH8oZ3eJK2V2lC5idqIw + YHWyMV90xDJedNoyXnTrMV9z9zBfc/8vX3P/L19z/y9fc/8v3WQAAM1xAADCegAAuYEAALGFAACohgAA + noUAAJeGAACQhxMAjIgjAIeIMAGDhzoFfoZDCXuFSw13hFMRdINZFXGCYBlugWYca4BtIGh/dSNlfn0n + Yn2HKl98ki1de6AvW3uwMFl6wzFYetgxWXnqMFl49jBZeP8vWXj/L1l4/y9ZeP8v2WgAAMp1AAC/fgAA + toUAAK2JAACjigAAmYoAAJGLAACLjA4Aho0eAIKNLAF+jDcDeoxBB3aLSQtyilAPb4lXE2yIXRdph2Qa + ZoZrHmOFcyFghHskXYOFKFqCkCtXgp4tVYGuLlOBwS9SgNYvU3/pL1N/9i5Tfv8uU37/LlN+/y5Tfv8u + 024AAMV6AAC7gwAAsokAAKqOAACfjgAAlI8AAIuQAACFkQgAgJIZAHyTKAB4kzMCdJI9BXCRRgltkE0M + apBUEGePWxRkjmIXYI1pG12McB5ai3khV4uDJFSKjidRiZwqT4msK02IvyxMiNUsTIfpLEyG9SxMhf8r + TIX/K0yF/ytMhf8rznQAAMF/AAC3iAAAro8AAKWSAACakwAAj5QAAISWAAB+lwEAeJgTAHSZIgBxmS8B + bpk5A2qYQgZnmEoJZJdRDWGXWBBell8TW5VmFliUbhpUlHYdUZOAIE6SjCNLkpklSZGqJkeRvSdGkNMn + Ro/oJ0aO9ShGjf8oRo3/KEaN/yhGjf8oyHoAALyFAACyjgAAqpQAAKCXAACVmAAAipkAAH+cAAB2ngAA + cJ8LAGygHABpoSkAZqE0AWOgPgNgoEYGXaBOCVqfVQtXn1wOVJ5jEVGdaxROnXQXS5x+GkiciR1Fm5cf + Q5unIEGbuyFAmtEhQJnnIT+Y9CI/l/8iP5f/Iz+X/yM/l/8jwoEAALeMAACulAAAppoAAJqcAACPnQAA + hJ8AAHqiAABtpgAAZ6cDAGKoFABfqCIAXakuAFqpOAFYqUECValJBFOoUQdQqFgJTahfC0unaA5Ip3EQ + Rad7E0KmhxU/ppQXPKalGTuluRk5pc8ZOaTmGTij8xo4of4cOKH/HDih/xw4of8cvIkAALGTAACpmwAA + oaEAAJSiAACJpAAAfqcAAHSpAABprAAAXa8AAFexCQBTsRgAUbIlAE+yMABOsjoATLNDAUqzSwJHs1ME + RbJbBUOyYwdAsmwJPbJ3Czuygw04sZEPNrGiEDSxthAysc0QMrDkEDGv8xIwrv4TMK7+EzCu/hMwrv4T + tZEAAKybAACkogAAmqcAAI6pAACDrAAAeK8AAG2yAABhtAAAVrYAAEu6AABGuwwARLwaAEK8JgBAvTAA + P705AD69QgA8vksAOr5UATm+XQI2vmcDNL5yBDK+fgYvvo0HLb6eCCu/sggqv8kIKr7jCCi98gknu/4K + J7v+Cie7/gonu/4Kr5oAAKeiAACeqQAAk64AAIexAAB7tAAAb7YAAGO4AABYuwAATr0AAETBAAA6xQAA + NMcKADHIFwAwyCIAL8ksAC3JNQAsyT4AK8pIACrKUgAoy10AJ8tpACXMdgEjzIUBIc2XAR/NqwIezcQB + Hc3fARzM7wIcyvsEHMr7BBzK+wQcyvsEqaMAAKCqAACVsAAAibQAAH23AABwugAAZLwAAFi/AABOwQAA + Q8UAADrIAAAxywAAKc4BACHSBgAc1A4AG9UZABrVIwAY1i0AF9c3ABbYQgAV2U4AFNpbABPaaQAR23kA + ENyLAA3dnwAM3rcACt7SAAnd6QAK3PcACtz3AArc9wAK3PcAo6sAAJixAACMtgAAf7oAAHK9AABlvwAA + WMIAAE3FAABCyQAAOMwAAC/PAAAm0gAAHtUAABfZAAAQ3AMADeIMAAzjFgAK5B8ACOQoAAflMgAF5j0A + A+ZKAADnWAAA52cAAOd5AADnjAAA6KEAAOi3AADpzAAA6eMAAOnkAADp5AAA6eQAmrIAAI64AACBvAAA + c78AAGbCAABZxgAATMkAAEDNAAA20AAALNMAACPWAAAa2gAAE90AAAvfAAAG5gAABO8DAAHuCgAA7hIA + AO4aAADuIwAA7y0AAO84AADwRQAA8VQAAPFkAADydwAA84kAAPOcAAD0rQAA9b8AAPXAAAD1wAAA9cAA + kbkAAIO+AAB2wQAAZ8UAAFnJAABMzAAAP9AAADTUAAAp2AAAH9wAABbfAAAO4QAABuMAAADlAAAA8AAA + APYAAAD2AAAA9gQAAPYLAAD2EwAA9xwAAPgmAAD5MQAA+j8AAPxOAAD8YAAA/XEAAP6CAAD/kAAA/58A + AP+gAAD/oAAA/6AA/wUlAf8HIQH/AyAB/wcpAP8GMwD/Az4A/wBKAP8AVgD/AGEA/wBsAP4AdQD8AHwA + +QCDAPcAigD1AI8A8wCUAPIAmQDwAJ4A7gCkAOwAqQDrALAA6gC3AOkAwADoAMkA5wDUAOYA4QDlAOsA + 5QDzAOQA+QDkAP0A4wD/AOMA/wDjAP8A/wsiAf8MHQH/DB4A/xEnAP8QMAD/DDsA/whHAP8FUwD/Al4A + +wBpAPgAcgD2AHoA9ACBAPMAhwDxAI0A7wCSAO4AlwDsAJwA6gChAOgApwDnAK4A5QC1AOQAvgDjAMgA + 4gDTAOEA4ADgAOoA3wDyAN4A+gDdAP8A3AD/ANwA/wDcAP8A/xAdAf8RGQD/FRwA/xolAP8aLQD/FjgA + /xNDAP0QTwD4DFsA9QllAPIIbgDwB3cA7gZ+AOwFhADrBYoA6gSPAOgDlADnApoA5QKfAOQBpQDiAKwA + 4AC0AN8AvADeAMcA3ADSANsA3wDaAOoA2AL2ANUF/QDUBv8A1Ab/ANQG/wDUBv8A/xUZAf8VEwD/HhkA + /yIhAP8jKgD/IDQA/B0/APYaSwDxF1YA7RRhAOoTawDoEnMA5hF6AOQQgQDjEIcA4g6MAOEOkgDgDZcA + 3g2dAN0MowDcDKoA2guyANkLuwDXC8YA1QvSANMM4gDRDu0AzhH3Ac0S/gHMEv8BzBL/AswS/wLMEv8C + /xkTAP8dDgD/JhUA/yocAP8rJQD8Ki8A9Cc6AO4jRgDpIVEA5R9cAOIdZgDfHG8A3Rx2ANwbfQDaG4MA + 2RqJANgajwDWGpQA1RqaANMaoADSGqcA0RqwANAauQDOGsQAzRnRAMsb3wDHHOwBxR32AsQd/gPDHf8E + wx3/BMMd/wTDHf8E/x4MAP8mCwD/LhAA/zIWAP8yHgD0MSgA7C8zAOUsPwDgKUsA3ChXANknYQDWJ2oA + 0ydyANIneQDQJ38BzyeFAc0niwHMJ5AByyeWAconnAHJJ6QCxyesAsYntQLEJsECwybNAsEn3QK+J+oE + vCf1Bboo/Qa5KP8HuSf/B7kn/we5J/8H/yMHAP8uBwD/NgoA/zkPAPc5FgDsNx8A4zQrAN0yNwDXMkUA + 0zNRAM8zXADMM2UByjNtAsgzdALHMnoDxTKAA8QyhgPCMowEwTKSBMAxmAS/MZ8FvTGoBbwxsgW6ML0F + uTDKBrcw2ga1MOcIsjDzCbEw/AqwMP8LsDD/C7Aw/wuwMP8L/ygBAP81AwD/PAUA9z8IAO8+DQDkPBUA + 2zkhANQ7MQDOPT8Ayj5MAMY+VwHDPWADwT1oBL88bwS9PHYFvDt8Bro7gQa5OocHtzqNCLY6lAi1OZsJ + szmkCbI5rgqwObkKrzjHCq441gurOOUMqTjyDag4+w6nOP8Ppjj/D6Y4/w+mOP8P/y8AAP87AAD1QgAA + 5UQAAN1DAwDbQAkA00IaAMxFKwDGRzoAwkdHAb5HUQK7RlsEuEVjBrZEage0Q3EIskN3CbFCfQqvQoML + rkGJC61BkAyrQJcNqkCgDqhAqg6nP7UPpT/DEKQ/0xCiP+MRoD/wEp8/+hKeP/8TnT//E50//xOdP/8T + /zYAAPxBAADlRgAA3EwAANVOAADSSwQAzEsUAMVOJgC/TzUAuk9CAbZPTQOzTVYFsExfB65LZgmsSm0K + qkpzDKhJeQ2nSH8OpUiFD6RHjBCiR5MRoUacEp9GphOdRbIUnEXAFZtF0BWZReEVl0XvFpZF+ReVRf8X + lUX/F5VF/xeVRf8X/zsAAPBFAADfTgAA1VQAAM9WAADLVAEAxVMPAL5VIQC4VjEAs1Y+Aa9VSQSsVFIG + qVNaCKZSYgqkUWgMolBvDqBPdQ+fTnsRnU2BEptNiBSaTJAVmEyYFpZLoxeVS68Yk0u9GZJKzRqQSt8a + j0vtGo5K+BqNSv8ajUr/Go1K/xqNSv8a/z8AAOVKAADaVAAA0FsAAMldAADEXAAAv1oKALhbHACyXCwA + rVw6AalbRQSlWk4GollWCZ9XXgudVmUOm1VrEJlUcRGXVHcTllN+FZRShRaSUYwYkFGVGY5QoBuNUKwc + i1C6HYpPyh2JT90eiE/sHodP9x2GT/8dhk//HYZP/x2GT/8d+kMAAOJQAADVWgAAzGAAAMVjAAC/YgAA + uV8GALNgGACtYSgAqGE2AaRhQQOgX0sGnF5TCZldWwyXW2EOlVpoEZNZbhORWHQVj1h6Fo1XghiLVoka + iVWSHIdVnR6GVKkfhFS3IINUyCGCVNshgVTrIIBU9iCAVP4fgFT/H4BU/x+AVP8f8UYAAN5UAADSXgAA + yGUAAMFoAAC7ZwAAtWQCAK5lFQCoZiUAo2YzAZ9lPgObZEgGl2NQCZRhWAyRYF4Pj19lEY1eaxOLXXEV + iVx4GIdbfxqFW4ccg1qQHoFZmiB/Wachfli1I3xYxiN7WNojeljqI3pY9iJ6WP4helj/IXpY/yF6WP8h + 6UoAANtZAADOYwAAxWkAAL1sAAC3awAAsGgAAKlpEQCjaiEAn2ovAJpqOwOWaEUGkmdNCY9mVQyMZFwP + imNiEYdiaBSFYW4Wg2B1GIFgfBt/X4QdfV6OH3tdmCF5XaUjeFyzJHZcxSV1XNgldVzpJXRc9SR0XP4j + dFz/InRc/yJ0XP8i5k4AANhcAADLZgAAwmwAALpvAACzbwAArGwAAKVtDQCfbh4Amm4tAJZuOAKSbEIF + jmtLCIpqUguHaFkOhWdfEYJmZhOAZWwWfmRzGXxkeht6Y4IeeGKMIHZhliN0YaMlcmCyJnFgwydwYNYn + b2DoJm9g9SVvX/0kb1//JG9f/yRvX/8k5FIAANRgAADIagAAv3AAALdzAACvcwAAqHAAAKFxCgCbcRsA + lnIqAJJxNgKNcEAFim9ICIZuUAuDbFcOgGtdEH1qYxN7aWoWeWlxGXdoeBx1Z4Aec2aKIXBllCNvZaEl + bWSwJ2tkwShqY9UoamPnJ2pj9CZrY/0la2P/JWtj/yVrY/8l4VYAANFkAADGbQAAvHMAALR2AACsdgAA + pHMAAJ10BwCXdRgAknUnAI51MwGJdD0EhnNGB4JyTgp/cVUNfG9bEHluYhN3bmgWdW1vGXJsdhxwa34f + bmqIIWxpkyRpaZ8maGiuJ2ZowChlZ9MoZWfnKGVn9CdmZv0mZmb/JWZm/yVmZv8l3loAAM9nAADDcAAA + unYAALJ6AACoeQAAoHcAAJl4AwCTeRUAjnkjAIp5MAGFeDsDgXdEBn52TAl7dVMMeHRZD3VzYBJzcmYV + cHFtGG5wdBtrcH0eaW+GIWdukSRkbZ4mY2ytKGFsvihgbNIpYGvmKGBr8ydha/wmYWr/JmFq/yZhav8m + 214AAMtrAADAdAAAt3oAAK59AAClfAAAnHsAAJR8AACOfREAiX0gAIV9LQCBfDgCfXxBBXp7SQh3elEL + dHlXD3F4XhJud2QVbHZrGGl1chtndXseZHSEIWFzjyNfcpwmXXGrJ1xxvShbcdEoW3DlKFtv8ydbb/wm + W2//Jltv/yZbb/8m1mMAAMhvAAC9eAAAtH0AAKuAAAChgAAAl38AAI+AAACJgQwAhIEcAICBKgB9gTUC + eYE/BHWARwdyf04Kb35VDWx9XBBqfWITZ3xpFmR7cRlienkdX3mCH1x4jSJaeJokWHepJlZ2uydVds8n + VXXkJ1V18iZWdPwlVnT/JVZ0/yVWdP8l0mcAAMRzAAC6fAAAsYIAAKeDAACcgwAAkoMAAIqEAACEhQcA + f4YYAHuHJgB3hzIBdIY8A3CGRAZthUwIaoRTC2eEWQ5lg2ARYoJnFF+BbhdcgHcaWYCAHVd/iyBUfpgi + Un2nJFB9uSVPfM4lT3zjJU978iRPevskT3r/JE96/yRPev8kzW0AAMB4AAC2gAAArYYAAKKHAACYhwAA + jYgAAISJAAB9iwIAeIwTAHSMIQBxjS4Abo04AmuMQQRnjEkGZYtQCWKKVwxfil0PXIlkElqIbBVXh3UY + VId+GlGGiR1OhZYfTIWlIUqEuCJJhMwiSYPiIkmC8SJJgfsiSYH/IkmB/yJJgf8iyHMAALx9AACyhQAA + qYsAAJ2LAACTiwAAiI0AAH2PAAB2kQAAcZIMAG2TGwBpkygAZ5MzAGSTPQJhk0UEXpJMBlySUwlZkVoL + VpFiDlSQaRFRj3ITTo98FkuOhxlIjpQbRY2jHESNth1DjMsdQovhHUKK8B5CifoeQon+HkKJ/h5Cif4e + w3kAALiDAACuiwAApI8AAJiPAACOkAAAg5IAAHmVAABumAAAaJkEAGSaFABhmiIAXpsuAFybOABZm0EC + V5pIA1WaUAVSmlcHUJleCk2ZZgxKmG8OR5h5EUSXhBNCl5EVP5ahFz2Wsxc8lskXPJXgFzuT7xg7kvoZ + O5L+GTuS/hk7kv4ZvYAAALOKAACqkgAAn5QAAJOUAACIlgAAfpgAAHSbAABnnwAAX6EAAFqiDABWohoA + VKMnAFKjMQBQozsATqNDAUyjSwJKo1IDSKNaBUWiYgdDomsJQKJ1Cz2hgQ07oY4POKGeEDahsRA1oMYQ + NaDeEDSe7xEznfkSM5z+EzOc/hMznP4Tt4gAAK6RAAClmAAAmZkAAI2aAACCnQAAeKAAAG6iAABjpQAA + WKgAAE+qAQBKqxEASKwdAEasKQBErDIAQ607AEKtRABArUwAPq1UATytXQI6rWcEOK1xBTWsfQYzrIsI + MaybCS+srQktrMQJLavcCSyq7gorqfkLK6j9Cyuo/QsrqP0LsZAAAKmZAACgngAAk58AAIeiAAB8pQAA + cagAAGerAABcrgAAUbAAAEazAAA+tQQAOrYSADi2HQA2tygANbcxADS3OgAyt0MAMbhMADC4VQAuuF8A + LLhrASq4dwEouIUCJriWAyS5qQMjub8DIrnZAyG37AQhtvgFILX9BSC1/QUgtf0FrJkAAKSgAACZpQAA + jKcAAIGrAAB2rgAAarEAAF+zAABTtQAASbgAAD66AAA0vQAALMACACfBDgAlwhkAJMIjACPDLAAhwzYA + IMQ/AB/ESQAdxFQAHMVgABrFbQAYxnwAF8aOABXGoQATx7kAEsfTABLG6gASxPcAEsT8ARLE/AESxPwB + pqEAAJ2oAACSrQAAhrEAAHmzAABstgAAYLgAAFS6AABJvAAAPr8AADXCAAArxQAAI8gAABvKAAATzQYA + D88QAA7PGgAMzyQAC9AuAArQOQAJ0UUACNFSAAbSYAAF0m8AA9OAAALTkwAA06gAANS/AADU1wAA1OkA + ANTwAADU8AAA1PAAn6kAAJWvAACIswAAe7cAAG65AABhvAAAVL4AAEnBAAA9xAAAM8cAACnJAAAgzAAA + GM8AABHRAAAJ1AAAAtYDAADYDQAA2RYAANogAADbKgAA3DUAAN1BAADfTwAA4F4AAOBvAADhgQAA4pUA + AOKpAADjvQAA488AAOTZAADk2QAA5NkAl7AAAIu1AAB+uQAAcLwAAGK/AABVwgAASMUAADzIAAAxywAA + J84AAB3RAAAV1AAADNcAAAXaAAAA3AAAAN4AAADfAQAA4QkAAOISAADjGwAA5SUAAOcwAADpPQAA60wA + AO1cAADubgAA74AAAPCTAADwpAAA8bMAAPG6AADxugAA8boAjbcAAIC7AAByvwAAZMIAAFbFAABIyQAA + O8wAAC/QAAAk0wAAGtcAABHaAAAI3QAAAN8AAADhAAAA4wAAAOUAAADmAAAA6AAAAOoCAADrCgAA7RQA + APAeAADyKgAA9TgAAPhIAAD6WQAA+2sAAPx8AAD9iwAA/pgAAP6eAAD+ngAA/p4A/wAgAP8AHQD/AB0A + /wAmAP8AMAD/ADsA/wBIAP8AVAD/AF8A/ABpAPgAcQD1AHkA8gCAAPAAhgDvAIsA7gCQAO0AlQDsAJoA + 6wCfAOoApADqAKsA6QCyAOgAugDnAMQA5gDPAOQA2wDiAOYA4QDwAOAA+ADgAP0A4AD/AOAA/wDgAP8A + /wEdAP8AGgD/ABwA/wEkAP8ALQD/ADgA/wBEAP8AUAD9AFsA+ABmAPQAbwDwAHYA7QB9AOsAgwDqAIkA + 6ACOAOgAkwDnAJgA5gCdAOUAogDkAKgA4wCvAOIAuADhAMEA4ADMAN4A2QDcAOUA2wDvANoA9gDZAPsA + 2QD/ANkA/wDZAP8A/wcZAP8EFAD/CRkA/wwhAP8JKgD/BTQA/wFAAPsATAD2AFgA8gBiAO4AawDqAHMA + 5wB6AOUAgADkAIYA4wCLAOIAkADhAJUA4ACaAN8AoADeAKYA3ACtANsAtQDaAL8A2ADKANYA1wDUAOQA + 0wDtANEA9QDRAPsA0AD/ANAA/wDQAP8A/wsUAP8LDgD/ExQA/xYcAP8VJQD/EDAA+Qw8APMISADuBVMA + 6gNeAOcBZwDkAW8A4QB2AN8AfQDdAIIA3ACIANsAjQDaAJIA2QCXANcAnQDVAKMA1ACrANMAswDRAL0A + 0ADJAM4A1gDNAOMAywHuAMkC+ADJA/4AyAP/AMgD/wDIA/8A/xENAP8VCgD/HBAA/x8XAP8eIAD4GyoA + 8Bc2AOoTQgDlEU4A4Q5YAN4NYgDcDGsA2QxyANcMeQDVDH8A1AuEANILigDRC48A0AuVAM8LmwDOC6EA + zAupAMsLsgDKDL0AyAvJAMcM1gDEDuYAwhDyAMAR+wC/Ev8AvhL/Ab4S/wG+Ev8B/xUGAP8eBgD/JAoA + /yYQAPslGQDwIyMA5x8uAOEcOwDcGkcA2BlTANQaXQDRG2YAzxttAM0bdADMG3oAyhuAAMkbhgDIG4sA + xxuRAMUblwDEHJ4AwxymAMEcrwDAHLoAvhzGAL0b1AC6HeQAuB7wAbYe+gK1Hv8CtR7/ArUe/wK1Hv8C + /xoAAP8mAQD/LAQA+y0IAPIsEADnKRkA3iUlANgkMwDSJkEAzidNAMooWADIKWEAxilpAMQpcADCKXYA + wCl8AL8pgQC+KYcBvSiNAbsokwG6KJoBuSiiAbcoqwG2KLYBtCjDArMo0QKxKOECrijuA60o+QSsKP8F + qyj/Baso/wWrKP8F/yMAAP8tAAD3MwAA6TMAAOIxBQDeLAwA1S0cAM4wLADJMzsAxTRHAME0UgC/NFwA + vDRkAbo0awG5NHEBtzN3ArYzfQK0M4MCszOJA7IyjwOwMpYDrzKeBK0yqASsMrMFqjHABakxzgWnMd8G + pTHtB6Mx9wiiMf8IojH/CKIx/wiiMf8I/yoAAPs0AADlOAAA3T0AANc9AADTOAUAzTgWAMY7JwDBPTUA + vD5CALk+TQC2PlcBsz1fArE9ZgOvPG0DrjxzBKw8eQWrO34FqjuEBqg6iwanOpIHpTqaB6Q6pAiiOa8I + oTm8CZ85ywmeOd0KnDnrC5o59guZOf4MmTn/DJk5/wyZOf8M/zAAAO05AADfQgAA1kcAAM9IAADLQwEA + xkIQAL9FIQC5RjEAtUc9ALFHSQGuRlICq0VbA6lFYgSnRGgFpUNvBqRDdAeiQnoIoUKACZ9BhwmeQY4K + nEGXC5tAoAyZQKwNmEC5DZZAyQ6VQNoOk0DpD5JA9Q+RQP0PkD//D5A//w+QP/8P/jUAAOVAAADaSgAA + 0E8AAMlRAADETgAAv0sKALhMHACyTiwArk45AKpORAGnTU4CpExWBKFLXgWfS2QHnUprCJxJcAmaSXYK + mUh9C5dIgwyVR4sNlEeTDpJGnRCRRqkQj0a2EY5GxhKMRdgSi0boEopG9BKJRfwSiUX/EolF/xKJRf8S + 8zoAAOBHAADUUQAAy1YAAMNYAAC+VQAAuFIFALJTGACsVCcAqFQ1AKRUQAGgU0oDnVJSBJtSWgaYUWEI + llBnCZRPbQuTTnMMkU55DY9NgA+OTYgQjEyQEYpMmhOJS6YUh0uzFYZLwxWFS9UWg0vmFoJL8xWCS/wV + gkv/FYJL/xWCS/8V6j4AAN1NAADQVwAAxlwAAL9eAAC4XAAAs1gBAKxZFACnWiMAoloxAJ5aPQGaWUcD + l1hPBZRXVgeSVl0IkFVjCo5UaQyMVHANilN2D4lSfRCHUoUShVGNFINRlxWCUKMXgFCxGH9QwRh+T9MZ + fU/lGHxP8hh8T/sXe0//F3tP/xd7T/8X50QAANlSAADMWwAAw2EAALtjAAC0YQAArl0AAKddEACiXiAA + nV8uAJlfOQGVXkMDkl1MBY9cUweMW1oJilpgCohZZwyGWG0OhFhzEIJXehKAVoIUf1aLFX1VlRd7VaEZ + elSvGnhUvxt3VNEbdlTkG3ZU8hp2VPoZdVT/GXVU/xl1VP8Z5EgAANVWAADJYAAAwGUAALhnAACvZQAA + qmEAAKNiDACdYxwAmGMqAJRjNgGQYkACjWFJBIpgUAaHX1cJhV5eCoNdZAyAXWoOf1xxEH1beBN7W4AV + eVqJF3dZkxl1WZ8adFitHHJYvRxxWNAdcFjjHHBY8RtwWPobcFf/GnBX/xpwV/8a4U0AANJaAADGYwAA + vWkAALRrAACsaQAApWUAAJ9mCACZZxkAlGcnAJBnMwCMZj0CiGVGBIVkTgaCY1UIgGJbCn1hYQx7YWgO + eWBuEXhfdhN2X34VdF6HGHJdkRpwXZ0cblyrHW1cvB5sXM4ea1ziHmtb8B1rW/oca1v/G2tb/xtrW/8b + 3lEAAM9eAADDZwAAumwAALFuAACobAAAomkAAJpqBQCUahYAj2skAItrMACHajsBhGlEA4FoSwZ+Z1II + e2ZZCnllXwx3ZWUOdWRsEXNkdBNxY3wWb2KFGG1hjxprYZscaWCqHmhguh9nYM0fZl/hH2Zf8B5mX/kd + Zl//HGZf/xxmX/8c21UAAMxiAADBagAAuG8AAK5xAAClbwAAnmwAAJZtAQCQbhIAi24hAIduLQCDbjgB + gG1BA3xsSQV6a1AHd2tXCXRqXQxyaWQOcGlqEW5ochNsZ3oWamaDGGhmjhtmZZodZGSoHmNkuR9iZMwg + YWPgH2Fj7x5hY/kdYmL/HWJi/x1iYv8d2FkAAMllAAC+bQAAtXMAAKpzAAChcwAAmXAAAJJxAACLcg4A + hnIdAIJyKgB/cjUBe3E/AnhxRwR2cE4Hc29VCXBuWwtubmIObG1pEGpscBNnbHgWZWuBGGNqjBthaZgd + X2mnHl1otx9caMsgXGfgH1xn7x5cZ/keXWb/HV1m/x1dZv8d1F0AAMZpAAC7cQAAsnYAAKd2AACddgAA + lXQAAI11AACHdgoAgnYaAH52JwB6djMAd3Y8AnR1RQRxdUwGb3RTCGxzWQtqc2ANZ3JnEGVxbhJjcXYV + YHB/GF5vihpcbpYcWm6lHlhtth9XbckfVmzfH1ds7h5Xa/gdV2v/HVdr/x1Xa/8d0GIAAMNtAAC4dQAA + r3oAAKN5AACZeQAAkHgAAIh5AACCegYAfXoWAHl7JAB1ey8Acns5AW97QgNtekkFanpQB2d5VwlleF4M + Y3hlDmB3bBFednQUW3V9Flh1iBlWdJUbVHOjHVJztB5RcsgeUXLeHlFx7R1RcPgdUnD/HFJw/xxScP8c + zGcAAL9xAAC1eQAAq30AAJ99AACVfAAAi3wAAIJ9AAB8fgEAd38RAHOAHwBwgSwAbYE2AGqAPwJngEcE + ZYBOBmJ/VQhgflwKXX5jDVt9ag9YfHISVnx7FFN7hhdQepMZTnqhG0x5shxLecYcS3jcHEt37RxLdvcb + S3b/G0t2/xtLdv8byGwAALx2AACyfgAApoAAAJqAAACQgAAAhoEAAHyDAAB2hAAAcIULAGyGGgBphycA + Z4cyAGSHOwFhhkMCX4ZLBFyGUgZahVkIWIVgClWEaA1Sg3APUIN5Ek2ChBRKgZEWSIGfGEaAsRlFgMUZ + RX/bGUV+7BlFffcZRXz+GUV8/hlFfP4Zw3IAALh8AACugwAAoYQAAJWEAACLhAAAgYYAAHWJAABvigAA + aYwFAGWNFQBhjSIAX40tAF2ONwBajT8BWI1HAlaNTgRUjVYFUYxdB0+MZQlMi20MSYp3DkeKghBEiY4S + QomdFECIrhQ/iMMVPofaFD6G6xU+hfYVPoT+FT6E/hU+hP4VvngAALOCAACpiAAAnIgAAJGIAACGiQAA + fIsAAHKOAABnkQAAYZMAAFyUDQBYlRsAVpUnAFSVMQBSlToAUJVCAE6VSgFMlVEDSpVZBEiUYQZFlGoH + Q5N0CUCTfws9kowNO5KaDjmSrA84kcEPN5HYDzeP6hA2jvYQNo39ETaN/RE2jf0RuX8AAK6IAACjjAAA + lowAAIyNAACBjwAAd5EAAG2UAABhmAAAWZoAAFKcBABOnRMAS50fAEmdKgBHnTMARp48AESeRABDnkwA + QZ5UAT+dXQI9nWYDO51wBTicewY2nIgIM5yXCTGcqQkwm74JL5vVCS+a6QoumPULLpf9Cy6X/Qsul/0L + s4cAAKqPAACdkAAAkZEAAIaTAAB7lQAAcZgAAGebAABdnwAAUqIAAEmkAABCpQgAP6YWAD2mIQA7pysA + Oac0ADinPAA3p0UANadNADSnVgAyp2AAMadrAS6ndwIsp4QDKqeTAyinpQQnp7oEJabSBCWl6AQlpPQF + JKP9BiSj/QYko/0GrY8AAKSWAACXlgAAi5cAAICaAAB1nQAAa6EAAGGkAABWpwAATKoAAEGsAAA4rgAA + MbAJAC6wFQAssSAAK7EpACqxMgAosjsAJ7JEACWyTQAkslcAIrJjACGybwAfs34AHbOOABuzoAAas7UA + GLPOABix5QAYsPMBGK/8Ahiv/AIYr/wCqJcAAJ6bAACRnAAAhZ8AAHqiAABvpgAAZKoAAFqtAABPsAAA + RLIAADm0AAAvtwAAJ7kAAB+7BQAbvBEAGbwaABi9JAAWvS0AFb03ABS+QQASvkwAEb9YAA6/ZQANv3QA + C7+EAAm/lwAHv6wABb/DAAW/2wAFvusABr72AAa+9gAGvvYAo58AAJeiAACKpAAAf6gAAHOtAABosQAA + XLQAAFC2AABEuAAAOroAADC8AAAmvgAAHcEAABXDAAANxgEABscKAATIFQACyB4AAckoAADJMgAAyj4A + AMpKAADLWAAAy2cAAMt3AADLiQAAy5wAAMuyAADLyAAAzNsAAMzoAADM6AAAzOgAnKcAAJCrAACErwAA + eLMAAGu2AABduAAAULoAAES9AAA5vwAALsIAACTEAAAbxwAAEskAAArLAAACzQAAAM8BAADQCgAA0RIA + ANIbAADTJQAA1C8AANY7AADYSAAA2lcAANtnAADbeQAA3IwAANyfAADcswAA3MUAANzTAADc0wAA3NMA + lK4AAIeyAAB6tgAAbbkAAF+8AABRvgAARMEAADjEAAAsxwAAIsoAABjMAAAOzwAABtEAAADTAAAA1gAA + ANgAAADaAAAA2wUAAN0NAADeFgAA4B8AAOIqAADlNgAA50UAAOlVAADqZwAA63kAAOyLAADsnQAA7KwA + AOy5AADsuQAA7LkAirQAAH24AABvvAAAYb8AAFLCAABExQAAN8kAACvMAAAgzwAAFdIAAAvVAAAC2AAA + ANsAAADdAAAA3gAAAOAAAADiAAAA5AAAAOYAAADoBgAA6g4AAOwZAADvJAAA8jIAAPVBAAD3UwAA+WUA + APp3AAD7hwAA+5QAAPufAAD7nwAA+58A/wAcAP8AGAD/ABkA/wAiAP8ALQD/ADkA/wBFAP8AUQD6AFwA + 9QBmAPMAbwDxAHYA8AB9AO8AggDuAIgA7QCMAOwAkQDrAJYA6gCbAOkAoADoAKYA5wCtAOUAtQDkAL4A + 4gDJAOEA1gDgAOMA3wDuAN8A9gDfAP0A3gD/AN4A/wDeAP8A/wAZAP8AFAD/ABcA/wAgAP8AKgD/ADYA + /wBBAPoATQD1AFgA8ABjAO0AawDsAHMA6gB6AOkAfwDoAIUA5wCKAOYAjgDlAJMA5ACYAOMAnQDiAKMA + 4ACqAN8AsgDdALsA2wDGANoA0wDZAOAA2ADrANcA9QDWAPsA1gD/ANYA/wDWAP8A/wAUAP8ADQD/ABQA + /wAcAP8AJgD/ADEA/AA9APQASQDuAFQA6gBfAOcAaADlAG8A5AB2AOIAfADhAIEA4ACGAN8AiwDeAJAA + 3QCVANsAmgDaAKAA2ACnANYArwDUALgA0gDEANEA0ADQAN4AzwDqAM4A8wDNAPkAzQD9AM0A/gDNAP4A + /wEMAP8BCQD/BxEA/wgZAP8EIQD9ACwA9QA4AO4ARADnAFAA4wBaAOAAYwDeAGsA3AByANoAeADZAH4A + 2ACDANYAiADUAI0A0wCSANIAlwDQAJ4AzwCkAM0ArQDMALYAygDBAMkAzQDHANwAxgDoAMUA8QDFAPcA + xAD9AMQA/gDEAP4A/wYFAP8LBQD/EQsA/xISAP8QGwD0CiYA7AUxAOYBPgDeAEoA2wBVANgAXgDVAGcA + 0wBuANEAdADQAHoAzgB/AM0AhADMAIkAywCPAMkAlADIAJsAxgCiAMUAqgDDALQAwgC/AMAAzAC/AdsA + vgLnALwD8wC6BPsAugX/ALoF/wC6Bf8A/woAAP8VAAD/GgQA/xoKAPYYEwDrEx0A4w4pANwLNgDWC0MA + 0gxPAM8NWQDNDmEAyw5pAMkOcADHDnYAxg97AMQPgQDDD4YAwg+LAMEPkgC/D5gAvg+gAL0PqQC7D7MA + ug+/ALgPzQC2EN0AtBLrALIT9gCxE/4AsBP/ALAT/wCwE/8A/xQAAP8dAAD7IgAA7yECAOodCQDiGBMA + 2RUfANIYLwDNGj0AyRxJAMYdUwDDHVwAwB5kAL8eawC9HnEAvB53ALoefAC5HoIAuB6HALcejgC1HpUA + tB6cALIepQCxHrAArx68AK4eygCsHtsAqh/pAKgf9AGnIP0BpiD/AaYg/wGmIP8B/xwAAPwlAADpKAAA + 3ysAANooAADWIggA0CIYAMkmKADEKDcAwClDALwqTgC5KlcAtypfALUqZgCzKm0AsipzALEqeACvKn4A + riqEAK0qigCrKpEBqiqZAakqogGnKqwBpim5AaQpxwGjKdgCoSrnAp8q8wOeKvwDnSr/BJ0q/wSdKv8E + /yMAAO0rAADgNAAA2DgAANE3AADNMQMAyC4SAMEyIwC7MzEAtzQ+ALM1SQCxNVIArjVbAKw1YgCqNGgB + qTRuAag0dAGmNHoBpTSAAqMzhgKiM40CoTOVA58zngOeM6kEnDO2BJsyxASZMtUElzPlBZYz8gaVM/sG + lDP/BpQy/waUMv8G+ykAAOU1AADaPgAA0EIAAMlCAADEPgAAwDkLALk7HQCzPSwArz45AKs+RACpPk4A + pj5WAaQ9XQGiPWQCoD1qAp88cAOdPHYDnDx8BJs7ggSZO4kFmDuSBpY6mwaVOqYHkzqzB5I6wQiQOtII + jzrkCI068QmMOvoJjDr/CYw6/wmMOv8J7i8AAOA9AADTRwAAyksAAMNMAAC9RwAAuEMGALJEGACsRScA + qEY0AKRGPwChRkkAn0VSAZxFWQKaRGADmURmA5dDbASVQ3IFlEJ4BpJCfweRQoYHj0GOCI5BmAmMQaMK + ikGwC4lAvwuIQNAMhkDiDIVA7wyEQPkMhED/DIRA/wyEQP8M6TYAANtFAADPTQAAxVIAAL1TAAC3TwAA + skoBAKxLEwCmTCIAoUwwAJ5NOwCbTEUBmExOAZVLVQKTS1wDkUpiBJBJaAWOSW4GjEh1B4tIewiJSIMK + h0eLC4ZHlQyER6ANg0atDoFGvA6ARs0Pf0bgD35G7g99RvgOfUb/Dn1F/w59Rf8O5T0AANZLAADKVAAA + wVgAALhYAACxVQAArFEAAKZRDgCgUh4AnFIsAJhSOACVUkIBklJKAo9RUgONUFkEi09fBYlPZQaHTmsH + hk5xCYRNeAqCTYALgUyIDX9Mkg59TJ4PfEurEHpLuhF5S8wReEvfEXdL7hF3S/gQd0r/EHdK/xB3Sv8Q + 4kIAANNQAADHWQAAvl0AALRdAACsWgAAp1YAAKFWCgCbVxoAl1coAJNXNACPVz4AjFdHAolWTwOHVVUE + hVRcBYNUYgeBU2gIf1NvCX5Sdgt8Un0NelGGDnlRkBB3UJsRdVCpEnRQuBNzT8oUck/eFHFP7RNxT/cS + cU//EnFP/xFxT/8R3kcAAM9UAADEXQAAumEAALBhAACoXwAAo1oAAJxbBgCWWxcAklwlAI5cMQCKXDsA + h1tEAYRaTAOCWlMEgFlZBX1YXwd8WGYIeldsCnhXcwx2VnsNdFaED3NVjhFxVZkTb1SnFG5UtxVtVMkV + bFPcFWxT7BRsU/cUbFP+E2xT/xNsU/8T20wAAMxYAADBYAAAt2UAAKxkAACkYgAAnl4AAJdfAwCSXxMA + jWAhAIlgLgCFYDgAgl9BAYBfSQJ9XlAEe11WBXhcXQd2XGMIdVtqCnNbcQxxWnkOb1qCEG1ZjBJsWZgU + alilFWhYtRZnWMcWZ1fbFmZX6xVnV/YVZ1f+FGdX/xRnV/8U2FAAAMlcAAC+ZAAAtGgAAKlnAACgZQAA + mmIAAJNjAACNYxAAiGQeAIRkKwCBZDUAfmM+AXtjRgJ4Yk0DdmFUBXNgWgZyYGEIcGBoCm5fbwxsX3cO + al6AEGhdihJmXZYUZVykFmNctBdiXMYXYlvaF2Jb6xZiW/YVYlr+FWJa/xRiWv8U1VQAAMdgAAC8ZwAA + sWoAAKZqAACdaQAAlmUAAI9mAACJZwwAhGcbAIBoJwB8aDIAeWc8AXZnRAJ0ZksDcWVSBG9lWQZtZF8I + a2RmCmljbQxoY3UOZmJ+EWRiiRNiYZQVYGCiFl5gshddYMUYXV/ZGF1f6hddXvYWXV79FV1e/xVdXv8V + 0lgAAMRjAAC5awAArW0AAKJsAACZbAAAkmkAAIpqAACEawgAf2sXAHtrJAB4azAAdWs5AHJrQgFwa0kD + bWpQBGtqVwZpaV0IZ2lkCmVoawxjZ3MOYWd9EF9mhxJdZZMUW2WhFllksRdYZMMYV2TYGFhj6hdYY/UW + WGL9FVhi/xVYYv8VzlwAAMFnAAC3bgAAqm8AAJ9vAACVbwAAjW0AAIVuAAB/bwQAem8UAHZwIQBzcC0A + cHA3AG5wPwFrb0cCaW9OBGdvVQVlblsHYm5iCWBtaQtebHINXGx7EFprhRJXapEUVmqfFVRprxZTacIX + UmnXF1Jo6RZTZ/UWU2f9FVNn/xVTZ/8Vy2EAAL5rAAC0cgAApnIAAJtyAACRcgAAiHEAAIByAAB6cwAA + dXQQAHF0HQBudSkAa3UzAGl1PABmdUQCZHVMA2J0UgRgdFkGXXNgCFtzZwpZcnAMV3F5D1RxgxFScI8T + UG+dFE5vrhVNbsEWTG7VFk1t6BVNbPQVTWz9FE1s/hRNbP4Ux2YAALtvAACvdQAAonUAAJd1AACNdgAA + g3YAAHt3AAB0eAAAb3kLAGt6GQBoeiUAZXswAGN7OQBhe0EBX3pJAlx6UANaelcFWHleB1Z5ZQlTeG0L + UXh3DU93gQ9Mdo0RSnabEkh1rBNHdb8URnTUFEZz6BRHcvQTR3L8E0dx/hNHcf4Tw2sAALd0AACreQAA + nXkAAJJ5AACIeQAAfnoAAHV8AABufgAAaX8FAGSAFABhgCAAXoErAFyBNQBagT4AWIFFAVaBTQJUgFQD + UoBbBVB/YwZOf2sIS350Ckh+fwxGfYsORH2ZEEJ8qhFBfL0RQHvSEUB65xFAefMRQHj8EUB4/hFAeP4R + vnEAALN6AACmfAAAmXwAAI19AACEfQAAen8AAG6CAABnhAAAYYUAAFyHDQBZhxsAV4gmAFSIMABSiDkA + UYhBAE+ISQFNiFACS4dYA0mHYARHh2gGRIZyB0KGfAk/hYkLPYWXDDuEqA06hLsNOYPRDTmC5g05gfMO + OYD7DjmA/Q45gP0OuXcAAK9/AACggAAAlIAAAImBAAB/ggAAdYQAAGuHAABhigAAWY0AAFSOBgBQjxQA + TY8gAEuPKgBJjzMASI88AEaQRABFkEwAQ49TAUGPXAI/j2UDPY9uBDqOeQU4joYHNo2UCDSNpQgyjbkJ + MYzPCDGL5QkxivIJMYn7CjGJ/Qoxif0KtH4AAKmEAACahAAAjoQAAISFAAB6hwAAcIoAAGaNAABbkQAA + U5MAAEqWAABFlwsAQpcYAECYIwA+mCwAPZg1ADuYPQA6mEUAOJhOADeYVgA1mGAANJhqATGYdQIvl4ID + LZeRAyuXogQqlrYEKJbMBCiV4wQolPEFKJP6BieS/AYnkvwGr4UAAKKJAACViQAAiYkAAH6LAAB0jgAA + apEAAGGUAABWmAAATJsAAESdAAA7oAEANqEOADOhGQAyoSMAMKEsAC6hNQAtoT0ALKFGACqiTwApolkA + J6JkACaicAAkoX0AIqGMACChnQEeobIBHaHJAR2g4QEdn/ABHJ76Ahyd/AIcnfwCqY0AAJuNAACPjgAA + hI8AAHmSAABulgAAZJkAAFqdAABQoAAARqMAADymAAAzqAAAKqoBACSrDQAiqxgAIashAB+sKgAerDMA + HKw8ABusRQAZrFAAGKxbABataAAUrXYAEq2FABCtlwAOrawADKzDAAys2wAMq+wADar3AA2p+QANqfkA + o5MAAJWTAACJlAAAfZcAAHKbAABonwAAXaIAAFOmAABJqQAAPqwAADSvAAArsQAAIrIAABm0AAAStggA + DrcSAAy3HAALtyUACbcvAAi3OQAGuEQABbhQAAO4XQABuGwAALh7AAC4jQAAuKAAALi1AAC3ywAAt+AA + ALfsAAC27wAAtu8AnJkAAI+ZAACDnAAAd6AAAGylAABhqQAAVq0AAEuxAABAswAANbUAACu3AAAhuQAA + GLsAAA+9AAAHvwAAAMAIAADAEgAAwRsAAMEkAADCLQAAwzgAAMNEAADEUQAAxF8AAMVvAADFgAAAxZIA + AMWmAADFuwAAxs4AAMXfAADF4gAAxeIAlaAAAIiiAAB8pgAAcasAAGWwAABZtAAATLYAAEC5AAA0uwAA + Kb0AAB+/AAAWwQAADMMAAATFAAAAxwAAAMgAAADJBgAAyg4AAMsXAADMIAAAzioAAM81AADRQgAA0lEA + ANNhAADUcgAA1IQAANWXAADVqgAA1rwAANbKAADXzgAA184AjqkAAIKtAAB2sgAAabYAAFu4AABNuwAA + QL4AADTAAAAowwAAHcUAABPHAAAJygAAAMwAAADOAAAA0AAAANIAAADTAAAA1QEAANcJAADZEQAA2xoA + AN0lAADgMQAA4j8AAORQAADlYQAA5XQAAOaGAADnmAAA6KgAAOi1AADouQAA6LkAh7IAAHq1AABsuQAA + XbwAAE+/AABBwgAAM8UAACfIAAAbywAAEM4AAAbQAAAA0wAAANUAAADYAAAA2gAAANwAAADeAAAA4AAA + AOIAAADkAQAA5goAAOkUAADsHwAA7ywAAPI8AAD0TgAA9WEAAPZ0AAD2hQAA95QAAPegAAD3ogAA96IA + /wAXAP8AEwD/ABYA/wAfAP8AKgD/ADYA/wBCAPkATgD3AFkA9ABjAPIAawDwAHMA7wB5AO4AfwDtAIQA + 7ACJAOoAjQDpAJEA6ACWAOYAnADlAKEA5ACoAOMAsADiALkA4QDEAOAA0QDfAOAA3gDsAN0A9gDcAP0A + 2wD/ANsA/wDbAP8A/wATAP8ADQD/ABMA/wAcAP8AJwD/ADIA+QA+APMASwDxAFYA7gBgAOwAaADqAHAA + 6AB2AOcAfADmAIEA5QCGAOMAigDiAI4A4ACTAN8AmQDeAJ4A3QClANsArQDaALYA2QDBANgAzQDWAN0A + 1ADpANMA8wDSAPoA0gD/ANIA/wDSAP8A/wANAP8ACgD/ABEA/wAYAP8AIgD7AC4A8QA6AOwARgDqAFEA + 5wBbAOUAZADjAGwA4QByAN8AeADeAH0A3ACCANsAhwDZAIsA2ACQANYAlQDVAJsA0wCiANIAqgDRALMA + zwC+AM4AygDMANkAywDmAMoA8ADJAPgAyQD+AMkA/wDJAP8A/wAGAP8ABgD/AAsA/wAUAP8AHQD1ACgA + 6QA0AOUAQQDiAEwA3wBXAN0AYADaAGgA2ABuANYAdADUAHkA0gB+ANEAgwDPAIgAzgCNAM0AkgDMAJgA + ygCfAMkApwDHALAAxgC6AMQAxwDDANQAwQDjAMAA7gC/APYAvwD7AL8A/QC/AP0A/wAAAP8BAAD/BQYA + /wQNAPsAFgDtACEA4gAtAN0AOwDaAEcA1gBRANMAWwDQAGMAzgBqAMwAcADKAHUAyQB6AMcAfwDGAIQA + xQCJAMQAjwDDAJUAwQCcAMAApAC+AK0AvAC4ALsAxAC5ANIAuADhALcA7AC2APQAtQD5ALUA/QC1AP0A + /wIAAP8LAAD/DgAA9wwFAPEHDQDkABgA2wAlANUAMwDQAUAAzQJLAMoCVQDHA10AxQNlAMMDawDBA3EA + wAN2AL4DewC9A4EAvAOGALsDjAC5A5IAuAOZALYDoQC1A6sAswO2ALIDwwCwBNIArwXhAK0G7gCsB/cA + qwf9AKsI/wCrCP8A/wwAAP8UAADuFgAA4xQAAN4QAgDaBgsA0wgcAM0MKwDIDzkAxBFFAMESTwC+ElgA + vBNgALoTZgC4E2wAtxNyALUTdwC0E30AsxOCALETiACwE48ArxOWAK0TnwCsE6kAqhO1AKkTwwCoE9IA + pRTjAKMV8ACiFvoAoRb/AKEW/wChFv8A/xUAAO8bAADiIgAA2iUAANMiAADPGwUAyxcUAMQcJAC/HjMA + uh8/ALcgSQC0IFMAsiBbALAgYgCuIGgArSBuAKsgcwCqIHkAqSB+AKgghACmIIsApSCTAKMgnACiIKYA + oCCyAJ8gwACeINAAnCHhAJoh7wCZIvgBmCL/AZci/wGXIv8B+RwAAOYnAADbMAAA0TMAAMsxAADFKwAA + wiUNALsoHgC2Ki0AsSs5AK4rRACrK00AqSxWAKcsXQClK2MApCtpAKIrbwChK3UAoCt6AJ4rgQCdK4gA + nCuQAJormQGZK6MBlyuvAZYrvQGUK80BkyvfApEs7QKQLPcCjyv+Ao8r/wKPK/8C7SMAAOAyAADUOgAA + yj4AAMM9AAC9NwAAuTEHALMyGACuNCcAqTU0AKY1PwCjNUkAoDVRAJ41WQCdNV8AmzVlAJo1awCYNXEB + lzR3AZU0fQGUNIQCkzSMApE0lQKPNKADjjSsA400ugOLNMsEijTdBIg07ASHNPYEhzT9BIYz/wSGM/8E + 6C0AANs7AADOQwAAxUcAALxFAAC2QQAAsjwBAKw7EwCnPSIAoj0vAJ49OgCbPkQAmT1NAJc9VACVPVsA + kz1hAZI9ZwGQPG0CjzxzAo08egOMPIEDijuJBIk7kgSHO50FhjupBoQ7uAaDO8kGgjvbB4A76geAO/YH + fzr9Bn86/wZ/Ov8G5DUAANVCAADJSwAAv04AALZMAACvSAAAq0QAAKZDDgCgRB4Am0QrAJhFNgCVRUAA + kkVJAJBEUACORFcBjEReAYpDZAKJQ2oDh0NwA4ZCdgSEQn4Fg0KGBoFCjwZ/QZoHfkGnCH1Btgl7QccJ + ekHZCXlB6Ql5QPUJeED8CHhA/wh4QP8I4DwAANFIAADFUAAAulMAALBRAACpTgAApUoAAJ9JCQCaShkA + lUsnAJJLMgCOSzwAjEtFAIlKTQGHSlQBhUlaAoRJYAKCSGYDgEhtBH9IcwV9SHsGfEeDB3pHjQh4R5gJ + d0alCnZGtAt0RsULc0bYC3NG6AtyRvQLckX8CnJF/wpyRf8K3EEAAM1OAADCVQAAtlcAAKxWAACkUwAA + n08AAJpPBQCUTxUAkFAjAIxQLwCJUDkAhlBCAIRPSgGBT1EBf05XAn5OXQN8TWMEek1qBXlNcQZ3TXgH + dUyBCHRMiwpyTJYLcUujDG9Lsg1uS8MNbUvWDWxK6A1sSvQMbEr7DGxK/wtsSv8L2UYAAMpSAAC+WgAA + sloAAKhaAACgVwAAm1MAAJVUAQCPVBEAi1QfAIdVKwCEVTYAgVQ/AH5URwF8U04BelNUAnhSWgN2UmEE + dVJnBXNRbgZxUXYIcFF/CW5QiQtsUJQMa1ChDWlPsA5oT8EPZ0/UD2dP5w5nTvMNZ077DWdO/wxnTv8M + 1UsAAMdWAAC8XQAArl0AAKRdAACcWwAAl1cAAJBYAACLWA0AhlkcAIJZKAB/WTIAfFk8AHlYRAB3WEsB + dVdRAnNXWANxVl4Eb1ZlBW5WbAdsVnQIalV9CmlVhwtnVJINZVSfDmRUrw9jU8APYlPTEGJT5g9iUvMO + YlL7DmJS/w1iUv8N0k8AAMRaAAC4YAAAq2AAAKFgAACYXwAAk1sAAIxcAACGXAoAgV0YAH1dJQB6XS8A + d105AHRcQQByXEgBcFtPAm1bVQJsW1wEalpjBWlaagdnWnIIZVp7CmRZhQxiWZENYFieD19YrRBeV78Q + XVfSEF1X5RBdVvIPXVb6Dl1W/w5dVv8Oz1MAAMFdAAC1YwAAqGMAAJ1jAACVYgAAjl4AAIdgAACBYAYA + fWAVAHhhIQB1YSwAcmE2AHBgPgBtYEYBa2BNAWlfUwJnX1oDZl9hBWRfaAZiXnAIYV55Cl9dhAxdXY8N + W1ycD1pcrBBZW74QWFvREVhb5RBYWvIPWFr6D1hZ/g5YWf4OzFcAAL9hAACyZQAApWYAAJplAACRZQAA + imIAAINjAAB9ZAIAeGURAHRlHgBwZSkAbWUzAGtlPABpZUQAZ2RLAWVkUgJjZFgDYWRfBWBjZwZeY28I + XGJ4ClpiggxYYY0NVmGbD1VgqhBUYLwQU2DQEFNf5BBTXvEPU176D1Ne/g5TXv4OyFsAALxlAACuaAAA + oWgAAJZoAACNaAAAhWYAAH5nAAB4aAAAc2kNAG9pGwBraSYAaWkwAGZqOQBkakEAYmpJAWBpUAJfaVYD + XWldBFtoZQZZaG0HV2d2CVVngAtTZowNUWaZDk9lqQ9OZbsQTWTPEE1k4w9OY/EPTmL5Dk5i/g5OYv4O + xV8AALlpAACqawAAnWsAAJNrAACJawAAgWsAAHlsAABzbQAAbW0JAGluFwBmbiMAY28tAGFvNgBfbz4A + XW9GAFtvTQFab1QCWG5bA1ZuYwVUbWsGUW10CE9sfgpNbIoMS2uYDUprpw5JaroPSGrOD0hp4w5IaPAO + SGj5Dkhn/g1IZ/4NwWQAALZtAACmbgAAmW4AAI9vAACFbwAAfG8AAHNwAABtcgAAZ3MEAGN0EgBgdB8A + XXQpAFt1MwBZdTsAV3VDAFZ1SgFUdVEBUnRZAlB0YAROdGkFTHNyB0pzfAhHcogKRXGWC0RxpgxCcLgN + QnDMDUFv4g1CbvANQm75DEJt/QxCbf0MvWkAALFxAACicQAAlXIAAIpyAACBcwAAd3MAAG12AABmdwAA + YXkAAFx6DQBZehoAVnslAFR7LwBSezcAUHs/AE97RwBNe04BS3tWAUp7XgJIemYDRXpvBUN6egZBeYYI + P3iUCT14owo8d7YKO3fLCjt24Qo7de8KO3T4Cjt0/Qo7dP0KuW8AAKx1AACddQAAkHUAAIZ2AAB8dgAA + c3gAAGd7AABgfQAAWX8AAFSABwBQgRQAToIgAEyCKgBKgjMASII7AEeCQwBFgkoARIJSAEKCWgFAgmMC + PoFsAzyBdwQ6gYMFOICRBjaAoQc0f7QHM3/JBzN+3wczfe4IM3z4CDN7/Qgze/0ItHUAAKZ4AACXeQAA + i3kAAIF6AAB4ewAAbn0AAGOAAABbgwAAU4YAAEyIAABHiQ0ARIkZAEKKJABAii0AP4o1AD2KPQA8ikUA + OopNADmKVQA3il8ANoppATSJdAEyiYACL4mOAy6IngMsiLEEK4jHBCuH3gMqhe4EKoT3BSqE/AUqhPwF + r3wAAJ99AACSfQAAh30AAH1+AABzgAAAaYMAAF+GAABVigAATYwAAESPAAA9kQQAOZIRADeSHAA1kiUA + M5IuADKTNgAwkz4AL5NHAC6TTwAsk1kAK5JjACmSbwAnknwAJZKKACOSmwEika4BIZHEASCQ3AEgj+wB + II73AiCN/AIgjfwCqIEAAJmBAACMgQAAgoIAAHeEAABthwAAY4oAAFqNAABQkQAARpQAAD2WAAA1mQAA + LZsGACqbEgAonBwAJpwlACWcLgAjnDYAIpw/ACCcSAAfnFIAHZxcABucaAAanHYAGJyFABaclgAUnKkA + Epu/ABGb2AASmesAE5j2ABOY+wATmPsAoYYAAJOGAACHhgAAfIgAAHGLAABnjgAAXZIAAFOVAABJmQAA + P5wAADafAAAtoQAAJaMAABylBQAYphAAFqYZABWmIgATpisAEqY0ABCnPgAOp0gADKdUAAunYAAJp24A + B6Z9AAWmjgACpqAAAKW1AAClzAAApOEAAaTtAAGk8wABpPMAmYsAAI2LAACBjAAAdo8AAGuTAABhlwAA + VpsAAEyfAABCogAAOKUAAC6oAAAlqgAAHKwAABSuAAALrwQABbANAAGxFwAAsSAAALEpAACxMwAAsT4A + ALJJAACyVgAAsmQAALFzAACxhAAAsZYAALGqAACxvwAAsNMAALDjAACw6gAAsOoAlJAAAIeRAAB7lAAA + cJgAAGWdAABaoQAAT6UAAESpAAA6rAAAMK8AACayAAActAAAErUAAAm3AAACuAAAALkGAAC6DgAAuhYA + ALsfAAC8KAAAvDIAAL09AAC+SgAAv1gAAL9nAAC/eAAAv4oAAL+eAAC+sgAAv8UAAL/UAAC/3gAAv94A + jZcAAICaAAB1ngAAaaMAAF6oAABSrAAAR7EAADy0AAAwtgAAJbgAABq6AAAQvAAAB74AAADAAAAAwQAA + AMIAAADDAwAAxAsAAMUTAADHGwAAyCUAAMkvAADLOwAAzUkAAM5ZAADOagAAz3wAAM+PAADQowAAz7UA + AM/EAADPzQAAz80AhqAAAHqkAABvqgAAY68AAFe0AABJtwAAPLoAAC+8AAAkvwAAGcEAAA3DAAADxQAA + AMcAAADJAAAAygAAAMwAAADNAAAAzwAAANAFAADSDQAA1BcAANYhAADaLAAA3ToAAN9JAADhWwAA4m0A + AOOAAADjkgAA5KMAAOSwAADkuAAA5LgAgasAAHWxAABotgAAWrgAAEu7AAA9vwAAL8IAACLFAAAXxwAA + C8oAAADMAAAAzgAAANAAAADSAAAA1AAAANYAAADZAAAA2wAAAN0AAADgAAAA4gYAAOQQAADnHAAA6ikA + AO44AADwSQAA8VwAAPJvAADzgQAA9JAAAPWcAAD1owAA9aMA/wASAP8ADQD/ABIA/wAbAP8AJwD/ADMA + +wBAAPkASwD2AFYA9ABgAPEAaADwAG8A7gB2AOwAewDqAIAA6ACEAOcAiQDmAI0A5QCSAOQAlwDkAJ0A + 4wCkAOIArADgALUA3wDAAN4AzQDcAN0A2wDqANoA9gDaAP4A2gD/ANoA/wDaAP8A/wAMAP8ABwD/AA4A + /wAYAP8AIwD4AC8A9AA8APIASADwAFIA7QBcAOoAZQDoAGwA5gByAOQAeADiAH0A4QCBAOAAhgDfAIoA + 3gCPAN0AlADcAJoA2gChANkAqADYALEA1QC8ANMAyQDSANgA0QDmANAA8gDQAPsA0AD/ANAA/wDQAP8A + /wAHAP8ABAD/AAsA/wAUAPwAHgDxACoA7QA3AOoAQwDoAE4A5QBYAOIAYQDgAGgA3QBuANsAdADZAHkA + 2AB+ANYAggDVAIcA1ACMANMAkQDRAJcA0ACdAM8ApQDNAK4AywC4AMkAxQDIANIAxwDjAMYA7wDGAPcA + xgD9AMUA/wDFAP8A/wAAAP8AAAD/AAcA/wAOAPQAGADqACQA5QAyAOIAPgDfAEkA3ABTANkAXADVAGQA + 0gBqANAAcADPAHUAzgB6AMwAfwDLAIMAygCIAMkAjQDIAJMAxgCaAMUAoQDDAKoAwQC1AMAAwQC+AM8A + vQDfALwA6wC7APQAuwD7ALsA/wC7AP8A/wAAAP8AAAD/AAAA/gAIAOwAEADiAB0A3QArANgAOADUAEMA + 0ABOAM0AVwDLAF8AyQBlAMcAbADFAHEAxAB2AMMAewDCAH8AwACEAL8AigC+AJAAvACWALoAngC5AKcA + twCxALYAvQC0AMsAswDbALIA6ACxAPIAsAD4ALAA/ACwAPwA/wAAAP8AAAD2AQAA6wAAAOEABgDaABUA + 1AAjAM8AMQDKAD0AxwBHAMQAUQDBAFkAvwBgAL0AZwC8AGwAugByALkAdwC4AHsAtgCBALUAhgC0AIwA + sgCTALEAmwCvAKQArQCvAKwAuwCqAMkAqQDaAKgA5wCnAPAApgD3AKYA/ACmAPwA/wMAAPMJAADlDQAA + 3g4AANgIAADSAAsAzAAaAMcCKADCBDUAvgVBALsGSwC4B1QAtgdbALQHYgCyB2gAsQhtALAIcgCuCHcA + rQh9AKwIgwCqCIkAqQiQAKcImQCmCKIApAitAKMIugChCMkAoAnaAJ4K6QCdC/QAnAv7AJwL/wCcC/8A + +gwAAOgWAADeHgAA1CAAAMwcAADIFQEAxQ0QAL8RIAC5Ey4AtRU6ALIVRQCvFk4ArRZWAKsWXQCpFmMA + pxZpAKYWbgClFnMApBZ5AKIWfwChFoYAnxaNAJ4XlgCcF6AAmxerAJkXuQCYF8kAlxfaAJUY6QCTGfUA + kxn8AJIZ/wCSGf8A7RYAAOEkAADVLAAAyy4AAMMqAAC+JQAAux0JALYfGgCwICgArCE1AKkiPwCmIkkA + oyJRAKEiWACgIl4AniJkAJ0iagCbIm8AmiJ1AJkiewCXIoIAliOKAJQjkwCTI50AkSOpAJAjtgCPI8YA + jiPYAIwk6ACLJPQAiiT8AYkk/wGJJP8B6CIAANsvAADONwAAwzgAALo1AAC1MQAAsisCAK0pFACoKyMA + pCwvAKAsOgCdLUQAmy1MAJktUwCXLVoAlS1gAJQtZgCTLWwAkS1xAJAteACOLX8AjS2HAIwtkACKLZoA + iS2mAYcttAGGLcQBhS3VAYMt5gGCLfMCgi37AoEt/wKBLf8C4ywAANQ4AADIQAAAvEAAALM+AACtOgAA + qTUAAKYzDgCgNB0AnDUqAJg1NQCVNT8AkzVIAJE1TwCPNVYAjTVcAIw1YgCKNWgAiTVuAIg1dACGNXwB + hTWEAYM1jQGCNZcCgDWjAn81sQJ+NcIDfTXTA3s15QN6NPIDejT6A3o0/wN6NP8D3jQAAM9AAADDRgAA + tkYAAK1FAACnQQAAoj4AAJ47CACZPBgAlTwmAJI9MQCOPTsAjD1DAIo9SwCIPVIAhjxYAIU8XgCDPGQA + gjxrAYA8cQF/PHkCfTyBAnw8igN6PJUDeTuhBHc7rwR2O78FdTvRBXQ75AVzO/EFczr5BHM6/wRzOv8E + 2joAAMtGAAC+SwAAsUsAAKhKAAChRwAAnEQAAJhCBACTQhQAj0MhAItDLQCIQzcAhUNAAINDRwCBQ08A + f0NVAH5CWwB8QmEBe0JoAXlCbgJ4QnYCdkJ+A3VBiARzQZIFckGfBXBBrQZvQb4GbkHQB21A4wZtQPAG + bUD5BmxA/wVsQP8F1UAAAMdLAAC6TwAArVAAAKNPAACcTAAAl0kAAJJIAACNRw8AiUgdAIVIKQCCSDMA + gEk8AH1IRAB7SEsAeUhSAHhIWAF2R14BdUdlAnNHbAJyR3MDcEd8BG9HhQVtRpAGbEadB2pGqwdpRrwI + aEbPCGdF4ghnRfAHZ0X4B2dF/wdnRf8H0kUAAMRQAAC2UwAAqVMAAJ9TAACYUQAAk00AAI1MAACITQsA + hE0ZAIBNJQB9TTAAek05AHhNQQB2TUgAdE1PAHJMVQFwTFwBb0xiAm1MaQNsTHEDakx6BGlLgwZnS48H + ZkubCGRLqghjSrsJYkrNCWJK4QlhSu8IYUn4CGFJ/gdhSf4HzkkAAMFUAACyVgAAplYAAJxWAACUVAAA + j1EAAIlRAACDUQcAf1EWAHtSIgB3UiwAdVE2AHJRPgBwUUUAblFMAGxRUgBrUFkBaVBgAmhQZwNnUG8E + ZVB4BWNQggZiUI0HYE+aCF9PqAleT7kKXU7MClxO4ApcTu4JXE34CFxN/ghcTf4Iy04AAL9XAACvWQAA + olkAAJhZAACQWAAAi1QAAIRVAAB/VQQAelYSAHZWHwBzVikAcFYzAG1VOwBrVUIAaVVJAGdVUABmVVcB + ZFVeAmNVZQNiVW0EYFV2BV5UgAZdVIsIW1SYCVpTpwpZU7gKWFPLCldS4ApXUu4JWFH3CVhR/ghYUf4I + yVEAALxaAACsWwAAn1wAAJVcAACNWwAAh1cAAIBZAAB6WQAAdVoOAHFaGwBuWiYAa1owAGhaOABmWkAA + ZFpHAGNaTgBhWlUBYFlcAl5ZYwNdWWsEW1l0BVpZfgZYWIoIVliXCVVXpgpUV7cKU1fKC1JW3wpTVu4K + U1X3CVNV/glTVf4JxlUAALhdAACpXgAAnF8AAJJfAACJXgAAg1sAAHtdAAB1XgAAcF4LAGxeGABpXiMA + Zl4tAGNeNgBhXj4AYF5FAF5eTABdXlMBW15aAVpeYQJYXmoDVl5zBVVdfQZTXYgHUVyVCVBcpApPXLYK + TlvJCk1b3gpOWu0KTln3CU5Z/glOWf4Jw1kAALVgAAClYQAAmWEAAI5iAACGYQAAfl8AAHdhAABwYgAA + a2IHAGdjFQBkYyAAYWMqAF5jMwBcYzsAW2RDAFlkSgBYZFEAVmNYAVVjXwJTY2gDUWNxBE9iewZNYoYH + TGGUCEphowlJYbQKSGDICkhg3QpIX+0JSF72CUld/QlJXf0JwF4AALFjAAChZAAAlWQAAItlAACCZQAA + eWQAAHFlAABrZgAAZmcDAGFoEQBeaBwAW2gnAFlpMABXaTgAVWlAAFRpRwBSaU8AUWlWAU9pXQFNaWYC + TGhvBEpoeQVIZ4UGRmeSB0VmoQhDZrMJQmbHCUJl3AlCZOwIQmP2CENj/QhDY/0IvGIAAKxmAACdZwAA + kWgAAIdoAAB+aAAAdGkAAGxqAABlawAAYGwAAFttDABXbhgAVW4jAFNvLABRbzUAT289AE5vRABMb0wA + S29TAElvWwFHb2MCRm5sAkRudwRCboMFQG2QBj5tnwc9bLEHPGzFBzxr2wc8ausHPGn2Bzxo/Qc8aP0H + uGgAAKdqAACZagAAjWsAAIJrAAB5bAAAcG0AAGVwAABfcQAAWXIAAFR0BgBQdBMATXUeAEt1KABJdTEA + SHU5AEZ2QABFdkgARHZQAEJ2WABBdWEBP3VqAT11dAI7dYADOXSOBDd0nQU2c68FNXPEBTRy2gU1cesF + NXD1BjVv/QY1b/0Gs20AAKJtAACUbgAAiG8AAH5vAAB1cAAAa3EAAGB1AABZdwAAUnkAAEx6AABIew0A + RXwZAEN8IwBBfCwAP300AD59PAA9fUQAO31MADp9VAA4fV0AN3xnADV8cQEzfH0BMXyLAi97mwIue60D + LXrBAyx62AMseOoDLHf1BC12/AQtdvwErXEAAJxxAACPcgAAg3IAAHpzAABxdAAAZ3YAAFx6AABUfAAA + TH8AAEWBAAA/gwYAO4QSADmEHQA3hCYANYQuADSENgAzhT4AMYVGADCFTwAuhVgALYRiACuEbQAphHoA + KISIACaEmAEkg6oBI4O/ASKC1QEjgegBI4D0AiN//AIjf/wCpnUAAJZ1AACJdgAAf3YAAHV3AABseQAA + YnwAAFh/AABOgwAARoUAAD6IAAA2igAAMIwJAC2MFQArjR4AKo0nACiNLwAnjTgAJo1AACSNSQAijVIA + IY1dAB+NaAAdjXUAHI2DABqMkwAYjKYAF4y7ABWL0gAWiucAF4nzABeI+wAXiPsAn3oAAJB6AACEegAA + ensAAHB9AABmgAAAXIMAAFOGAABJigAAQI0AADePAAAvkgAAJ5QAACCVCgAdlhUAHJYeABqWJgAZly8A + GJc4ABaXQQAUl0sAE5dVABGXYQAOl28ADJZ+AAqWjgAIlqAAB5W0AAWUygAGlOAAB5PtAAiS9gAIkvYA + l34AAIp+AACAfwAAdYEAAGqEAABghwAAVosAAEyOAABCkgAAOJUAADCXAAAnmgAAH5wAABeeAAAOoAgA + C6ASAAmgHAAIoSUAB6EuAAWhNwADoUIAAaFNAAChWQAAoWcAAKB1AACghgAAoJcAAJ+rAACfwAAAntUA + AJ7lAACd7wAAne8AkYMAAIWDAAB6hQAAb4gAAGSMAABakAAAT5QAAEWYAAA7mwAAMZ4AACehAAAfowAA + FqUAAA2nAAAFqQIAAKkLAACqFAAAqhwAAKslAACrLgAAqzgAAKxDAACsTwAArF0AAKxsAACsfAAAq44A + AKugAACrtQAAqsoAAKrbAACq5wAAqucAi4kAAH+KAABzjQAAaJEAAF2WAABSmgAASJ4AAD2iAAAzpQAA + KKgAAB+qAAAVrQAADK8AAASxAAAAsgAAALMDAAC0CgAAtRIAALUaAAC2IwAAty0AALc3AAC5QwAAuVEA + ALlhAAC5cQAAuYMAALmWAAC5qQAAub0AALnNAAC53AAAudwAhY8AAHmSAABtlwAAYpsAAFagAABLpQAA + P6kAADStAAAqsAAAH7MAABW1AAAKtwAAAbkAAAC6AAAAvAAAAL0AAAC+AAAAvwcAAMAOAADBFwAAwyAA + AMQqAADGNQAAyEMAAMlTAADJZAAAyXYAAMqJAADKnAAAyq8AAMq+AADKzAAAyswAfpgAAHOcAABnogAA + W6cAAE+sAABDsQAAN7UAACu4AAAfugAAE7wAAAi+AAAAwAAAAMIAAADEAAAAxQAAAMcAAADIAAAAygAA + AMsBAADNCQAAzxIAANEbAADUJwAA2DQAANtDAADcVQAA3WcAAN56AADfjQAA358AAN+tAADfugAA37oA + eKMAAG2oAABhrgAAVbQAAEe4AAA5uwAAK74AAB7AAAARwwAABsUAAADIAAAAygAAAMsAAADNAAAAzwAA + ANEAAADTAAAA1QAAANgAAADaAAAA3QMAAOAMAADjFwAA5iQAAOoyAADtQwAA7lYAAPBpAADxfAAA8o0A + APKaAADypQAA8qUA/wAMAP8ABwD/AA0A/wAYAP8AJAD9ADEA+gA9APgASQD2AFMA8wBdAO8AZQDtAGwA + 6gByAOkAdwDoAHwA5wCBAOYAhQDlAIoA5ACOAOMAkwDiAJkA4QCgAOAAqADeALEA3AC8ANsAyQDaANkA + 2QDoANkA9QDYAP8A2AD/ANgA/wDYAP8A/wAGAP8AAwD/AAoA/wAUAPsAHwD2ACwA8wA5APAARQDuAE8A + 6wBZAOcAYQDkAGgA4gBuAOEAdADgAHkA3wB9AN4AggDcAIYA2wCLANoAkADZAJYA2ACcANUApADTAK0A + 0gC3ANAAxADPANMAzgDkAM4A8QDNAPsAzQD/AM0A/wDNAP8A/wAAAP8AAAD/AAYA/wAOAPMAGwDvACgA + 6wA0AOgAQADlAEsA4QBUAN4AXQDbAGQA2QBrANgAcADVAHUA1AB6ANMAfgDSAIMA0QCHAM8AjADOAJIA + zACYAMoAoADJAKkAyACzAMYAwADFAM4AxADfAMMA7QDCAPcAwgD+AMEA/wDBAP8A/wAAAP8AAAD/AAEA + 9wAIAOsAFQDmACIA4gAvAN4AOwDaAEUA1gBPANMAWADQAF8AzgBmAM0AbADLAHEAygB2AMkAegDHAH8A + xgCEAMUAiQDDAI4AwgCVAMAAnAC/AKUAvQCvALwAuwC6AMkAuQDaALcA6AC3APMAtgD6ALYA/wC2AP8A + /wAAAP8AAAD9AAAA7AABAOMADQDdABsA2AAoANIANQDOAEAAywBKAMkAUwDGAFoAxABhAMIAZwDAAGwA + vwBxAL4AdgC8AHsAuwB/ALoAhQC5AIsAtwCRALYAmQC0AKEAsgCsALEAtwCvAMUArgDVAK0A5ACsAO8A + qwD3AKsA/QCrAP4A/wAAAPkAAADpAAAA4gAAANoABQDTABMAzQAhAMgALgDEADkAwQBEAL4ATQC8AFUA + uQBcALcAYgC2AGgAtABtALMAcgCyAHYAsQB7ALAAgQCuAIcArQCOAKsAlQCqAJ4AqACoAKYAtAClAMIA + owDRAKIA4gChAO0AoQD1AKAA+QCgAPsA/AAAAOoBAADgCAAA1gcAAM8BAADKAAoAxQAYAMEAJQC8ADIA + uAA9ALUARwCyAE8AsABXAK4AXQCsAGMAqwBoAKoAbQCoAHIApwB3AKYAfQCkAIMAowCKAKIAkgCgAJsA + ngCmAJ0AsgCbAMAAmgDQAJgA4QCYAewAlwH0AJYC+gCWAvwA7wUAAOMTAADYGgAAzBkAAMQVAADADQAA + vgQNALgGHQCzCSsArwo2AKwLQQCpC0kApwxRAKUMWACjDF4AogxkAKEMaQCfDG4Angx0AJ0MegCbDIAA + mg2IAJgNkACXDZoAlQ2lAJQNsgCSDcEAkQ3RAI8O4wCOEPAAjRD5AI0Q/gCMEP8A6BQAANshAADOJwAA + wiYAALojAAC1HwAAsxcEAK8UFQCrFyQApxgwAKMZOwCgGUQAnhlMAJwZUwCaGVkAmBlfAJcZZQCWGWoA + lBpwAJMadgCSGn0AkBqEAI8ajQCNGpcAjBqiAIoasACJG78AiBrQAIYb4gCFHPAAhBz5AIQc/wCEHP8A + 4iAAANQsAADGMQAAujEAALIuAACsKwAAqSUAAKcgDgCiIh4AniMqAJokNQCXJD8AlSRHAJMkTgCRJFUA + jyRbAI4kYQCNJGYAiyRsAIokcgCJJHkAhyWBAIYligCEJZQAgyWgAIElrQCAJb0AfyXOAH4l4QB9Ju4A + fCb4AHwl/gB7Jf8A3SoAAM42AAC/OQAAszkAAKs3AAClNAAAoTAAAJ4rCACaKxgAliwlAJItMACPLjoA + jS1CAIstSgCJLVEAhy1XAIYtXQCELWMAgy1pAIItbwCALXYAfy5+AH4uhwB8LpEAey6dAHkuqwB4LroB + dy7MAXYu3wF1Lu0BdC73AXQt/gF0Lf8B2DIAAMk9AAC6PwAArj8AAKU+AACfOwAAmjgAAJc0AwCTMxMA + jjQgAIs1LACINTUAhjU+AIM1RgCCNU0AgDVTAH41WQB9NV8AfDVlAHo1bAB5NXMAdzV7AHY1hQB1NY8B + czWbAXI1qQFxNbkCcDXKAm813gJuNe0CbTT3Am00/QJtNP8C0zkAAMRCAAC1RAAAqUQAAJ9EAACZQAAA + lD4AAJE7AACMOg4AiDscAIQ7JwCBPDEAfzw6AH08QgB7O0kAeTtPAHc7VgB2O1wAdTtiAHM7aQByO3EA + cTt5AW87ggFuO40CbDuZAms7pwNqO7cDaTvJA2g73QNnO+wDZzr2A2c6/QNnOv8Dzz8AAMBGAACwSAAA + pEkAAJtIAACURgAAj0MAAItAAACGQAkAgkEXAH5BIwB7QS4AeUE3AHdBPgB1QUYAc0FMAHFBUwBwQVkA + bkFfAG1BZgBsQW4BakF3AWlBgAJnQYsCZkGXA2VBpQNjQbUEY0DIBGJA3ARhQOsEYT/2BGE//ANhP/4D + y0QAALxKAACtTAAAoEwAAJdMAACQSgAAi0cAAIZGAACBRgUAfUYUAHlGIAB2RioAc0YzAHFGOwBvRkIA + bUZJAGtFUABqRlYAaEZdAGdGZABmRmwBZEZ1AWNGfgJiRokDYEaVBF9GpAReRbQFXUXGBVxF2wVcROoF + XET1BFxE/ARcQ/4EyEgAALhNAACpTwAAnVAAAJNPAACMTgAAh0sAAIFKAAB8SgEAeEoQAHRLHABwSycA + bkowAGtKOABpSj8AZ0pGAGVKTQBkSlMAY0paAGJLYgBgS2oBX0tzAl5LfAJcS4cDW0qUBFlKogVYSrMF + V0rFBVdJ2gVXSeoFV0j1BVdI/AVXSP4FxkwAALVQAACmUgAAmlIAAJBTAACIUQAAg04AAH1OAAB3TwAA + c08MAG9PGQBrTyMAaE8tAGZPNQBkTjwAYk5DAGBOSgBfT1EAXk9YAFxPYABbT2gBWk9xAllPewNXT4YD + Vk+SBFROoQVTTrEFUk7EBlJN2QZSTekFUkz0BVJM+wVSTP4Fw1AAALJTAACjVAAAl1UAAI1VAACFVQAA + gFEAAHlSAABzUwAAblMJAGpTFQBmUyAAY1MqAGFTMgBfUzoAXVNBAFtTSABaU08AWVRWAFhUXgBWVGYB + VVRvAlRUeQNSU4QDUVORBE9ToAVOUrAGTVLDBk1S2AZNUekFTVD0BU1Q+wVNUP4FwFQAAK5WAACgVwAA + k1gAAIpYAACBWAAAe1UAAHRWAABuVwAAaVgFAGVYEgBhWB0AXlgnAFxYMABaWDgAWFg/AFZYRgBVWE0A + VFlUAFNZXABRWWQBUFltAU5YdwJNWIMDS1iQBEpXngVJV68FSFfCBkdW1gZIVegFSFX0BUhU+wVIVP0F + vVcAAKtZAACcWgAAkFsAAIZbAAB+WwAAdlkAAG9aAABpWwAAZFwBAF9cDgBcXRoAWV0kAFddLQBVXTUA + U108AFFdRABQXksAT15SAE1eWgBMXmIBS15rAUlddgJHXYEDRl2OBEVcnQRDXK4FQlzBBUJb1QVCWugF + QlnzBUNZ+wVDWf0FuVoAAKdcAACZXQAAjV4AAINeAAB6XgAAcV4AAGpfAABkYAAAXmEAAFpiCgBWYhYA + U2IgAFFjKgBPYzIATWM6AExjQQBKY0gASWNQAEhjWABGY2AARWNpAUNjdAFCY38CQGKMAz9imwQ9YawE + PGG/BDxh1AQ8YOcEPF/zBD1e+gQ9Xv0EtF0AAKNfAACVYAAAiWEAAH9hAAB2YgAAbWIAAGRkAABeZQAA + WGYAAFNnBQBPaBIATGgcAEppJgBIaS4ARmk2AEVpPgBEaUUAQmlNAEFpVQBAaV4APmlnAD1pcQE7aX0B + OWiKAjhomQM3aKoDNme+AzVn0wM1ZuYDNmXyAzZk+gQ2ZP0Er2EAAJ5iAACQZAAAhWQAAHtlAAByZQAA + aGcAAF5pAABXawAAUWwAAExtAABIbwwARW8YAEJvIgBBcCoAP3AyAD1wOgA8cEIAO3BJADpwUgA4cFoA + N3BkADVwbwAzcHoAMm+IATBvlwEvbqgCLm68Ai1t0QIubOUCLmvyAi5q+gIuavwDqWUAAJlmAACLZwAA + gGgAAHZoAABuaQAAZGsAAFpuAABTcAAATHIAAEV0AABAdQYAPHYSADp3HAA4dyUANncuADV3NQAzdz0A + MndFADF3TQAvd1YALndgACx3awArd3cAKXeFACd2lAAmdqYAJXW6ACR1zwAkdOQAJXPxASVy+QElcvwB + o2kAAJNqAACGawAAfGwAAHJsAABpbQAAYHAAAFVzAABOdQAARngAAD96AAA3fQAAMn4LAC9+FgAtfx8A + LH8oACp/MAApfzgAKH9AACZ/SAAlf1IAI39cACJ/ZwAgf3MAHn+BABx+kQAbfqIAGn23ABh9zQAZfOMA + GnvwABp6+QAaevsAnG4AAI5uAACBbwAAd3AAAG5xAABkcwAAW3UAAFF5AABIfAAAQH4AADiBAAAwgwAA + KIYCACOHDQAhhxcAIIcgAB6HKAAdiDAAG4g5ABqIQgAYiEsAF4hWABWIYgATiG4AEYd9AA+HjAANh54A + C4ayAAqGyAAKhd4AC4TtAAyD9gAMg/kAlXIAAIhzAAB9cwAAc3QAAGl2AABfeQAAVXwAAEyAAABCgwAA + OoYAADGIAAApiwAAIY0AABmPAwATkA0AEZEWABCRHwAOkSgADJEwAAuROgAJkUQACJFPAAaRWwAEkWgA + ApF2AACQhgAAkJcAAI+qAACOvwAAjtQAAI3lAACN7gAAjfEAjncAAIJ3AAB4eAAAbXoAAGN9AABZgAAA + T4QAAEWIAAA7iwAAMo4AACqQAAAhkwAAGZUAABGXAAAImQUAApkOAACaFwAAmiAAAJooAACbMQAAmzsA + AJtGAACbUwAAm2AAAJtuAACafgAAmo8AAJqiAACZtgAAmMsAAJjeAACX6AAAl+wAiHwAAH58AAByfgAA + Z4EAAF2FAABSiQAASI0AAD6QAAA0lAAAKpcAACGaAAAYnAAAEJ4AAAegAAAAogAAAKIIAACjEAAAoxgA + AKQgAAClKAAApTIAAKY8AACmSQAAp1YAAKdlAACmdQAApoYAAKWZAAClrQAApcIAAKXTAACk4QAApOUA + g4EAAHeDAABshgAAYYoAAFaOAABLkwAAQJcAADabAAArngAAIaEAABekAAAOpgAABagAAACqAAAAqwAA + AKwAAACtBwAArg4AAK8WAACwHgAAsScAALIxAACzPQAAtEsAALRaAAC0agAAtHwAALSOAAC0ogAAtLYA + ALTHAACz1QAAs9sAfYgAAHGLAABmjwAAWpQAAE+ZAABDngAAOKIAAC2mAAAiqQAAGKwAAA2uAAADsQAA + ALMAAAC0AAAAtgAAALcAAAC4AAAAuQMAALoKAAC7EgAAvRsAAL4kAADAMAAAwz0AAMNNAADEXgAAxXAA + AMWCAADFlgAAxakAAMa5AADGxgAAxssAd5AAAGuVAABfmgAAVKAAAEelAAA7qgAAMK4AACSyAAAZtQAA + DbgAAAK6AAAAvAAAAL0AAAC/AAAAwAAAAMIAAADDAAAAxQAAAMYAAADIBAAAygwAAMwWAADPIQAA0i4A + ANU9AADWTwAA2GIAANl1AADaiAAA2poAANuqAADbtgAA27sAcZsAAGWgAAD/4vAASUNDX1BST0ZJTEUA + BApZpgAATawAAECyAAA0twAAJ7oAABm8AAAMvwAAAMEAAADDAAAAxQAAAMcAAADIAAAAygAAAMwAAADO + AAAA0AAAANIAAADVAAAA2AAAANsHAADfEgAA4x4AAOcsAADqPgAA61EAAOxkAADteAAA7ooAAO6ZAADu + pAAA7qkA/wAFAP8AAAD/AAkA/wAUAP8AIQD8AC4A+gA6APgARgDzAFAA7wBZAO0AYQDrAGgA6QBuAOgA + dADmAHkA5QB9AOQAgQDjAIYA4wCLAOEAjwDgAJUA3gCbAN0AowDbAKwA2gC3ANkAxQDYANUA1wDmANYA + 9ADVAP8A1QD/ANUA/wDVAP8A/wAAAP8AAAD/AAUA/gAQAPkAHQD1ACoA8gA2AO4AQQDrAEsA5wBVAOUA + XQDjAGQA4QBrAN8AcADeAHUA3AB6ANsAfgDaAIIA2ACHANYAjADVAJEA0wCYANIAnwDQAKgAzwCzAM4A + wADNAM8AywDhAMoA8ADKAPsAygD/AMoA/wDKAP8A/wAAAP8AAAD/AAAA9gALAPEAGADsACUA6AAxAOMA + PADhAEcA3gBQANsAWQDYAGAA1gBmANQAbADSAHEA0AB2AM8AegDNAH4AzACDAMsAiADKAI4AyACUAMcA + mwDGAKQAxACvAMMAuwDBAMoAwADbAL8A6gC+APcAvgD/AL4A/wC+AP8A/wAAAP8AAAD5AAAA7gAFAOcA + EgDiAB8A3AArANgANwDVAEIA0gBLAM8AVADMAFsAygBiAMgAZwDGAGwAxQBxAMQAdgDDAHoAwQB/AMAA + hAC/AIoAvQCQALwAlwC7AKAAuQCqALcAtgC2AMUAtADVALMA5QCzAPIAsgD7ALIA/wCyAP8A/wAAAP8A + AADuAAAA5QAAAN0ACwDVABgA0AAlAMwAMQDJADwAxgBGAMQATgDBAFYAvwBdAL0AYwC7AGgAugBtALkA + cQC3AHYAtgB7ALUAgAC0AIUAsgCMALEAkwCvAJwArQCmAKwAsgCqAMAAqQDPAKgA4QCnAO4ApgD2AKUA + /AClAP8A/wAAAO0AAADkAAAA2wAAANEABADLABEAxgAeAMIAKgC+ADYAuwBAALkASQC2AFEAtABYALIA + XgCxAGMArwBoAK4AbQCtAHEAqwB2AKoAfACpAIEApwCIAKYAkACkAJkAowCjAKEArgCfALwAngDLAJwA + 3QCbAOkAmwDzAJoA+QCaAPwA8QAAAOUAAADaAgAAzgEAAMcAAADBAAgAvQAVALkAIgC1AC4AsgA5AK8A + QwCsAEsAqgBSAKgAWACmAF4ApQBjAKQAaACiAG0AoQByAKAAeACeAH4AnQCFAJwAjACaAJUAmACgAJcA + qwCVALkAkwDIAJIA2gCRAOgAkQDxAJAA9gCQAPkA6gMAAN0QAADOEwAAwxIAALwOAAC3BwAAtAAMALAA + GgCsACcAqQAyAKYCPQCjAkUAoQJNAJ8DUwCdA1kAnANfAJoDZACZA2kAmANuAJYDdACVA3oAkwSCAJIE + igCQBJMAjwSeAI0EqgCMBLgAigTIAIkF2gCIBucAhwbyAIcH+ACHB/wA4xIAANQeAADFIAAAuiAAALId + AACtGAAAqxEBAKkKEQCkDB8AoA4rAJ0QNgCbED8AmBBHAJYRTgCUEVQAkxFaAJERYACQEWUAjxFrAI0R + cQCMEXcAihF/AIkShwCHEpEAhhKcAIQSqQCDErgAghLJAIAS3AB/E+sAfhP2AH4T/AB+E/8A3R4AAMwo + AAC9KgAAsioAAKooAACkJQAAoR8AAKAYCQCbGRgAlxolAJQbMACSHDoAjxxCAI0cSQCLHFAAihxWAIgc + WwCHHGEAhRxnAIQcbQCDHHQAgR18AIAdhAB+HY4AfR2aAHsdpwB6HbYAeR3HAHgd2gB3HuoAdh71AHYe + /AB1Hv8A1igAAMUwAAC2MgAAqzIAAKMwAACdLgAAmSoAAJckAwCTIxMAjyQgAIwlKwCJJTUAhyY9AIUm + RQCDJksAgSVSAIAlVwB+JV0AfSVjAHwmagB6JnEAeSZ5AHcmgQB2JowAdCeXAHMnpAByJ7QAcSfFAHAm + 2ABvJ+gAbif0AG4m+wBuJv8A0TEAAMA2AACxOAAApTgAAJw3AACWNQAAkjIAAI8uAACMLA0AiCwbAIQt + JgCCLTAAfy05AH0uQAB7LUcAei1OAHgtVAB3LVoAdS1gAHQtZgByLm4AcS52AHAufwBuLokAbS+VAGwv + ogBrL7IAaS/DAGku1gBoLugAZy7zAGcu+gBnLv8AzDcAALs7AACsPQAAoD4AAJc9AACROwAAjDgAAIk1 + AACFMwgAgTMWAH40IgB7NCwAeDQ1AHY0PAB0NEMAczRKAHE0UABvNFYAbjRdAG00YwBrNGsAajVzAGk1 + fQBnNYcAZjWTAGU1oQBkNbABYzXCAWI11QFhNecBYTTzAWE0+gFhNP4ByDwAALY/AACnQQAAnEIAAJNC + AACNPwAAhz0AAIM7AAB/OgQAezkSAHg6HgB0OigAcjoxAHA6OQBuOkAAbDpHAGo6TQBpOlMAZzpaAGY6 + YQBlOmkAZDpxAGI7ewBhO4UAYDuRAV87nwFdO68BXDvBAVw61AFbOuYBWzryAVs5+gFbOf4BxEAAALJD + AACkRQAAmEYAAI9GAACIRAAAg0EAAH4/AAB6PwAAdj8NAHI/GgBvPyQAbD8tAGo/NQBoPz0AZj9DAGQ/ + SgBjP1AAYT9XAGA/XgBfP2YAXkBvAF1AeQBbQIMBWkCQAVlAngFYQK0CV0C/AlY/0wJWP+UCVj7yAlY+ + +QJWPv4CwUMAAK9GAACgSAAAlEkAAItJAACESAAAf0UAAHpDAAB1RAAAcEQKAG1EFgBpRCEAZkQqAGRD + MgBiQzkAYENAAF5DRwBdQ04AW0RVAFpEXABZRGQAWEVtAFdFdwBWRYIBVUWOAVNFnAJSRawCUUS+AlFE + 0gJQQ+UCUEPxAlBC+QJRQv4CvUYAAKxJAACdSwAAkUwAAIhMAACBSwAAfEgAAHZHAABwSAAAa0gGAGdI + EwBkSB0AYUgnAF5ILwBcSDYAWkg9AFhHRABXSEsAVkhSAFVJWgBUSWIAU0lrAFJKdQBRSoABT0mNAU5J + mwJNSasCTEm9AkxI0QJLSOQCTEfxAkxH+QJMRv0CukkAAKhMAACaTgAAjk8AAIVPAAB9TgAAeEsAAHFL + AABrTAAAZk0DAGJNEABfTRoAXE0kAFlNLABXTTQAVUw7AFNNQgBSTUkAUU1QAFBNWABPTmAATk5qAE1O + dABMTn8BSk6LAUlOmgJITaoCR028AkZN0AJGTOQCR0vxAkdL+AJHSv0CtkwAAKVPAACXUQAAi1IAAIJS + AAB6UQAAdE4AAGxQAABmUQAAYVEAAF1RDABZUhcAVlIhAFRSKgBSUjIAUFI5AE5SQABNUkcATFJOAEtT + VgBKU14ASVNoAEdTcgBGU30BRVOKAURSmAJDUqgCQlK7AkFRzwJBUeMCQVDwAkJP+AJCT/0CslAAAKFS + AACTUwAAiFQAAH5VAAB2VQAAb1IAAGdUAABhVQAAXFYAAFhWCABUVhQAUVceAE5XJwBMVy8AS1c2AElX + PgBIV0UAR1hMAEVYVABEWFwAQ1hmAEJYcABAWHsBP1iIAT5XlwE9V6cCPFe6AjtWzgI7VeICPFXwAjxU + +AI8U/0CrlMAAJ5VAACQVgAAhFcAAHtYAAByWAAAalcAAGJZAABcWgAAV1oAAFJbBABOXBAAS1waAEhd + IwBGXSwARV0zAENdOwBCXUIAQV1KAD9eUgA+XloAPV5jADtebgA6XnkAOV2GAThdlQE2XaUBNly4ATVc + zQE1W+IBNVrvAjZZ+AI2WfwCqlYAAJpYAACMWgAAgVoAAHdbAABuWwAAZVwAAFxeAABWXwAAUGAAAEth + AABHYgsARGMWAEJjIABAYygAPmMwADxjNwA7Yz8AOmRHADhkTwA3ZFcANmRhADRkawAzZHcAMmOEADBj + kwAvY6QALmK3AS5izAEuYeEBLmDvAS5f9wEvXvwBpVoAAJVcAACIXQAAfF4AAHNeAABqXwAAYGAAAFdj + AABRZAAASmYAAERnAABAaAYAPGkRADpqGwA4aiQANmosADRqNAAzajsAMmpDADBqSwAvalQALmpeACxq + aAAranQAKWqCAChqkQAnaaEAJmm1ACVoygAlZ+AAJmbuACZm9wAmZfwBn14AAJBgAACDYQAAeGEAAG9i + AABmYwAAXWQAAFNnAABMaQAARWsAAD9tAAA4bwAAM3ALADBxFgAucR8ALXEnACtxLwAqcjcAKHI+ACdy + RwAmclAAJHJaACNyZQAhcnEAIHF+AB5xjgAdcZ8AG3CyABpwyAAab94AG27tABxt9gAdbPsAmWIAAItk + AAB+ZAAAdGUAAGtmAABiZwAAWWkAAE9tAABHbwAAQHEAADlzAAAxdgAAKngEACZ5DgAkeRgAInkhACB5 + KQAfejEAHno5ABx6QQAbeksAGXpVABh6YQAWem0AFHp7ABJ5igAReZsAD3ivAA54xQANd9sADnbsABB1 + 9QAQdPsAk2cAAIVoAAB5aAAAcGkAAGdqAABdbAAAVG8AAEpyAABCdQAAOngAADJ6AAArfAAAI38AABuB + BgAXghAAFYIZABSCIQASgioAEYIyAA+COwANgkQADIJPAAqCWwAIgmgABoJ1AASChQACgZUAAYCoAACA + vQAAf9IAAH7kAAF+7QABfvMAjGwAAH9sAAB1bAAAbG0AAGJvAABYcgAATnUAAEV5AAA7fAAAM38AACuB + AAAjhAAAG4YAABOIAAALiggABosRAASLGgADiyIAAYsrAACLNAAAiz0AAItIAACLVAAAi2EAAItvAACL + fwAAio8AAIqhAACJtgAAiMsAAIjeAACH6QAAh+8AhnAAAHpwAABxcQAAZnMAAFx2AABSeQAASH0AAD6B + AAA1hAAALIcAACOKAAAbjAAAE44AAAqQAAADkgQAAJMMAACTFAAAkxsAAJQjAACULAAAlTUAAJVAAACV + TAAAlVkAAJVnAACVdwAAlYgAAJSaAACUrgAAk8MAAJLWAACS5AAAkusAgHUAAHZ1AABrdwAAYHoAAFZ+ + AABLggAAQYYAADeKAAAtjQAAI5AAABqTAAASlQAACZcAAAGZAAAAmwAAAJsFAACcDAAAnRQAAJ4bAACe + IwAAnywAAKA2AAChQgAAoU8AAKFeAAChbgAAoX8AAKGRAACgpgAAoLoAAJ/NAACf3QAAnuUAe3oAAHB8 + AABlfwAAWoMAAE+HAABEjAAAOZAAAC6UAAAklwAAGpoAABGdAAAHnwAAAKEAAACjAAAApAAAAKUAAACm + AwAApwoAAKkRAACqGQAAqyEAAKwrAACtNgAArkQAAK5TAACvYwAAr3UAAK+IAACvmwAArrAAAK7CAACu + 0AAArtsAdYEAAGqEAABeiAAAU40AAEeSAAA7lwAAMJsAACWfAAAaogAAEKUAAAWoAAAAqgAAAKwAAACu + AAAArwAAALAAAACyAAAAswAAALQGAAC2DQAAtxUAALkfAAC7KgAAvTYAAL5GAAC/VwAAv2kAAMB8AADA + jwAAv6QAAL+2AADAwwAAwM0Ab4kAAGOOAABYkwAAS5kAAECeAAAzowAAKKcAAByrAAARrgAABbEAAAC0 + AAAAtgAAALgAAAC5AAAAuwAAALwAAAC+AAAAvwAAAMEAAADDAAAAxAgAAMcRAADJHAAAzCgAAM83AADQ + SQAA0lsAANNuAADUggAA1JUAANWmAADVswAA1b0AaZMAAF2ZAABRnwAARaUAADiqAAAsrwAAH7QAABO3 + AAAHuwAAAL0AAAC/AAAAwQAAAMIAAADEAAAAxgAAAMcAAADJAAAAywAAAM0AAADQAAAA0gAAANYCAADa + DAAA3hgAAOInAADlOAAA5kwAAOdgAADpcwAA6oYAAOqWAADrogAA66oA/wAAAP8AAAD/AAUA/wARAP8A + HgD8ACsA9wA2APUAQQDyAEwA7wBVAO0AXgDrAGUA6ABrAOYAcADlAHUA4wB5AOIAfQDhAIIA4ACGAN4A + iwDdAJEA3ACXANsAnwDZAKgA2ACzANYAwQDVANEA0wDkANMA8wDSAP8A0gD/ANIA/wDSAP8A/wAAAP8A + AAD/AAEA/AANAPcAGgDyACYA7gAyAOwAPQDqAEgA5gBRAOMAWQDgAGAA3gBnANwAbADaAHEA2QB1ANgA + egDWAH4A1ACDANMAhwDSAI0A0ACUAM8AmwDNAKQAzACvAMsAvADJAMsAyADeAMcA7gDHAPsAxwD/AMcA + /wDHAP8A/wAAAP8AAAD6AAAA8wAIAO0AFQDnACEA4wAtAOEAOADeAEMA2wBMANcAVQDUAFwA0gBiANAA + aADOAG0AzQBxAMsAdgDKAHoAyQB/AMgAgwDHAIkAxQCPAMQAlwDCAJ8AwACqAL8AtgC9AMUAvADYALsA + 6QC7APYAugD/ALoA/wC5AP8A/wAAAP8AAADxAAAA6gACAOEADgDcABsA1gAnANMAMwDPAD0AzgBHAMsA + UADIAFcAxgBeAMQAYwDCAGgAwQBtAMAAcQC+AHYAvQB6ALwAfwC6AIUAuQCLALcAkgC2AJsAtAClALMA + sQCxAL8AsADQAK8A4wCtAPEArAD7AKwA/wCsAP8A/wAAAPQAAADoAAAA3wAAANUACADOABUAyQAhAMYA + LQDDADgAwQBCAL8ASgC8AFIAugBYALgAXgC2AGMAtQBoALQAbQCyAHEAsQB2ALAAewCvAIAArQCHAKwA + jgCqAJcAqQChAKcArQClALoApADKAKIA3QChAOwAoQD2AKAA/QCgAP8A9AAAAOkAAADdAAAA0gAAAMkA + AQDDAA4AvgAbALoAJwC3ADEAtQA7ALMARACxAEwArwBTAK0AWQCrAF4AqgBjAKgAaACnAGwApgBxAKUA + dgCjAHwAogCDAKAAigCfAJMAnQCdAJsAqQCaALYAmADGAJcA2ACWAOcAlgDyAJUA+ACVAP0A7AAAAN8A + AADQAAAAxgAAAL8AAAC5AAYAtAATALEAHwCuACoAqwA1AKgAPgCmAEYApABOAKIAVAChAFkAnwBeAJ4A + YwCcAGgAmwBtAJoAcgCYAHgAlwB/AJUAhwCUAI8AkgCaAJEApQCPALMAjgDCAI0A0wCMAOMAiwDvAIsA + 9gCKAPoA5QEAANQKAADGDAAAuwwAALMIAACvAgAArAALAKgAFwClACMAogAuAJ8AOACdAEAAmwBIAJkA + TwCXAFQAlQBaAJQAXwCTAGQAkQBpAJAAbwCPAHUAjQB8AIwAhACKAI0AiQCXAIcAowCGALAAhADAAIMA + 0ACCAOIAgQDsAIEA8wCBAPgA3RAAAMsXAAC8GQAAsRkAAKkXAACkEwAAogsAAKEDDQCdAxsAmQUnAJYG + MQCUBzoAkgdCAJAISQCOCE8AjQhVAIsIWgCKCGAAiAhlAIcIawCGCHIAhAl5AIMJgQCBCYsAgAmVAH4J + ogB9CbAAewnAAHoJ0QB5CuIAeArvAHgL9gB4C/wA1RwAAMMhAAC0IwAAqSMAAKEiAACcHwAAmBoAAJcT + BACVEBMAkREgAI4SKwCLEzUAiRQ9AIcURACGFEsAhBRRAIIUVgCBFFwAgBRiAH4UaAB9FG8AexV2AHoV + fwB4FYgAdxWUAHUVoAB0Fq8AcxbAAHIV0gBwFuQAcBbxAG8W+QBvFv8AziQAALwpAACtKwAAoiwAAJoq + AACUKQAAkCUAAI4gAACNGw0AiRwaAIUdJgCDHS8AgR04AH8ePwB9HkYAex5MAHoeUgB4HlgAdx5eAHUe + ZAB0HmsAch5zAHEffABwH4YAbh+RAG0fngBrH60Aah++AGkf0QBoH+MAaB/wAGgf+QBnH/4AyCsAALYv + AACoMQAAnDIAAJQxAACOLwAAii0AAIcpAACFJQcAgSQVAH4lIQB7JSsAeSYzAHcmOwB1JkIAcyZIAHIm + TgBwJlQAbyZaAG0mYQBsJmgAaydwAGkneQBoJ4MAZiePAGUonABkKKsAYyi8AGInzwBhJ+IAYSfvAGEn + +ABhJ/4AwzAAALE0AACjNgAAlzcAAI83AACJNQAAhDMAAIAwAAB+LQIAeiwQAHcsHAB0LCYAci0vAG8t + NwBuLT4AbC1EAGotSwBpLVEAZy1XAGYtXgBlLWUAYy5uAGIudwBhLoEAXy6NAF4vmgBdL6oAXC+7AFsu + zgBbLuEAWi7vAFou+ABaLf4AvjUAAK04AACfOwAAkzwAAIs8AACEOgAAfzgAAHs1AAB4MwAAdDIMAHEy + GABuMyIAazMrAGkzMwBnMzoAZTNBAGMzRwBiM04AYDNUAF8zWwBeM2MAXTRrAFs0dQBaNH8AWTWLAFg1 + mQBXNagAVjW6AFU0zQBVNOAAVDTuAFQz9wBUM/0AujkAAKk8AACbPgAAj0AAAIdAAACAPgAAezwAAHY6 + AAByOAAAbjgIAGs4FABoOB4AZTgoAGM4MABgODcAXzg+AF04RABbOEsAWjhRAFk4WQBYOWEAVzlpAFU5 + cwBUOn4AUzqKAFI6lwBROqcAUDq4AE86zABPOeAATznuAE849wBPOP0AtzwAAKU/AACXQgAAjEMAAIND + AAB8QgAAdz8AAHI9AABtPQAAaT0EAGU9EABiPRsAXz0kAF09LABaPTQAWDw6AFc8QQBVPUgAVD1PAFM9 + VgBSPl4AUT5nAFA/cQBPP3wATj+IAEw/lgBLP6YASz+3AEo+ywBKPt8ASj3tAEo99gBKPP0Asz8AAKJC + AACURQAAiUYAAIBGAAB5RQAAdEIAAG5BAABpQgAAZEIAAGBCDABcQhcAWUIhAFdBKQBVQTEAUkE3AFBB + PgBPQUUATkJNAE1CVABMQ10AS0NmAEpDcABJRHsASESHAEdElQBGQ6QARUO2AEVDygBEQt4ARULtAUVB + 9gFFQPwBsEIAAJ9FAACRRwAAhkkAAH1JAAB1SAAAb0YAAGpFAABkRgAAX0YAAFtGCQBXRhQAVEYeAFFG + JgBPRi4ATUY1AEtGPABKRkMASUdKAEhHUgBHSFsARkhkAEVIbgBESHkAQ0iFAEJIkwBBSKMAQEi1AD9H + yQA/R94AP0bsAUBF9gFARfwBrEUAAJxIAACOSgAAg0sAAHpMAABySwAAa0oAAGVJAABfSgAAWksAAFVL + BgBSSxEAT0sbAExLJABKSysASEszAEZMOgBFTEEARExIAENMUABCTVkAQU1iAD9NbAA+TXcAPU2EADxN + kgA7TaIAOky0ADpMyAA6S90AOkvsADpK9gE7SfwBqUkAAJhLAACLTQAAgE4AAHZOAABuTgAAZ04AAGBO + AABaTwAAVE8AAFBQAgBMUA0ASVEYAEZRIQBEUSkAQlEwAEFRNwA/UT8APlJGAD1STgA8UlYAO1JgADlS + agA4UnUAN1KCADZSkQA1UqEANFGzADRRxwAzUNwANE/rADRP9QA1TvwApUwAAJVOAACHUAAAfFEAAHNR + AABrUgAAY1EAAFpSAABUUwAAT1QAAEpVAABGVgkAQlYUAEBXHQA+VyUAPFctADtXNQA5VzwAOFdDADdY + SwA1WFQANFhdADNYaAAyWHMAMFiAAC9YjwAuV58ALlexAC1WxgAtVtsALVXrAC5U9QAuU/sAoE8AAJBS + AACDUwAAeFQAAG9VAABnVQAAX1UAAFRYAABOWQAASFoAAENbAAA/XAUAO10QADldGQA3XSIANV0qADNe + MQAyXjkAMV5AAC9eSAAuXlEALV5bACteZQAqXnEAKV5+AChejQAmXZ0AJl2wACVcxAAkXNoAJVvqACZa + 9AAnWfsAm1MAAIxVAAB/VwAAdFcAAGtYAABjWAAAW1kAAFBcAABKXQAARF8AAD5hAAA4YgAANGMLADFk + FQAvZB0ALWQmACtkLQAqZTUAKGU9ACdlRQAmZU4AJGVYACNlYgAhZW4AIGV7AB9kigAdZJsAHGStABtj + wgAbYtgAHGHpAB1g9AAeYPsAllcAAIdZAAB7WgAAcFsAAGdbAABfXAAAV10AAE1gAABGYgAAP2QAADhm + AAAyaAAAK2oFACdrDwAlbBgAI2wgACJsKAAgbDAAH2w4AB1sQAAcbEkAGmxUABlsXwAXbGsAFmx4ABRs + hwATbJgAEWurABBqwAAQatYAEWnoABJo8wATZ/oAkFwAAIJdAAB2XgAAbF4AAGNfAABbYAAAUmIAAEll + AABBaAAAOmoAADNsAAAsbwAAJHEAAB1zCAAadBIAGHQaABZ0IgAVdCoAE3QyABJ0OwAQdEQADnROAA10 + WgALdGYACXR0AAh0gwAGc5MABHOmAANyugADcc8ABHHiAAVw7QAFb/UAimAAAH1hAABxYgAAaGIAAF9j + AABWZQAATWgAAERrAAA7bgAANHEAACxzAAAldQAAHXgAABV6AAAOfAkACnwTAAl8GwAHfCQABnwsAAR8 + NQADfD4AAXxIAAB8VAAAfGAAAHxuAAB8fQAAfI0AAHugAAB6tAAAeskAAHndAAB46AAAePAAg2UAAHdl + AABtZgAAZGYAAFpoAABRawAASG8AAD9yAAA1dQAALXgAACV7AAAdfQAAFX8AAA2BAAAFgwYAAIQOAACE + FgAAhR4AAIUlAACFLgAAhTcAAIVCAACFTQAAhVoAAIVoAACFdwAAhYcAAISaAACErgAAg8MAAILWAACC + 5QAAge0AfWoAAHJqAABpagAAX2wAAFVvAABLcwAAQXYAADh6AAAufQAAJoAAAB2DAAAVhQAADIcAAAWJ + AAAAiwIAAIwJAACMEQAAjRcAAI4fAACOJwAAjy8AAI85AACPRQAAkFIAAI9gAACPbwAAj4AAAI+TAACO + pwAAjrwAAI3QAACN4AAAjOoAeG4AAG5uAABjcAAAWXMAAE53AABEewAAOn8AADCDAAAmhgAAHYoAABSM + AAALjgAAApAAAACSAAAAlAAAAJUDAACWCQAAlxAAAJcWAACYHgAAmSYAAJowAACbOwAAm0gAAJtXAACb + ZwAAm3gAAJuLAACbngAAmrMAAJrIAACZ2AAAmeQAdHMAAGh1AABdeAAAUnwAAEeBAAA8hQAAMYoAACeN + AAAdkAAAE5MAAAmWAAAAmQAAAJsAAACcAAAAngAAAJ8AAACgAAAAoQYAAKIMAACkFAAApRwAAKYlAACo + MAAAqT0AAKlMAACqXAAAqm4AAKqBAACqlAAAqqgAAKi9AACozQAAqNsAbXoAAGJ9AABXgQAAS4YAAD+L + AAA0kAAAKZQAAB2YAAATnAAACJ8AAAChAAAApAAAAKUAAACnAAAAqQAAAKoAAACsAAAArQAAAK8BAACw + CAAAshAAALQZAAC2IwAAuDAAALk/AAC5UAAAumIAALp1AAC6iQAAu50AALuwAAC6wAAAuswAZ4IAAFuH + AABQjAAARJEAADeXAAArnAAAIKAAABSkAAAIqAAAAKsAAACtAAAArwAAALEAAACzAAAAtQAAALYAAAC4 + AAAAugAAALsAAAC9AAAAvwMAAMEMAADEFgAAxyIAAMoxAADLQgAAzFUAAM5oAADOfAAAz5AAAM+iAADP + sQAAz70AYYwAAFWSAABJmAAAPZ4AADCkAAAjqQAAF60AAAqxAAAAtAAAALcAAAC6AAAAvAAAAL4AAAC/ + AAAAwQAAAMMAAADFAAAAxwAAAMkAAADLAAAAzQAAANAAAADTBwAA2BQAAN0iAADgMgAA4kYAAONaAADl + bgAA5oEAAOeSAADnoAAA56sA/wAAAP8AAAD/AAIA/wAOAP0AGgD5ACYA9gAyAPQAPQDxAEgA7QBRAOsA + WQDpAGAA5wBnAOUAbADkAHEA4gB1AOEAeQDgAH4A3wCCAN4AhwDcAI0A2wCTANkAmwDWAKQA1QCuANMA + vQDRAM0A0ADhANAA8gDQAP8A0AD/ANAA/wDQAP8A/wAAAP8AAAD/AAAA+gAKAPMAFgDvACIA7AAuAOkA + OQDnAEMA5ABNAOEAVQDeAFwA3ABiANoAaADZAG0A1gBxANUAdgDTAHoA0gB+ANEAgwDPAIkAzQCPAMwA + lwDKAJ8AyQCqAMcAtwDGAMcAxQDaAMQA7ADDAPsAwwD/AMIA/wDCAP8A/wAAAP8AAAD4AAAA7wAEAOkA + EQDkAB0A3wApANwANADaAD4A2ABIANQAUADRAFgAzwBeAM0AYwDLAGgAyQBtAMgAcQDHAHYAxQB6AMQA + fwDDAIUAwQCLAMAAkgC+AJsAvAClALsAsQC5AMEAuADSALcA5gC1APUAtAD/ALQA/wC0AP8A/wAAAPcA + AADuAAAA5AAAANwACwDVABgA0AAjAM0ALwDLADkAyQBCAMYASwDEAFIAwQBZAMAAXwC+AGQAvQBoALsA + bQC6AHEAuQB2ALgAegC2AIAAtQCGALMAjQCyAJYAsACgAK4ArACsALsAqwDMAKkA4ACoAO8AqAD7AKgA + /wCoAP8A+wAAAO0AAADiAAAA1gAAAM4ABQDIABIAwwAeAMAAKQC9ADMAuwA9ALkARQC3AE0AtQBUALMA + WgCyAF8AsABjAK8AaACuAGwArABxAKsAdgCpAHsApwCCAKYAiQCkAJIAowCbAKEApwCgALUAnwDGAJ0A + 2QCcAOkAnAD2AJwA/gCcAP8A7wAAAOMAAADUAAAAygAAAMEAAAC7AAsAtwAXALMAIwCxAC0ArgA3AK0A + PwCrAEcAqQBOAKcAVACmAFoApABeAKIAYwChAGgAoABsAJ8AcQCdAHcAnAB+AJoAhQCZAI0AlwCXAJYA + owCUALAAkwDAAJIA0gCRAOQAkADxAJAA+QCPAP4A5wAAANYAAADIAAAAvQAAALcAAACxAAQArAAQAKkA + HACmACYApAAwAKEAOQCfAEEAnQBJAJwATwCaAFQAmQBZAJgAXgCWAGMAlQBoAJQAbQCSAHMAkQB6AJAA + gQCOAIoAjACUAIsAnwCJAK0AiAC8AIcAzQCGAOAAhQDsAIUA9ACFAPoA3QAAAMsCAAC9BgAAsgUAAKsC + AACnAAAAowAIAKAAFACdAB8AmgAqAJcAMwCVADwAlABDAJIASQCRAE8AjwBVAI4AWgCMAF8AiwBkAIoA + aQCIAG8AhwB2AIUAfgCEAIcAggCRAIEAnACAAKoAfgC5AH0AygB8ANwAfADpAHsA8gB7APcA0woAAMIQ + AAC0EwAAqRMAAKESAACcDQAAmgcAAJgADACVABcAkgAiAI8ALQCNADYAiwA9AIkARACHAEoAhgBQAIUA + VQCDAFoAggBgAIAAZgB/AWwAfgFzAHwBewB7AYQAeQGPAHgBmwB2AagAdQG4AHQByQBzAtsAcgLoAHIC + 8AByAvYAyxUAALoaAACrHQAAoR0AAJkdAACTGgAAkBYAAI8OAgCOCA8AiggbAIcJJgCFCjAAggs4AIEL + PwB/C0UAfgxLAHwMUQB7DFcAeQxcAHgMYgB2DGkAdQxxAHMNeQByDYMAcA2OAG8NmgBtDagAbA25AGsN + ywBqDd0AaQ7rAGkO9ABpDvoAxB4AALMiAAClJQAAmiYAAJIlAACMIwAAiCAAAIYbAACFFAgAghQVAH8U + IAB8FSoAehUyAHgWOgB3FkEAdRZHAHQWTQByFlMAcRZZAG8WXwBuF2YAbBduAGsXdgBpGIAAaBiLAGYY + mABlGKcAZBi3AGMYygBiGN0AYRjsAGEY9gBhF/wAviQAAK0pAACfKwAAlCwAAIwsAACGKgAAgSgAAH4k + AAB9HwIAex0QAHcdGwB0HiUAch4uAHAeNQBuHjwAbR9DAGsfSQBqH08AaB9VAGcfXABlH2MAZB9rAGIg + dABhIH4AYCCJAF4hlgBdIaUAXCG2AFsgyABaINwAWiDrAFog9QBaIPwAuSoAAKguAACaMAAAjzIAAIYy + AACAMAAAfC4AAHgrAAB2JwAAcyUKAHAlFgBtJSEAayUpAGklMQBnJjgAZSY/AGQmRQBiJksAYSZSAF8m + WABeJmAAXCdoAFsncQBaJ3wAWCiHAFcolABWKKMAVSi0AFQnxwBTJ9sAUyfqAFMn9QBTJvsAtC4AAKQy + AACWNQAAizYAAII2AAB8NQAAdzIAAHMwAABwLQAAbSwGAGorEgBnKxwAZCslAGIsLQBgLDUAXiw7AFws + QgBbLEgAWSxPAFgsVgBXLV0AVS1mAFQtbwBTLnoAUi6GAFEukwBPLqIATi6zAE4uxgBNLdoATS3qAE0t + 9ABNLPsAsDIAAKA2AACSOAAAhzoAAH46AAB3OQAAczYAAG40AABrMgAAZzICAGQxDgBgMRgAXjEiAFsx + KgBZMTEAVzE4AFYxPgBUMUUAUzFMAFEyUwBQMlsATzNkAE4zbQBNM3gATDSEAEs0kQBJNKEASTSyAEgz + xQBHM9kARzLpAEgy9ABIMvoArTUAAJw5AACPPAAAhD0AAHs9AAB0PAAAbjoAAGo4AABmNwAAYTcAAF42 + CgBbNhUAWDYeAFU2JgBTNi4AUTY0AE82OwBONkIATDZJAEs3UQBKN1kASThiAEg4awBHOHYARjmCAEU5 + kABEOZ8AQzmxAEI4xABCONgAQjfpAEI38wBCNvoAqTkAAJk8AACMPwAAgUAAAHhAAABwQAAAaj4AAGY7 + AABhOwAAXDsAAFg7BgBVOxIAUjsbAE87IwBNOysASzsxAEg6OABIOz8ARztHAEY8TgBFPFcARD1gAEM9 + agBBPXUAQD6BAD8+jwA+PZ4APj2vAD09wwA8PNgAPTzoAD078wA9O/oApjwAAJY/AACJQQAAfkIAAHVD + AABtQwAAZ0EAAGI/AABcPwAAV0AAAFNAAwBPQA4ATEAYAEpAIABHQCgARUAvAENANgBCQD0AQUFFAEBB + TAA/QVUAPkJeAD1CaAA8QnMAO0KAADpCjQA5Qp0AOEKuADdBwgA3QdYAN0DoADhA8wA4P/oAoz8AAJNC + AACFRAAAe0UAAHFGAABqRgAAY0UAAF1DAABXRAAAUkQAAE5FAABKRQsAR0UVAERFHQBCRSUAQEUtAD5F + NAA9RjsAPEZCADpGSgA5R1MAOEdcADdHZgA2R3EANUd+ADRHjAAzR5wAMketADFGwQAxRtUAMkXnADJE + 8gAzRPkAn0IAAI9FAACCRwAAd0gAAG5IAABmSAAAX0gAAFhHAABSSAAATUkAAEhJAABESgcAQUoRAD5L + GgA8SyIAOksqADhLMQA3SzkANkxAADRMSAAzTFAAMkxaADFMZAAwTXAAL0x8AC5MigAtTJoALEysACtL + wAAqS9QAK0rnACxJ8gAtSfkAm0UAAIxIAAB/SgAAdEsAAGtLAABjSwAAW0sAAFRMAABMTQAAR04AAEJP + AAA+UAMAOlANADdRFwA1UR8ANFEnADJRLgAwUTYAL1I9AC5SRQAtUk4AK1JXACpSYgApUm0AKFJ6ACZS + iQAlUpgAJVGqACRRvgAjUNMAJE/mACVP8gAmTvkAl0kAAIhLAAB7TQAAcE4AAGdOAABfTwAAWE8AAE9Q + AABHUgAAQVMAADxVAAA3VgAAM1cJADBXEwAuWBsALFgjACtYKwApWDIAKFg6ACZYQgAlWEsAI1lUACJZ + XwAhWWsAIFl4AB5YhgAdWJcAHFepABtXvQAbVtIAHFXlAB1V8QAdVPgAkk0AAINPAAB3UAAAbFEAAGNR + AABbUgAAVFIAAExUAABDVgAAPVgAADdaAAAxWwAALF0EACheDgAlXxcAJF8fACJfJwAgXy4AH182AB5f + PgAcX0cAG19RABlgXAAYYGgAFl91ABVfhAAUX5QAE16mABJeuwARXdAAElzkABNb8AAUW/gAjVEAAH9T + AABzVAAAaFQAAGBVAABYVQAAUFYAAEhYAAA/WwAAOV0AADJfAAAsYQAAJWQAAB9lCAAbZhIAGmYaABhn + IgAWZyoAFWcxABNnOgASZ0MAEGdNAA5nWAANZ2QAC2dxAAlmgAAIZpAAB2WiAAZltgAFZMsABmPfAAdj + 7AAIYvQAh1UAAHpXAABuVwAAZFgAAFxYAABUWQAATFsAAENeAAA7YQAANGMAAC1lAAAmaAAAH2oAABds + AQARbgoADW8UAAxvHAAKbyQACW8sAAdvNQAGbz4ABG5IAAJuUwAAbl8AAG5sAABuewAAbosAAG2dAABt + sQAAbMYAAGvaAABq5wAAau8AgVoAAHRbAABpWwAAYVsAAFhcAABPXgAAR2EAAD5kAAA2ZwAALmoAACZs + AAAfbwAAGHEAABBzAAAIdQcAAnYPAAB2FwAAdh8AAHcmAAB3LwAAdzgAAHdCAAB3TQAAdlkAAHZnAAB2 + dQAAdoUAAHWXAAB1qwAAdMEAAHTVAABz5AAAc+wAe14AAG9fAABlXwAAXWAAAFNiAABKZAAAQWgAADhr + AAAvbgAAJ3EAAB90AAAXdgAAEHkAAAh7AAAAfAQAAH0LAAB+EgAAfhkAAH8hAAB/KAAAgDEAAIA7AACA + RgAAgFMAAIBgAAB/bwAAf38AAH+RAAB+pQAAfrsAAH3PAAB84QAAfOoAdWMAAGtjAABiYwAAWGUAAE5o + AABEbAAAOnAAADFzAAAodwAAH3oAABd8AAAOfwAABoEAAACDAAAAhAAAAIUHAACGDQAAhxMAAIcaAACI + IQAAiSoAAIozAACKPgAAiksAAIpZAACKaAAAiXkAAIqKAACJnwAAibUAAIjJAACH3AAAh+YAcGcAAGdn + AABcaQAAUm0AAEdxAAA9dQAAM3kAACl9AAAggAAAFoMAAA2GAAAEiAAAAIoAAACMAAAAjQAAAI4AAACP + BgAAkAwAAJESAACTGQAAlCEAAJUqAACWNAAAlkEAAJZPAACWXwAAlnAAAJaCAACWlwAAlawAAJXBAACU + 0wAAlOEAbGwAAGFuAABWcQAAS3YAAEB6AAA1fwAAKoMAACCHAAAWigAADI0AAAKQAAAAkgAAAJQAAACW + AAAAlwAAAJkAAACaAAAAmwMAAJwJAACeEAAAnxcAAKEgAACjKgAApDYAAKRFAACkVQAApGcAAKR6AACj + jwAApKMAAKS3AACjyQAAo9YAZnMAAFp2AABPewAAQ4AAADiFAAAsigAAIY4AABaSAAALlQAAAJgAAACb + AAAAngAAAJ8AAAChAAAAowAAAKQAAACmAAAApwAAAKkAAACrAwAArAsAAK8UAACxHgAAsykAALQ4AAC1 + SQAAtVsAALVvAAC1gwAAtpcAALaqAAC2uwAAtcgAX3sAAFSAAABIhQAAPIsAADCQAAAjlQAAF5oAAAue + AAAAoQAAAKQAAACnAAAAqQAAAKsAAACtAAAArwAAALEAAACzAAAAtAAAALYAAAC4AAAAugAAAL0GAAC/ + EQAAwxwAAMYqAADGPAAAx08AAMhiAADJdgAAyYoAAMqdAADKrQAAyrkAWYUAAE2LAABBkQAANJcAACid + AAAbogAADqcAAAKqAAAArgAAALEAAACzAAAAtgAAALcAAAC5AAAAuwAAAL0AAAC/AAAAwQAAAMMAAADG + AAAAyAAAAMsAAADOAgAA0g4AANccAADbLAAA3UAAAN9UAADgaAAA4XwAAOKPAADingAA4qkA/wAAAP8A + AAD/AAAA/wAKAPwAFgD4ACIA9QAuAPMAOQDxAEMA7QBNAOoAVQDoAFwA5QBiAOQAZwDiAGwA4QBxAOAA + dQDeAHoA3QB+ANwAgwDaAIkA2QCPANYAlwDVAKAA0wCrANEAuADPAMkAzgDfAM0A8ADMAP8AywD/AMsA + /wDKAP8A/wAAAP8AAAD/AAAA9wAFAPIAEgDsAB4A6QApAOcANADmAD8A4gBIAN4AUADcAFcA2QBeANcA + YwDVAGgA0wBtANIAcQDRAHYA0AB6AM4AfwDNAIUAywCLAMoAkgDIAJsAxgCmAMQAswDCAMIAwQDYAL8A + 6gC+APoAvQD/AL0A/wC9AP8A/wAAAP0AAADzAAAA7AABAOUADQDfABkA3AAlANkALwDWADoA0wBDANAA + SwDNAFMAywBZAMkAXwDHAGQAxgBoAMUAbQDEAHEAwgB2AMAAewC/AIAAvQCGALsAjgC5AJYAtwCgALUA + rQC0ALwAswDPALEA5ACxAPQAsAD/ALAA/wCwAP8A/QAAAPMAAADoAAAA3wAAANYABwDQABQAywAfAMgA + KgDGADQAxQA+AMIARgC/AE4AvQBUALoAWgC5AF8AtwBjALYAaAC0AGwAswBxALIAdgCxAHsArwCBAK4A + iQCsAJEAqgCbAKkApwCnALUApgDIAKUA3QCkAO4ApAD7AKMA/wCjAP8A9AAAAOcAAADbAAAAzwAAAMcA + AgDBAA0AvQAZALoAJAC3AC8AtQA4ALMAQACwAEgArgBOAK0AVACrAFkAqgBeAKkAYwCoAGcApwBsAKUA + cQCkAHcAowB9AKEAhACfAI0AngCWAJwAogCaALAAmQDBAJgA1ACXAOgAlgD1AJYA/gCWAP8A6gAAANoA + AADMAAAAwgAAALoAAAC0AAgAsAATAKwAHgCqACkApwAyAKYAOgCkAEIAogBJAKEATwCfAFQAngBZAJ0A + XgCcAGMAmgBnAJkAbACYAHIAlgB4AJQAgACTAIgAkQCSAJAAnQCOAKsAjQC7AIwAzgCLAOEAiwDvAIsA + +gCKAP8A3gAAAM0AAAC/AAAAtQAAAK4AAACoAAIApAANAKEAGACeACIAnAAsAJoANQCZADwAlwBDAJUA + SQCUAE8AkgBUAJEAWQCQAF4AjwBjAI4AaACMAG4AiwB0AIkAfACIAIQAhgCOAIUAmQCEAKcAggC2AIEA + yACBANsAgADrAIAA9QB/APsA1AAAAMIAAAC0AAAAqgAAAKMAAACeAAAAmgAGAJcAEQCVABsAkgAlAJAA + LwCOADcAjQA+AIsARACKAEoAiABPAIcAVACGAFkAhQBeAIQAZACCAGoAgQBwAH8AeAB+AIEAfACLAHsA + lgB5AKQAeACzAHcAxAB2ANcAdgDmAHUA8AB1APcAygQAALkJAACrDAAAoA0AAJgMAACTCQAAkQMAAI8A + CQCNABQAigAeAIcAKACFADEAgwA4AIIAPwCAAEUAfwBKAH4AUAB9AFUAewBaAHoAYAB4AGYAdwBtAHUA + dQB0AH4AcwCIAHEAlABwAKEAbwCxAG4AwgBtANMAbADkAGwA7gBrAPQAwQ4AALAUAACjFwAAmBkAAJAY + AACLFQAAhxEAAIYKAACFAwwAgwAXAIABIgB9AisAewIzAHkDOgB4A0AAdgRGAHUESwB0BFEAcgRXAHEF + XQBwBWMAbgVqAG0FcwBrBnwAagaHAGgGkwBnBqAAZgawAGUGwQBkBdMAYwbjAGMG7QBiBvQAuhcAAKoc + AACcHwAAkSEAAIkgAACDHgAAgBsAAH0XAAB9EQQAewsQAHgMGwB2DSUAcw0tAHINNQBwDTsAbw5CAG0O + SABsDk0Aag5TAGkPWgBnD2EAZhBoAGQQcQBjEHsAYRGGAGARkgBeEaEAXRGxAFwRwwBbENYAWhHnAFoR + 8QBaEPgAtB4AAKQiAACWJgAAiycAAIMnAAB9JQAAeSMAAHYfAAB0GwAAcxYKAHEWFgBuFiAAaxYoAGkX + MABoFzcAZhc9AGUXQwBjF0oAYhhQAGAYVgBfGF0AXRhlAFwZbgBaGXgAWRmEAFcakABWGp8AVRqvAFQZ + wgBTGdUAUxnmAFMZ8gBTGfkAryMAAJ8oAACRKwAAhiwAAH4sAAB4KwAAcykAAHAmAABtIwAAbB8FAGkd + EQBmHhsAZB4kAGIeLABgHjMAXh45AF0fQABbH0YAWh9MAFgfUwBXH1oAVSBjAFQgbABTIXYAUSGCAFAh + jwBPIZ0ATiGuAE0hwABMINMATCDlAEwg8QBMIPkAqygAAJosAACNLwAAgjAAAHoxAABzMAAAbi4AAGsr + AABoKAAAZSYAAGIlDABgJBcAXSQgAFslKABZJS8AVyU2AFUlPABUJUIAUiVJAFElUABQJlgATiZgAE0n + agBMJ3QASieAAEkojQBIKJwARyisAEYnvwBFJ9IARSflAEYm8QBGJvgApywAAJcwAACJMwAAfzQAAHY0 + AABvNAAAajIAAGYvAABjLQAAXysAAFwrCABZKhMAViocAFQqJABSKisAUCoyAE4qOQBNKj8ASytGAEor + TQBJLFUASCxeAEYtaABFLXIARC1+AEMtiwBCLZoAQS2rAEAtvgA/LNIAPyzkAEAs8ABAK/gAoy8AAJMz + AACGNgAAezcAAHI4AABrNwAAZjYAAGIzAABeMQAAWjAAAFYwBABTMA8AUDAYAE4vIABLLygASS8vAEcv + NQBGLzwARTBDAEQwSwBDMVMAQTFcAEAyZgA/MnEAPjN9AD0zigA8M5kAOzKqADoyvQA6MtEAOjHkADox + 8AA7MPgAoDIAAJA2AACDOQAAeDoAAG86AABoOgAAYjkAAF03AABZNQAAVTUAAFE1AQBNNQsASjUVAEc0 + HQBFNCUAQzQsAEE0MgBANTkAPzVBAD42SQA9NlEAPDdaADs3ZAA5N28AODd7ADc4iQA2N5gANTepADU3 + vAA0NtAANDbjADU18AA1NfcAnTYAAI05AACAOwAAdT0AAGw9AABlPQAAXjwAAFk7AABVOQAATzkAAEs6 + AABHOggARDoSAEI6GgA/OSIAPTkpADs6MAA6OjcAOTo/ADg7RgA3O08ANjxYADU8YgA0PG0AMzx6ADI8 + hwAxPJcAMDyoAC88uwAuO88ALzriAC867wAwOfcAmTkAAIo8AAB9PgAAcj8AAGlAAABiQAAAWz8AAFU+ + AABPPQAASj4AAEY+AABCPwUAPj8OADw/FwA5Px8AOD8nADY/LgA0PzUAM0A8ADJARAAxQU0AMEFWAC9B + YAAuQWwALUF4ACtBhgArQZUAKkGnAClBugAoQM4AKT/iACo/7wAqPvcAlTwAAIY/AAB6QQAAb0IAAGZC + AABeQgAAV0IAAFFCAABKQgAARUMAAEBDAAA8RAEAOUQLADZFFAAzRRwAMkUkADBFKwAuRTIALUY6ACxG + QgArRkoAKUZUAChHXgAnR2oAJkd2ACVHhAAkR5QAI0alACJGuQAhRc0AIkThACNE7gAkQ/YAkj8AAINC + AAB2RAAAbEUAAGNFAABbRQAAVEUAAE1FAABERwAAP0gAADpJAAA2SQAAMkoHAC9LEQAtSxkAK0shAClL + KAAoTDAAJkw3ACVMPwAjTEgAIkxRACFNXAAgTWcAHk10AB1NggAcTJIAG0ykABpLtwAaS8wAGkrgABxJ + 7gAcSfYAjUMAAH9FAABzRwAAaEgAAF9IAABXSAAAUEgAAEpJAABASwAAO0wAADZNAAAwTwAAK1ADACdR + DAAlUhUAI1IdACFSJQAgUiwAHlI0AB1TPAAcU0UAGlNOABlTWQAXU2UAFlNyABVTgAAUU5AAE1KiABJS + tgARUcsAEVDgABNP7QAUT/YAiUcAAHtJAABvSgAAZEsAAFxLAABUSwAATUsAAEZMAAA+TwAAN1EAADFS + AAArVAAAJVYAACBYBwAcWREAGlkZABhaIAAXWigAFVowABRaOAASWkEAEVpLAA9aVgANWmIADFpvAApa + fQAJWYwACFmeAAdYsgAGWMcAB1fbAAhW6QAJVfIAhEsAAHZNAABqTgAAYE4AAFhOAABRTgAASU8AAEJR + AAA6UwAAM1YAACxYAAAmWgAAIFwAABlfAgATYQsAEGETAA5hGwAMYSMAC2ErAAlhNAAHYT0ABmFHAARh + UQACYV0AAWFqAABheAAAYIgAAGCZAABfrQAAX8IAAF7WAABd5QAAXe0Afk8AAHFQAABmUQAAXVEAAFVS + AABNUgAARVQAAD1WAAA1WQAALlwAACdeAAAgYQAAGWMAABJlAAAKZwcABWgPAAJpFwAAaR8AAGknAABp + LwAAaTgAAGlBAABoTAAAaFgAAGhlAABocwAAaIMAAGeUAABnqAAAZr0AAGbRAABl4gAAZOsAeFMAAGxU + AABiVQAAWVUAAFFVAABJVwAAQFoAADhdAAAwYAAAKGMAACBlAAAZaAAAEmoAAApsAAADbgUAAG8MAABw + EwAAcBoAAHEhAABxKQAAcTIAAHE7AABxRgAAcVIAAHFfAABxbgAAcH4AAHCPAABvowAAb7gAAG7NAABt + 4AAAbekAclgAAGdZAABeWAAAVlkAAExbAABDXQAAO2EAADJkAAApZwAAIWoAABltAAARcAAACXIAAAJ0 + AAAAdgIAAHYJAAB3DwAAeBUAAHkcAAB5IwAAeisAAHo1AAB6QAAAekwAAHpZAAB6aAAAengAAHqJAAB5 + nQAAeLMAAHjIAAB33AAAd+cAbVwAAGNcAABaXAAAUF4AAEdiAAA9ZQAANGkAACtsAAAicAAAGXMAABF2 + AAAIeAAAAHoAAAB8AAAAfgAAAH8EAACACQAAgQ8AAIIVAACDHAAAhCQAAIUtAACFNwAAhUQAAIVRAACF + YAAAhXEAAISDAACElgAAhKwAAIPCAACC1gAAguQAaGEAAF9hAABVYwAASmYAAEBqAAA2bgAALHIAACN2 + AAAZeQAAEHwAAAZ/AAAAggAAAIQAAACFAAAAhwAAAIgAAACJAwAAiggAAIwOAACNFQAAjhwAAJAkAACR + LgAAkTsAAJJIAACRWAAAkWkAAJF7AACRjwAAkKQAAJC6AACPzwAAj94AZGUAAFlnAABOawAARG8AADl0 + AAAueAAAI3wAABmAAAAOhAAABIcAAACJAAAAjAAAAI4AAACQAAAAkQAAAJMAAACUAAAAlgAAAJcEAACZ + CgAAmhIAAJwaAACeIwAAoC8AAKA9AACgTQAAoF8AAKBxAACghQAAn5sAAJ6xAACexAAAntMAXmwAAFNw + AABHdAAAPHkAADB/AAAlgwAAGYgAAA6LAAADjwAAAJIAAACVAAAAlwAAAJkAAACbAAAAnQAAAJ4AAACg + AAAAogAAAKMAAAClAAAApwcAAKkOAACsGAAAriQAALAyAACwQgAAsFQAALBnAACwfAAAr5IAAK+nAACv + uAAAsMYAWHUAAEx5AABAfwAANIUAACiKAAAbjwAAEJQAAAOYAAAAmwAAAJ4AAAChAAAAowAAAKUAAACn + AAAAqQAAAKwAAACtAAAArwAAALEAAACzAAAAtgAAALgBAAC7CwAAvxYAAMIkAADDNAAAxEcAAMRcAADE + cQAAxIUAAMWZAADGqQAAxrYAUX8AAEWEAAA5iwAALJEAAB+XAAASnAAABaAAAAClAAAAqAAAAKsAAACu + AAAAsAAAALIAAAC0AAAAtgAAALkAAAC7AAAAvQAAAL8AAADCAAAAxAAAAMcAAADKAAAAzggAANIWAADW + JgAA2DoAANlOAADbYwAA3HgAAN2LAADdmwAA3qcA/wAAAP8AAAD/AAAA/wAGAPoAEgD3AB4A9QAqAPIA + NQDxAD8A7QBIAOoAUADnAFcA5QBeAOMAYwDhAGgA3wBsAN0AcQDbAHUA2gB6ANgAfwDVAIQA0wCLANIA + kgDQAJwAzgCnAMwAtADLAMYAyQDbAMgA8ADHAP8AxgD/AMYA/wDHAP8A/wAAAP8AAAD8AAAA9QABAO8A + DgDrABoA5wAlAOUAMADkADoA4QBDAN0ATADYAFMA1ABZANIAXgDQAGMAzgBoAM0AbADMAHEAygB1AMkA + egDIAIAAxgCGAMQAjgDDAJcAwQChAL8ArgC+AL8AvADTALsA6gC6APsAuQD/ALkA/wC5AP8A/wAAAPoA + AADxAAAA5wAAAOEACQDcABUA2AAgANQAKwDSADUAzwA+AMoARgDIAE4AxQBUAMMAWgDCAF8AwABjAL8A + aAC+AGwAvABxALsAdgC6AHsAuACCALcAiQC1AJIAtACcALIAqACwALgArwDLAK4A4wCtAPUArAD/AKwA + /wCsAP8A+gAAAO4AAADjAAAA2QAAANAAAwDKABAAxgAbAMIAJQDAAC8AvgA5ALwAQQC5AEgAtwBPALUA + VQC0AFoAsgBeALEAYwCvAGcArgBsAK0AcQCrAHYAqgB9AKgAhACmAIwApQCXAKMAowCiALIAoADDAJ8A + 2wCeAO4AngD8AJ4A/wCeAP8A7wAAAOEAAADSAAAAyAAAAMAAAAC7AAoAtgAVALIAIACwACoArwAzAK4A + OwCrAEMAqQBJAKcATwClAFQApABZAKIAXgChAGIAoABnAJ8AbACeAHIAnQB4AJsAfwCaAIgAmACSAJcA + nQCVAKsAlAC8AJMA0gCSAOcAkgD2AJEA/wCRAP8A4gAAANIAAADEAAAAugAAALIAAACsAAQAqAAPAKUA + GgCjACQAoQAtAJ8ANQCeAD0AnABEAJoASgCZAE8AlwBUAJYAWQCVAF0AlABiAJMAZwCSAG0AkQBzAI8A + ewCNAIMAjACNAIoAmACJAKYAhwC2AIcAygCGAN8AhQDvAIUA+gCFAP8A1gAAAMUAAAC3AAAArQAAAKYA + AACgAAAAnAAJAJkAFACWAB4AlQAnAJMAMACSADcAkQA+AI8ARACNAEoAjABPAIsAVACKAFgAiABdAIcA + YwCGAGgAhQBvAIMAdwCCAH8AgACJAH8AlAB+AKEAfACxAHsAxAB7ANgAegDpAHoA9QB6APwAygAAALoA + AACsAAAAoQAAAJoAAACWAAAAkgADAI8ADQCNABgAiwAhAIkAKgCHADEAhgA4AIQAPwCDAEQAgQBKAIAA + TwB/AFQAfgBZAH0AXgB8AGQAegBrAHkAcwB3AHsAdgCFAHQAkABzAJ4AcgCtAHEAvwBwANIAcADkAHAA + 8ABvAPcAwQAAALAEAACiCAAAmAkAAJAIAACLBQAAiAAAAIYABwCEABEAggAaAIAAJAB+ACwAfAAzAHsA + OgB5AD8AeABFAHcASgB2AE8AdABVAHMAWgByAGEAcABnAG8AbwBtAHgAbACCAGoAjgBpAJsAaACqAGcA + uwBmAM0AZgDgAGYA7ABlAPQAuAgAAKgOAACaEgAAjxQAAIgTAACCEQAAfw0AAH0HAAB8AAoAegAUAHgA + HQB2ACYAdAAuAHIANABwADsAbwBAAG4ARgBsAEsAawBRAGoAVwBpAF0AZwBkAGYAbQBkAHYAYwCAAGEA + jABgAJkAXwCoAF4AuQBdAMsAXQDeAFwA6gBcAPEAsREAAKAXAACTGgAAiBwAAIAcAAB7GgAAdxcAAHUT + AAB0DAIAdAYMAHEEFwBuBSAAbAUoAGoGLwBoBjYAZwY8AGYHQgBkB0cAYwdNAGIHVABgCFoAXwhiAF0I + awBcCXQAWgl/AFkJiwBXCZkAVgmoAFUJugBUCMwAVAneAFMJ6gBTCfIAqxgAAJodAACNIQAAgyIAAHoi + AAB0IQAAcB4AAG0bAABsFwAAaxEFAGoOEABnDhoAZQ4jAGMPKgBhDzEAXxA4AF4QPgBcEEQAWxBKAFoR + UQBYEVgAVhFgAFUSaQBTEnMAUhN+AFATiwBPE5kAThOpAE0TuwBMEs4ASxLhAEwS7gBMEvYAph0AAJYi + AACIJQAAficAAHUnAABvJgAAaiQAAGchAABlHgAAYxoAAGIXCwBfFxUAXRceAFsXJgBZFy0AVxc0AFYX + OgBUGEAAUxhHAFEYTgBQGVUAThldAE0ZZgBLGnEAShp8AEkbiQBHG5cARhunAEUaugBEGs0ARBngAEQZ + 7gBFGfYAoSIAAJEnAACEKgAAeisAAHEsAABqKwAAZSkAAGImAABfJAAAXSEAAFsfBgBYHREAVh0aAFMe + IgBRHikAUB4wAE4eNgBNHj0ASx5DAEofSwBIH1IARyBbAEYgZABEIW8AQyF6AEIhhwBAIZYAPyGmAD4h + uAA+IMwAPSDfAD4g7QA+H/YAnSYAAI4qAACBLQAAdi8AAG0vAABnLwAAYS0AAF0rAABaKAAAVyYAAFQl + AgBSJAwATyMWAEwjHgBKIyUASSMsAEckMwBFJDoARCRAAEMlSABBJVAAQCZYAD8mYgA+J20APCd5ADsn + hgA6J5QAOSelADgntwA3JssANybfADgl7AA4JfYAmioAAIouAAB9MAAAczIAAGoyAABjMgAAXTEAAFkv + AABWLAAAUioAAE4qAABLKQkASSkSAEYpGwBEKSIAQikpAEApMAA+KTYAPSo+ADwqRQA7K00AOitWADgs + YAA3LGsANix3ADUthAA0LZMAMyykADIstgAxK8oAMSveADIr7AAzKvUAli0AAIcxAAB6MwAAcDQAAGc1 + AABgNQAAWjQAAFUyAABRMAAATS8AAEkvAABFLwUAQi4OAEAuFwA9Lh8AOy4mADkuLAA4LjQANy87ADYv + QwA1MEsANDBUADIxXgAxMWkAMDJ1AC8ygwAuMpIALTGiACwxtQAsMMkAKzDdACwv7AAtL/UAkzAAAIQz + AAB3NgAAbTcAAGQ3AABdNwAAVjcAAFE2AABMNAAASDMAAEMzAABAMwIAPDMLADozFAA3MxwANTMjADMz + KgAyNDEAMTQ5ADA1QAAvNUkALTZSACw2XAArNmgAKjd0ACk3gQAoNpEAJzahACY2tAAmNcgAJTXdACc0 + 6wAnM/UAkDMAAIE2AAB0OAAAajoAAGE6AABZOgAAUzkAAE05AABIOAAAQjgAAD44AAA6OAAANzgIADQ5 + EQAxORkALzkhAC05KAAsOS8AKzo2ACk6PgAoO0cAJztQACY7WgAlPGYAJDxyACM8gAAiPI8AITugACA7 + swAfOscAHzrcACA56wAhOPQAjDYAAH45AABxOwAAZzwAAF49AABWPAAAUDwAAEo8AABEOwAAPTwAADg9 + AAA0PQAAMT4FAC0/DQArPxYAKT8eACc/JQAmQCwAJEA0ACNAPAAiQEQAIEFOAB9BWAAeQWQAHUFwABxB + fgAbQY4AGkGfABlAsgAYQMYAGD/bABk+6gAaPvQAiDkAAHo8AABuPgAAYz8AAFs/AABTPwAATD8AAEY/ + AABAPwAAN0EAADNCAAAuQwAAKkQBACdFCgAkRRMAIkYbACBGIgAfRikAHUYxABxGOQAaR0IAGUdLABhH + VgAWR2EAFUduABRHfAATR4wAEkadABFGsAAQRcUAEEXaABJE6QATQ/MAhD0AAHY/AABqQQAAYEIAAFdC + AABQQgAASUIAAENCAAA8QwAANEUAAC9GAAAqSAAAJUoAACBLBgAcTA4AGk0XABhNHgAXTSYAFU0uABRN + NgASTT8AEU1IAA9OUwANTV4ADE1rAApNeQAJTYgACEyZAAdMrAAGS8AAB0vUAAhK5QAJSfAAgEEAAHJD + AABmRAAAXEUAAFRFAABMRQAARkUAAD9FAAA4RwAAMUkAACtLAAAmTQAAIE8AABlRAQAUUwoAEVQSAA5U + GgANVCIAC1QqAApUMgAIVDsAB1REAAVUTwADVFoAAlRnAABUdQAAU4QAAFOVAABSqAAAUrwAAFHQAABQ + 4gAAUOsAe0UAAG5GAABiRwAAWUgAAFBIAABJSAAAQ0gAADtKAAA0TAAALU4AACZRAAAgUwAAGlUAABRX + AAAMWgcAB1sOAARbFgACWx4AAVsmAABbLgAAWzYAAFtAAABbSgAAW1YAAFtjAABbcQAAWoAAAFqRAABZ + pAAAWbgAAFjNAABY3wAAV+oAdUkAAGlKAABeSwAAVUsAAE1LAABGSwAAPk0AADdPAAAwUgAAKFQAACFX + AAAaWgAAFFwAAAxeAAAFYAUAAGEMAABiEwAAYhoAAGMhAABjKQAAYzEAAGM7AABjRgAAY1EAAGNeAABj + bAAAYnsAAGKMAABhoAAAYLQAAGDKAABf3QAAX+gAcE0AAGROAABaTgAAUk4AAEpOAABCUAAAOlMAADJV + AAAqWAAAIlwAABteAAAUYQAADGMAAAVlAAAAZwMAAGgJAABpEAAAahYAAGocAABrJAAAbCwAAGw1AABs + QAAAbEwAAGtYAABrZwAAa3YAAGuHAABqmwAAabAAAGjGAABo2gAAZ+cAalIAAF9SAABWUgAATlIAAEVU + AAA9VwAANFoAACxdAAAjYAAAG2MAABNnAAALaQAABGsAAABtAAAAbwAAAHAGAABxCwAAchEAAHMXAAB0 + HgAAdSYAAHUvAAB1OQAAdUUAAHVSAAB1YQAAdXAAAHSCAAB0lQAAc6sAAHLBAABx1gAAceUAZFYAAFtW + AABTVgAASVgAAEBbAAA2XgAALWIAACRmAAAbaQAAE2wAAApvAAACcgAAAHQAAAB2AAAAdwAAAHkBAAB6 + BgAAewsAAHwRAAB9GAAAfh8AAIAnAACBMQAAgT0AAIFKAACAWQAAgGkAAH97AAB/jgAAf6QAAH66AAB9 + 0AAAfOEAYFoAAFhaAABNXAAAQ18AADljAAAvZwAAJWsAABxvAAAScwAACHYAAAB5AAAAewAAAH0AAAB/ + AAAAgQAAAIIAAACEAAAAhQQAAIYKAACIEAAAiRcAAIsfAACMKAAAjTQAAI1BAACNUQAAjWEAAIx0AACM + hwAAi5wAAIuyAACKyAAAidoAXV4AAFJgAABHZAAAPGgAADFtAAAmcgAAHHYAABJ6AAAHfgAAAIEAAACE + AAAAhgAAAIgAAACKAAAAjAAAAI0AAACPAAAAkAAAAJIAAACTBgAAlQ0AAJcVAACZHgAAnCkAAJw3AACc + RgAAnFcAAJtqAACbfgAAmpQAAJqoAACZvgAAmc8AV2UAAEtpAABAbgAANHMAACl4AAAdfQAAEoEAAAaG + AAAAiQAAAIwAAACPAAAAkQAAAJMAAACWAAAAmAAAAJoAAACbAAAAnQAAAJ8AAAChAAAAowEAAKUJAACo + EgAAqx0AAK0qAACtOgAArUwAAK1fAACtdAAArIkAAKyeAACqswAAqsQAUG4AAERzAAA5eAAALH4AACCE + AAATiQAAB44AAACSAAAAlgAAAJkAAACcAAAAnQAAAJ8AAACiAAAApAAAAKYAAACoAAAAqgAAAKwAAACu + AAAAsQAAALQAAAC3BgAAuhEAAL4eAADALgAAwEAAAMBUAADAaQAAv38AAL6VAAC9qQAAvrcASXgAAD1+ + AAAxhAAAJIsAABeQAAAJlgAAAJoAAACfAAAAogAAAKYAAACpAAAAqgAAAKwAAACvAAAAsgAAALQAAAC3 + AAAAuQAAALsAAAC+AAAAwQAAAMQAAADHAAAAywMAANAQAADUHwAA1TMAANVHAADVXQAA1nMAANeHAADY + mAAA2KYA/wAAAP8AAAD/AAAA/wACAPoADQD2ABoA9AAlAPIAMADvADoA6gBDAOcATADkAFMA4gBZAN8A + XgDeAGMA3ABoANsAbADZAHEA1wB1ANUAegDTAIAA0QCGAM8AjgDNAJcAywCiAMkAsQDHAMIAxgDZAMUA + 8ADEAP8AxAD/AMQA/wDEAP8A/wAAAP8AAAD6AAAA8wAAAO0ACQDpABUA5QAhAOEAKwDgADUA3QA+ANkA + RwDVAE4A0gBUAM8AWgDNAF8AywBjAMkAZwDHAGwAxgBxAMQAdgDCAHsAwQCBAL8AiQC9AJIAvACdALoA + qgC4ALsAtwDPALYA6QC1APsAtQD/ALUA/wC1AP8A/wAAAPcAAADtAAAA5AAAAN0ABADXABEA0QAcAM4A + JgDNADAAzAA5AMcAQQDDAEkAwABPAL4AVQC8AFoAuwBeALkAYwC4AGcAtwBsALUAcQC0AHYAsgB9ALEA + hACvAI0ArgCXAKwApACrALQAqQDHAKgA4QCnAPQApwD/AKcA/wCnAP8A9QAAAOkAAADeAAAA0gAAAMsA + AADDAAsAvwAWAL0AIQC6ACoAuAA0ALYAPACzAEMAsQBKAK8ATwCuAFQArABZAKsAXgCqAGIAqQBnAKcA + bACmAHIApQB4AKMAfwChAIgAoACSAJ4AngCdAK0AmwC/AJoA2ACaAO0AmgD+AJkA/wCZAP8A6AAAANkA + AADMAAAAwQAAALgAAACzAAUArwARAKsAGwCpACUAqAAuAKcANgClAD4AowBEAKEASgCfAE8AngBUAJwA + WACbAF0AmgBiAJkAZwCXAGwAlgBzAJUAegCTAIIAkgCNAJAAmACPAKcAjgC4AI0AzgCMAOUAjAD3AIwA + /wCMAP8A2wAAAMoAAAC8AAAAsgAAAKoAAACkAAAAoAALAJ0AFgCbAB8AmgAoAJkAMACXADgAlQA+AJQA + RACSAEoAkQBOAJAAUwCPAFgAjgBdAIwAYgCLAGcAigBuAIkAdQCHAH4AhgCIAIQAkwCDAKEAggCxAIEA + xgCAAN4AgADwAIAA/QCAAP8AzQAAALwAAACvAAAApAAAAJ0AAACXAAAAlAAGAJEAEACPABoAjQAiAIwA + KwCLADIAigA5AIgAPwCHAEQAhgBJAIQATgCDAFMAggBYAIEAXQB/AGMAfgBpAH0AcQB7AHkAegCDAHgA + jwB3AJwAdgCsAHUAvwB1ANUAdADpAHQA9gB0AP4AwgAAALEAAACjAAAAmQAAAJEAAACNAAAAiQAAAIYA + CgCEABQAgwAdAIEAJQCAACwAfwAzAH0AOQB8AD8AegBEAHkASQB4AE4AdwBTAHYAWQB1AF8AcwBlAHIA + bQBxAHYAbwCAAG4AiwBtAJgAbACoAGsAugBqAM4AagDjAGkA8ABpAPkAtwAAAKYAAACZAwAAjwQAAIgD + AACCAQAAgAAAAH4ABAB7AA0AegAXAHgAHwB2ACcAdQAuAHQANAByADoAcQA/AHAARABuAEoAbQBPAGwA + VABrAFsAaQBiAGgAaQBmAHIAZQB8AGQAiABjAJUAYQCkAGEAtgBgAMkAYADdAF8A6wBfAPQArwMAAJ4J + AACRDQAAhw4AAH8OAAB6DAAAdggAAHUDAABzAAcAcQAQAG8AGQBuACEAbAAoAGsALwBpADUAaAA7AGYA + QABlAEUAZABLAGIAUQBhAFcAYABeAF8AZgBdAHAAXAB6AFoAhgBZAJMAWACiAFcAswBXAMUAVgDZAFYA + 5wBWAPAApwwAAJcSAACKFQAAgBcAAHgXAAByFgAAbhMAAGwOAABrCQAAagMJAGgAEwBmABsAZAAjAGIA + KgBhADAAXwA2AF4APABdAEEAWwBHAFoATQBZAVQAVwFcAFYCZABUAm4AUwJ4AFIDhABQA5EATwKhAE4C + sQBNAcQATQHVAE0A5QBNAe4AoRMAAJEYAACFGwAAeh0AAHIdAABsHAAAaBoAAGUXAABjEwAAYg4CAGII + CwBfBxUAXQceAFsHJQBZCCwAVwgyAFYIOABVCD4AUwlEAFIJSwBQClIATwpaAE4LYwBMC20ASwt4AEkM + hABIDJIARwyhAEYLsgBFC8UARArYAEQK5QBECu8AnBgAAI0dAACAIQAAdSIAAG0iAABnIgAAYiAAAF4d + AABcGgAAWhYAAFoSBQBYDxAAVhAYAFQQIABSECgAUBAuAE8QNABNETsATBFBAEoRSABJElAARxJYAEYT + YQBEE2sAQxR3AEEUgwBAFJEAPxShAD4UswA9E8YAPBPaADwT6QA9EvIAmB0AAIghAAB8JQAAcSYAAGkm + AABiJgAAXSQAAFkiAABWHwAAVBwAAFIZAABRFwsAThcUAEwXHABKFyQASBcqAEcXMQBFFzcARBg+AEIY + RQBBGU0APxlVAD4aXwA9GmkAOxt1ADobggA5G5AAOBugADYbsgA2GsUANRnZADUZ6AA2GfMAlCEAAIUl + AAB4KAAAbSkAAGUqAABeKQAAWCgAAFQmAABRJAAATyEAAEweAABKHgcARx0QAEUdGABDHSAAQR0nAD8d + LQA+HTQAPB47ADseQgA6H0oAOB9TADcgXQA2IGcANCFzADMhgAAyIY4AMSGeADAhsAAvIMQALh/YAC8f + 6AAwH/IAkCQAAIEoAAB1KwAAaiwAAGItAABbLAAAVSsAAFAqAABMKAAASiUAAEYkAABDIwMAQSMMAD4i + FQA8IhwAOiIjADgiKgA2IzEANSM4ADQkPwAzJEgAMiVRADAlWgAvJmUALiZxAC0mfgAsJo0AKyadACom + rwApJcMAKCXWACkk5wAqJPIAjSgAAH4rAAByLQAAZy8AAF4vAABXLwAAUS4AAEwtAABILAAARCkAAEEo + AAA9KAAAOigJADgoEQA1KBkAMycgADEnJgAwKC4ALyk1AC0pPQAsKkUAKypOACorWAApK2QAKCxwACcs + fQAlLIwAJCucACMrrgAjKsIAIirWACMp5wAkKfEAiioAAHsuAABvMAAAZDEAAFwyAABUMgAATjEAAEgw + AABELwAAQC4AADstAAA4LQAANC0FADEtDgAvLRYALS0dACstJAApLisAKC4zACcvOwAmL0MAJTBMACQw + VgAjMGIAITFuACAxewAfMYoAHjCbAB0wrQAcL8EAHC/VAB0u5gAeLvEAhy0AAHgxAABsMwAAYTQAAFk0 + AABRNAAASzMAAEUzAABAMgAAOzIAADYyAAAyMgAALzICACszCwApMxMAJzMaACUzIgAjNCkAIjQwACE0 + OAAgNUEAHjVKAB01VAAcNmAAGzZsABk2egAYNokAFzaZABY1rAAWNcAAFTTUABYz5QAXM/AAgzAAAHU0 + AABpNQAAXjYAAFY3AABONgAASDYAAEI1AAA9NQAANzUAADA3AAAsNwAAKTgAACU4BwAiORAAIDkYAB46 + HwAdOiYAGzouABo6NgAZOz4AFztIABY7UgAVO14AEztqABI7eAARO4cAEDuYAA86qwAOOr4ADTnSAA44 + 5QAQOPAAfzQAAHE2AABlOAAAWzkAAFI5AABLOQAARDkAAD84AAA5OAAAMzkAACw7AAAoPAAAIz0AAB8/ + BAAbPwwAGUAUABdAHAAVQCMAFEArABNBMwARQTwAEEFFAA5BUAAMQVsAC0FnAApBdQAIQYQAB0GUAAZA + pgAGP7oABT/OAAY+4AAHPesAezcAAG46AABiOwAAWDwAAE88AABIPAAAQjsAADw7AAA2OwAAMD0AACk/ + AAAkQAAAH0IAABpEAAAURggAEUcRAA5HGAANRyAAC0cnAApHMAAIRzgABkdBAAVHTAADR1cAAkdjAAFH + cQAAR4AAAEaRAABGowAARbcAAEXKAABE3QAAQ+gAdzsAAGk9AABePgAAVD4AAEw+AABFPgAAPz4AADk+ + AAAyPwAALEEAACVEAAAgRQAAGkcAABRKAAAOTAYACE4NAAVOFQADThwAAU4kAABOLAAATjQAAE4+AABO + SAAATlMAAE5gAABObQAATXwAAE2NAABMnwAATLMAAEvIAABK2wAASucAcj8AAGVAAABaQQAAUEEAAElB + AABCQQAAPEEAADVCAAAuRAAAKEcAACFJAAAbTAAAFU4AAA5QAAAHUgUAAVQLAABUEgAAVRkAAFUgAABV + KAAAVTAAAFU5AABVRAAAVU8AAFVbAABVaQAAVXgAAFSJAABTnAAAUrAAAFLFAABR2QAAUeYAbUMAAGBE + AABWRQAATUQAAEZEAAA/RAAAOEYAADFIAAApSgAAIk0AABtQAAAVUgAADlUAAAdXAAABWQQAAFoJAABb + EAAAXBUAAF0cAABdIwAAXSsAAF00AABdPwAAXUoAAF1XAABdZQAAXXQAAFyFAABcmAAAW6wAAFrCAABZ + 1wAAWeUAZ0cAAFtIAABSSAAASkcAAENHAAA7SQAAM0wAACtOAAAkUQAAHFQAABVXAAANWgAAB1wAAABe + AAAAYAEAAGEHAABiDAAAYxIAAGQYAABlHgAAZiYAAGYvAABmOQAAZkUAAGZSAABmYAAAZm8AAGWAAABk + kwAAZKgAAGO/AABi1AAAYeQAYUsAAFdLAABPSwAAR0sAAD5NAAA2TwAALVMAACVWAAAdWQAAFV0AAA1g + AAAFYgAAAGQAAABnAAAAaAAAAGkDAABrCAAAbA0AAG0TAABuGQAAbyAAAHEoAABxMgAAcT4AAHFLAABw + WQAAcGkAAHB6AABvjQAAbqMAAG25AABszwAAa+IAXFAAAFNPAABMTwAAQlEAADlUAAAwVwAAJ1sAAB5f + AAAVYgAADGYAAARpAAAAawAAAG0AAABvAAAAcQAAAHIAAAB0AwAAdQcAAHYNAAB4EwAAeRoAAHsiAAB8 + KwAAfDcAAHxEAAB8UgAAe2MAAHt0AAB6hwAAeZwAAHmzAAB4ygAAd90AWFMAAFBTAABGVQAAPFgAADJc + AAAoYQAAH2UAABVpAAALbQAAAnAAAABzAAAAdQAAAHcAAAB5AAAAewAAAH0AAAB+AAAAgAAAAIEFAACD + CgAAhREAAIYZAACIIgAAii0AAIo6AACJSQAAiVoAAIlrAACIfwAAh5QAAIaqAACGwAAAhdQAVVgAAEta + AABAXQAANWIAACpnAAAgawAAFXAAAAp0AAAAeAAAAHsAAAB+AAAAgAAAAIIAAACEAAAAhgAAAIgAAACJ + AAAAiwAAAI0AAACPAgAAkAgAAJMQAACVGQAAmCMAAJgwAACYQAAAmFEAAJdjAACWeAAAlowAAJahAACU + twAAlMoAT18AAERiAAA5ZwAALWwAACFyAAAWdwAACnwAAACAAAAAhAAAAIcAAACKAAAAjAAAAI4AAACQ + AAAAkgAAAJUAAACWAAAAmAAAAJoAAACcAAAAngAAAKEEAACkDQAApxgAAKokAACqNAAAqkUAAKpYAACp + bAAAqIIAAKaYAACmrAAApr0ASGgAAD1sAAAxcgAAJHgAABh+AAALgwAAAIgAAACMAAAAkAAAAJMAAACV + AAAAmAAAAJsAAACdAAAAoAAAAKIAAACkAAAApgAAAKkAAACrAAAArgAAALEAAAC0AAAAuAoAALwXAAC+ + JgAAvzgAAL5MAAC+YQAAvXcAALyMAAC8nwAAu7EAQXIAADV4AAAofgAAHIUAAA6LAAABkAAAAJUAAACZ + AAAAnQAAAKAAAACiAAAApQAAAKcAAACqAAAArQAAALAAAACyAAAAtAAAALcAAAC6AAAAvQAAAMAAAADE + AAAAyAAAAM0KAADTGQAA1CwAANRAAADUVgAA02wAANKBAADRlQAA0KYA/wAAAP8AAAD/AAAA/gAAAPoA + CQD0ABUA8QAhAPAAKwDvADUA6QA/AOQARwDhAE4A3gBUANwAWgDaAF8A2ABjANYAaADUAGwA0gBxANEA + dgDPAHwAzQCCAMwAigDKAJMAyACeAMYArADEAL4AwgDXAMEA7wDAAP8AvwD/AL8A/wC6AP8A/wAAAP8A + AAD5AAAA8QAAAOoABQDkABEA4QAcAN4AJwDbADAA2AA6ANQAQgDQAEkAzQBPAMsAVQDJAFoAyABfAMYA + YwDEAGcAwwBsAMEAcQC/AHcAvQB9ALsAhQC5AI0AtwCYALUApgCzALYAsgDNALEA5wCxAPwAsQD/ALEA + /wCvAP8A/wAAAPMAAADpAAAA4QAAANYAAADRAAsAzAAXAMkAIQDHACsAxwA0AMMAPQC/AEQAvABKALkA + UAC3AFUAtQBZALQAXgCyAGIAsQBnALAAbACuAHIArQB4AKsAgACqAIgAqACSAKYAoAClAK8AowDEAKIA + 3wChAPUAoQD/AKEA/wChAP8A8gAAAOQAAADYAAAAywAAAMMAAAC9AAYAuQASALYAHAC1ACYAswAvALAA + NwCuAD4AqwBFAKkASgCoAE8ApgBUAKUAWQCkAF0AowBiAKEAZwCgAGwAnwBzAJ0AegCcAIMAmgCNAJgA + mQCXAKgAlgC7AJUA1ACUAO0AlAD/AJMA/wCTAP8A4gAAANIAAADFAAAAuQAAALEAAACrAAEAqAAMAKUA + FwCjACAAogApAKEAMQCfADgAnQA/AJsARQCaAEoAmABPAJcAUwCWAFgAlABcAJMAYgCRAGcAkABuAI4A + dQCNAH4AiwCIAIoAkwCJAKIAhwCzAIcAygCGAOUAhgD4AIYA/wCGAP8A0gAAAMIAAACzAAAAqQAAAKEA + AACcAAAAmAAHAJYAEQCUABsAkwAjAJIAKwCRADMAjwA5AI0APwCMAEQAigBJAIkATgCIAFMAhwBXAIYA + XACFAGIAgwBpAIIAcACBAHkAfwCDAH4AjgB8AJwAewCtAHoAwgB6ANwAeQDwAHkA/wB5AP8AxQAAALMA + AACmAAAAmwAAAJUAAACPAAAAiwACAIkADACIABUAhgAeAIUAJgCEAC0AgwAzAIIAOQCAAD8AfwBEAH4A + SQB9AE0AewBSAHoAWAB5AF0AdwBkAHYAbAB1AHQAcwB+AHIAiQBxAJcAcACnAG8AugBuANIAbgDoAG4A + +QBuAP8AuQAAAKcAAACaAAAAkAAAAIkAAACEAAAAgQAAAH4ABgB8ABAAewAYAHoAIAB5ACcAeAAuAHcA + NAB1ADoAdAA/AHIARABxAEgAcABOAG8AUwBuAFkAbABgAGsAZwBqAHAAaAB6AGcAhQBmAJMAZQCiAGQA + tQBjAMoAYwDiAGMA8gBjAPwArgAAAJ0AAACQAAAAhgEAAH8AAAB6AAAAdwAAAHUAAQBzAAoAcQATAHAA + GgBuACIAbQApAGwALwBrADQAagA6AGgAPwBnAEQAZgBJAGUATwBjAFUAYgBcAGEAZABfAGwAXgB3AF0A + ggBbAI8AWgCeAFoAsABZAMQAWQDbAFgA7ABYAPYApQAAAJUFAACICQAAfgoAAHYKAABxCAAAbgUAAGwA + AABqAAUAaAANAGcAFQBlABwAZAAjAGMAKgBiADAAYAA1AF8AOgBdAEAAXABFAFsASwBaAFEAWABYAFcA + YABWAGkAVAB0AFMAfwBSAIwAUQCbAFAArABPAMAATwDUAE8A5gBPAPEAngcAAI4MAACBEQAAdxIAAG8S + AABpEQAAZQ4AAGMKAABiBgAAYQAHAF8ADwBdABcAXAAeAFoAJQBZACsAVwAxAFYANgBVADsAUwBBAFIA + RwBRAE4ATwBVAE4AXgBNAGcASwBxAEoAfQBJAIoASACZAEcAqgBGALwARgDPAEYA4gBGAOwAmA4AAIkT + AAB8FgAAcRgAAGkYAABjGAAAXxYAAFwTAABaDgAAWQoBAFgFCQBXAhEAVQAZAFMBIABRASYATwEsAE4B + MgBNAjgASwI+AEoCRABIA0sARwNTAEYEWwBEBGUAQwVwAEIFfABABYoAPwWZAD4EqQA9A7sAPQLNAD0B + 3wA9AeoAkxQAAIQYAAB3GwAAbR0AAGQdAABeHQAAWRsAAFUZAABTFgAAURIAAFAOAwBQCgsATggUAEsI + GwBKCSIASAkoAEYJLwBFCTUAQwo7AEIKQgBBCkkAPwtRAD4MWgA8DGUAOw1wADkNfQA4DYsANw2aADYN + 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 + QgDeAEkA2wBQANgAVQDVAFoA0wBfANEAYwDQAGgAzgBtAM0AcgDLAHcAyQB+AMcAhQDFAI8AwwCaAMEA + qAC/ALoAvQDUALsA7gC7AP8AugD/ALQA/wCwAP8A/wAAAP0AAAD3AAAA7AAAAOcAAADfAAwA3QAXANsA + IgDYACwA0wA1AM8APQDMAEQAyQBLAMcAUADFAFUAwwBaAMEAXgDAAGMAvgBnAL0AbQC7AHIAuQB5ALcA + gAC1AIkAswCVALEAogCvALMArgDLAK0A5gCsAP4AqwD/AKkA/wClAP8A+gAAAPEAAADmAAAA2gAAANAA + AADKAAcAxwASAMMAHADBACYAwQAvAL4ANwC7AD8AuABFALUASwCzAFAAsQBVAK8AWQCtAF4ArABiAKoA + ZwCpAG0ApwB0AKUAewCkAIQAogCOAKAAmwCfAKsAnQDBAJwA3QCcAPYAnAD/AJ0A/wCaAP8A7QAAAN8A + AADPAAAAxQAAALwAAAC3AAIAsgAMALAAFwCuACEArQAqAKwAMgCoADkApgBAAKQARQCiAEoAoQBPAJ8A + VACeAFgAnQBdAJsAYgCaAGgAmQBuAJcAdgCWAH4AlACIAJIAlQCRAKQAkAC4AI4A0QCOAO0AjQD/AI0A + /wCNAP8A3AAAAMsAAAC8AAAAsAAAAKoAAACjAAAAoAAHAJ4AEgCcABsAmwAkAJoALACZADMAlwA6AJUA + QACUAEUAkgBKAJEATgCQAFMAjgBYAI0AXQCMAGIAigBpAIkAcACHAHkAhgCDAIQAjwCDAJ0AggCwAIEA + xwCAAOQAgAD6AIAA/wCAAP8AygAAALgAAACrAAAAoQAAAJkAAACUAAAAkQADAI4ADACNABYAjAAeAIwA + JgCLAC0AiQA0AIcAOgCFAD8AhABEAIMASQCCAE0AgQBSAIAAVwB+AF0AfQBkAHwAawB6AHQAeQB+AHcA + iQB2AJcAdQCpAHQAvgBzANsAcwDyAHMA/wBzAP8AuwAAAKsAAACdAAAAkwAAAIwAAACHAAAAgwAAAIEA + BwCAABEAfwAZAH4AIAB9ACgAfQAuAHsANAB6ADkAeAA+AHcAQwB2AEgAdQBNAHQAUgByAFgAcQBfAG8A + ZgBuAG8AbQB5AGsAhABqAJIAaQCjAGgAtwBnANAAZwDpAGcA+wBnAP8ArwAAAJ4AAACRAAAAhwAAAIAA + AAB7AAAAeAAAAHYAAwB0AAsAcwATAHIAGwByACIAcQApAHAALwBuADQAbQA5AGsAPgBqAEMAaQBIAGgA + TgBnAFMAZQBaAGQAYgBiAGsAYQB1AGAAgABeAI4AXQCeAFwAsABcAMcAXADiAFwA9ABcAP8ApQAAAJUA + AACHAAAAfQAAAHYAAABxAAAAbgAAAGwAAABqAAYAaQAOAGgAFgBmAB0AZgAjAGUAKQBkAC8AYgA0AGEA + OQBgAD4AXwBDAF0ASQBcAE8AWwBWAFkAXgBYAGcAVwBxAFUAfABUAIoAUwCZAFIAqwBSAMAAUgDZAFIA + 7QBSAPoAmwAAAIwBAACABAAAdQYAAG0GAABoBAAAZAIAAGMAAABhAAIAXwAJAF4AEQBdABgAXAAeAFsA + JABaACoAWQAvAFcANQBWADoAVQA/AFMARQBSAEsAUQBSAE8AWgBOAGMATQBuAEsAeQBKAIYASQCVAEgA + pwBIALsASADRAEgA5wBIAPQAlQMAAIUIAAB5DAAAbw0AAGYNAABhDAAAXAoAAFoHAABYAwAAVwAEAFYA + CwBVABMAUwAZAFIAIABRACUATwArAE4AMABNADYASwA7AEoAQQBJAEgARwBPAEYAVwBFAGEAQwBrAEIA + dwBBAIQAQACTAD8ApAA/ALcAPwDMAD8A4AA/AO4AjwkAAIAOAABzEgAAaRMAAGEUAABaEwAAVhEAAFIO + AABQCwAATwcAAE4CBgBNAA0ASwAUAEoAGwBJACEARwAnAEYALABEADIAQwA4AEIAPgBAAEUAPwBMAD4A + VQA8AF4AOwBpADoAdQA5AIIAOACRADcAoQA2ALQANgDIADYA2wA2AOkAiQ4AAHsTAABuFgAAZBgAAFwY + AABVGAAAUBYAAEwUAABJEgAARw4AAEcKAQBGBggARQMPAEMCFgBBAh0APwIjAD4CKQA8Ay4AOwM0ADoD + OwA4BEIANwRKADYFUwA0Bl0AMwZoADIGdAAxBoIALwaRAC4GoQAuBbMALQTFAC0C2AAtAeUAhRMAAHcY + AABqGgAAYBwAAFccAABRHAAASxsAAEcZAABDFwAAQRQAAEARAAA/DgMAPgoKADwJEgA6CRkAOAkfADcJ + JQA1CSsANAoyADIKOQAxC0AAMAxJAC4MUgAtDV0AKw1pACoOdQAoDoMAJw6TACYNowAlDbUAJAzHACQL + 2AAkCuUAgRcAAHMbAABnHQAAXB8AAFQfAABNHwAARx4AAEIdAAA+GwAAOxkAADkWAAA4EwAANxEFADUQ + DAAzEBQAMRAbADAQIgAuECgALBEvACsRNwAqEj8AKBNHACcTUQAlFFwAJBRoACIVdAAhFYIAIBWSAB4U + owAdFLYAHBPJABwS3AAcEugAfhoAAHAeAABjIAAAWSEAAFAiAABJIgAAQyEAAD4gAAA6HgAANx0AADQb + AAAyGAAAMBcBAC4WCQAsFhEAKhYXACgWHgAmFiUAJRcsACQXNAAiGDwAIRhFACAZTwAeGloAHRpmABwa + cwAaGoEAGRqRABgaogAXGbUAFhjIABUY2wAWF+kAex0AAG0hAABhIwAAViQAAE0kAABGJAAAQCMAADsi + AAA2IQAAMyAAAC8eAAAtHQAAKhwAACccBQAlGw0AIhsUACAbGwAfHCIAHhwqAB0dMQAbHjoAGh5DABkf + TQAYH1gAFiBkABUgcQATIIAAEiCPABEfoQAQH7QADh7HAA4d2gAQHOgAeCAAAGojAABeJQAAUyYAAEsn + AABDJgAAPSYAADglAAAzJAAALyMAACsiAAAoIQAAJCEAACEhAgAeIQkAHCERABohGAAYIh8AFyInABYj + LwAVIzcAEyRBABIkSwARJVYADyViAA0lbwAMJX0ACyWNAAolngAJJLAACCPDAAgi1QAIIuQAdCMAAGcm + AABbKAAAUCgAAEgpAABAKAAAOigAADUnAAAwJgAALCUAACglAAAkJQAAHyYAABsmAAAZJwYAFScOABMo + FgASKB0AECgkAA4pLAANKTUADCk+AAoqSAAJKlIACCpeAAYrbAAFKnoABCqJAAMqmwACKa0AASjAAAEn + 0gACJ+IAcSYAAGMpAABYKgAATSsAAEUrAAA+KwAANyoAADIpAAAtKAAAKSgAACUnAAAgKAAAGyoAABcr + AAATLAQADy0LAAwuEwAKLhoACS4iAAcuKQAGLzEABC86AAMvRAABME8AADBbAAAwaAAAMHcAAC+HAAAv + mAAALqsAAC2+AAAs0QAALOEAbSkAAGArAABULQAASi0AAEItAAA7LQAANSwAADArAAArKgAAJyoAACIr + AAAdLAAAGC4AABMvAAAOMQMACTMJAAU0EQACNBgAATQfAAA0JgAANC4AADU3AAA1QQAANUwAADVYAAA1 + ZQAANXQAADWEAAA0lQAAM6kAADK9AAAy0AAAMeEAaiwAAFwuAABRLwAARzAAAD8wAAA4LwAAMi4AAC4t + AAApLQAAJC4AAB8vAAAZMQAAFDMAAA80AAAKNgMABDgJAAA5DgAAOhUAADocAAA7IwAAOysAADs0AAA7 + PQAAO0gAADtVAAA7YgAAO3EAADuBAAA6kwAAOacAADi8AAA30AAAN+EAZS8AAFgxAABNMgAARDIAADwy + AAA2MQAAMDAAACswAAAmMQAAIDIAABs0AAAVNgAAEDgAAAo6AAAFPAMAAD4IAAA/DQAAQBMAAEEZAABC + IAAAQigAAEIwAABCOgAAQkUAAEJRAABCXwAAQm4AAEF+AABBkQAAQKUAAD+6AAA9zwAAPeIAYDMAAFQ1 + AABJNQAAQDUAADk0AAA0MwAALjMAACg0AAAiNgAAHDgAABY6AAAQPAAACj8AAARBAAAAQwEAAEUGAABG + CgAARxAAAEgVAABKHAAASiQAAEosAABKNgAASkEAAEpNAABKWwAASmoAAEl7AABIjQAAR6IAAEa4AABF + zgAAROMAWzcAAE84AABFOAAAPTcAADc2AAAxNgAAKjcAACQ5AAAdPAAAFz4AABBBAAAJRAAABEYAAABI + AAAASgAAAEwEAABNCAAATwwAAFASAABSGAAAUx8AAFMoAABTMQAAUz0AAFNJAABTVgAAUmYAAFF3AABR + igAAT58AAE62AABNzQAATOIAVjsAAEs7AABCOwAAOzoAADU5AAAtOwAAJj0AAB9AAAAXQwAAEEYAAAlJ + AAACTAAAAE4AAABQAAAAUgAAAFQBAABVBQAAVwkAAFkOAABaFAAAXBoAAF0iAABdLAAAXTcAAF1DAABd + UQAAXGEAAFtyAABahQAAWZoAAFixAABXygAAVuAAUT8AAEc/AAA/PgAAOT0AADE/AAAoQQAAIEQAABhI + AAARSwAACE8AAAFSAAAAVAAAAFcAAABZAAAAWwAAAF0AAABfAAAAYAUAAGIJAABkDgAAZhUAAGccAABo + JgAAaDEAAGg9AABnTAAAZ1sAAGdsAABlfwAAZJUAAGOsAABixQAAYN0ATEMAAERCAAA9QQAANEMAACtG + AAAiSQAAGU0AABFRAAAIVQAAAFkAAABcAAAAXgAAAGEAAABjAAAAZQAAAGcAAABpAAAAagAAAGwEAABu + CQAAcA4AAHIWAAB0HgAAdCkAAHQ2AAB0RAAAdFQAAHNlAAByeQAAcY0AAHCkAABuvQAAbdUASUYAAEJF + AAA4RwAALkoAACRPAAAaUwAAEVgAAAdcAAAAYAAAAGQAAABmAAAAaQAAAGsAAABuAAAAcAAAAHIAAAB0 + AAAAdgAAAHcAAAB5AgAAfAcAAH4OAACBFgAAgyEAAIMtAACCPAAAgkwAAIBeAACAcgAAgIUAAH6dAAB8 + tQAAe8sARkoAADxMAAAxUAAAJ1QAABxZAAARXgAABmQAAABoAAAAbAAAAG8AAAByAAAAdQAAAHgAAAB6 + AAAAfAAAAH8AAACBAAAAgwAAAIUAAACHAAAAiQAAAIwFAACPDAAAkhYAAJQiAACTMQAAk0EAAJJUAACR + ZwAAj30AAI6TAACNqAAAjL8AQFEAADVVAAAqWgAAHmAAABNlAAAGawAAAHAAAAB1AAAAeQAAAHwAAAB+ + AAAAgQAAAIQAAACHAAAAiQAAAIwAAACOAAAAkAAAAJIAAACUAAAAlwAAAJoAAACdAwAAoQwAAKUYAACm + JgAApjcAAKVJAACkXgAAonMAAKKHAACgnQAAnrIAOVoAAC5gAAAhZgAAFWwAAAhyAAAAeAAAAH0AAACB + AAAAhgAAAIkAAACMAAAAjgAAAJIAAACVAAAAlwAAAJoAAACcAAAAnwAAAKEAAACkAAAApwAAAKoAAACu + AAAAsgEAALcMAAC7GgAAuysAALo+AAC5UwAAuGkAALV/AACzlQAAtKYAMmUAACVsAAAYcwAAC3kAAAB/ + AAAAhgAAAIsAAACPAAAAkwAAAJYAAACZAAAAnAAAAKAAAACjAAAApgAAAKkAAACsAAAArwAAALIAAAC1 + AAAAuAAAALwAAADAAAAAxQAAAMsAAADRDQAA1B4AANQxAADTRwAA0V0AAM9zAADOhwAAy5oA/wAAAP0A + AAD7AAAA+wAAAPQAAADxAAwA7AAXAOoAIgDpACwA5gA1AOIAPgDdAEUA2ABLANQAUQDRAFYAzwBbAM0A + XwDMAGQAygBoAMgAbQDGAHMAxAB6AMIAggDAAIsAvgCXALwApQC6ALgAuADSALYA7gC1AP8AswD/AKwA + /wCoAP8A+wAAAPYAAADyAAAA6QAAAOIAAADbAAcA1gASANUAHQDTACcA0AAwAMsAOADHAD8AxABGAMIA + SwDAAFEAvgBVALwAWgC7AF4AuQBjALgAaAC2AG4AtAB1ALIAfACwAIYArgCRAKwAngCqALAAqQDIAKcA + 5gCmAP8ApgD/AKAA/wCcAP8A8gAAAOwAAADgAAAA0gAAAMoAAADEAAIAwQANAL0AFwC7ACEAuwAqALkA + MwC2ADoAswBAALEARgCuAEsArABQAKsAVACpAFkApwBeAKUAYwCkAGkAogBvAKAAdwCeAIAAnQCLAJsA + mACZAKgAmAC/AJcA3ACXAPgAlwD/AJQA/wCRAP8A6AAAANYAAADHAAAAvQAAALQAAACvAAAAqgAIAKkA + EgCoABwApwAkAKYALQCjADQAoAA6AJ4AQACcAEUAmwBKAJoATwCYAFMAlwBYAJYAXQCUAGMAkwBqAJEA + cQCQAHoAjgCEAI0AkQCLAKAAigC1AIkA0ACIAO8AhwD/AIgA/wCGAP8A1AAAAMIAAACzAAAAqAAAAKEA + AACcAAAAmQADAJcADACVABYAlAAfAJQAJwCTAC4AkQA1AI8AOgCOAEAAjQBEAIsASQCKAE4AiQBTAIcA + WACGAF4AhABkAIMAbACBAHQAgAB/AH4AiwB9AJoAfACsAHsAxQB6AOUAegD8AHoA/wB5AP8AwAAAAK8A + AACiAAAAmAAAAJEAAACMAAAAiQAAAIcABwCGABEAhQAZAIUAIQCFACgAgwAvAIEANQB/ADoAfgA/AH0A + QwB8AEgAegBNAHkAUgB4AFgAdwBfAHUAZgB0AG8AcgB5AHEAhQBvAJQAbgClAG0AvABtANoAbQD0AG0A + /wBtAP8AsgAAAKEAAACUAAAAigAAAIMAAAB/AAAAewAAAHkAAwB4AAsAdwAUAHYAGwB2ACIAdgApAHUA + LwBzADQAcgA5AHEAPgBvAEMAbgBIAG0ATQBsAFMAagBaAGkAYQBnAGoAZgB0AGQAgABjAI4AYgCfAGEA + tABhAM8AYADrAGAA/wBhAP8ApQAAAJUAAACJAAAAfgAAAHcAAAByAAAAbwAAAG0AAABsAAcAawAOAGoA + FgBqAB0AagAjAGkAKQBnAC8AZgA0AGQAOQBjAD4AYgBDAGEASABgAE4AXgBVAF0AXQBbAGYAWgBwAFgA + ewBXAIkAVgCZAFUArQBVAMYAVQDiAFUA9wBVAP8AmwAAAIsAAAB/AAAAdQAAAG0AAABoAAAAZQAAAGMA + AABhAAMAYAAKAF8AEQBeABgAXgAeAF4AJABcACkAWwAvAFoANABZADkAVwA+AFYAQwBVAEoAUwBRAFIA + WQBQAGIATwBsAE4AdwBNAIUATACVAEsApwBKAL4ASgDaAEoA7wBLAP8AkgAAAIMAAAB3AAAAbQIAAGUB + AABfAAAAWwAAAFkAAABYAAAAVgAGAFUADABUABMAVAAZAFMAHwBSACQAUQAqAE8ALwBOADQATQA5AEwA + PwBKAEUASQBNAEcAVQBGAF4ARQBoAEQAdABDAIEAQgCRAEEAowBBALgAQQDQAEEA6QBBAPgAiwAAAHwE + AABwBwAAZgkAAF4JAABYCAAAUwYAAFAEAABPAAAATQACAEwACABLAA4ASgAUAEkAGgBJACAARwAlAEYA + KgBFADAAQwA1AEIAOwBBAEIAPwBJAD4AUQA9AFsAPABlADoAcQA5AH4AOACNADgAnwA4ALMANwDKADcA + 4QA4APIAhgUAAHcJAABqDAAAYA4AAFgOAABRDgAATAwAAEkKAABGCAAARQQAAEQABABDAAoAQgAQAEEA + FgBAABsAPwAhAD0AJgA8ACwAOwAxADkANwA4AD4ANwBGADYATgA0AFgAMwBjADIAbwAxAHwAMACLAC8A + nAAvAK8ALwDEAC8A2wAvAOsAgQoAAHIOAABmEQAAWxMAAFMTAABMEwAARxIAAEMQAABADQAAPgsAADwI + AAA8BAYAOwELADkAEgA4ABcANwAdADUAIwA0ACgAMwAuADEANAAwADsALwBDAC4ATAAsAFYAKwBhACoA + bQApAHoAKACJACcAmgAnAKwAJgDAACYA1AAnAOUAfA4AAG4TAABiFQAAVxYAAE8XAABIFwAAQhYAAD4U + AAA6EgAANxAAADUNAAA0CwIANAcHADMFDQAxBBMALwMZAC4DHwAsAyUAKwMrACoEMgApBDkAJwVBACYG + SgAlBlUAIwdgACIHbQAhB3oAIAeJAB8HmQAeBasAHgS9AB4D0AAeAeEAeBIAAGoWAABeGAAAVBkAAEsa + AABEGgAAPhkAADkXAAA1FgAAMhQAADASAAAuEAAALQ0DACwLCAAqCQ8AKAkWACcJHAAlCSIAJAooACMK + MAAhCzcAIAxAAB8MSgAdDVUAGw5hABoObgAYDnwAFw6MABYOnAAVDa0AFAy/ABQL0AAUCt8AdRUAAGcZ + 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 + EQAAgBoAAIAnAAB/NQAAfkUAAH1YAAB9agAAfH8AAHqVAAB5rQAAeMUAP0MAADVFAAAqSQAAIE0AABVT + AAAJWAAAAF0AAABiAAAAZgAAAGkAAABtAAAAbwAAAHIAAAB1AAAAeAAAAHoAAAB8AAAAfgAAAIEAAACD + AAAAhgAAAIgAAACMBwAAjxEAAJIcAACRKgAAkDsAAI9NAACOYQAAjHcAAIuMAACJowAAiLoAOUoAAC5O + AAAjUwAAF1kAAAtfAAAAZQAAAGoAAABvAAAAcwAAAHYAAAB5AAAAfAAAAIAAAACDAAAAhQAAAIgAAACK + AAAAjQAAAI8AAACSAAAAlQAAAJgAAACbAAAAoAYAAKQRAACmHwAApS8AAKRCAACiVgAAoWsAAJ+BAACc + mAAAnKwAMlQAACZZAAAaXwAADWYAAABtAAAAcwAAAHgAAAB9AAAAgQAAAIQAAACHAAAAigAAAI4AAACR + AAAAlAAAAJYAAACZAAAAmwAAAJ4AAAChAAAApAAAAKcAAACrAAAAsAAAALYGAAC8EwAAvCQAALs2AAC6 + SwAAuGAAALZ2AAC1igAAs50AKl8AAB5mAAARbAAAAnMAAAB6AAAAgQAAAIYAAACLAAAAjwAAAJIAAACV + AAAAmQAAAJwAAACgAAAAowAAAKYAAACpAAAArAAAAK8AAACyAAAAtgAAALoAAAC+AAAAxAAAAMoAAADR + BwAA1RgAANUrAADTQAAA0VYAAM9sAADMgQAAyZUA+wAAAPYAAAD0AAAA9AAAAPAAAADtAAcA6gASAOYA + HQDmACcA5AAxAN8AOQDbAEAA1gBHANIATADPAFEAzABWAMoAWwDIAF8AxgBkAMQAaQDCAG8AwAB2AL4A + fwC8AIgAugCTALcAogC1ALYAswDQALIA8ACyAP8AqwD/AKMA/wCfAP8A8wAAAO4AAADrAAAA5QAAANwA + AADWAAIA0AANAM8AGADPACIAzQArAMcAMwDDADsAwABBAL4ARwC8AEwAugBRALgAVgC2AFoAtQBfALMA + ZACxAGoArwBxAK0AeQCrAIIAqQCNAKcAmwClAK4ApADHAKIA5gChAP8AnQD/AJcA/wCUAP8A6QAAAOMA + AADYAAAAywAAAMQAAAC9AAAAugAIALcAEwC2ABwAtQAlALQALgCxADUArgA7AKwAQQCqAEYAqABLAKYA + UACkAFUAogBZAKEAXwCfAGUAnQBrAJsAcwCaAHwAmACHAJYAlACUAKUAlAC9AJMA3ACSAPoAkQD/AIwA + /wCIAP8A3QAAAM0AAADAAAAAtQAAAKwAAACoAAAAowADAKIADQCiABcAoQAfAKEAJwCeAC8AmwA1AJkA + OwCXAEEAlgBFAJQASgCTAE8AkgBTAJAAWQCPAF8AjQBlAIwAbQCKAHYAiQCBAIcAjgCFAJ0AhACzAIMA + zwCCAPAAggD/AIAA/wB9AP8AygAAALgAAACqAAAAoAAAAJkAAACUAAAAkgAAAJAACACOABEAjgAZAI4A + IgCOACkAjAAvAIoANQCIADsAhwA/AIYARACEAEkAgwBOAIEAUwCAAFkAfwBgAH0AZwB7AHAAegB7AHgA + hwB3AJYAdgCqAHUAxAB0AOUAdAD/AHMA/wBxAP8AtwAAAKYAAACZAAAAjwAAAIkAAACEAAAAgQAAAH8A + AwB+AAsAfgAUAH4AHAB+ACMAfQApAHsALwB5ADUAeAA6AHcAPgB2AEMAdABIAHMATQByAFMAcABaAG8A + YgBtAGsAbAB1AGoAgQBpAJAAZwCiAGcAugBmANoAZgD3AGcA/wBmAP8AqQAAAJgAAACLAAAAggAAAHoA + AAB2AAAAcwAAAHEAAABwAAcAbwAOAG8AFgBvAB0AbwAjAG4AKQBtAC8AawA0AGoAOQBpAD0AaABDAGYA + SABlAE4AYwBVAGIAXQBgAGYAXwBwAF4AfABcAIsAWwCbAFoAsgBZAM4AWQDuAFoA/wBaAP8AmwAAAIwA + AACAAAAAdgAAAG8AAABpAAAAZgAAAGQAAABjAAIAYwAJAGMAEQBiABcAYgAeAGIAJABgACkAXwAuAF0A + MwBcADgAWwA9AFoAQwBYAEkAVwBQAFYAWABUAGEAUwBsAFEAdwBQAIYATwCWAE4AqwBOAMYATgDkAE4A + /ABOAP8AkgAAAIIAAAB2AAAAbAAAAGQAAABfAAAAWwAAAFkAAABYAAAAVwAFAFYADABWABIAVgAYAFYA + HgBVACQAVAApAFIALgBRADMAUAA4AE8APgBNAEQATABLAEoAUwBJAF0ASABnAEYAcwBFAIEARACRAEMA + pQBDAL0AQwDbAEMA9ABEAP8AiQAAAHoAAABuAAAAZAAAAFwAAABWAAAAUgAAAE8AAABOAAAATQACAEwA + CABLAA0ASwAUAEsAGQBLAB8ASQAkAEgAKQBGAC4ARQA0AEQAOQBDAEAAQQBHAEAATwA+AFkAPQBjADwA + bwA7AH0AOgCNADkAnwA5ALYAOQDSADkA7AA6AP4AggAAAHMAAABnAgAAXQQAAFUEAABOBAAASgMAAEYA + AABFAAAAQwAAAEIABABCAAoAQQAPAEEAFQBBABoAQAAfAD4AJQA9ACoAOwAvADoANQA5ADwAOABDADYA + TAA1AFUANABgADMAbAAyAHoAMQCJADAAmwAwALAAMADKADAA5QAxAPcAfAAAAG4FAABhCAAAVwkAAE8K + AABICQAAQwgAAD8HAAA9BAAAOwEAADoAAQA5AAYAOAALADgAEQA3ABYANgAbADUAIAAzACYAMgArADEA + MQAwADgALgBAAC0ASAAsAFIAKwBdACoAaQApAHcAKACGACgAlwAoAKwAKADDACgA3QAoAPEAeAUAAGkJ + AABdDAAAUg4AAEoOAABDDgAAPg0AADkLAAA2CQAANAcAADIFAAAxAgMAMAAIAC8ADAAvABIALgAXACwA + HAArACIAKgAoACkALgAnADUAJgA9ACUARQAkAE8AIwBaACIAZwAhAHQAIACEACAAlQAfAKgAHwC9ACAA + 1QAgAOkAcwkAAGUNAABZEAAAThEAAEYSAAA/EgAAOREAADQQAAAxDgAALgwAACsKAAAqCAEAKQUFACgD + CQAnAQ4AJgATACUAGQAjAB4AIgAkACEAKwAgADIAHwA6AB4AQwAdAE0AHABZABsBZQAZAXMAGQCCABgA + kgAXAKUAFwC5ABcAzwAYAOQAbw0AAGERAABVEwAASxQAAEIVAAA7FAAANRQAADASAAAsEQAAKBAAACYO + AAAjDAAAIgoDACEIBgAgBgoAHwUQAB0FFQAcBRsAGwUhABoFKAAZBS8AGAU4ABcGQQAWB0wAFAdYABMI + ZAASCHIAEAiBABAHkQAOBqMADgS2AA4CygAPAN0AbBAAAF4UAABSFgAASBcAAD8XAAA4FwAAMhYAAC0V + AAAoFAAAJBMAACERAAAeEAAAHA4CABoNBQAZCwcAGAoMABYKEgAVChgAFAofABMKJgASCy4AEQw3AA8N + QgANDk0ACw5YAAoPZAAJEHIACA+BAAcOkQAGDqMABQ21AAUMxwAFCtgAaRMAAFsWAABPGAAARRkAADwZ + AAA1GQAALxgAACkXAAAlFgAAIRUAAB4UAAAaEwAAGBICABURBAATEAYAEQ8JAA4ODgANEBYADBAdAAsR + JAAKEiwACRM0AAcTPgAGFEgABRRUAAMVYQACFW8AARV+AAAUjwAAE6EAABK0AAARxwAAENgAZhYAAFgZ + AABMGgAAQhsAADkbAAAyGwAALBoAACcZAAAiGAAAHhcAABsWAAAYFQAAFRQDABITBQAQEwYADBQIAAkV + DQAIFRMABhYZAAUWIQAEFygAAxgxAAEYOwAAGUUAABlRAAAaXgAAGm0AABl8AAAZjQAAGJ8AABezAAAW + xwAAFdkAYxgAAFUbAABJHQAAPx0AADYdAAAvHQAAKRwAACQbAAAgGgAAHBkAABgYAAAWFwEAExYDABAW + BAAMFwUACBkHAAUaCwACGxEAARsXAAAcHgAAHCYAAB0uAAAdOAAAHkMAAB5PAAAfXAAAH2sAAB56AAAe + jAAAHZ8AABuzAAAayAAAGdsAXxsAAFIdAABGHwAAPB8AADQfAAAtHwAAJx4AACIdAAAeHAAAGhoAABcZ + AAAUGQEAERkBAA0aAgAJGwQABR0HAAEfCgAAIA8AACEVAAAhHAAAIiMAACIrAAAjNQAAI0AAACRMAAAk + WgAAJGkAACN5AAAjigAAIp4AACCzAAAfyAAAHt0AXB4AAE4gAABDIQAAOSIAADEhAAAqIQAAJSAAACAe + AAAcHQAAGRwAABUcAAARHAAADR0AAAkfAQAFIAIAASIFAAAkCQAAJg0AACgTAAAoGQAAKCEAACkpAAAp + MgAAKT0AAClJAAAqVwAAKWYAACl3AAAoiQAAJ5wAACayAAAlyQAAI94AWCEAAEsjAAA/JAAANiQAAC4j + AAAoIgAAIyEAAB8gAAAbHwAAFx8AABIfAAAOIQAACiIAAAUkAAABJgEAACgEAAAqBwAALAsAAC4QAAAv + FwAALx4AAC8mAAAwLwAAMDoAADBGAAAwVAAAMGMAAC90AAAuhwAALZsAACyyAAAqygAAKeAAUyQAAEcm + AAA8JgAAMyYAACwlAAAmJAAAIiMAAB4iAAAYIgAAFCMAAA4kAAAKJgAABSgAAAAqAAAALAAAAC8CAAAx + BQAAMwkAADUNAAA3FAAANxsAADcjAAA3LAAANzcAADdDAAA3UAAAN2AAADZxAAA1hAAANJkAADOwAAAx + yQAAMOIATygAAEMpAAA4KQAAMCgAAConAAAlJgAAICUAABslAAAVJwAAECgAAAoqAAAFLQAAAC8AAAAx + AAAANAAAADYAAAA4AgAAOgYAAD0KAAA/EAAAQBcAAEAfAABAKAAAQDMAAEA/AABATAAAP1wAAD5tAAA9 + gAAAPJYAADquAAA5yAAAOOIASisAAD4sAAA1KwAALioAACgpAAAjKAAAHSkAABcrAAARLQAACi8AAAUy + AAAANAAAADcAAAA5AAAAPAAAAD4AAABAAAAAQgMAAEUHAABHDAAASRMAAEobAABKJAAASS8AAEk6AABJ + SAAASFcAAEhpAABGfAAARZIAAEOqAABCxgAAQOEARC8AADovAAAyLgAALCwAACcrAAAgLQAAGS8AABIx + AAALNAAABDcAAAA6AAAAPQAAAD8AAABCAAAARQAAAEcAAABJAAAASwAAAE4EAABQCAAAUg4AAFUVAABV + HwAAVSkAAFQ1AABTQwAAU1IAAFJkAABRdwAAT40AAE2mAABMwQAASt4AQDIAADcyAAAwMAAAKy8AACMw + AAAbMwAAEzYAAAs6AAAEPQAAAEAAAABEAAAARgAAAEkAAABMAAAATgAAAFEAAABTAAAAVQAAAFcAAABa + BAAAXAkAAF8RAABhGQAAYCQAAGAwAABfPgAAX00AAF5eAABdcQAAXIcAAFqfAABYuQAAVtYAPDYAADU0 + AAAvMwAAJjUAAB04AAAVOwAADD8AAANDAAAASAAAAEsAAABOAAAAUQAAAFQAAABXAAAAWgAAAFwAAABe + AAAAYQAAAGMAAABlAAAAaAMAAGsJAABuEgAAbxwAAG4oAABuNgAAbUYAAGxYAABragAAaYAAAGiXAABm + sQAAZM0AOTkAADM3AAAqOQAAIDwAABZBAAAMRQAAA0oAAABPAAAAUwAAAFcAAABaAAAAXQAAAGAAAABj + AAAAZgAAAGgAAABqAAAAbQAAAG8AAABxAAAAdAAAAHcDAAB6CgAAfhQAAH4gAAB9LgAAfD4AAHxPAAB7 + YgAAeXgAAHiOAAB1pgAAdMAANzwAAC0+AAAjQgAAGEcAAA1MAAACUgAAAFcAAABcAAAAYAAAAGQAAABn + AAAAagAAAG4AAABxAAAAcwAAAHYAAAB4AAAAewAAAH0AAAB/AAAAggAAAIUAAACJAgAAjQoAAJAWAACQ + JAAAjzQAAI1GAACLWwAAinAAAImEAACGnAAAhbQAMUMAACdHAAAbTQAAEFMAAANZAAAAXwAAAGUAAABq + AAAAbgAAAHEAAAB1AAAAeAAAAHwAAAB/AAAAggAAAIUAAACHAAAAigAAAIwAAACPAAAAkgAAAJYAAACZ + AAAAngAAAKMLAAClGAAApCkAAKM7AAChTwAAn2UAAJx8AACakQAAmqUAKk0AAB9TAAASWQAABWAAAABn + AAAAbQAAAHMAAAB4AAAAewAAAH8AAACCAAAAhgAAAIoAAACOAAAAkQAAAJQAAACXAAAAmQAAAJwAAACf + AAAAowAAAKcAAACrAAAAsAAAALcAAAC9DAAAvhwAAL0vAAC7QwAAuFkAALZvAACzhAAAsJoAIlkAABZf + AAAIZwAAAG4AAAB1AAAAfAAAAIEAAACHAAAAigAAAI4AAACRAAAAlQAAAJkAAACdAAAAoQAAAKQAAACn + AAAAqgAAAK0AAACwAAAAtAAAALkAAAC+AAAAxAAAAMsAAADTAQAA2xAAANojAADYNwAA1U0AANNjAADQ + eAAAzosAAAAAAAAAAAAAAAAAAAAAAAEDBAUGCAkKCw0ODxESExQWFxgaGxwdHyAhIiQlJigpKistLi8w + MjM0Njc4OTs8PT5AQUJERUZHSUpLTU5PUFJTVFVXWFlbXF1eYGFiY2VmZ2lqa2xub3Bxc3R1d3h5enx9 + foCBgoOFhoeIiouMjo+QkZOUlZaYmZqcnZ6foaKjpKanqKqrrK2vsLGztLW2uLm6u72+v8HCw8TGx8jJ + y8zNz9DR0tTV1tfZ2tvd3t/g4uPk5ufo6evs7e7w8fL09fb3+fr7/P7///////////////////////// + /////////////////////////////wAAAAAAAAAAAAAAAAAAAAABAwQFBggJCgsNDg8REhMUFhcYGhsc + HR8gISIkJSYoKSorLS4vMDIzNDY3ODk7PD0+QEFCREVGR0lKS01OT1BSU1RVV1hZW1xdXmBhYmNlZmdp + amtsbm9wcXN0dXd4eXp8fX6AgYKDhYaHiIqLjI6PkJGTlJWWmJmanJ2en6Gio6Smp6iqq6ytr7Cxs7S1 + tri5uru9vr/BwsPExsfIycvMzc/Q0dLU1dbX2drb3d7f4OLj5Obn6Onr7O3u8PHy9PX29/n6+/z+//// + //////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAQMEBQYI + CQoLDQ4PERITFBYXGBobHB0fICEiJCUmKCkqKy0uLzAyMzQ2Nzg5Ozw9PkBBQkRFRkdJSktNTk9QUlNU + VVdYWVtcXV5gYWJjZWZnaWprbG5vcHFzdHV3eHl6fH1+gIGCg4WGh4iKi4yOj5CRk5SVlpiZmpydnp+h + oqOkpqeoqqusra+wsbO0tba4ubq7vb6/wcLDxMbHyMnLzM3P0NHS1NXW19na293e3+Di4+Tm5+jp6+zt + 7vDx8vT19vf5+vv8/v//////////////////////////////////////////////////////AAECAwQF + BgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB + QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9 + fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5 + uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T1 + 9vf4+fr7/P3+/21mdDEAAAAAAwQhAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAB + AgMEBQYHCAgJCgsMDQ4PEBESExQVFhcYGBkaGxwdHh8gISIjJCUmJygpKisrLC0uLzAxMjM0NTY3ODk6 + Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFBRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1 + dnd4eXp7fH1+f4CBgoOEhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGy + s7S2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w + 8vP09fb3+Pn6+/z9/v8AAQECAgMDBAQFBgYHBwgICQkKCwsMDA0NDg8PEBARERITExQUFRYWFxcYGRka + GhscHB0eHh8gICEiIiMkJCUmJicoKSkqKywtLS4vMDEyMjM0NTY3ODk6Ozw9Pj9AQkNERUZISUpMTU9Q + UlNVV1haXF5gYmRmaGptb3F0dnl8foGDhomLjpCSlZeZm52foaOlp6iqrK2vsLKztba3ubq7vL2/wMHC + w8TFxsfIycrLzM3Nzs/Q0dLS09TV1tbX2NnZ2tvb3N3d3t/f4OHh4uPj5OXl5ubn6Ojp6err6+zs7e7u + 7+/w8PHy8vPz9PT19vb39/j4+fn6+/v8/P39/v7/AAEBAgIDAwQEBQYGBwcICAkJCgsLDAwNDQ4PDxAQ + ERESExMUFBUWFhcXGBkZGhobHBwdHh4fICAhIiIjJCQlJiYnKCkpKissLS0uLzAxMjIzNDU2Nzg5Ojs8 + PT4/QEJDREVGSElKTE1PUFJTVVdYWlxeYGJkZmhqbW9xdHZ5fH6Bg4aJi46QkpWXmZudn6Gjpaeoqqyt + r7Cys7W2t7m6u7y9v8DBwsPExcbHyMnKy8zNzc7P0NHS0tPU1dbW19jZ2drb29zd3d7f3+Dh4eLj4+Tl + 5ebm5+jo6enq6+vs7O3u7u/v8PDx8vLz8/T09fb29/f4+Pn5+vv7/Pz9/f7+/9jaEADU3zoS0+JGOdPi + TWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9ja + EADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6 + rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725 + qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPiTWrW3Uahy7to4L61 + m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPi + TWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9ja + EADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6 + rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725 + qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPiTWrW3Uahy7to4L61 + m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPi + TWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9ja + EADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6 + rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725 + qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPiTWrW3Uahy7to4L61 + m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9jaEADU3zoS0+JGOdPi + TWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9ja + EADU3zoS0+JGOdPiTWrW3Uahy7to4L61m/m+t6L6vbmn+725qvy8uqv8vLqs/by6rf28uq3+u7mt/ru5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/9fbEQDU3zsS0+JGOtLiTWvW3kaiyrtp4b61m/m9t6L6vbmn+725qvy8uqv8vLqs/by6 + rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9fbEgDU4DsS0uJGOtLjTWzV3kajybpq4r61m/m9t6L6vbmn+725 + qfy8uqv8vLqs/by6rf28uq3+u7mt/ru5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9bcEwDT4DsT0uNGO9HjTW3U30akybpr4761 + m/m9t6L6vbmm+726qfy8uqv8vLqs/by6rf27uq3+u7mt/ru5rf67ua3/u7mt/7u5rf+7ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9bcFADT4TsT0uNGPNHj + TW7U30alyLls5b61mvm9uKL6vbmm+726qfy8uqv8vLqs/by6rf27uq3+u7mt/ru5rf67ua3/u7mt/7u5 + rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/9Xd + FQDT4TwU0eRGPdDkTW/T4Eanx7lt5r61mvm9uKH6vbmm+726qfy8uqv8vLqs/by6rf27uq3+u7qt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/tXdFgDS4jwV0eRGPtDlTXHS4Eaox7hu6L61mvm9uKH6vbmm+726qfy8uqv8vLqs/bu6 + rf27uq3+u7qt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/tTeGADS4jwW0OVHP8/lTnLR4Uaqxrhv6r61mfm9uKH6vbml+726 + qPy8uqv8vLqs/bu6rP27uq3+u7qt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tTfGQDR4z0X0OZHQc7mTnTQ4kerxbdw6762 + mPq9uKD6vbqk+7y7qPy8uqv8u7qs/bu6rP27uq39u7qt/ru6rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tPgGwHQ5D0Yz+dIQs7n + TnbP40euxLdx7b62l/q9uJ77vbqj+7y7qfy7uqv8u7qs/bu6rP27uq39u7qt/ru6rf67uq3+u7qt/ru6 + rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/tLh + HQHQ5T4ZzuhIRczoT3nN4kiww7Zx8L62lPq9uZn7vLuj+7u7qfy7uqv8u7qs/bu6rP27uq39u7qt/bu6 + rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6 + rf67uq3+u7qt/tHiIAHP5j8bzOlJSMvpUHzL4EmzwrVx8r62iPq9u4z7u7uk+7u7qfy7uqv8u7qs/bu6 + rP27uq39u7qt/bu6rf27uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6 + rf67uq3+u7qt/ru6rf67uq3+u7qt/s/kIwLN6EAey+tKTMnrUYDJ3ku3wsha4r22QPq6u5f7urum+7q7 + qvy6uqv8u7qs/bu6rP27uq39u7qt/bu6rf27uq39u7qt/bu6rf27uq39u7qt/bu6rf27uq39u7qt/bu6 + rf27uq39u7qt/bu6rf27uq39u7qt/bu6rf27uq39u7qt/c3mJwTL60Eiye1MUcbuU4XD4VSyvNJmz7jH + guS3wJXyt7ye+bq7qvy6uqv8urqs/Lq6rP26uq39urqt/bq6rf26uq39urqt/bq6rf26uq39urqt/bq6 + rf26uq39urqt/bq6rf26uq39urqt/bq6rf26uq39urqt/bq6rf26uq39urqt/cvpKwbJ7UInxvBOVsPw + V4i96GCkuNxou7PTecytzYHXp8qE3qLIhuOdxonlmsWL55fFjeiVxI/pk8SR6pHEk+qQw5XrkMOV65DD + leuQw5XrkMOV65DDleuQw5XrkMOV65DDleuQw5XrkMOV65DDleuQw5XrkMOV65DDleuQw5XrkMOV68ns + LwjH8UMsw/JRXL32XHy48GeVsOZnqKbfZ7af2m3Al9Zzx5LTeMyN0XzPidCA0YfPg9OFz4bUg86J1YHO + jNZ/zY/Xf82P13/Nj9d/zY/Xf82P13/Nj9d/zY/Xf82P13/Nj9d/zY/Xf82P13/Nj9d/zY/Xf82P13/N + j9d/zY/Xf82P18bwMgzE9EYyvvdTVrj7Xm6v+V+EpvBflZzpYKKS5GOriuFpsoTeb7eA3HW7fNt5vXra + fb932oDAdtmEwXTYh8Jy2IvDctiLw3LYi8Ny2IvDctiLw3LYi8Ny2IvDctiLw3LYi8Ny2IvDctiLw3LY + i8Ny2IvDctiLw3LYi8Ny2IvDctiLw9rMBgDf0iwO3tU/L9/USVnjz1KH4cVbtMqzgeG9taT6vbeo+724 + qvy8uKv8vLms/by5rP28ua39vLmt/by5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/trMBgDf0iwO3tU/L9/USVnjz1KH4cVbtMqz + geG9taT6vbeo+724qvy8uKv8vLms/by5rP28ua39vLmt/by5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/trMBgDf0iwO3tU/L9/U + SVnjz1KH4cVbtMqzgeG9taT6vbeo+724qvy8uKv8vLms/by5rP28ua39vLmt/by5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/trM + BgDf0iwO3tU/L9/USVnjz1KH4cVbtMqzgeG9taT6vbeo+724qvy8uKv8vLms/by5rP28ua39vLmt/by5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/trMBgDf0iwO3tU/L9/USVnjz1KH4cVbtMqzgeG9taT6vbeo+724qvy8uKv8vLms/by5 + rP28ua39vLmt/by5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/trMBgDf0iwO3tU/L9/USVnjz1KH4cVbtMqzgeG9taT6vbeo+724 + qvy8uKv8vLms/by5rP28ua39vLmt/by5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/trMBgDf0iwO3tU/L9/USVnjz1KH4cVbtMqz + geG9taT6vbeo+724qvy8uKv8vLms/by5rP28ua39vLmt/by5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/trMBgDf0iwO3tU/L9/U + SVnjz1KH4cVbtMqzgeG9taT6vbeo+724qvy8uKv8vLms/by5rP28ua39vLmt/by5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/trM + BgDf0iwO3tU/L9/USVnjz1KH4cVbtMqzgeG9taT6vbeo+724qvy8uKv8vLms/by5rP28ua39vLmt/by5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/trMBgDf0iwO3tU/L9/USVnjz1KH4cVbtMqzgeG9taT6vbeo+724qvy8uKv8vLms/by5 + rP28ua39vLmt/by5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/trMBgDf0iwO3tU/L9/USVnjz1KH4cVbtMqzgeG9taT6vbeo+724 + qvy8uKv8vLms/by5rP28ua39vLmt/by5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/trMBgDf0iwO3tU/L9/USVnjz1KH4cVbtMqz + geG9taT6vbeo+724qvy8uKv8vLms/by5rP28ua39vLmt/by5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tnMBgDf0iwO3dU/L9/U + SFnjz1KH4cVbtcqzguG9taT6vbeo+724qvy8uKv8vLms/by5rP28ua39vLmt/by5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tnM + BgDf0ysO3dY+Lt7VSFni0FGH4cZatcmzguO9taT6vben+724qfy8uKv8vLms/by5rP28ua39vLmt/ry5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/tnNBgDe0ysN3NY+Lt7VR1nh0VCH4cZZtcizg+S9taT6vben+724qfu9uKv8vLms/by5 + rP28ua39vLmt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/tnNBgDe1CsN3Nc9Lt3WRljh0U+H4MdYtsizhOW9taT6vben+724 + qfu9uar8vLmr/by5rP28ua39vLmt/ru5rf67ua3/u7mt/7u5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tnNBgDd1CsN29g9LdzXRljg0k6H4MdXtsez + hOe9taP6vbem+724qPu9uar8vLmr/Ly5rP28ua3+u7mt/ru5rf67ua3/u7mt/7u5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tjNBgDd1SsM29g8LdzY + RVjg006H4MhWtsezhei9taP6vbem+724qPu9uar8vLmr/Ly6rP28uq3+u7mt/ru5rf67ua3/u7mt/7u5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tjO + BgDc1SoM2tk7LdvYRVjf002H4MhVt8azhum+taP6vbel+r24p/u9uan8vLqr/Ly6rP28uq3+u7qt/ru5 + rf67ua3/u7mt/7u5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/tjOBwDc1ioM2tk7LNrZRFfe1EyH4MlUt8Wzh+u+taL6vbek+r24p/u9uan8vLqr/Ly6 + rP28uq39u7qt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/tjOBwDb1ioM2do6LNraQ1fe1UuG4MpTt8WyiOy+taD6vrej+r24 + pvu9uqn8vLqr/Ly6rP27uq39u7qt/ru6rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tjOBwDb2CoL2ds7K9nbRFbd1kqG38tRuMSy + iu6+tZ75vrei+r25pfu9uqj8vLqr/Ly6rP27uq39u7qt/ru6rf67uq3+u7mt/ru5rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tfPBwDa2SkL2Ns8K9jc + RVbc2EiG38xPuMOyiu++tZz5vbeg+r25pPu9u6f8vLqr/Lu6rP27uqz9u7qt/bu6rf67uq3+u7qt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tbP + BwDZ2ikK19w9KtfdRlXa2keG381NucSzhO6+tZr5vbie+r26ovu8u6j8u7qr/Lu6rP27uqz9u7qt/bu6 + rf27uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6 + rf67uq3+u7qt/tbQBwDY2ywK1t4/KdXfSFTY3EiF389KucS1e+y+tZX5vbiY+ry7ofu7u6n8u7qr/Lu6 + rP27uqz9u7qt/bu6rf27uq39u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6 + rf67uq3+u7qt/ru6rf67uq3+u7qt/tXRBwDW3DAJ1N9BJ9ThSlLV3kuE3dVCuMa6aOm+tYr6vbuH+7u7 + pPu7u6n8u7qr/Lu6rP27uqz9u7qt/bu6rf27uq39u7qt/bu6rf27uq39u7qt/bu6rf27uq39u7qt/bu6 + rf27uq39u7qt/bu6rf27uq39u7qt/bu6rf27uq39u7qt/dTSBwDV3jQI0+FCKNLiS1XT4UyI0t0/usbI + UuG9tT76uruZ+7q7p/u6u6r8urqr/Lq6rPy6uqz9urqs/bq6rf26uq39urqt/bq6rf26uq39urqt/bq6 + rf26uq39urqt/bq6rf26uq39urqt/bq6rf26uq39urqt/bq6rf26uq39urqt/dPTBwDT4DYJ0eNDK9Dl + S1rQ402Nx95Ot73OaNW4xYbotsCU8bS+mPWzvJ34s7yg+rK7ovuyu6P7sbuk+7G7pPuwu6T7r7ul+627 + pfutu6X7rbul+627pfutu6X7rbul+627pfutu6X7rbul+627pfutu6X7rbul+627pfutu6X7rbul+9LW + BwDR4jgLz+ZEMM7nTWDH7FOPvuJdsLfWb8Wy0H7SrcuE3KjIhuGjxojloMWK6J3EjOmbxI7qmcOP65fD + keuVw5Lsk8OU7JLClu2SwpbtksKW7ZLClu2SwpbtksKW7ZLClu2SwpbtksKW7ZLClu2SwpbtksKW7ZLC + lu2SwpbtksKW7dHZBwDP5ToPzelFNsnsT2W/9FyLt+hppK/gabSo2m3AodVzyJvSeM6X0HzSk85/1ZDN + gteNzYXZi8yH2onMiduHy4vbhcuO3IPKkN2DypDdg8qQ3YPKkN2DypDdg8qQ3YPKkN2DypDdg8qQ3YPK + kN2DypDdg8qQ3YPKkN2DypDdg8qQ3c7lDgDM6TwTyu1HPMD1VWW4+mSBr/BjlKbpYqOd42Suld9oto/c + bbyK2nLAhth2w4LWesWA1n3HftWAyHzUg8l61IbKedOJy3fTjMx304zMd9OMzHfTjMx304zMd9OMzHfT + jMx304zMd9OMzHfTjMx304zMd9OMzHfTjMx304zMd9OMzMvpFwHJ7T4ZwvRKQLj8WF6v/1pzpvhbhJ3x + XJKU7F+ci+hipITlZqp/42yue+FysXjgdrR233q1dN99t3LegLhx3YO5b92Gum7dirtu3Yq7bt2Ku27d + irtu3Yq7bt2Ku27dirtu3Yq7bt2Ku27dirtu3Yq7bt2Ku27dirtu3Yq7bt2Ku8jtHwLF8kAfuP5IPK// + TVGm/1Bjnf9Tc5P6VoCK9VqLgvFfknvuZJh17GmdcepuoG7pc6Js6Heka+h6pWnnfqZo5oGnZuaFqGXl + iKll5YipZeWIqWXliKll5YipZeWIqWXliKll5YipZeWIqWXliKll5YipZeWIqWXliKll5YipZeWIqdq+ + AwDrxiQK6sk6JurJSkzsxVlz779kmOC2b7fSr4PRx66U576zpfq9t6r8vber/Ly4rPy8uK39vLit/by5 + rf28ua79vLmu/by5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/dq+AwDrxiQK6sk6JurJSkzsxVlz779kmOC2b7fSr4PRx66U576zpfq9t6r8vber/Ly4 + rPy8uK39vLit/by5rf28ua79vLmu/by5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/dq+AwDrxiQK6sk6JurJSkzsxVlz779kmOC2b7fSr4PRx66U576z + pfq9t6r8vber/Ly4rPy8uK39vLit/by5rf28ua79vLmu/by5rv27ua79u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/dq+AwDrxiQK6sk6JurJSkzsxVlz779kmOC2 + b7fSr4PRx66U576zpfq9t6r8vber/Ly4rPy8uK39vLit/by5rf28ua79vLmu/by5rv27ua79u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/dq+AwDrxiQK6sk6JurJ + SkzsxVlz779kmOC2b7fSr4PRx66U576zpfq9t6r8vber/Ly4rPy8uK39vLit/by5rf28ua79vLmu/by5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/dq+ + AwDrxiQK6sk6JurJSkzsxVlz779kmOC2b7fSr4PRx66U576zpfq9t6r8vber/Ly4rPy8uK39vLit/by5 + rf28ua79vLmu/by5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/dq+AwDrxiQK6sk6JurJSkzsxVlz779kmOC2b7fSr4PRx66U576zpfq9t6r8vber/Ly4 + rPy8uK39vLit/by5rf28ua79vLmu/by5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/dq+AwDrxiQK6sk6JurJSkzsxVlz779kmOC2b7fSr4PRx66U576z + pfq9t6r8vber/Ly4rPy8uK39vLit/by5rf28ua79vLmu/by5rv27ua79u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/dq+AwDrxiQK6sk6JurJSkzsxVlz779kmOC2 + b7fSr4PRx66U576zpfq9t6r8vber/Ly4rPy8uK39vLit/by5rf28ua79vLmu/by5rv27ua79u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/dq+AwDrxiQK6ck6JurJ + SkzsxVlz779kmOC2b7fSr4PRx66U576zpfq9t6r8vber/Ly4rPy8uK39vLit/by5rf28ua79vLmu/by5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/dm/ + AwDrxyQJ6co6JunKSkvrx1lz7sBlmN+3b7jRsYXTxbGY6722qPu9t6r8vbir/Ly4rPy8uKz9vLmt/by5 + rf28ua79vLmu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/dm/AwDqxyQJ6Mo6JejLSkvqyFlz7cFlmd64b7nQsoXVw7Ka7722qPu9t6n7vbir/Ly4 + rPy8uaz9vLmt/by5rf28ua39vLmu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5 + rv67ua7+u7mu/ru5rv67ua7+u7mu/tm/AwDpyCMJ58s6JejMS0vpyFlz7MJkmd65brrPsoPXwrKc8r22 + p/u9t6n7vbiq/Ly4rPy8uaz9vLmt/by5rf28ua3+u7mt/ru5rf67ua7+u7mu/ru5rv67ua7+u7mu/ru5 + rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/tnAAwDpyCMI58w6JefMS0vpyVhz7MJjmt65 + brvPs4LYwLOd9L22p/u9t6n7vbiq/Ly4q/y8uaz9vLmt/by5rf67ua3+u7mt/ru5rf67ua7+u7mu/ru5 + rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/tjAAwDoySMI5sw6JebN + S0royVhz7MNimt25bbzOs4HZv7Of9r22pvu9t6j7vbiq/Ly5q/y8uaz9vLmt/by5rf67ua3+u7mt/ru5 + rf67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/tjA + AwDoySMI5c06JObOS0royldz68Nimt26a7zOtH/avrSh+b22pfq9t6j7vbiq/Ly5q/y8uaz9vLmt/bu5 + rf67ua3/u7mt/ru5rf67ua3+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5 + rv67ua7+u7mu/tjAAwDnyiMI5c06JOXOS0roylZz68Rhmt27abzNtH7avrSi+r22pPq9t6f7vbip/Ly5 + q/y8uaz9vLmt/ru5rf67ua3/u7mt/ru5rf67ua3+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5 + rv67ua7+u7mu/ru5rv67ua7+u7mu/tjBAwDnyiII5M46JOXPS0rny1Zz68Rgm929Z7zNtXzbvrSh+r22 + o/q9t6b7vbip+7y5q/y8uqz9vLqt/ru5rf67ua3/u7mt/7u5rf67ua3+u7mu/ru5rv67ua7+u7mu/ru5 + rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/tjBAwDnyyII5M46I+TPS0rny1Vz6sVgm92+ + ZLzNtXrbvrSf+b62ovq9t6X6vbmo+7y6qvy8uqz9vLqt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mu/ru5 + rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/ru5rv67ua7+u7mu/tfBAwDmyyIH4886I+TQ + SknmzFVz6sVfm93AYrvNt3bbvrSe+b62oPm9uKT6vbmn+7y6qvy8uqz9u7qt/bu6rf67ua3+u7mt/ru5 + rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/ru5rf67ua3+u7mt/tfC + AwDlzCIH4886I+PQSknmzVRz6cZenN7CXrvOuHLavrOb+b62nvm9uKL6vbqm+7y6qfy8uqz9u7qt/bu6 + rf67uq3+u7mt/ru5rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6 + rf67uq3+u7qt/tbCAwDlzCEH4tA6IuLRSUnlzVNz6cddnN/GWbnOvGvYvrOX+L62nPq9uKD7vbuk+7y6 + qvy7uqz9u7qs/bu6rf27uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6 + rf67uq3+u7qt/ru6rf67uq3+u7qt/tbCAwDkzSEG4dE6IuHSSEjkzlJz58lZm+DLU7bQwl/UvrOS+b62 + lvq9upv7vLum/Lu6qvy7uqz9u7qs/bu6rf27uq39u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6 + rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/tXDAwDjziAG39M6IeDTRkfj0FBy485Tl97U + SrHQyFHVv7OB9723iPq8u5r7u7un/Lu6q/y7uqz9u7qs/bu6rf27uq39u7qt/bu6rf27uq3+u7qt/ru6 + rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/ru6rf67uq3+u7qt/tXEAwDh0B8F3tQ6IN7V + RUbh0k5y3dZLkdXeRbDLz0zTw8FP7ru7UPq6u6H7uruo/Lq6q/y6uqz8urqs/bq6rf26uq39urqt/bq6 + rf27uq39u7qt/bu6rf27uq39u7qt/bu6rf27uq39u7qt/bu6rf27uq39u7qt/bu6rf27uq39u7qt/dTF + AwDf0h4F3NY5H9zYQkXe1Etx0+FOiszhTbHC0lzPusd547jBke+2vpj1tL2c+LO8n/mxvKD6sLyh+q68 + ofqsvKL6q7yi+ai8o/mmvKT5pbyk+aW8pPmlvKT5pbyk+aW8pPmlvKT5pbyk+aW8pPmlvKT5pbyk+aW8 + pPmlvKT5pbyk+dPGBADd1BwE2do2HdnbQUPV30tly+hSjsPiWK+71mfHts5/1rHJh9+sx4nkp8WK56LE + jOmfw43rnMOP65rDkOyXwpLslcKU7ZPClu2RwpntkMKa7ZDCmu2QwprtkMKa7ZDCmu2QwprtkMKa7ZDC + mu2QwprtkMKa7ZDCmu2QwprtkMKa7dLIBADZ2RkD1t06GtXfRUDN6E9ow/BZjrvlY6m13G67rdZzx6bS + eM6gz3zTm85/1pbNgdmTzIPakMuF243Lh9yLyondicqL3ofKjt6FyZHfhMmT34TJk9+EyZPfhMmT34TJ + k9+EyZPfhMmT34TJk9+EyZPfhMmT34TJk9+EyZPfhMmT39HKBADW3SAB0+A+Gc/mSELF8FRrvPVgirTq + Z5+q42WtoN9ntpnbbL2T2XDBjtd0xYrWd8eG1XrJhNR9yoLTf8uA04LMftKEzX3Sh8570YvPetGN0HrR + jdB60Y3QetGN0HrRjdB60Y3QetGN0HrRjdB60Y3QetGN0HrRjdB60Y3QetGN0M/MBQDS4SgD0ORAH8fw + S0e9+Fpps/pgganxX5Ge7F+dledhpY7kZKyI4WmxhN9utYDecrh93Xa6e9x5u3nbfL13236+dtqBv3Ta + hMBy2YjBcdmLwXHZi8Fx2YvBcdmLwXHZi8Fx2YvBcdmLwXHZi8Fx2YvBcdmLwXHZi8Fx2YvBcdmLwc3Q + BQDP5S4Gye1CJb74T0ez/1Zhp/9WdJ75WIKV9FqNje9dlobsYZx/6WWheudppXfmbqh05XKqcuR2rHHj + ea1v43yubuJ/r2zigrBq4YexaeGJsmnhibJp4YmyaeGJsmnhibJp4YmyaeGJsmnhibJp4YmyaeGJsmnh + ibJp4YmyaeGJssvVBADL6jQKv/hBJ7P/R0Gn/0pVnv9OZZX/UXKM/FV9hPdZhn30Xox38mORcvBnlW/u + bJhs7XGaaux0nGnsd51n63qeZut+n2TqgaBj6YWhYumIomLpiKJi6YiiYumIomLpiKJi6YiiYumIomLp + iKJi6YiiYumIomLpiKJi6YiiYumIosjbBADA9i4Ns/81I6f/Ozae/0BHlP9GVov/SmOD/1Bte/9VdXX8 + W3xv+mCBa/hmhGj3a4dl9m+JY/Vzi2L0doxg9HmNX/N9jl3zgI9c8oWQW/KHkVvyh5Fb8oeRW/KHkVvy + h5Fb8oeRW/KHkVvyh5Fb8oeRW/KHkVvyh5Fb8oeRW/KHkdqxAAD3uh0G9b0zHve8Qj/5uFJh+7JfgO6p + aZrkpXKv26N9wNOhh87OoY/ayp+V4seemejFnp3sw52h7sKdpPDCnafxwZ2r8sGdr/PBnrTzvJ6087qf + tPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+089qxAAD3uh0G9b0zHve8 + Qj/5uFJh+7JfgO6paZrkpXKv26N9wNOhh87OoY/ayp+V4seemejFnp3sw52h7sKdpPDCnafxwZ2r8sGd + r/PBnrTzvJ6087qftPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+089qx + AAD3uh0G9b0zHve8Qj/5uFJh+7JfgO6paZrkpXKv26N9wNOhh87OoY/ayp+V4seemejFnp3sw52h7sKd + pPDCnafxwZ2r8sGdr/PBnrTzvJ6087qftPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+087qf + tPO6n7Tzup+089qxAAD3uh0G9b0zHve8Qj/5uFJh+7JfgO6paZrkpXKv26N9wNOhh87OoY/ayp+V4see + mejFnp3sw52h7sKdpPDCnafxwZ2r8sGdr/PBnrTzvJ6087qftPO6n7Tzup+087qftPO6n7Tzup+087qf + tPO6n7Tzup+087qftPO6n7Tzup+089qxAAD3uh0G9b0zHve8Qj/5uFJh+7JfgO6paZrkpXKv26N9wNOh + h87OoY/ayp+V4seemejFnp3sw52h7sKdpPDCnafxwZ2r8sGdr/PBnrTzvJ6087qftPO6n7Tzup+087qf + tPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+089qxAAD3uh0G9b0zHve8Qj/5uFJh+7JfgO6p + aZrkpXKv26N9wNOhh87OoY/ayp+V4seemejFnp3sw52h7sKdpPDCnafxwZ2r8sGdr/PBnrTzvJ6087qf + tPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+089qxAAD3uh0G9b0zHve8 + Qj/5uFJh+7JfgO6paZrkpXKv26N9wNOhh87OoY/ayp+V4seemejFnp3sw52h7sKdpPDCnafxwZ2r8sGd + r/PBnrTzvJ6087qftPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+089qx + AAD3uh0G9b0zHve8Qj/5uFJh+7JfgO6paZrkpXGv26N9wNOhh8/OoY/ayp+V4seemejFnp3sw52h7sKd + pPDCnafxwZ2r8sGdr/PBnrTzvJ6087qftPO6n7Tzup+087qftPO6n7Tzup+087qftPO6n7Tzup+087qf + tPO6n7Tzup+089myAAD2ux0F9L4zHfa9Qj73ulJh+bNfge2raZzjqXCx2qd8w9Kmh9LLpZDfx6SW6MOj + m+7BpJ/ywKWi9b+mpve/p6n4vqis+b6pr/m8qrD5uqqw+bipsfi4qbH4uKmx+Lipsfi4qbH4uKmx+Lip + sfi4qbH4uKmx+Lipsfi4qbH4uKmx+NmyAAD1vBwF878zHfW/Qj72u1Jh+LRfge2uaZzirW+y2at7xdCq + iNXJqJHjxKiY7cGpnvS+rKP5vbGo/Ly4rfy8uK79vLmu/by5rv28ua79u7mu/bm1rv25ta79ubWu/bm1 + rv25ta79ubWu/bm1rv25ta79ubWu/bm1rv25ta79ubWu/dmzAAD0vBwF8r8zHfTAQj71vFJh+LZfgu2x + aJ3isG6y2K57xs+uidjHrJPmwqyb8r6wpPq9t6v8vLis/Ly4rf28ua79vLmu/by5rv27ua79u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/dizAAD0vRwF8sAzHPPA + Qj70vVJh97dfgu20Z53itG6z2LJ6x86xi9rGr5bqwLCg9r23qvy9t6v8vLis/Ly4rf28ua79vLmu/by5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/di0 + AADzvhsF8cEzHPLBQz70vlJh9rhfg+22Z5zit22z17V5yM2yidvEspjsvrWm+r23qfu9uKv8vLis/Ly5 + rf28ua79vLmu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/di0AADzvhsE8MEzHPHCQz3zv1Jh9blfg+25Zpziumyz17Z3yMyyh9zDspjuvban+723 + qfu9uKv8vLis/Ly5rf28ua39u7mu/ru5rv67ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/di0AADyvhsE8MIzHPHCQz3yv1Jh9blfg+27ZpzivGuz17d0yMyz + hd3Dspjwvbam+723qPu9uKr8vLms/Ly5rf28ua3+u7mt/ru5rv67ua7+u7mu/bu5rv27ua79u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/de0AADyvxsE78IzHPDDQz3ywFJh9Lpfg+6+ + ZZvivWmy17lwyMy0gt3CspfxvbWl+r23p/u9uKr8vLms/by5rf27ua3+u7mt/ru5rv67ua7+u7mu/bu5 + rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/de1AADxvxsE78MzG/DE + Qz3xwVJh87xeg+3AZZviv2ay17ttyMy1f93BspbyvbWj+r23pvu9uKn7vLmr/Ly5rf67ua3/u7mt/ru5 + rv67ua7+u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/bu5rv27ua79u7mu/da1 + AADxwBoE7sMzG+/EQz3xwVJh8b5eguzCY5rjwmOx2L1ox8y2et3BspPzvrWg+r23pPq9uaj7vLqr/Ly6 + rf67ua3+u7mt/ru5rf67ua7+u7qu/bu6rv27uq79u7qu/bu6rv27uq79u7qu/bu6rv27uq79u7qu/bu6 + rv27uq79u7qu/da1AADwwBoE7sQzG+7FQz3wwlJh8MBeguvEYZnkxF+v2cFixc25dNvBs4/yvrWc+b23 + ovq9uab7vLqq/Lu6rf27uq3+u7mt/ru6rf67uq7+u7qu/ru6rv27uq79u7qu/bu6rv27uq79u7qu/bu6 + rv27uq79u7qu/bu6rv27uq79u7qu/da1AADwwRoE7cUzGu7GQzzvw1Jh7cNdgOnHXpflyFut2sdaw86+ + a9nCtIfxvrWY+b24nfq9u6T7u7qr/Lu6rP27uq3+u7qt/ru6rf67uq7+u7qu/ru6rv27uq79u7qu/bu6 + rv27uq79u7qu/bu6rv27uq79u7qu/bu6rv27uq79u7qu/da2AADvwhkD7MYzGu3HQzzuxFJh68Zdf+fK + WpXjzVaq3M9Qv8/FX9fDtnnwvrWN+r26kPu7u6f8u7qr/Lu6rP27uq39u7qt/ru6rf67uq7+u7qu/bu6 + rv27uq79u7qu/bu6rv27uq79u7qu/bu6rv27uq79u7qu/bu6rv27uq79u7qu/dW2AADuwxkD68cyGuvI + QzztxlJh6MlZfOPPVZHe1U+l2tpEvM/NTdfEv1vtvrVH+rq7nPu6u6j8urqr/P/i8ABJQ0NfUFJPRklM + RQAFCrq6rP26uq39u7qt/bu6rf27uq39u7qu/bS5rv20ua79tLmu/bS5rv20ua79tLmu/bS5rv20ua79 + tLmu/bS5rv20ua79tLmu/dW3AADtxBgD6sgyGerJRDvrx1Nh5c1UeN3WTovV3k+g0NtJvsXOXNa9xXLo + ucCL8ri9m/i2u6H7tbuk/LS7pfyyu6b8r7um/K27p/uqu6n6prys+qK8sfmivLH5oryx+aK8sfmivLH5 + oryx+aK8sfmivLH5oryx+aK8sfmivLH5oryx+dS4AADsxRcD6MkyGOjLRDrpylNg39RNctTgUoLO5VKj + x9tSvr7QadK4yYDgtsSP6bDCkO2swZLwqMCU8qS/lvOhv5n0nr+b9Ju/n/SZv6P0l7+p85S/r/OUv6/z + lL+v85S/r/OUv6/zlL+v85S/r/OUv6/zlL+v85S/r/OUv6/zlL+v89S5AADqxxYC58syF+bNRDrj0E1a + 1t5MZ87mU4bH6Filv9xdvLjTcsy1zYTXrsqG3qjHh+OixonmncWL6JnEjumVw5DqksOT64/Dl+yNw5zs + i8Oi7IvDquuLw6rri8Oq64vDquuLw6rri8Oq64vDquuLw6rri8Oq64vDquuLw6rri8Oq69O6AADoyRQC + 5M4yFuPQRTjb2ERPz+ZQZsftV4m/6F+kuN5nt7LYcsSq03fNpM98057Nf9eZzILalMuE3JDKh96NyYrf + ismN4IfIkeGEyJXigsic4oHIo+KByKPigcij4oHIo+KByKPigcij4oHIo+KByKPigcij4oHIo+KByKPi + gcij4tK7AADlzBIB4dExFODTQzbS40pDyO1TasDzXYm56megsOJor6fdabqg2W7BmdZyx5PUdsuO0nrO + itF+0IfQgdKE0IXTgs+I1IDOi9V9zpDWe86V1nnNnNd5zZzXec2c13nNnNd5zZzXec2c13nNnNd5zZzX + ec2c13nNnNd5zZzXec2c19C9AADizw4A3dUwEtbePyjK7EtJwfRYbLn3Y4aw7mSYpuhjpZzjZK6V4Ge0 + jt1suYnbcL2F2nTAgdl4wn7YfMN813/FetaCxnjWhsd21YrIc9WPyXLUlMly1JTJctSUyXLUlMly1JTJ + ctSUyXLUlMly1JTJctSUyXLUlMly1JTJctSUyc/AAQDZ1AgA2NsyD83pRCnC9E9Mufpdaa/7XX6l9F2N + m+5emJLqYKCL52OmhOVmqoDja6184m+weeFzsnfgd7N14Hq0c999tnHfgLdv3oS4bd6IuWzdjbls3Y25 + bN2NuWzdjbls3Y25bN2NuWzdjbls3Y25bN2NuWzdjbls3Y25bN2Nuc3DAQDW2QgA0OQ5DcTzRi25/FBL + rv9TYqP/VHOZ+1Z/kPZZiYjyXI+C8GCVfO5jmXfsZ5xz62uecepvoG/pcqJt6HWjbOh4pGrnfKZp53+n + Z+aEqGXliKll5YipZeWIqWXliKll5YipZeWIqWXliKll5YipZeWIqWXliKll5YipZeWIqcrGAgDR4RMA + xfE5Ern+QC2t/0VFov9JV5f/TGWO/1Bvhv5UeH/7WIB5+F2FdPZhiXD0ZY1t82qPa/FukWnxcZNn8HSU + Ze93lmTve5di7n6YYe6DmV/th5pf7YeaX+2Hml/th5pf7YeaX+2Hml/th5pf7YeaX+2Hml/th5pf7Yea + X+2HmsjKAgDH7hoBuf0wE6z/NSig/zo6lv8/SY3/RVaF/0phfv9PaXf/VXBx/1p2bP1femn8ZH1m+2iA + ZPpsgmL5cINg+HOFX/d2hl33eodc9n2IWvaCiVj1hopY9YaKWPWGilj1hopY9YaKWPWGilj1hopY9YaK + WPWGilj1hopY9YaKWPWGisXQAgC5/BYCrP8kEJ//KB+V/y8ujP82O4T/Pkd8/0RSdf9LWm7/UWFp/1dm + ZP9damH/Ym1e/2dvXP9rcVr/b3NY/3J0V/91dVb/eHZU/3x3Uv6BeVH+hXpR/oV6Uf6FelH+hXpR/oV6 + Uf6FelH+hXpR/oV6Uf6FelH+hXpR/oV6Uf6Fet6oAAD/rBcD/68tF/+uOzP/qUxR/6Naa/udZYHynGyT + 6phzouSVfK7fkoW425CNwNiNk8XWi5nK1IifzdOHpM/SharR0YSw09GDttTQg73Vz4LE1ciExNXChsTV + wobE1cKGxNXChsTVwobE1cKGxNXChsTVwobE1cKGxNXChsTVwobE1d6oAAD/rBcD/68tF/+uOzP/qUxR + /6Naa/udZYHynGyT6phzouSVfK7fkoW425CNwNiNk8XWi5nK1IifzdOHpM/SharR0YSw09GDttTQg73V + z4LE1ciExNXChsTVwobE1cKGxNXChsTVwobE1cKGxNXChsTVwobE1cKGxNXChsTVwobE1d6oAAD/rBcD + /68tF/+uOzP/qUxR/6Naa/udZYHynGyT6phzouSVfK7fkoW425CNwNiNk8XWi5nK1IifzdOHpM/SharR + 0YSw09GDttTQg73Vz4LE1ciExNXChsTVwobE1cKGxNXChsTVwobE1cKGxNXChsTVwobE1cKGxNXChsTV + wobE1d6oAAD/rBcD/68tF/+uOzP/qUxR/6Naa/udZYHynGyT6phzouSVfK7fkoW425CNwNiNk8XWi5nK + 1IifzdOHpM/SharR0YSw09GDttTQg73Vz4LE1ciExNXChsTVwobE1cKGxNXChsTVwobE1cKGxNXChsTV + wobE1cKGxNXChsTVwobE1d6oAAD/rBcD/68tF/+uOzP/qUxR/6Naa/udZYHynGyT6phzouSVfK7fkoW4 + 25CNwNiNk8XWi5nK1IifzdOHpM/SharR0YSw09GDttTQg73Vz4LE1ciExNXChsTVwobE1cKGxNXChsTV + wobE1cKGxNXChsTVwobE1cKGxNXChsTVwobE1d6oAAD/rBcD/68tF/+uOzP/qUxR/6Naa/udZYHynGyT + 6phzouSVfK7fkoW425CNwNiNk8XWi5nK1IifzdOHpM/SharR0YSw09GDttTQg73Vz4LE1ciExNXChsTV + wobE1cKGxNXChsTVwobE1cKGxNXChsTVwobE1cKGxNXChsTVwobE1d2oAAD/rRYD/7AtF/+vOzP/qkxR + /6RabPufZILynmuU6ptyo+OYe7DelYS62pKLwtePksjUjZjN04ue0NGJpNPQiKrV0Iaw1s+GttfPhb7Y + y4XC2MWHw9i/icPYv4nD2L+Jw9i/icPYv4nD2L+Jw9i/icPYv4nD2L+Jw9i/icPYv4nD2N2pAAD/rhYD + /7EsFv+wOzP/rExR/6VZbPqkY4Lxo2qU6aBwpOKcebLdmYK92JaJxtSTkczSkZfR0I+d1c+No9jOi6na + zYmw3MyIt93LiMDdxYrA3r+MwN25jMDduYzA3bmMwN25jMDduYzA3bmMwN25jMDduYzA3bmMwN25jMDd + uYzA3dypAAD/rxUD/7IsFv+xOzP/rUtR/6dZbfqnYoLxp2iV6aRvpeGgdrTcnYC/1pqIydOYj9DQlZbV + zpOc2syQot3Ljqjfyoyw4cqLueLFjL3iv4694rqPveK1kL7htZC+4bWQvuG1kL7htZC+4bWQvuG1kL7h + tZC+4bWQvuG1kL7htZC+4dyqAAD/sBUD/rMsFv+yOzL/rktR/6hZbfqrYYLxqmeV6KhtpuGldLXboX7B + 1Z6Gy9GcjtPOmZXZzJaa3sqToeHJkajkyI+w5cePu+bAkbvnupK75rWTu+axk7zlsZO85bGTvOWxk7zl + sZO85bGTvOWxk7zlsZO85bGTvOWxk7zlsZO85dyqAAD/sBUC/rQsFv+zOzL/r0tR/6tYbfuuYIHxrmaV + 6KxspuGpcrXapXzC1KKFzdCgjdbMnZTcypmZ4ciWoOXHlKfoxpKx6sKTueq7lbnqtpa56rKWuemulrro + rpa66K6Wuuiulrrorpa66K6Wuuiulrrorpa66K6Wuuiulrrorpa66NurAAD/sRUC/bQsFf+0PDL/sEtR + /61YbPuxX4HxsWWU6LBrpuGtcLXaqXvD06aEzs+kjNjLoJPfyJ2Y5caZn+nFl6fsxJaz7b2Yt+63mbft + spm37a+ZuOysmbnqrJm56qyZueqsmbnqrJm56qyZueqsmbnqrJm56qyZueqsmbnqrJm56turAAD+shQC + /LUsFf61PDL/sUtR/rBXbPm0XoDxtWSU6bRqpeGyb7XarnnD06uDz86ojNnKpJLhx6CY6MSdnuzDmqfv + wZq18bidtfGznbXwsJ228K2ctu6qm7jsqpu47KqbuOyqm7jsqpu47KqbuOyqm7jsqpu47KqbuOyqm7js + qpu47NurAAD+shQC/LUsFf21PDL/sktR/bJWa/e2Xn/yuGST6bhppeG2brXas3fD07CC0M2ti9vJqZLj + xaWX68OhnvDBn6jzvKCz9LSis/SworTzraG08quftfConrftqJ637aiet+2onrftqJ637aiet+2onrft + qJ637aiet+2onrftqJ637dusAAD9sxQC+7YsFfy2PDL+s0tR+7RWavW5XX7xvGOS6bxopOG7bLTat3PC + 07R/z82yitvIrpLlxKqY7cGmnfO/pan3uKex97KnsvevprL1rKSz86mitfGmoLbupqC27qagtu6moLbu + pqC27qagtu6moLbupqC27qagtu6moLbupqC27tqsAAD9sxMC+7csFPy3PDL+s0tR+bdVafO8XH3vwGKQ + 6sBmouK/aLLbvG3B1Lh4zs60hNrIso/lxLKa7sCun/W9rKr6ta+v+7CssfmtqrL3qqez9KektPKkobbv + pKG276Shtu+kobbvpKG276Shtu+kobbvpKG276Shtu+kobbvpKG279qsAAD8tBMC+rcsFPu3PDH9tEtR + 97lVaPG/XHzsw2KP6sRioOPDY7DcwWW+1b5vy8+6etfJt4XixLWQ7MC1nPW7ua3/s7Ov/K6vsPmqrLL3 + p6mz9aWmtPKio7bvoqO276Kjtu+io7bvoqO276Kjtu+io7bvoqO276Kjtu+io7bvoqO279qtAAD8tBMC + +bgsFPq4PDH8tUtR9bxUZ+7DW3rqxl6N6MhenuXJXq3eyV662MlkxtLIbdHNxXbcxsB66ru+iPSvu6T7 + qrew+qixsfimrbL2o6qz9KGntfGfpLbvn6S275+ktu+fpLbvn6S275+ktu+fpLbvn6S275+ktu+fpLbv + n6S279qtAAD7tRMC+bksFPq5PDH8tktR879UZevGW3jnyluK5M1amuHQWajd1Vi02dlYwM7QY9HEyXDf + u8SE6rLAlPKmvZ32n72t95+1svafsLP1nqy0852ptfCcpbfunKW37pylt+6cpbfunKW37pylt+6cpbfu + nKW37pylt+6cpbfunKW37tmtAAD7tRIB+LkrE/m6PDH6uEpR8MJTY+jKWHXkzlaG39RVlNncVaDU31iy + zdhbxMPPbNO7yX7ftcWO6KrCkO6ewJfymL+m9JW9s/OXtbTyl6+18Zirtu+Xp7fsl6e37Jent+yXp7fs + l6e37Jent+yXp7fsl6e37Jent+yXp7fsl6e37NmuAAD6thIB97orE/i7PDH3u0pP7MZSYeXOVHHe1VGA + 1t5WjNHiWqHM31q1w9ZjxrvPddO2yojdrceJ5KLEjOqYwpPtkcGe74/Bre+Ovbbvj7W27pGvt+ySqrjq + kqq46pKquOqSqrjqkqq46pKquOqSqrjqkqq46pKquOqSqrjqkqq46tivAAD5txEB9rsrE/a8PDD0v0lM + 6MtSXeDTT2vW3lN30ORZjMroW6TE3l63vNZrxrbQfdGuzIPZpcmF4JvHieSTxY/ojMSY6onDpOuHw7Hr + h7646om1uemLr7roi6+66IuvuuiLr7roi6+66IuvuuiLr7roi6+66IuvuuiLr7roi6+66NivAAD4uBAB + 9b0rEvW+PDDvxEhJ49BNV9jcTGLQ5Vd1yupbkMPnX6a83mW3tthzxK3Sec2lz33VncyB2pXKhd6OyIvh + iMeT5ITGneWDxqnlgMa25YG/vOWDtrzkg7a85IO2vOSDtrzkg7a85IO2vOSDtrzkg7a85IO2vOSDtrzk + g7a85NawAAD2ug8B874rEfPAPC/pykhD3NhGTdHkU1vK6lh6w+9ek7znZaa232y1rdpuwKTVc8ic0njO + lc9904/NgteJzIjahMuP3IDKl919yqDefcqs3nrKu957wb/ee8G/3nvBv957wb/ee8G/3nvBv957wb/e + e8G/3nvBv957wb/ee8G/3taxAADyvA0A8cEqEfHCPS7h0UY61OFMP8vqU2DE8Vt9vfBjlLboaaWs4Wex + o91qupvZbsGU1nPHjdN5y4jSfs6D0ITRf8+K03vPkdR5zpnVd86j1nbOsNZzzsLWc87C1nPOwtZzzsLW + c87C1nPOwtZzzsLWc87C1nPOwtZzzsLWc87C1tWzAADtvgwA7sMqD+rIPCnY2z4szehNRcXxVmS99l9+ + tvFmkqzqZKCi5GOrmeBls5Lda7mM23C+htl1woHXesR91oDHedWGyXbUjMp005LLcdOazHDTpc1u07XM + btO1zG7Ttcxu07XMbtO1zG7Ttcxu07XMbtO1zG7Ttcxu07XMbtO1zNO0AADmwQkA68cpDt/TOBzP5UUo + xvBPSb73WWa2/GF8rPRfjaLtX5mZ6WCjkOVjqoniZ6+E4G2zf99ytnvdd7l43Hy7dNuBvXLbhr5v2oy/ + bdmTwWvZm8Fp2afCadmnwmnZp8Jp2afCadmnwmnZp8Jp2afCadmnwmnZp8Jp2afCadmnwtK2AADaxQUA + 5ssoDNPgOg7I7kgtvvhRTLX+WGWr/1l3ofhahZjyW5CP7l6YiOthnoHpZaN852mmeOVvqXTkc6xy43iu + b+J9r23igbFr4YayaeCMs2bgk7Rk35y1ZN+ctWTfnLVk35y1ZN+ctWTfnLVk35y1ZN+ctWTfnLVk35y1 + ZN+ctdC5AADYyAUA2tkZA8rrPxO/90oxtf9NS6r/UF+g/1Jvlv1Ue434V4SG9VuLf/JfkHnwY5R07meX + ce1rmm7scJxs63Seaep4n2fqfKFm6YCiZOmFo2Loi6Rg55OlYOeTpWDnk6Vg55OlYOeTpWDnk6Vg55Ol + YOeTpWDnk6Vg55OlYOeTpc28AADUzAUAzOgiAr/2Ohe0/z8wqf9DRZ7/SFaU/0tji/9PbYP/U3V8/Vd7 + d/pcgHL5YINu92SGa/ZoiGj1bIpm9HCMZPR0jWLzd45h8nuQX/J/kV3xhJJb8IqTW/CKk1vwipNb8IqT + W/CKk1vwipNb8IqTW/CKk1vwipNb8IqTW/CKk8vAAADM0QUAv/UiBLP/MRen/zQrnP86PJH/P0qI/0RU + gP9JXXn/TmRz/1Npbv9Ybmr/XHFn/2F0ZP9ld2L+aXhg/Wx6Xv1wfFz8c31b+3d+Wft7f1f6gIFV+YaC + VfmGglX5hoJV+YaCVfmGglX5hoJV+YaCVfmGglX5hoJV+YaCVfmGgsjEAQC+2AAAsv8aBab/JROa/yki + jv8vMIX/Njt9/z1Fdv9ETnD/SlVr/1BbZv9VX2L/WmJf/19lXP9jZ1r/Z2lY/2trVv9vbFX/cm5T/3Zv + Uv96cFD/f3FO/4VzTv+Fc07/hXNO/4VzTv+Fc07/hXNO/4VzTv+Fc07/hXNO/4VzTv+Fc7/PAACy7wIA + pP8OA5j/GAyM/xwYg/8mI3v/Li50/zY4bf8+QGf/RUZi/0xMXf9SUFr/V1NW/1xWVP9hWFL/ZVlQ/2lb + Tv9tXE3/cF5L/3RfSv94YEj/fmFG/4RjRv+EY0b/hGNG/4RjRv+EY0b/hGNG/4RjRv+EY0b/hGNG/4Rj + Rv+EY+6dAQD/nhEC/6AnEf+eNin/mUdC/5NWWP+SYGr+kWh6941wiPKJeJPthoKc6oKKo+d/kqnlfJmt + 43mgsOJ3prPhda214HS0tt9yvLjfccS533DNudpx07rSdNS6y3fUuct31LnLd9S5y3fUuct31LnLd9S5 + y3fUuct31LnLd9S5y3fUue6dAQD/nhEC/6AnEf+eNin/mUdC/5NWWP+SYGr+kWh6941wiPKJeJPthoKc + 6oKKo+d/kqnlfJmt43mgsOJ3prPhda214HS0tt9yvLjfccS533DNudpx07rSdNS6y3fUuct31LnLd9S5 + y3fUuct31LnLd9S5y3fUuct31LnLd9S5y3fUue6dAQD/nhEC/6AnEf+eNin/mUdC/5NWWP+SYGr+kWh6 + 941wiPKJeJPthoKc6oKKo+d/kqnlfJmt43mgsOJ3prPhda214HS0tt9yvLjfccS533DNudpx07rSdNS6 + y3fUuct31LnLd9S5y3fUuct31LnLd9S5y3fUuct31LnLd9S5y3fUue6dAQD/nhEC/6AnEf+eNin/mUdC + /5NWWP+SYGr+kWh6941wiPKJeJPthoKc6oKKo+d/kqnlfJmt43mgsOJ3prPhda214HS0tt9yvLjfccS5 + 33DNudpx07rSdNS6y3fUuct31LnLd9S5y3fUuct31LnLd9S5y3fUuct31LnLd9S5y3fUue6dAQD/nhEC + /6AnEf+eNin/mUdC/5NWWP+SYGr+kWh6941wiPKJeJPthoKc6oKKo+d/kqnlfJmt43mgsOJ3prPhda21 + 4HS0tt9yvLjfccS533DNudpx07rSdNS6y3fUuct31LnLd9S5y3fUuct31LnLd9S5y3fUuct31LnLd9S5 + y3fUueydAAD/nxEC/6EnEf+gNin/m0dC/5VWWf+WXmv+lWZ795FuifGNdZXsiX+f6IaIpuWCkKzjf5ex + 4XyetOB6pbffeK253na0u910vbzdc8a93HLQvtN10b7MeNG9xnrSvcZ60r3GetK9xnrSvcZ60r3GetK9 + xnrSvcZ60r3GetK9xnrSveqeAAD/oBAB/6InEf+hNin/nEdC/5hUWf+aXGv+mWR79pZsivCSc5brjXyh + 54qFqeSGja/hgpW033+duN59pLvceqy+23i1wNt2v8HadcrC1HbPwsx5z8LGfM/Cv33Pwr99z8K/fc/C + v33Pwr99z8K/fc/Cv33Pwr99z8K/fc/Cv33PwuifAAD/oRAB/6MnEP+iNij/nkZC/5xTWP+eW2v+nWJ7 + 9ptqivCWcZfqkXii5o2Cq+KKi7LghpO33YKbvNx/o7/afKzC2Xq2xNl4wcXWd83GzXvNxsZ+zcbAf83G + uoDNxrqAzca6gM3GuoDNxrqAzca6gM3GuoDNxrqAzca6gM3GuoDNxuagAAD/oRAB/6QnEP+jNij/n0ZD + /59SWP+iWmr+oWF79p9oi++bbpjqlXWj5ZF/reGNiLTeiZG63IWZv9qBosPYfqzG13y3yNZ6xMnPe8rK + x3/LysGAysq7gcrKtYLLyrWCy8q1gsvKtYLLyrWCy8q1gsvKtYLLyrWCy8q1gsvKtYLLyuWgAAD/og8B + /6UmEP+kNij/oEZD/6JRV/+lWGn+pV979qNmiu+fbJjpmnOk5JV8ruCRhbbdjY682oiXwtiEoMbWgKvJ + 1X64zNR8yM3JgMjOwYLIzruDyM62hMnOsYXJzbGFyc2xhcnNsYXJzbGFyc2xhcnNsYXJzbGFyc2xhcnN + sYXJzeOhAAD/ow4B/6YmEP+lNij/oUZD/6VQVv+pV2n+qV5696hkiu+kapjpn3Ck5Jp4ruCVgrfckIu+ + 2YuVxNaHn8nUg6vN04C60M2Ax9HChMfRu4XG0bWGxtGxh8fRrYjHz62Ix8+tiMfPrYjHz62Ix8+tiMfP + rYjHz62Ix8+tiMfPrYjHz+GhAAD/pA4B/6cmEP+mNij/okZD/6hOVf+sVmf/rV1596xiifCpaJfppW6k + 5J90r9+afrjblIjA2I+Sx9SKnczSharR0YK91MaFxdW8iMTVtYnE1bCKxdSsisXTqYvG0qmLxtKpi8bS + qYvG0qmLxtKpi8bSqYvG0qmLxtKpi8bSqYvG0uCiAAD/pA4B/6gmD/+nNij/o0VD/6tNVP+wVWb8sVt3 + +LFhh/GvZpbqq2uj5KVxrt+gerjbmYPB1pSOyNONms/Qh6rUz4TD2L6Jw9i1i8LZr4zD2KuNw9eojcTW + pY3F1KWNxdSljcXUpY3F1KWNxdSljcXUpY3F1KWNxdSljcXUpY3F1N+iAAD+pQ0B/6gmD/+oNij/pkRC + /65MU/2zVGX5tlp197ZghfG1ZJTrsmmh5a1trOCndLfboH7A1pmJydKSltHPiqrYxojB27aNwdyujsHc + qo/B26eQwtmkkMPYopDE1aKQxNWikMTVopDE1aKQxNWikMTVopDE1aKQxNWikMTVopDE1d6jAAD9pQ0B + /6kmD/+oNij/qERB/7FLUvq2U2P2ullz87teg/K7Y5HsuWae5rVqquGwb7TcqXi+1qGCyNKYkdLNjKrb + uo2/362Qv9+okr/epZPA3aOTwduhk8LZn5LE1p+SxNafksTWn5LE1p+SxNafksTWn5LE1p+SxNafksTW + n5LE1t6jAAD8pg0B/6omD/+pNij/qkNA/rNLUPe6UmHzvlhx78BdgO7CYo7twWWa6L9opuO8a7Det266 + 1a56xcmgidK7laDerJO946WWveKhlr7goJa/3p6WwNydlcLanJTD15yUw9eclMPXnJTD15yUw9eclMPX + nJTD15yUw9eclMPXnJTD196kAAD8pwwB/6omD/+qNif/rUI+/LZKT/S9UV/vwldu68ZcfenIXornyWCV + 5spin+DLZqjXxmq1yrh0xLurgtOqoZjfnZ685ZucveObm77hmpq/35qZwN2ZmMHamZfD2JmXw9iZl8PY + mZfD2JmXw9iZl8PYmZfD2JmXw9iZl8PYmZfD2N2kAAD7pwwA/6smDv+rNif/r0E9+blJTfHBUVzrx1dr + 58tZeOPOWoTg01yN3NlglNnbX6LN0Ga0v8NvxK+4fNKbr5HejK675ZGjvOOToL7hlJ2/35WcwN2VmsHa + lZnD2JWZw9iVmcPYlZnD2JWZw9iVmcPYlZnD2JWZw9iVmcPYlZnD2N2kAAD6qAwA/6wlDv+sNif/skE7 + 9rxJS+3FUVnmy1Vm4dFVctzYVnvW32OB0eRsjczjaKHE22OytdBrwqPHd9GOwIvdfcW944auveKLpr7g + jaK/3o+gwNyQncLakZvD15Gbw9eRm8PXkZvD15Gbw9eRm8PXkZvD15Gbw9eRm8PXkZvD192lAAD4qQsA + /60lDv+sNif9tUA58sBJSOjKUFXh0VFg29lRadThYm7P5maByuppk8Ppa6O64Wyxq9pswJnSdc6HzIjZ + esmo3329v9+CsL/ehqnA3YilwduKocLZjJ7E1oyexNaMnsTWjJ7E1oyexNaMnsTWjJ7E1oyexNaMnsTW + jJ7E1tylAAD3qQsA/64lDv+uNif5uEA37cRIQ+PPTk/b2UxY0+JcXc7nYXPI7GSHwu5nmbrmaqiv32m1 + odltwZPTd8uEz4bUesyc2XfMvNp6vcHbfrLB2oGswtmEp8PXhqPE1YajxNWGo8TVhqPE1YajxNWGo8TV + hqPE1YajxNWGo8TVhqPE1dymAAD1qgoA/68lDf+vNif1vT8z6MpHPt3VSEbU4FVKzudbYsjtYHnB8mSM + uuxonLDlZ6qk32a1mNptv4zVd8iB0oPPec+U03XPq9VzzMTWdr/E1nm1xNZ8rsXUf6jG03+oxtN/qMbT + f6jG03+oxtN/qMbTf6jG03+oxtN/qMbTf6jG09unAADyrAkA/7AlDf+yNSXwwj4u4dFGNtbeSjrO5lVP + yO1baMHzYH2682aPsetlnqblZKqb4GW0kdxtvIbYdsN+1YHJdtOOzXLSn89w0rbPbs3H0HHCx9F0uMfQ + d7DIz3ewyM93sMjPd7DIz3ewyM93sMjPd7DIz3ewyM93sMjPd7DIz9qoAADvrQgA/rIkDPq4NCDoyTwn + 2dk9Ks/lTjnI7VZUwfRcbLr4YoCy8mOQp+thnZ3mYqiS4mWwid5tt4Hbdb162X7CdNeJxW/Vl8ds1afJ + a9W7yGnRy8lsxsrKb7vKym+7yspvu8rKb7vKym+7yspvu8rKb7vKym+7yspvu8rKb7vKytmpAADrrwYA + /LQkC/O/Mhrg0jkc0uJGIsnrUD7C81dZu/leb7L6X4Go816Pnu1fm5ToYaSK5GSrg+FrsXzfc7Z33Xy5 + cdyFvG3akL9q2pzAZ9mqwWbZvcFl1c/BZ8nPw2fJz8Nnyc/DZ8nPw2fJz8Nnyc/DZ8nPw2fJz8Nnyc/D + Z8nPw9irAADlsgQA+bcjCunILRHV3TgOy+lIJ8LzUUO7+lhbsv9ab6j7Wn+e9FuMlO9dlovrYJ2D6GSk + fOZqqHfkcaxy4nmwbuGBsmrgibVn35O2Zd6et2Peq7hh3r24YdvTuGHb07hh29O4YdvTuGHb07hh29O4 + YdvTuGHb07hh29O4YdvTuNatAADctQEA9bwiCd3UIQbN5z4Rw/FLLLv6UUax/1Jbp/9UbZ79VXuU+FeF + i/NbjoTwX5V87WOadutonnLpb6Ju6Hakaud9p2fmhKlk5YyqYuSUrGDjnq1d46uuXOO+rlzjvq5c476u + XOO+rlzjvq5c476uXOO+rlzjvq5c476uXOO+rtSvAADauAEA6MgTAdDiIgLE8D8Vu/pHL7D/SEam/0tY + nP9OZ5P/UXOK/FV8g/hZhHz2XYl282KOcfFnkm3wbZVp73OXZu55mWTtf5th7IWdX+uMnl3qlJ9a6p6h + WOmroVjpq6FY6auhWOmroVjpq6FY6auhWOmroVjpq6FY6auhWOmrodKyAADXuwEA0dAGAMXvJgS6+joY + sP8/L6X/QEKb/0VSkf9JX4j/TWmB/1Jxev9Wd3T9W3xv+2CAa/llg2f4aoVk92+HYvZ0iV/1eYtd9H+N + W/OFjlnzi49W8pORVPGdklTxnZJU8Z2SVPGdklTxnZJU8Z2SVPGdklTxnZJU8Z2SVPGdks+2AADOwQEA + xdYEALr7JAau/zEYo/81K5j/ODuO/z5Ihf9DU37/SVt3/05icf9TZ2z/WGtn/11vZP9icmH/ZnRf/2t2 + XP9vd1r+c3lY/Xh6Vv19fFT8gn1S+4l+T/qSgE/6koBP+pKAT/qSgE/6koBP+pKAT/qSgE/6koBP+pKA + T/qSgMy6AADEygEAuOIDAK3/HQah/ycVlv8rI4v/LzCC/zY7ev89RHP/Q0tt/0lRaP9PVmP/VFlg/1hc + Xf9dX1r/YWBY/2ViVv9pZFT/bWVS/3FmUP91aE7/eWlM/39qSf+GbEn/hmxJ/4ZsSf+GbEn/hmxJ/4Zs + Sf+GbEn/hmxJ/4ZsSf+GbMTCAAC51QAArP0IAJ7/EQST/xsOiP8hGn7/JiR1/y4tbv82NGj/PTpj/0NA + Xv9JRFr/T0hX/1RLVP9YTVL/XU9Q/2FRTv9lU0z/aVRK/21WSP9yV0b/dlhE/3xaQv+EW0L/hFtC/4Rb + Qv+EW0L/hFtC/4RbQv+EW0L/hFtC/4RbQv+EW7rOAACs3QAAnv8DAZD/BwOE/w0Hev8VD3L/HRhr/yYg + ZP8vJ1//OC1a/z8yVf9FNlL/SzpO/1E8S/9WP0n/WkBH/15CRf9jREP/Z0VB/2tGP/9wSD7/dUk8/3tK + Ov+CTDr/gkw6/4JMOv+CTDr/gkw6/4JMOv+CTDr/gkw6/4JMOv+CTP6RAwD/kBID/5AjDP+NMyD/iEQ0 + /4VSRv+GW1b/hGRk/4Ftcf58dnv6eYCD9nWKivRxko/ybpqT8Gyilu9qqZjuaLGa7Wa5nO1lwZ3sZMue + 62PVn+dk3Z/gZt+f2Wnin9Js457SbOOe0mzjntJs457SbOOe0mzjntJs457SbOOe0mzjnv6RAwD/kBID + /5AjDP+NMyD/iEQ0/4VSRv+GW1b/hGRk/4Ftcf58dnv6eYCD9nWKivRxko/ybpqT8Gyilu9qqZjuaLGa + 7Wa5nO1lwZ3sZMue62PVn+dk3Z/gZt+f2Wnin9Js457SbOOe0mzjntJs457SbOOe0mzjntJs457SbOOe + 0mzjnv6RAwD/kBID/5AjDP+NMyD/iEQ0/4VSRv+GW1b/hGRk/4Ftcf58dnv6eYCD9nWKivRxko/ybpqT + 8Gyilu9qqZjuaLGa7Wa5nO1lwZ3sZMue62PVn+dk3Z/gZt+f2Wnin9Js457SbOOe0mzjntJs457SbOOe + 0mzjntJs457SbOOe0mzjnv6RAwD/kBID/5AjDP+NMyD/iEQ0/4VSRv+GW1b/hGRk/4Ftcf58dnv6eYCD + 9nWKivRxko/ybpqT8Gyilu9qqZjuaLGa7Wa5nO1lwZ3sZMue62PVn+dk3Z/gZt+f2Wnin9Js457SbOOe + 0mzjntJs457SbOOe0mzjntJs457SbOOe0mzjnv2SAwD/kRIC/5EjDP+PMyD/ikQ0/4lQRv+KWVb/iWFl + /4Vqcv2Ac335fH2F9XmHjfJ1kJLwcZiX7m6gmu1sqJ3sarCf62i5oOpnwqLqZc2j6GTao+Fn3aTaat+k + 0m7ho8xv4aPMb+GjzG/ho8xv4aPMb+GjzG/ho8xv4aPMb+GjzG/ho/uTAgD/kxEC/5IiDP+QMyD/i0M1 + /41ORv+PV1b/jV9l/4pocvyFcH74gHmH9HyEj/F4jZXudJaa7HGenutup6HqbLCj6Wq5pehoxKboZ9Cn + 42jaqNpr3ajSbt6nzHHeqMZy3qjGct6oxnLeqMZy3qjGct6oxnLeqMZy3qjGct6oxnLeqPmTAQD/kxEC + /5MiDP+RMiD/jUM1/5FMRv+TVVb/kl1l/49lc/yKbn/3hHaJ84CBkfB7ipftd5Sd63SdoelxpaTobq+n + 52y6qeZqxqrmadOr3WvarNNv3KvMctyrxnPcrMB03KzAdNyswHTcrMB03KzAdNyswHTcrMB03KzAdNys + wHTcrPiUAQD/lBAC/5QiDP+TMh//j0I1/5RLRf+WU1X/lltl/5Njc/yPa3/3iXOK8oR9ku9/h5rsepGf + 6XebpOhzpKfmcK+q5W26rORryK7ha9av1m/ar81z2q/HdNqvwHbasLt32rC7d9qwu3fasLt32rC7d9qw + u3fasLt32rC7d9qwu3fasPaVAAD/lRAC/5UiC/+UMh//kkE0/5hJRP+aUVT/mllk/5hhcvyUaH/2jnCK + 8oh5lO6DhJvqfo6i6HqYp+Z1o6vkcq6u42+7sOJtzLLbbtazz3PYs8d22LPAd9i0u3jYtLZ52LO2ediz + tnnYs7Z52LO2ediztnnYs7Z52LO2ediztnnYs/SWAAD/lhAC/5YiC/+VMh//lT8z/5tHQ/+fUFP/n1dj + /51ecfyZZX/2lG2K8Y11lO2HgJ3pgoqk532VqeR4oa7idK6y4XC9tOBu0bbSc9W2yHfVt8B51be6etW3 + tXvVt7F81baxfNW2sXzVtrF81baxfNW2sXzVtrF81baxfNW2sXzVtvOWAAD/lw8B/5chC/+WMh//mD4y + /59GQv+jTlL/pFVh/6JccP2fY333mmqJ8ZNxlO2Me53ph4al5YCSrON7nrHhdq2133HAuNly07rKeNS6 + wHrTu7l807u0fdO7r37Tuqx/1Lmsf9S5rH/Uuax/1Lmsf9S5rH/Uuax/1Lmsf9S5rH/UufGXAAD/mA4B + /5ghC/+XMh//mzwx/6JFQP+nTVD/qFNf/6habv6lYHz3oGaI8pptk+2SdZ3oi4Gm5YWOreF+nLTfeK25 + 3XPFvM930b3Be9G+uH3Rv7J/0b+tgNG+qoHSvaeC0ryngtK8p4LSvKeC0ryngtK8p4LSvKeC0ryngtK8 + p4LSvPCXAAD/mA4B/5khC/+YMR//njww/6ZEP/+rTE7/rVJd/61Ya/qrXnn1p2OG8KFpkeuacJzmknul + 4YuIrtyDl7bWfKq80XfCwMV7z8G4f8/CsIHPwquCz8Kog9DBpYTQv6KE0b6ihNG+ooTRvqKE0b6ihNG+ + ooTRvqKE0b6ihNG+ooTRvu6YAAD/mQ0B/5ohC/+ZMR//oTsv/6lEPf+uS0z9sVJa+rJXaPWxXXbvr2GC + 6qpnjuSjbZnem3ej15OErdCKkbfJgqK/w366xLl/zcavg83GqYTNxaWGzsSihs/DoIfPwZ6H0L+eh9C/ + nofQv56H0L+eh9C/nofQv56H0L+eh9C/nofQv+2YAAD/mQ0B/5shCv+aMR//ozst/6xDO/2ySkn5tlFX + 9rhWZfG4W3Lqt2B+5LNkid6uapTVpXShzZp+rsWRi7m8ipzBtYWzx66Fy8mmh8vJoojMx5+Jzcadic7E + m4nPw5qJ0MGaidDBmonQwZqJ0MGaidDBmonQwZqJ0MGaidDBmonQweyZAAD/mg0B/5shCv+bMR//pjos + /69COfq2Skf0ulBU8b5VYey/Wm3lwF54375hgte3Z5HNrHChxKF6rrqYhrqxkZbDqIytyaGLysydjMrL + mo3LyZmNzMeYjc3Gl4zOxJaMz8GWjM/BlozPwZaMz8GWjM/BlozPwZaMz8GWjM/BlozPweqZAAD/mwwB + /5wgCv+bMR//qDoq/rJCN/a5SUTwv09Q68RUXOjHWWbhyVxv2shcfdC+Y5DGs2ygu6l1rrCggbqmmpHE + nJWny5WUyc6UksnMk5LKypORy8iTkM3Gk4/OxJKOz8KSjs/Cko7PwpKOz8KSjs/Cko7PwpKOz8KSjs/C + ko7PwumaAAD/mwwB/50gCv+eMB7/qzkp+rVBNPK9SEDrxE5L5spTVeHPVV3d1Fdm085YfMnFYI++u2if + s7Fyraepfbmbo4vEkJ+iy4ifyM6KmcnNjJfKy42Vy8mNlMzHjpLOxI6Rz8KOkc/CjpHPwo6Rz8KOkc/C + jpHPwo6Rz8KOkc/CjpHPwuebAAD/nAwB/54gCv+gMBz/rjgm97lAMe7CRzzmyk1F4NFPTNraUVHV3VNk + zdVVesPMXY23w2Weq7turJ6zeLiRrYfDhaqdynyrxM6AosnNhJ3Ky4aay8mHmMzHiZbOxIqUz8KKlM/C + ipTPwoqUz8KKlM/CipTPwoqUz8KKlM/CipTPwuabAAD/nQsB/58gCv+jLxv/sTgk870/LenHRTbh0Uo9 + 2dtLQdPhW0rN41tixtxXeLzUWouwzGGcosVqqpW+dLaHuYLAeriYyHG6wcx2rsrLe6bLyn6hzMiBnc3G + g5rOxISYz8KEmM/ChJjPwoSYz8KEmM/ChJjPwoSYz8KEmM/ChJjPwuOcAAD+ngoA/6AgCf+mLhn7tTYh + 7sI+KOPOQy7a2UQy0uFWN83mXUvH6GFgv+NhdrTdW4mn1l2ZmtBmp4zLcLN+yH69cceVxGfLv8htvMzI + crDMx3apzcZ6pM7EfKDPw36d0MF+ndDBfp3QwX6d0MF+ndDBfp3QwX6d0MF+ndDBfp3QweGdAAD8nwoA + /6EfCf+qLRb2ujUc6Mg7IdzVPyTT4E4nzOdWPcbsXVK/7GJluOlkd63lYoeg4WCWkt1jo4Taba922Hu4 + atqTvmPZt8Jmzc/Car7Ow260z8Nyrc/CdafQwXij0b94o9G/eKPRv3ij0b94o9G/eKPRv3ij0b94o9G/ + eKPRv9+eAAD6oAkA/6MfCf+vKxLwwDIW4dA3GNTeQxfN5k8txu1XQ7/yXVi48GBqru5ee6PsXYmW6V6W + iehioX3la6pz4Xqxat6Mt2Xdpbpi3ci6Y87SvWfC0b5qudG+bbHSvXCr0rxwq9K8cKvSvHCr0rxwq9K8 + cKvSvHCr0rxwq9K8cKvSvN6fAAD2ogcA/6UeCPu1KA7pyC0P2NoyDc7lRhvG7VAyv/RYSbf3W12u9lpu + pPVZfZn0WYqN8F2UgutinXjoa6Vw5XiraeKHr2ThmbNg4LC0XuDQtGDR1rZjx9W3Zr3VuGi21bdottW3 + aLbVt2i21bdottW3aLbVt2i21bdottW3aLbVt92hAADyowYA/6gdB/O9Igff0SIG0OM6C8fsSSC/9FI3 + t/tVTa79VV+k/FVvmfxVfI/3WIeG8l2QfO5jmHPra55t6XajZ+eCp2LlkKpe5KGsXOO2rVrk0q1d2Nqu + X8zar2HD2bBhw9mwYcPZsGHD2bBhw9mwYcPZsGHD2bBhw9mwYcPZsNyiAADspgQA/68XA+nHFgHU3hwB + yOs8D7/0SSW3/E07rv9PT6T/T2CZ/1BukP5TeYf5V4J+9VyKdvJjkG/wapVq7XSZZex+nWHqiaBd6Zai + Wuilo1fouKRW6NCkWd/cpFrT36Za09+mWtPfplrT36Za09+mWtPfplrT36Za09+mWtPfptqkAADjqQAA + 5rkIANTPBwDK6SICwPQ7E7b9RCmt/0c9o/9ITpn/Sl2P/01ph/9Sc3/9Vnt3+lyBcPdihmv1aYtm83GO + YvJ5kV7wg5Rb742WWO6YmFXupplT7baaUu3NmlTn3ZpU592aVOfdmlTn3ZpU592aVOfdmlTn3ZpU592a + VOfdmtinAADcrQAA0sADAMrUBQDA9CUEtv03Fqz/Piqi/0A8mP9CS47/RVeF/0piff9Qanf/VXFw/1t2 + av1gemb7Z35i+m6BXvl1g1v3fYZY9oWIVfWOilL1mYtQ9KSMTvO0jU3zx45N88eOTfPHjk3zx45N88eO + TfPHjk3zx45N88eOTfPHjtWqAADTtAAAx8YCAL7ZBAC0/yQGqv8xFqD/NiiW/zk3jP88RIP/QU97/0dX + dP9NXm7/U2Rp/1hoZP9ebGD/ZG9d/2pxWv9wdFf/dnZU/314Uf6FeU79jXtM/Jd8Svyifkn7r39J+69/ + Sfuvf0n7r39J+69/Sfuvf0n7r39J+69/Sfuvf9KuAADIvgAAvtABALPyCQCo/x4Gnv8pFJP/LiKJ/zIv + gP82Onj/PUNx/0NKa/9JUGX/T1Rh/1RYXf9aW1r/X15W/2RgVP9qYlH/b2RO/3VmTP98Z0n/g2lH/4pq + Rf+Ua0P/nm1D/55tQ/+ebUP/nm1D/55tQ/+ebUP/nm1D/55tQ/+ebcq2AAC+yAAAs9kAAKb/CwGa/xQF + kP8fD4b/JRp8/yokdP8vLWz/NzRm/z06Yf9EP1z/SkNY/09GVf9USVL/WUtP/15NTP9jT0r/aFBI/21S + Rf9yU0P/eFVB/39WP/+HVz3/j1k9/49ZPf+PWT3/j1k9/49ZPf+PWT3/j1k9/49ZPf+PWb/BAAC00gAA + puEAAJn/BQGM/wsDgf8TCHj/GxBw/yIYZ/8oH2H/LyVb/zcqVv89LlL/QzFP/0gzTP9NNUn/UTdG/1Y5 + RP9aOkL/XzxA/2M9Pv9oPzz/bUA6/3NBN/96QzX/gkQ1/4JENf+CRDX/gkQ1/4JENf+CRDX/gkQ1/4JE + Nf+CRLXNAACn2gAAmO4AAIv/AAF+/wECc/8IBWn/Dgdi/xcMW/8gElX/KBdQ/y8bTP83H0j/PSJF/0Ml + Qv9IJz//TSk9/1ErO/9WLDn/Wy42/2AvNP9lMDL/azIw/3EzLv94NCz/gDYs/4A2LP+ANiz/gDYs/4A2 + LP+ANiz/gDYs/4A2LP+ANv+EBgH/ghQE/34hCf96MRf/dUMn/3hONv94V0T/dmFQ/3JrW/9vdWX/a4Bs + /2eKcv9jlHf+YJ16/V6lffxcrX/7WraB+lm/gvlYyIP4VtOE9lXfhfJW54XrWemF5Vvrhd9g7YXbYu6E + 22LuhNti7oTbYu6E22LuhNti7oTbYu6E22LuhP+EBgH/ghQE/34hCf96MRf/dUMn/3hONv94V0T/dmFQ + /3JrW/9vdWX/a4Bs/2eKcv9jlHf+YJ16/V6lffxcrX/7WraB+lm/gvlYyIP4VtOE9lXfhfJW54XrWemF + 5Vvrhd9g7YXbYu6E22LuhNti7oTbYu6E22LuhNti7oTbYu6E22LuhP+EBgH/ghQE/34hCf96MRf/dUMn + /3hONv94V0T/dmFQ/3JrW/9vdWX/a4Bs/2eKcv9jlHf+YJ16/V6lffxcrX/7WraB+lm/gvlYyIP4VtOE + 9lXfhfJW54XrWemF5Vvrhd9g7YXbYu6E22LuhNti7oTbYu6E22LuhNti7oTbYu6E22LuhP+FBQH/gxME + /38gCf98MRf/d0Io/3xLNv99VUT/e15R/3doXP9zcmb/b31u/2qHdf9mkXr9Y5p++2CjgfperIP5XLWF + +Fu/hvdZyYj1WNWJ9Ffiie1a5onmXemJ32Dridlk7YnUZe2J1GXtidRl7YnUZe2J1GXtidRl7YnUZe2J + 1GXtif+GBQD/hBMD/4EgCf99MBf/e0An/4BJNv+BUkT/f1xR/3xlXf93b2j/c3pw/26Ed/1qjnz7ZpiB + +WOihPhhq4f3X7SJ9l2/ivZbyozzWtiN8Frkjehd5o3gYemN2WXrjdJn7I3NaO2OzWjtjs1o7Y7NaO2O + zWjtjs1o7Y7NaO2OzWjtjv+HBAD/hRID/4IfCf9/MBf/fz4n/4RHNf+FUET/hFlR/4BiXv97bGj/dndx + /3KBefxtjH/6aZaD+GWgh/ZjqYr1YbSM9F+/jvRdy4/xXNuQ613jkeJh5pHaZeiR02jqkcxq6pLIa+qS + yGvqkshr6pLIa+qSyGvqkshr6pLIa+qSyGvqkv+IBAD/hhID/4MfCP+ALxf/gjwn/4hFNf+KTkP/iFdR + /4VgXv+AaWn/enNz/nZ+e/txiYH4bJOG9mieivVlqI3zY7OQ8mC/kvJezZPvXd+U5WHjldxl5pXTaeiU + zGvolcZs6JbCbeiWwm3olsJt6JbCbeiWwm3olsJt6JbCbeiWwm3olv+JAwD/hxID/4QfCP+BLxf/hjom + /4xDNP+OTEL/jVRQ/4pdXf+GZmn/f29z/Xp6fPp1hYP3cJCJ9WubjfNoppHxZbKU8GLAlu9g0JfqYOCY + 3mXjmdRq5pjMbOaZxW7mmr9v5pq8cOaavHDmmrxw5pq8cOaavHDmmrxw5pq8cOaavHDmmv+JAwD/iBED + /4UeCP+DLxf/ijkl/5BCM/+TSkH/k1JP/5BaXP+MYmn/hmt0/X51ffl5gYX2dIyL826YkPFqpJTwZrKY + 7mPBmu1h1ZzjZOCc1mrknMxt5J3Eb+SevnHjnrly4562c+SetnPknrZz5J62c+SetnPknrZz5J62c+Se + tnPknv+KAgD/iREC/4YeCP+ELxf/jjgk/5VBMf+YST//mFFN/5ZYW/+SYGj7jGhz+IVxffV+fIbyeYiN + 73OUk+1uoZjqaq+b6GfAnuZl1aDaaeGgzW7iocNx4aK8cuGjt3Tho7J14aKwduKisHbiorB24qKwduKi + sHbiorB24qKwduKisHbiov+LAgD/ihAC/4ceB/+GLhf/kjci/5lAL/+cSD3/nU9L/5xWWfqZXWb1lGVx + 8Y1tfO2Gd4bpgIOO5nmPleN0nJvgb6qf3Wu8ottq0qTQb+CkxHLfprt036a1dt+nsHffpqx436WqeeCl + qnngpap54KWqeeClqnngpap54KWqeeClqnngpf+MAQD/ixAC/4gdB/+JLRb/lTYh/5w+Lf+hRjv/ok1I + +qJUVvSfW2Pvm2Jv6pRpeuaOc4Xhh3+O3YCKltl6l53UdKWj0HG2ps1vzKnGct2pu3XdqrN33aqued2q + qnrdqad73qile96npXvep6V73qele96npXvep6V73qele96npXvep/+MAQD/jBAC/4kdB/+MLBX/mDUf + /6A9K/+lRTj8p0xF9ahSUu+mWV/pol9r5J1md9+WcILZj3uN04eGl86AkZ/Jep+mxHawqsF0xq27dtuu + snnbrqt7266nfNutpH3crKF+3augft2poH7dqaB+3amgft2poH7dqaB+3amgft2poH7dqf2NAAD/jQ8C + /4odB/+PKxT/mzQe/6M8Kf+pRDX4rEpC8a1QTuqtVlvkqlxn3qVjctiebX/RlXeNyo6BmMSHjKG+gZmo + uXyqrrR6v7GwetmyqX3ZsaR/2bCggNqvnoDbrpyB3Kybgdyrm4Hcq5uB3Kubgdyrm4Hcq5uB3Kubgdyr + m4Hcq/yOAAD/jQ4C/4scB/+RKxP/njMc/6c7J/2tQjL1sUk+7bNOSea0VFXgs1lg2a5gbtGkaX/JnHON + wpR9mbuNiKK0h5SqroKksKmAurSlgNa1oILXtJ2D2LOag9mxmYPasJeE266XhNytl4TcrZeE3K2XhNyt + l4TcrZeE3K2XhNytl4TcrfuOAAD/jg4C/4wcB/+UKhL/oTIa/6o6JPqxQS/xtkc56bpNROK8UU7cvFZZ + 07NdbcuqZn7Com+Nupp5mbKTg6OrjpCrpImfsp6GtbaahtS3l4fWtpaH17SUh9izlIfZsZOG2q+Shtuu + kobbrpKG266ShtuukobbrpKG266ShtuukobbrvqPAAD/jw4C/40cB/+WKRH/ozEZ/605Ife1QCvuu0U0 + 5sBKPd/ET0XWwVJXzrlba8WwY328qGyMs6B1maqZf6OilIysmpCbs5SOsbeQjdC5j4zVuI+M1raOi9i0 + jorZso6K2rCOiduujonbro6J266Oiduujonbro6J266OiduujonbrvmPAAD/jw0B/40cB/+ZKA//pjAX + /LE3HvO6PibqwUMu4sdINdvMSD7Rxk9WyL5Yar+2YXy2rmmLrKdymKKhfKOZm4iskZiXs4qVrLiFlcy6 + hpPUuYeR1baIj9e0iY7YsomN2rCKjNqviozar4qM2q+KjNqviozar4qM2q+KjNqviozar/eQAAD/kA0B + /44cBv+bJw7/qS8U+bU2G++/PCHmx0En389FKtbRQzzNy01Uw8RWaLm9XnqvtWaKpa9vl5upeKKRpISr + iKCTsoCeqLh7nsm6fZrUuYCW1beClNe0g5LYsoSQ2bCFj9qvhY/ar4WP2q+Fj9qvhY/ar4WP2q+Fj9qv + hY/ar/aRAAD/kQwB/48bBv+eJQz/rS0R9bkzFurFORvhzz0d2dk8IdHWQTrH0UpSvcpTZrPEW3ipvWOI + nrdrlZOydKCJrYCpf6qPsXeppLZxqca4c6PVuHee1rZ6mte0fZfYsn6V2rCAk9qvgJPar4CT2q+Ak9qv + gJPar4CT2q+Ak9qvgJPar/SRAAD/kgwB/5EbBv+iIwr9sSoO778wEeTLNBPa2DYS0t9DH8vcRTjB10hP + t9FQZKzMWHaixmCFl8Fokoy8cZ2BuHynd7WLrm61obNotsS2aq/WtW+n17Rzodizdp3ZsXia2q96mNuu + epjbrnqY2656mNuuepjbrnqY2656mNuuepjbrvGSAAD/kwsB/5MaBf+mIQj4tiYK6cYqCt3UKwnS4D4N + y+NLHsThTzW73k5MsNpOYKXUVXKaz1yBj8tkjoTHbZl5xXmib8OIqmbDnq5fxcKxY77ZsWez2bFrq9qw + bqbar3Gh265zntysc57crHOe3Kxzntysc57crHOe3Kxzntysc57crO6UAAD/lAoB/5gXA/+rHATyvSAF + 4s4gBNTeLATL5kESxOdNI73mUza05VZJquJVXJ7eVW6T21p9h9hhiX3VapRy03acaNOGo2DUnahZ1sKq + XM7dqmDB3Ktjt9ysZrDcq2mq3atrpt2qa6bdqmum3aprpt2qa6bdqmum3aprpt2qa6bdquuVAAD/lgkB + /50SAv2xFQHqxRMB2NoLAMzmMQbE60MWvOtMKbTrUDyr6lJOoehUXpbnVmyL5Vp5gORfhHbjaI1t43SU + ZOOEmlzlmZ5X57qgV+LcoFrR4aNcxuClX73fpmK136ZksOClZLDgpWSw4KVksOClZLDgpWSw4KVksOCl + ZLDgpeaXAAD/mAgA+KQLAN+5BwDVzAcAzuQVAMTuNAq88EIbs/FJLqrxTECh8U5Rl/BRX43vVGyD71h2 + ee9ef2/vZoZn8HGMX/GAkVnvkpVU7qiYUu7ImVXl35lX1uObWMzknVvD5J5dvuOeXb7jnl2+455dvuOe + Xb7jnl2+455dvuOeXb7jnuCZAAD6mwYA3KwBANK+AwDMzwUAxO4cAbv0NQ2z9kAfqvdFMaD4SEKX+EtR + jfhOXoP4Umh6+VZxcvpceGn6ZH5j+W+DXfd7h1j1iYtT85qOUPKvkE7yzJFQ6+GQU9/mkVXT6JNWzemU + Vs3plFbN6ZRWzemUVs3plFbN6ZRWzemUVs3plN+bAADroAEA07MAAMrDAgDD1AUAuvcgA7H6MxGo/Dwi + n/5AMpX/REGM/0dOg/9LWXr/T2Jy/1Rpav9bb2T/Y3Rf/mx4Wv12fFX7gX9R+o+BTviehEv4soVJ98qG + SfTihk7o54ZQ4OuHUODrh1Dg64dQ4OuHUODrh1Dg64dQ4OuHUODrh9yfAADYqQAAy7oAAMLKAgC52gQA + sP4hBaf/LxKd/zYilP87MIr/Pz2B/0NIef9IUXH/TVhq/1JeZP9ZY1//YGha/2hrVv9xblL/enFO/4Vz + Sv+Sdkj/oHdG/rF5RP3FekP94XpF9+h7Rffoe0X36HtF9+h7Rffoe0X36HtF9+h7Rffoe9miAADNsgAA + wsMAALjSAQCu8wsApP8dBZv/KhGR/zAfiP81K3//OjZ3/z8/b/9ERmj/SU1i/09RXf9WVln/XVlV/2Rc + Uf9rX03/c2FK/3xjRv+GZUP/kmdB/55pQP+saj7/v2s9/89sPf/PbD3/z2w9/89sPf/PbD3/z2w9/89s + Pf/PbNCqAADDvAAAuMwAAK3ZAACi/wwBlv8WBI7/Ig6F/ykZfP8vI3T/NSxs/zozZf9AOV//RT5a/0tC + Vv9RRlL/WEhO/15LSv9kTUf/a09E/3NRQf97Uz7/hFU8/49XOf+aWDj/qFo3/7NaN/+zWjf/s1o3/7Na + N/+zWjf/s1o3/7NaN/+zWsS1AAC5xgAArdQAAKDhAACU/wcBif8PA4D/GAl4/yERcP8oGWj/LyBh/zQl + W/86KlX/QC5Q/0UxTf9LNEn/UTdG/1Y5Q/9cO0D/Yjw9/2k+O/9wQDj/eEI1/4BDM/+JRTD/lEYv/51H + L/+dRy//nUcv/51HL/+dRy//nUcv/51HL/+dR7vAAACv0AAAodsAAJPrAACH/wABfP8HAnL/DgVp/xYI + Yv8fDlz/JhNV/y0XUP8zG0v/OR5H/z4gQ/9DIz//SCU9/00mOv9SKDf/Vyk1/10rMv9jLDD/ai4t/3Ev + K/95MCn/gjIn/4kzJ/+JMyf/iTMn/4kzJ/+JMyf/iTMn/4kzJ/+JM7DLAACi1wAAk98AAIXuAAB5/wAA + bv8AAmT/BQNc/w0GVf8VCE7/HApI/yMLRP8pDUD/Lg88/zQROP85EjX/PRQy/0IWL/9HFy3/TBgq/1Ia + KP9YGyb/Xh0k/2UeIv9sHx//dSEe/3siHv97Ih7/eyIe/3siHv97Ih7/eyIe/3siHv97Iv92BwH/chUF + /20iCv9lMQ//ZEAb/2lKJ/9pVDP/Z14+/2RqSP9fdVD/W4BW/1aLXP9Tll//UKBj/06pZf9Msmf/S7to + /0rFav9I0Gr/R91r/0bobP5G8mz3SfRs8U32bOtQ92vlVflr41b6a+NW+mvjVvpr41b6a+NW+mvjVvpr + 41b6a/92BwH/chUF/20iCv9lMQ//ZEAb/2lKJ/9pVDP/Z14+/2RqSP9fdVD/W4BW/1aLXP9Tll//UKBj + /06pZf9Msmf/S7to/0rFav9I0Gr/R91r/0bobP5G8mz3SfRs8U32bOtQ92vlVflr41b6a+NW+mvjVvpr + 41b6a+NW+mvjVvpr41b6a/93BwH/dBUF/24iCf9mMA//aD4b/21HJ/9uUTP/a1w//2hnSf9jclH/X35Y + /1qJXv9Wk2L/Up5l/1CoaP9PsWr/Tbts/0zFbf9K0G7/Sd5v/0jqb/pK8XDzTfNw7FH1b+ZV92/gWfhv + 3ln4b95Z+G/eWfhv3ln4b95Z+G/eWfhv3ln4b/94BwH/dRQE/28hCf9oMA//bDwb/3FFJ/9yTzT/cFk/ + /2xkSv9ob1P/Y3ta/16GYP9ZkWX/VZxo/1Oma/9RsG3/T7pv/07FcP9M0XL+S+By/Ursc/VN8HPuUfNz + 51X1c+Fa9nLaXPdz2Fz3dNhc93TYXPd02Fz3dNhc93TYXPd02Fz3dP95BgH/dhQE/3AhCf9pLw//cDob + /3VDJ/92TTT/dVdA/3BhSv9sbFT/Z3hc/2GDYv9djmf/WJlr/1Wkbv9TrnD/Ubly/1DFdP9O0nX9TeJ2 + +U3tdvFR8HfoVfJ24Vr0dttd9XfTX/Z40WD3eNFg93jRYPd40WD3eNFg93jRYPd40WD3eP96BgH/dxME + /3IgCf9rLxD/dTgb/3pCJ/97SzP/elVA/3ZeS/9waVX/a3Rd/2aAZP9hi2r/XJZu/1iicf9WrXT/VLh2 + /1LFeP1Q1Hn6T+R69FHteutV73riW/J6217zetNg9HzMYvZ8ymP2fcpj9n3KY/Z9ymP2fcpj9n3KY/Z9 + ymP2ff97BQH/eBME/3MgCf9uLQ//eTca/39AJv+BSTL/gFM//3xcS/92ZVX/cXBe/2x8Zv9mh2z/YZJx + /l2edfxaqXj7WLV6+lbDfPdU0X30VOJ+7lXsfuRb737bYPJ+0mLzgMtk9IHFZvSBw2b0gcNm9IHDZvSB + w2b0gcNm9IHDZvSBw2b0gf98BQH/eRME/3UfCf9zKw//fjUZ/4Q+Jf+GRzH/hVA+/4JZSv99YlX/d2xf + /HJ3Z/ptg274aI5z9mOZePRgpXvzXbF+8Vu+gPBazYHsWeCC5lrsgtxh74LRZPGEyWbyhcNo8Ya+afGG + vGrxhrxq8Ya8avGGvGrxhrxq8Ya8avGGvGrxhv99BAH/exIE/3YfCP93Kg7/gjQY/4k9I/+LRjD/i048 + /4lXSf2EX1T5fmhf9XhzaPJzfnDwbol27mmVe+xmoH/qY6yC6GC6hOZfyobjXt2H3mHthtFl74jIaO+J + wWrvirxr74q3be+KtW3virVt74q1be+KtW3virVt74q1be+KtW3viv9+BAH/fBID/3ceCP97KQ3/hzIW + /407If+RRC3/kUw6/I9UR/eLXFPyhWVe7n9uaOt6enDodIV45W+QfeJrm4LgaKiG3mW2idxkx4rZZNyL + 02bti8hp7Y2/bOyOuW3sj7Rv7I+wcOyOr3Dtjq9w7Y6vcO2Or3Dtjq9w7Y6vcO2Or3Dtjv9/AwH/fRED + /3keCP9/Jwz/izAV/5I5H/+WQSv9l0k395VRRPGSWVDsjWFc54drZ+OBdnDfe4F43HaLf9hxl4XVbaOK + 0muxjc9pwo/NaNaRyGrrkb5t6pK3b+qTsXHqk61y6pKpc+uSqHPrkahz65Goc+uRqHPrkahz65Goc+uR + qHPrkf+AAwD/fhED/3oeCP+CJgv/ji8T/5Y3Hf+bPyj4nEc08ZxOQOuZVkzmlF1Z4Y9nZNyJcm/Wg3x4 + 0nyHgc53kYjKc52Ox3CrksRuu5TBbdCWvm7olrVx6Jeuc+iXqnTolqZ16JajdumUo3bplKN26ZSjdumU + o3bplKN26ZSjdumUo3bplP+BAgD/fxAD/3sdCP+GJAr/ki0R/5o2Gv2fPiX0okUw7aJMPOagUkjgnFlU + 25dlYNSQbm3OiXh5yYOCg8R9jYvAeZiRvHWllblztZm2csqas3Pkm6t15Zumd+aao3jmmaB555ieeeiX + nXnolp156JadeeiWnXnolp156JadeeiWnXnolv+BAgD/gBAD/3wdCP+JIwn/lSwQ/540GPmkPCHwp0Is + 6ahJNuKnT0LcpFhO1J1hXs2Wa23Hj3V6wYl+hLyDiIy3f5OTsnugmK54sJyrd8WeqHfhnqN55J6fe+Sd + nHvlnJp85pqZfOeZmHznmJh855iYfOeYmHznmJh855iYfOeYmHznmP+CAgD/gBAD/30dB/+LIgj/mCoO + /6EyFfWoOR7srEAn5a5GMd6vTDvWqlRLz6NeXcebaG3AlHF6uo56hbSJhI6uhI+VqYCcmqR9q5+hfMCh + nnzdopt+4qGYfuOfln/knpV/5ZyUf+aak3/mmpN/5pqTf+aak3/mmpN/5pqTf+aak3/mmv+DAQD/gRAD + /38cB/+OIAf/mygM/aUwEvKsNxrpsj0i4bVDKtq2STXRr1JKyahcXMKhZWy6mm56s5R3hayPgY6miouW + oYaXnJuDp6CXgryjlYLZpJOC4aORguKhkILjn5CC5J2PguWbj4Llm4+C5ZuPguWbj4Llm4+C5ZuPguWb + j4Llm/+DAQD/gg8C/4EbBv+QHwb/nicK+qguEO+xNRbmtzoc3rw/ItW6RTPNtFBIxa1aW7ymYmu0n2t5 + rZp0hKaUfY6fkIiWmYyUnZOJo6KOiLili4jWpouH4KSLh+Gii4bioIuF456LheWci4XlnIuF5ZyLheWc + i4XlnIuF5ZyLheWci4XlnP+EAQD/gw4C/4QaBf+THQX/oSQI96wrDOu1MRHivTcV28M6G9G/RDHJuU5G + wLJXWberYGqvpWh4p59xhJ+aeo6YloSWkZOQnYuQoKKGjrWmgo7Sp4ON4KWEi+GjhYrioYWJ45+GiOSd + hojlnIaI5ZyGiOWchojlnIaI5ZyGiOWchojlnP+FAAD/gw4C/4cYBf+WGwT/pCIG87AoCei7LQzfxDEO + 1sg1Gc3DQS/EvUxEu7dVWLKxXmipq2Z2oaZug5ihd42RnYGViZqNnYKXnKJ9lrGmeZbPp3qU36Z9keGj + fo/ioYCN45+Bi+SdgYvknIGL5JyBi+ScgYvknIGL5JyBi+ScgYvknP+FAAD/hA4C/4oXBP+ZGAL+qB4E + 8LUjBeTBJwbbzCgG0swzF8jIPy2/w0pCtr1TVay4W2ajsmN0mq1rgZKpdIuJpX6UgaKJm3qgmaF0nq2l + cJ/NpnKc4KV1l+GjeJTioXqS4597kOSdfI/knHyP5Jx8j+ScfI/knHyP5Jx8j+ScfI/knP+GAAD/hQ0C + /40VA/+dFQH6rBkC67scAuDIGwHW0h8DzdEwFMPNPSq6yUc/sMRQU6a/WGOdumBylLZofouycIiCrnqR + equGmXKplZ9sqaqiZ6nLpGml4aNtn+KicJvioHOY4551leSddpTlnHaU5Zx2lOWcdpTlnHaU5Zx2lOWc + dpTlnP+HAAD/hw0C/5ESAvqhEADwshEA5cIOANjRCQDQ2BsCx9YtEr7TOie0z0Q8qstNT6DHVWCWw11u + jb9leoS8bYV7uXeNcreDlWq1kppktaieX7bJoGGy46BlqeOfaaPknmuf5J1um+Wbb5rlm2+a5ZtvmuWb + b5rlm2+a5ZtvmuWbb5rlm/6JAAD/iAwB/5YOAemmCADZtwYA1MYHANDUBwDJ3SACwN0yDrfaOSOt10E3 + o9NKSpnQUluPzVlphsphdX3Han90xXSIa8SBj2TDkJRdw6aYWMXJmlrA5pletuaaYa7mmmSo5ppno+eZ + aKLnmGii55hooueYaKLnmGii55hooueYaKLnmPuKAAD/igsB9JsIANmsAgDRugQAzcoEAMjYCADA4SYE + uOI4ELDhQh+n30YynN1JRZLbT1WI2FZjf9ZebnbUZ3ht03KAZdJ+h17Sj4xX06WPU9XJkVTR6ZFXxeqT + WrzplFy06ZRfrumUYKzplGCs6ZRgrOmUYKzplGCs6ZRgrOmUYKzplPeMAAD/jwgA3aIAANKxAQDLvwIA + xc0EAL/kDgC35isHr+c5FKbnQSSd5kY1lOVLRIrkT1GB41VdeOJcZ3DiZW9o4m93YeJ8fFrjjIFU5KGE + UObAhk/l6YVR1uyIU8vui1bD7oxYu+2NWbntjVm57Y1Zue2NWbntjVm57Y1Zue2NWbntjfGOAADwlgAA + 1agAAMu3AADExQEAvdIFALXqFgGt7CwKpe04GJztPyeT7UQ2iu1JQ4HtTk957VRYcO1aYWjuYmdi7mxt + W+93clXwhnZP8Zh6S/OyfEf12X1L6+t9Tt7vfk/U8IFRy/KDUsjyg1LI8oNSyPKDUsjyg1LI8oNSyPKD + Usjyg+qRAADbngAAza8AAMS+AAC8zAIAs9gFAKvxGgKj8ywMm/Q1GpL1PCiJ9kE1gPZGQHj3TElw+FJR + afhYWGL5X15c+mhiVvtyZ1D8f2pK/Y9tRv6jcEL/wHI//+dzRfPtc0no8nJL3vR1S9v0dkvb9HZL2/R2 + S9v0dkvb9HZL2/R2S9v0duGVAADRpwAAxbcAALzFAACz0gEAqekJAKD4GwOY+ykNj/wyGYf+OCV//z4w + d/9DOm//SUFo/09IYv9VTVz/XFJW/2RWUf9tWUv/d11G/4RfQP+VYj3/qWQ7/8NmOf/iZzz/72dC8/Rn + Q/D1Z0Pw9WdD8PVnQ/D1Z0Pw9WdD8PVnQ/D1Z9aeAADHsAAAvb8AALPNAACo2AAAnfcLAJT/GAOM/yQL + hP8tFnz/MyB0/zopbf8/MGb/RTdg/0s8Wv9RQFX/WERQ/19HS/9mSkb/b01B/3pPPP+HUjj/l1Q2/6lW + NP++VzP/11ky//NZNP/0WjT/9Fo0//RaNP/0WjT/9Fo0//RaNP/0WsqqAAC+ugAAs8kAAKfUAACb3AAA + kPwIAYf/EwN+/x0Id/8mEHD/Lhhp/zQfYv87JVz/QSpX/0YuUv9MMU3/UjRJ/1g3RP9fOkD/Zjw8/28+ + N/96QDL/hkIv/5VELf+kRiz/tUcr/81IKv/WSSr/1kkq/9ZJKv/WSSr/1kkq/9ZJKv/WSb+1AAC1xAAA + qNAAAJvZAACO4wAAg/4CAHr/DAJx/xUFav8dCWP/Jg5d/y0TV/80GFL/OhxO/0AfSf9FIkX/SyRB/1Am + Pf9WKDn/XSo1/2QsMf9sLi3/djAp/4IxJv+OMyP/mzQi/6w2Iv+yNiL/sjYi/7I2Iv+yNiL/sjYi/7I2 + Iv+yNrbAAACqzQAAnNYAAI3dAACA6QAAdv8AAGz/BAJk/w0DXf8VBlb/HQhQ/yQKS/8rDEf/MQ5D/zcR + P/88Ezv/QRQ3/0YWNP9LFzH/URkt/1caKv9eHCb/Zh0i/28fH/95IBv/gyIY/5EjF/+VIxf/lSMX/5Uj + F/+VIxf/lSMX/5UjF/+VI6zKAACd1AAAjtwAAH/hAABy7gAAaP8AAF//AAFW/wQCT/8MBEn/FAVD/xsH + Pv8hCDr/Jwk2/ywKM/8wCy//NQws/zkMKf89DSX/Qg4i/0gOH/9ODxz/VRAY/1wQFf9kERP/bBEP/3YS + Dv96Eg7/ehIO/3oSDv96Eg7/ehIO/3oSDv96Ev9nDAL/YhkF/1snCf9SNQ3/Uz0R/1hHGv9ZUiT/V14t + /1NqNv9Ndjz/SIJC/0SNRv9AmUn/PqRM/zyuTv87uE//OcJR/zjNUv832lL/NuVT/zXvVP81+VT/N/9U + /Tr/U/c+/1PyQv9S7Uf/Uu1H/1LtR/9S7Uf/Uu1H/1LtR/9S7Uf/Uv9oDAL/YxkF/1wmCf9TNQ3/VzsR + /1xFGv9dUCX/XFwu/1dnN/9Scz7/TX9E/0iLSP9Elkz/QaFO/z+sUf8+tlL/PcBT/zzLVf8611X/OuNW + /znuVv84+Ff/Ov5X+T7/VvNC/1buR/9V6Ev/VuhL/1boS/9W6Ev/VuhL/1boS/9W6Ev/Vv9pCwL/ZBgF + /10mCf9VNA3/WzkR/2FDG/9iTiX/YFkv/1xlOP9XcT//UnxG/02ISv9Jk07/Rp5R/0SoU/9Cs1X/Qb1W + /0DIWP8+1Fj/PuFZ/z3sWv8891r8Pv1a9UL/We5I/1npTP9Z407/WuNO/1rjTv9a407/WuNO/1rjTv9a + 407/Wv9qCwL/ZRgF/18lCf9ZMQ3/YDcR/2ZCG/9nTCX/ZFcv/2FjOf9cbkH/V3pH/1KFTP9OkFD/SptU + /0ilVv9Gr1j/RbpZ/0TFW/9C0Vz/Qt9c/0HqXfxB9l33Qv1d8Ef/XOlN/1zjUP9d3VL/Xt1S/17dUv9e + 3VL/Xt1S/17dUv9e3VL/Xv9rCgL/ZxcF/2AkCf9dLw3/ZTUQ/2tAGv9sSiX/alUw/2ZgOf9ia0L/XXZJ + /1iCT/9TjVP/T5hW/02iWf9LrFv/SrZd/0jBXv5HzV/8Rtxg+UbpYPdF9GDyR/xg6k7+X+NR/2HcVP9i + 1Vb/Y9VW/2PVVv9j1Vb/Y9VW/2PVVv9j1Vb/Y/9sCQL/aBYF/2EkCf9iLAz/ajQQ/3A+Gv9ySCX/cFIw + /2xcOv9oZ0P/Y3NL/15+Uf9aiVb/VZRa/lOeXfxRqF/7T7Jh+k69YvlMymP2TNhk80vnZPBL82TrTvxk + 4lP9ZdtW/mbTWf5nzVv/aM1b/2jNW/9ozVv/aM1b/2jNW/9ozVv/aP9tCAL/aRYF/2MjCf9nKgz/cDEP + /3Y7Gf94RiT/d08v/3NZOv9uY0P/am9M/GV6U/pghVj4XI9d9lmaYPVWpGPzVa5l8lO5ZvFSxmjvUdVo + 61HlaehR8mjjVftp2Vj8a9Bb/WzKXf1txV/+bcVf/m3FX/5txV/+bcVf/m3FX/5txV/+bf9vBwL/axUE + /2QiCf9sKAv/dS8O/3s5GP9+QyP/fUwu/3pWOfx1YEP4cGpM9Wt2VPJngFrwY4tg7l+VZOxcn2frWqpp + 6Vm1a+hYw2zmV9Jt41fjbd9Z8mzZWvpvzl77ccdg/HLCYfxyvWP8cr1j/HK9Y/xyvWP8cr1j/HK9Y/xy + vWP8cv9wBwH/bBQE/2YiCf9xJgr/ei0N/4E3Fv+EQCH/hEos+4FTN/Z9XELxd2ZM7nJxVeptfFzoaYZi + 5WWRZ+Nim2rhYKZt4F6yb95dv3HcXc9x2V7icdVe8nPNYPl1xGL6dr5k+Xe5Zvl3tWf5d7Vn+Xe1Z/l3 + tWf5d7Vn+Xe1Z/l3tWf5d/9xBgH/bRQE/2ggCP92JAn/fysM/4Y0FP+JPh77ikcp9YhPNe+EWEDqfmJL + 5nltVON1eF3fcIJk3WyMadpol27XZqJx1GStdNJiu3bQYct3zmLfeMpj8XnCZPd7u2f3fLVo93yxavd8 + rmv3e65r93uua/d7rmv3e65r93uua/d7rmv3e/9yBQH/bhME/2wdB/96Igj/gykK/4syEv6POxv2kEMm + 749MMemLVD3khl5I34FpU9t8dFzWd35l0nKIbM9uknLMa5x2ymmoesdntXzFZsV+w2bafr9n7n+4afSA + smv0gK1s9ICqbfV/p271f6du9X+nbvV/p271f6du9X+nbvV/p271f/9zBAH/bxIE/3AcB/99IQf/hyYI + /48vD/qUOBjxlkAi6pVILeSTUDnejltE2YlmUNODcFzOfXlnyniDb8Z0jXXCcZd6v26ifr1sr4G6a8CD + uGvUhLVs64SvbfKEqm/yhKZw8oOjcfODoHH0gaBx9IGgcfSBoHH0gaBx9IGgcfSBoHH0gf90BAH/cBIE + /3QaBv+BHwb/iyQH/5QtDfWZNRTtnD0d5ZxFKN+aTDPZllhA0Y9iUMyJbF3Gg3VowX5/cL16iHe5dpJ9 + tnOdgrNxqoWwcLuHrW/PiKtw6IimcfCIonPwh5908YaddPGFm3XyhJt18oSbdfKEm3XyhJt18oSbdfKE + m3XyhP90AwH/cREE/3cZBf+EHQX/jiIF/JgqCvKeMhHpoToZ4aNBItuhSizTm1U/zJVfT8WOaV2/iXJo + uoR7cbWAhHmxfI5/rXmZhKl2poimdbaLpHTLjKF05Yyedu6Lm3fviph374mXePCHlXjxhpV48YaVePGG + lXjxhpV48YaVePGGlXjxhv91AwH/chEE/3kYBf+HGwT/kh8E+ZsnCO6iLw3lpzYU3qk9G9WmRyrOoFI9 + xppcTsCUZly5jm9os4l4cq6FgHqpgYqBpX6VhqF7ooqderKOmnnHj5h54o+Weu2OlHvtjJJ77ouRe++J + kHvwh5B78IeQe/CHkHvwh5B78IeQe/CHkHvwh/92AwH/cxAD/3wXBP+KGgP/lR0D9p8kBeunKwnirDIO + 2q85FdGrRSnJpVA8wp9aTbqZY1u0k2xorY50cqiKfXqihoeCnYORiJmAnoyVf66Qkn7DkZB+35KOf+uQ + jX7sjo1+7YyMfu6LjH7viYx+74mMfu+JjH7viYx+74mMfu+JjH7vif93AgH/dBAD/38WA/+MGAL/mBoC + 86MgA+erJgbesiwJ1rQ2E82vQyfFqU46vaNXTLWeYVqumGlnqJRycqGPenqcjISClomOiJGGm42NhKuR + ioPAk4iD3ZOHg+uSh4Psj4eC7Y6Hge6Mh4HvioeB74qHge+Kh4HvioeB74qHge+Kh4Hviv94AgH/dRAD + /4EUA/+PFQH9mxYB76YbAeSwIAPbuCUE0rc0EsmzQSXBrkw4uKhVSrCjXlmpnmdmoplvcZuVd3qVkYGC + kI6LiIqMmI6GiqiSgom9lH+J25SAiOqTgYfrkIKG7I6Che2Mg4TvioOE74qDhO+Kg4TvioOE74qDhO+K + g4Tviv94AgH/dg8D/4QSAv+SEgH4nhIA7KoUAOC1FwDXvR8CzrsyEMW4PyO8s0o2tK1TSKyoXFeko2Rk + nJ9scJabdXmPmH6BiZWIiIOSlI5+kKSSeo+6lHeQ2JV4juqTeozrkXyK7I99ie2Nfofui36H7ot+h+6L + fofui36H7ot+h+6Lfofui/95AQH/dw4D/4cQAfyVDgDrogwA368KANm7CQDSwRwBysAvDsG8PSG4uEc0 + r7NRRqauWVWeqmJil6Zqbo+icneJn3uAgpyFh3yZkY12mKGRcpe3lG+X1ZRwleqTc5LrkXWP7I93je2N + eIvui3iL7ot4i+6LeIvui3iL7ot4i+6LeIvui/96AQD/eQ4D/4sNAfCZCQDapgQA1bIGANO+BwDNxRgA + xcUsDLzBOh6zvUUxqrlOQ6G1V1KZsV9gka1na4mqb3WCp3h9e6SChHSijopuoZ6PaqC0kmeg05JonuuR + a5nskG6V7I5wk+2McpDui3KQ7otykO6LcpDui3KQ7otykO6LcpDui/98AAD/fQwC/Y4JAN6dAgDVqgMA + 0LYEAM3CBADHyhQAv8opCbbHNxutxEIupMBLP5u8VE6SuVxcirZkZ4OzbHF7sHV5dK5/gW2si4dnq5uL + Yquyjl+r0o9gqOyOZKLtjWed7Yxpmu6La5bviWuW74lrlu+Ja5bviWuW74lrlu+Ja5bvif99AAD/gggB + 75MDANiiAADQrgIAy7oCAMbGAgDBzw0Auc8lB7DONBenyz8pnchIOpTFUUqMwllXhL9hYny9aWx0u3J0 + bbl8e2a4iYFgt5mFW7ewiFe40YlYte+JXK3viV+n74lhovCIZJ7wh2Se8IdknvCHZJ7wh2Se8IdknvCH + ZJ7wh/9/AAD/hwQA3ZgAANKmAADKswEAxL8AAL/KAwC51AgAsdYgBKnVMBOg0zskl9FFNY7OTUOFzFVQ + fcpdW3XJZmVux29tZ8Z6c2DGh3laxZd9VcaugFHH0YFSxfSBVLvzg1ez84NarfKDXKjzg1yo84NcqPOD + XKjzg1yo84NcqPODXKjzg/+BAADxjQAA1p4AAMysAADEuAAAvcQAALbOBACv2QgAqd0iA6HdMg6Z3Dod + j9tCLYbZSjx+2FJIdtZaUm/VY1tn1WxjYdR3aVrUhW5V1ZZyUNaudUzY0XZM1vN2Tsv2eVDC93tSu/d8 + VLT2fFS09nxUtPZ8VLT2fFS09nxUtPZ8VLT2fP+DAADdlAAAz6QAAMWyAAC9vgAAtsoBAK3TBQCm4xIA + n+QlBpfkMhGP5Dseh+RCK37jSTd2409Bb+NXSmjjYFJi42lYXON0XlbkgWJR5JFmTeamaUrnxWpI5+1p + SN74bErT+W9Ly/pxTcP7c03D+3NNw/tzTcP7c03D+3NNw/tzTcP7c/GJAADUnAAAx6wAAL65AAC2xQAA + rc8BAKPYBACc6hYBlOsmCI3sMRKF7Tkefe1AKXbtRzNu7U47Z+5UQmHuXEhb72VOVu9vUlHwe1ZM8Yla + R/KbXUP0tF9B9dlgQPP4YETm/WBF3/1jRtb9ZUbW/WVG1v1lRtb9ZUbW/WVG1v1lRtb9ZdyTAADLpQAA + wLMAALfBAACtzAAAotQAAJjiBQCR8hcCifQkCIL1LhF79jcbc/Y+JG33RCxm+EsyYPlROFv5WT1V+mFB + UPtqRUv8dElG/YBMQf6QTz7/pFE6/75TN//jVDf++1U88/5UQOn/VEDp/1RA6f9UQOn/VEDp/1RA6f9U + QOn/VM+eAADCrgAAuLwAAK3IAACi0QAAltkAAI3vBgCF+xUCffwfBnb+Kg5w/zIVaf86HGP/QCNd/0co + WP9NLFP/VDBO/1s0Sv9jN0X/bDpB/3Y9PP+DPzf/k0I0/6dEMf/BRS7/4UYs//xHMf//SDH//0gx//9I + Mf//SDH//0gx//9IMf//SMSpAAC5uAAAr8UAAKLPAACW1gAAid0AAID2BAB4/xACcf8aBWr/Iwhk/ywO + Xv80E1n/OxhU/0EcT/9HH0v/TSJH/1QlQ/9bJz7/Yyo6/2wsNv92LjH/gzEt/5MzKv+lNCf/ujYl/9U3 + I//zOCP/8zgj//M4I//zOCP/8zgj//M4I//zOLuzAACwwgAApM0AAJbUAACI2wAAfOAAAHP6AABr/woB + ZP8UA13/HQZY/yUIUv8sC03/Mg1J/zkPRf8/EkH/RRQ9/0sWOv9RGDb/WBoz/18cL/9oHiv/cx8m/38h + Iv+NIx//nSQd/64mG//FJxv/xScb/8UnG//FJxv/xScb/8UnG//FJ7K+AAClywAAl9MAAIjaAAB73wAA + buYAAGb/AABe/wIBV/8MAlD/FQRL/xwFRv8jB0H/Kgg9/y8JOf81CzX/Ogwy/z8ML/9EDSv/Sg4o/1EP + JP9ZECH/YhEd/2sSGv93Exf/ghQT/48VEf+fFhH/nxYR/58WEf+fFhH/nxYR/58WEf+fFqjIAACZ0QAA + idkAAHveAABt4wAAYO4AAFj/AABQ/wAASf8CAUP/CgI9/xIDOf8ZBDT/HwUw/yQGLf8pBin/LQcl/zEI + Iv82CB7/Owkb/0EJF/9IChP/TwsQ/1cLDP9gDAj/agwF/3QNAf9/DQH/fw0B/38NAf9/DQH/fw0B/38N + Af9/Df9ZEgP/Uh4F/0orCP9FNgv/SDoN/0tEEf9MUBf/S1wf/0doJv9DdSz/PoAw/zqMNP83ljf/NqA5 + /zSpOv8zsjz/Mrs9/zHFPf8xzz7/MNs+/zDmP/8v8D//L/o//y7/Pv4v/z77Mf899jf/PfM5/z7zOf8+ + 8zn/PvM5/z7zOf8+8zn/Pv9ZEQP/Ux4F/0srCP9IMwv/TDgN/09CEf9RThj/T1og/0xmJ/9Hci3/Q34y + /z+JNv87lDn/Op47/zinPf83sD7/Nrk//zXCQP81zUH/NNlB/zPkQf8z70H/M/lB/TP/Qfoz/0D3N/9A + 8Tv/Qe49/0LuPf9C7j3/Qu49/0LuPf9C7j3/Qv9aEQP/VB0F/0wqCP9MMQv/UTcN/1RBEf9VTBj/VFgh + /1FkKP9McC//SHs0/0SHOP9Akjv/Pps9/z2kP/87rUH/OrZC/znAQ/85ykP/ONZE/zfiRP037kT7N/hE + +Df/Q/c4/0PyPP9D7ED/RelB/0XpQf9F6UH/RelB/0XpQf9F6UH/Rf9bEAP/VR0F/00qCP9QLwv/VjUN + /1k/EP9aShn/WlYh/1ZhKf9SbTD/TXg2/0mEOv9Gjj3/Q5hA/0GhQv9AqkT/P7NF/z69Rv89yEf+PdNH + +zzgR/k87Ef2PPdH8zz/R/I+/0bsQf9I5kX/SeNG/0rjRv9K40b/SuNG/0rjRv9K40b/Sv9dEAL/VxwF + /08pCP9VLAr/XDMN/188EP9hRxn/X1Ii/11eKv9YajH/VHU4/1CAPP9MikD/SZVD/0eeRf5Gp0f8RbBJ + +0S5SvpDxEr4QtBL9kLeS/NB60vwQfZL7kP/SutE/0zkR/9N3Uv/T9pM/0/aTP9P2kz/T9pM/0/aTP9P + 2kz/T/9eDgL/WBsF/1EoCP9aKQr/YjEM/2Y6EP9oRBj/Zk8i/2NaK/9fZjP/W3E5/Vd8P/tThkP5UJBG + +E6aSfZMo0v1S6xN9Em2TvNJwU/ySM1P70jcT+tH6U/oSPVP50n/UOJK/1LaTv9T0lH/VM9S/1XPUv9V + z1L/Vc9S/1XPUv9Vz1L/Vf9fDQL/WhoF/1YlCP9gJgn/aC4L/2w3D/9uQRj/bkwh/2pWK/1mYjP5Ym07 + 9l54QfRagkbyV4xK8FSWTe5Sn0/tUahR7FCyUupPvVPpTspU507aVONO6FPgUPZU3k//V9ZR/1jPVP9a + yVb/WsZX/1rGV/9axlf/WsZX/1rGV/9axlf/Wv9hDQL/WxkF/1shB/9mJAj/biwK/3I0Df91Phb/dUgg + +3JTKvZtXTPyaWg772VzQuxhfkjpXYhN51uRUOZZm1PkV6RV4lavV+FVuljgVMdY3lTYWNpW6FfWVfZb + 01X/XctX/1/FWf9fwFv/YL1c/2C9XP9gvVz/YL1c/2C9XP9gvVz/YP9iDAL/XRkF/18eBv9sIgf/dCkJ + /3gxDP98OxT6fEUe9HlPKO91WTLrcGM752xvQ+RoeUrhZINP32GNU9xfl1faXaBZ2VyrW9Zat13UWsVe + 01nUX89b51/LWvZiyFr/Y8Fc/2S7Xv9ltmD/ZbRg/2W0YP9ltGD/ZbRg/2W0YP9ltGD/Zf9jCwL/XhgF + /2QbBv9xIAb/eSYH/34tCv2CNxH1gkEb7oBLJeh9VDDkeF8633RrQ9xvdUvYa39R1GiIV9JlklvPY5tf + zWGmYctgsWTJX79lyF7PZsVf42bBX/Rovl//abdi/2qyY/9qrmT/aaxl/2msZf9prGX/aaxl/2msZf9p + rGX/af9kCgL/YBcE/2gZBf91HgX/fiQG/4MqCPiHMw7viT0X6IhGIeKETyzdgFw32HtnQdN2cUzPcnpU + y26EWshrjWDGaZZkw2egZ8FlrGq/ZLlrvWPKbbpj3223ZPFus2T+bq5m/m6qZ/5upmj/baVp/22laf9t + pWn/baVp/22laf9tpWn/bf9lCgL/YRYE/2wYBP95HAT/giEE/YgnBvONMAvqjzkT449CHd2MTCfWh1g0 + 0IJjQst9bU3HeHZWw3R/Xb9xiGO8bpFouWyba7dqp260abRxsmjFcrBo2nOtaO9zqmn8c6Vr/HKibPxy + n2z9cZ5t/XCebf1wnm39cJ5t/XCebf1wnm39cP9mCQL/YhYE/3AWBP99GQP/hh4D+Y0jBO+SKwjmlTQP + 35Y9F9iTSSPQjVUzyohfQcWCaU2/fnJXu3p7X7d3hGW0c41rsHGXb65vonKrba91qGzAd6Zs1Xekbex3 + oW76d51v+nabb/t1mXD7c5hw/HOYcPxzmHD8c5hw/HOYcPxzmHD8c/9nCAL/YxUE/3MUA/+AFwL/iRsC + 9pEfAuuXJwXimy8K2pw5EdKYRiLLklIyxI1cQb6IZk25g29XtH93YLB8gGeseYltqHaTcaV0nnWicqt4 + n3G8ep1x0Xubcep7mXL4epZz+XiVc/l3k3P6dZNz+3WTc/t1k3P7dZNz+3WTc/t1k3P7df9oCAH/ZRME + /3YTAv+DFQH/jRcB8pUbAeebIQLeoCkG1qE2D86cRCDGl08xv5JaQLmNY02ziGxXroR0YKmBfWilfoZu + oXuPc515mniad6h7l3a4fZV1zn6Tduh+kXb2fJB393qPd/h5jnf5d413+naNd/p2jXf6do13+naNd/p2 + jXf6dv9pBwH/aBED/3kRAv+GEgH9kBMA75gWAOSgGwHbpiMC0qU0DsqhQh/CnE0vu5dXP7SSYEyujWlX + qIlyYKOGemifg4NvmoCMdJZ9l3mTfKR9j3q1f416y4CLeuaAinv1fop79nyJevd6iXr4eYl6+XiJevl4 + iXr5eIl6+XiJevl4iXr5eP9qBwH/ag4D/3wPAf+IDwD0kw4A65wPAOCkEgDWqh8BzqkyDMalPx2+oEsu + tptVPa+XXkupkmdWo45vYJ6Ld2iZiIBvlIWJdY+DlHqLgaF+iH+ygYV/yIKEf+SChH/1gIR+9n6Efvd8 + hH34eoR9+HmEffh5hH34eYR9+HmEffh5hH34ef9qBgH/bQwC/34NAfqLCwDolgkA26AHANmoCADSrRwA + yqwvC8GpPRu6pUkssqBTPKubXEmkl2RVnpNsX5iQdGiTjX1vjoqGdYmIkXuFhp5/gYWvgn6ExoN8hOOD + fYT0gX6D9X9+gvZ9f4D3e3+A+Hp/gPh6f4D4en+A+Hp/gPh6f4D4ev9rBgH/cAsC/4EKAPCOBwDbmQMA + 1qIFANSrBgDOsRgAxrAtCb2tOxm1qUcqraVROqagWkifnGJUmZlqXpOVcmeNknpuiJCDdYKOjnp+jJx/ + eousgneKw4R1iuGDdon0gXeH9X95hvZ9eoT3e3qE+Hp6hPh6eoT4enqE+Hp6hPh6eoT4ev9sBQH/dAkB + /4QHAOORAgDXnAIA0qYEAM+vBADKtBUAwbUqB7myORexrkUoqapON6GmV0Waol9Sk59nXI2cb2WHmXdt + gZaBc3yUi3l3k5h+cpGpgW+RwINtkd+DbpD0gXGN9X9yi/Z9dIn3e3WI93p1iPd6dYj3enWI93p1iPd6 + dYj3ev9tBAH/dwcB9YcDANuUAADTnwEAzakCAMmyAgDEuREAvbknBrS3NhSstEIlpLBMNJysVEKUqV1P + jaZkWYejbGKBoHVqe55+cXWciHdwmpV8a5qngGeZvoFlmd6BZpj0gGmU9X5skfZ9bo73e26N+Hpujfh6 + bo34em6N+Hpujfh6bo34ev9vAwH/ewQA54sAANaYAADOowAAyK0AAMS2AAC+vQsAt74kBK+9MxGnuj8h + nrdJMZazUj+PsFpLiK5iVoGraV96qXJndKd7bm6lhnRopJN4Y6OkfGCjvH5eo91+XqH2fWKc9nxkmPd7 + ZpX4emiT+Hlok/h5aJP4eWiT+Hlok/h5aJP4ef9wAgH/gAAA3ZAAANGdAADJqAAAw7EAAL26AAC3wgUA + scQfAqnDMA6hwTwdmL5GLJC8TzqIuVdGgbdfUHq1Z1l0s29hbrF4aGewg25irpFzXK6id1muunlWrtx5 + Vqz4eVqm+Hlcofl4X535d2Cb+ndgm/p3YJv6d2Cb+ndgm/p3YJv6d/9yAQHuhQAA1pUAAMuiAADErQAA + vbYAALe/AACvxwIAqcsZAKLKKwqayTgYkcdCJorFSzSCw1Q/e8FcSnS/ZFJtvmxaZ712YWG8gWZbu45r + Vrugb1K7uHFQvNxxT7r6clKy/HNUrPxzV6f8c1ik/HNYpPxzWKT8c1ik/HNYpPxzWKT8c/94AADfiwAA + 0JsAAManAAC+sgAAt7wAAK/EAACnzAQAoNEQAJrSJQaS0TMSitA+H4LPRyx7zVA3dMxYQW3LYElnymlR + YcpzV1vJflxWyYxhUcmeZE3Kt2ZLy9xnSsn5aEvB/2pNuv9rT7P/bFCw/2xQsP9sULD/bFCw/2xQsP9s + ULD/bPWAAADWkgAAyaEAAL+uAAC4uAAAr8IAAKbKAQCe0AQAldkJAJDbIAOK2y8Lgts6F3vaRCN02kwt + bdlVNmfZXT5h2GZFW9hwS1bYfFBR2YpUTNqcV0nbtVlH3NpZRdr2WkTT/15Gy/9gSMP/YknA/2JJwP9i + ScD/YknA/2JJwP9iScD/YuCJAADOmgAAwqkAALm0AACwvwAAp8gAAJ3OAACT1QQAjOIQAIbjIgSA5C8M + eeQ4FXLkQR5r5EkmZeVQLl/lWTRa5WI6VeVsP1Hmd0NM54RHSOiVSkTpqkxC6slNQOruTT7n/08/3/9S + QNb/VEHS/1VB0v9VQdL/VUHS/1VB0v9VQdL/VdSTAADFowAAu7AAALK8AACnxgAAnM0AAJLTAACI2gIA + gusTAXvsIQR17SwKb+42EmnvPhlj70YfXfBNJVjwVSpT8V0uT/JmMkvycDZG83w5QvSLPD71nT879rVB + OPjWQjb3+EI38v9COun/RDrm/0U65v9FOub/RTrm/0U65v9FOub/RcmdAAC9rAAAs7kAAKnEAACdzAAA + kdEAAIbYAAB84gEAdvUSAXD2HgNq9ygHZPgxDF/5ORFa+kEWVftIGlD7Tx5M/FciSP1fJUT+aCg//nIr + O/9/Ljf/jzA0/6EyMf+6NC7/2zUs//c2LP//Ni77/zYu+/82Lvv/Ni77/zYu+/82Lvv/Nr+oAAC1tgAA + qsIAAJ7KAACR0QAAhNYAAHncAABw7QAAav8NAWT/GQJe/yMFWf8rCFT/MwpP/zoNS/9BEEf/RxJD/04V + P/9WFzz/Xho4/2ccNP9yHi//fyEr/48jKf+hJCb/uCYk/9InIv/wKCH//Sgh//0oIf/9KCH//Sgh//0o + If/9KLeyAACswAAAn8kAAJHQAACE1QAAd9sAAGvgAABj9QAAXf8IAFf/EwFR/xwDTP8kBUj/KwZE/zII + QP84CTz/Pgs4/0QMNf9KDTH/UQ4u/1oQKv9jESb/bhIj/3sTH/+KFRz/mxca/60YGP/EGRf/0hkX/9IZ + F//SGRf/0hkX/9IZF//SGa69AAChyAAAk88AAITVAAB22wAAaeAAAF3lAABW/AAAUP8AAEr/CgFE/xMC + QP8bAzv/IQQ3/ygFNP8uBTD/MgYs/zcHKP89CCT/Qwkh/0oJHf9TChn/XAsV/2cMEf9zDQ3/gQ0K/44O + Cf+eDgj/pw8I/6cPCP+nDwj/pw8I/6cPCP+nD6PGAACVzgAAhdUAAHbbAABo4AAAW+UAAFDuAABI/wAA + Qv8AADz/AAA2/wgBMv8QAS7/FgIq/xwCJv8hAyL/JQMe/yoEGv8uBBf/NAUT/zoFD/9BBgr/SQYG/1IH + Av9cCAD/ZwgA/3IIAP9/CQD/hgkA/4YJAP+GCQD/hgkA/4YJAP+GCf9JFwP/QiMF/zgwB/87NAn/PTkK + /0BEDf8+Tw//PFsT/zlnGP82cx3/M38g/y+KI/8ulCX/LZ0n/yylKP8rrSn/KrUq/yq+Kv8pxyv/KNEr + /yjdK/8o5yv/J/Ir/if7K/sn/yr6KP8p+Sn/Kfko/yv5KP8r+Sj/K/ko/yv5KP8r+Sj/K/9KFgP/QyIF + /zkwB/8+Mgn/QTcK/0RCDf9DTRD/QVkT/z5lGf87cR7/N30i/zSIJf8ykif/MZsp/zCjKv8vqyv/LrMs + /y28LP8txS3/LM8t/yzbLf8s5i39K/Et+iv6Lfgr/yz3Lf8r9i3/LfYt/y72Lf8u9i3/LvYt/y72Lf8u + 9i3/Lv9LFgP/RCIF/zwuB/9CLwj/RjUK/0k/Df9JShD/R1cU/0RjGv9Bbx//PXoj/zmFJ/83jyn/Npgr + /zWhLf80qS7/M7Eu/zK5L/8ywzD/Mc0w/THZMPsw5TD4MPAw9jD5L/Qx/y/zMv8v8jH/MfAy/zLwMv8y + 8DL/MvAy/zLwMv8y8DL/Mv9NFQP/RSEF/0ArB/9GLAj/TDMK/089Df9PSBD/TlQV/0tgG/9HbCH/Q3cm + /0CCKf89jCz/PJUu/zqeMP85pjH+OK4y/Ti2Mvw3wDP7N8oz+DbWM/Y24zPzNu8z8Db5M+84/zLuN/80 + 7Tb/Nug6/zfoOv836Dr/N+g6/zfoOv836Dr/N/9OFAP/RyAF/0UoB/9MKAj/UzAJ/1Y6DP9WRBD/VVAW + /1JcHf9PaCP/S3Mo/0d+LP1EiC/7QpEx+kGaM/lAojT4P6o19j6zNvU9vTf0Pcc38j3TN+884jfsPO03 + 6j75Nug+/zjnPf865T3/PN5B/z3eQf893kH/Pd5B/z3eQf893kH/Pf9QEwP/SCAF/0okBv9TJgf/Wi4J + /103C/9dQQ//XEwW/1pYHf5WZCT7U28q+E96LvZMhDL0So018kiWN/FHnjjwRqc570WwOu1EuTvsRMQ7 + 60PRPOhD4DvkRO074kX5POFE/z/eRP9B2kX/QtJI/0PSSP9D0kj/Q9JI/0PSSP9D0kj/Q/9REwP/Sh8F + /08gBv9aIwb/YSsI/2QzCv9lPQ7/ZEgV/GFTHfdeXyX0Wmsr8Vd1MO5UgDXsUYk46k+SOulOmjznTaM+ + 5kysP+VLtj/jS8FA4krPQN9L30DcTO1A2Uv5Q9ZK/0bTSv9Hzkz/SMhO/0nITv9JyE7/SchO/0nITv9J + yE7/Sf9SEgL/TB4F/1QcBf9gIQX/ZygG/2swCf9sOQ37bEQU9WlPHfBlWiXsYWYs6V5xMuZbezfjWIU7 + 4VaOPuBVlkDeU59C3VOpQ9tSs0TaUb9E2FHNRdVR3kXRUe1HzlH6S8tQ/03JUP9Ow1L/Tr1U/0+9VP9P + vVT/T71U/0+9VP9PvVT/T/9UEQL/TR0F/1oZBP9mHgT/biUF/3IsB/xzNQv1cz8S7nFKG+ltVSTlaWEs + 4WZsM95jdznbYIA+2F2KQdVbkkXTWptH0VikSdBXrkvOV7pNzFbITctW2U7HV+pPxFb5UcFW/1O9V/9U + uFj/VLRa/1S0Wv9UtFr/VLRa/1S0Wv9UtFr/VP9VEQL/UhoE/18WBP9rHAP/cyEE/3goBfd6MQnvejsP + 6HlFGOJ1USHdcl0q2W5oM9RqcjvRZntBzmSERsthjUrJYJZNx16fUMVdqVLDXLVUwVvDVcBb1Fa9XOdW + ulv3WLdb/1mzXP9Zr17/Watf/1irX/9Yq1//WKtf/1irX/9Yq1//WP9WEAL/VhcE/2QVA/9wGQL/eB4C + /H0kBPKALAbpgTYM4oBAFNx9TR7WeVkp0HVkNMxxbj3IbXdExWqASsJoiE/AZZFSvWSaVrtipFi5YbBa + t2C+XLVgz1yzYORcsGD1Xq1g/16pYf9epmL/XaNj/1yjY/9co2P/XKNj/1yjY/9co2P/XP9XDwL/WRQD + /2gTAv90FgH/fBoB94IgAu2GJwTkhzAI3Yc7D9WESRvPgFUpyntgNMV3aj7Ac3NGvXB7TbpthFK3a4xW + tGmVWrJnn12vZqtfrWW5Yatky2KpZeBipmXzYqRl/2KhZv9hnmf/YZxo/1+caP9fnGj/X5xo/1+caP9f + nGj/X/9YDgL/XBED/2wQAf94EwH/gBYA84YaAeiLIQLfjioE2I44DNCKRhrJhVIow4FdNL59Zj+6eW9I + tXZ3T7JzgFSvcIhZrG6RXalsm2Gma6dkpGm1ZqJpx2egad1nnmnyZ5xq/2aZa/9ll2v/ZJVr/2KVa/9i + lWv/YpVr/2KVa/9ilWv/Yv9ZDgL/Xw4C/28OAf97EAD8hBEA74oUAOSPGgDbkyMB0pI1CsuPQxnEi08n + voZaNLiCYz+zfmxIr3t0UKt4fFandYVbpHONYKFxl2Seb6NnnG6xaZltw2uYbdprlm7wapRu/2mSb/9n + kW//ZpBv/2SQb/9kkG//ZJBv/2SQb/9kkG//ZP9aDQL/YgsC/3MMAf9+DADxhwwA6o0NAOCTEQDWlx8A + zpcyCceUQBe/j0wmuYtXM7OHYD6ug2lIqYBxUKV9eVeheoFdnXiKYpp2lGaXdKBplHOubJJywG2QctZu + jnLubY1z/2uMc/9pi3P/aIpy/2aKcv9minL/Zopy/2aKcv9minL/Zv9bDAL/ZQkB/3UJAPeBCADliQYA + 25EGANmXCADSmxwAypswCMKYPha7lEoktJBUMq6MXj6piGZIpIRuUJ+Bdlebf35el3yHY5N6kWeQeZxr + jXerbop2vXCIdtRwh3btb4d3/22Gd/9rhnb/aYV2/2iFdv9ohXb/aIV2/2iFdv9ohXb/aP9cDAL/aAgB + /3gHAO2DBADbjAIA1pQEANSaBgDOnhgAxp8tBr6cPBS3mEgjsJRSMKqQWz2kjGRHnolsUJqGdFeVhHxe + kYGEY41/jmiJfZpshnyob4N7unGBe9FygHvscYB7/m+Aev9sgHr/a4B5/2mAef9pgHn/aYB5/2mAef9p + gHn/af9dCwL/awYB/XoEAOKGAADYjwEA0pcDAM+dBADKohUAwqMqBbqgOhKznUYhrJlQL6WVWTufkWJG + mo5pT5SLcVeQiHlei4aCY4eEjGmDgpdtf4GlcHyAuHJ6gM9zeYDqcnqA/XB6fv9te33/bHx8/2p8fP9q + fHz/anx8/2p8fP9qfHz/av9eCwL/bgQA9X0BANyJAADUkgAAzpoBAMqhAgDFpRIAvqYoBLakNxCvoUQf + p51OLaGaVzmall9ElZNnTo+Qb1aKjnddhox/Y4GKiWh9iJRteYajcHWFtXNzhc10coXpcnOF/XB0g/5u + dYL/bHaA/2p2gP9qdoD/anaA/2p2gP9qdoD/av9fCgL/cQIA6oAAANiMAADQlgAAyp0AAMakAADBqQ0A + uqolA7KpNQ6qpkEdo6JLK5yfVTeWnF1CkJlkTIqWbFSFlHRbgJJ9YnuQhmd2jpJsco2gcG6MsnJsi8tz + a4vocmyL/XBuiP5ub4b/bHGE/2txhP9rcYT/a3GE/2txhP9rcYT/a/9iBwH/dQAA4IQAANSQAADMmQAA + xqEAAMGoAAC7rQkAta8hAq2uMgymqz8anqhJKJelUjSQolo/ip9iSYSdaVF/m3FZepl6X3WXhGVwlY9q + a5SdbmeTsHFlk8lyZJPncWSS/m9njv9uaYz/bGuK/2priv9qa4r/amuK/2priv9qa4r/av9mAwH5eQAA + 24gAAM+UAADHnQAAwaUAALusAAC1sgMAr7QdAaizLwmgsTwWma9GJJKsTzCLqVc7hKdfRX+lZ055o29V + c6F3XG6fgWJpnoxnZJ2ba2CcrW1dnMdvXJvmbl2a/m1flv9sYZP/a2SQ/2lkkP9pZJD/aWSQ/2lkkP9p + ZJD/af9rAADpfQAA1owAAMuYAADDogAAvKoAALaxAACutwAAqLoYAKK6KwaauDgSk7ZDH4y0TCyFsVQ2 + fq9cQHitZEhzrGxQbap0VmipflxiqIphXaeYZVmmq2hWpsVpVabmaVWk/mlXn/9pWpv/aFyX/2dcl/9n + XJf/Z1yX/2dcl/9nXJf/Z/9wAADfgwAA0JIAAMadAAC+pwAAtq8AAK+2AACnvAAAoMAQAJrBJQSTwDQO + jL4/GoW8SSV+u1EweLlZOXK3YUFstmlJZ7VyT2G0fFVcs4haV7KWXlOyqWFQssRiT7LmYU6w/mNPq/9j + Uqb/Y1Sh/2NUof9jVKH/Y1Sh/2NUof9jVKH/Y/V3AADYiQAAypgAAMCjAAC4rQAAsLUAAKi8AACfwQAA + l8cHAJLIHgGMyC4Jhcc6E37GRB54xU0occRWMWzDXjlmwmY/YcFvRlvAeUtWwIVQUcCUVE3AqFZKwMNY + ScDmV0e+/1lHuf9bSrP/XEyt/11Mrf9dTK3/XUyt/11Mrf9dTK3/XeJ/AADQkQAAw54AALqpAACyswAA + qbsAAKDBAACWxwAAjcwEAIfRFACC0ScEfNE1DHbQPxZw0Ekfas9SJ2XPWi5fzmM0Ws5sOlXOdj9QzoND + TM6SR0jPpklFz8JLRM/mSkLN/E1Ayv9QQsP/UkS8/1NEvP9TRLz/U0S8/1NEvP9TRLz/U9mIAADImQAA + vaYAALSwAACrugAAocEAAJfHAACNzAAAg9EEAHvZCQB32x8Bc9wuBm3cOg1o3EQVY9xNG17cViJZ3F8n + VN1oLFDdczFM3X81SN6OOETfoTpC4Ls8QOHgOz7e+T463f9BOtf/RDzO/0Y8zv9GPM7/RjzO/0Y8zv9G + PM7/Rs6SAADAogAAtq4AAK24AACiwAAAl8YAAIzLAACC0AAAeNYCAHHkDQBt5R8BaOYrBWPnNgpe5z8P + WehHFFToTxlQ6FgdTeliIUnqbCVF6ncoQeuFKz3sli467awwOO7KMTbv7jE16/8xM+r/NDTj/zc04/83 + NOP/NzTj/zc04/83NOP/N8SdAAC4qwAAr7YAAKTAAACYxgAAjMsAAIDQAAB21QAAbNwAAGfuDgBi8BwB + XfEoBFnxMQZU8jkKUPNBDEz0SQ9I9FESRPVaFUH2Yxg99m4bOfd6HjX4iSAy+ZsiL/uzJC380iUr/PMm + Kvn/Jir1/yYq9f8mKvX/Jir1/yYq9f8mKvX/JrunAACxtAAApr8AAJnGAACMzAAAf9AAAHTVAABp2wAA + YOQAAFv5CgBW+xcBUvwiAk39KwRJ/jIGRf46B0H/QAk+/0gLOv9PDDf/WA4z/2EPMP9tESz/ehMo/4oV + Jv+cFiP/sxgh/88ZIP/sGh7//xoe//8aHv//Gh7//xoe//8aHv//GrOxAACovQAAm8YAAI3MAAB/0QAA + ctUAAGbbAABc4AAAU+8AAE7/BABK/xAARf8aAUH/IgI9/ykDOv8wBDb/NgUy/zwGLv9DByv/Swgn/1MJ + I/9dCh//aAsb/3YMGP+GDRb/mA4U/6wOE//CDxH/4Q8R/+EPEf/hDxH/4Q8R/+EPEf/hD6q8AACdxQAA + jswAAIDRAABy1gAAZdwAAFnhAABO5QAARvgAAEH/AAA8/wcAOP8QADT/GAEw/x8BLP8lAij/KgIk/y8D + If81Ax3/PAQZ/0MFFf9MBRH/VgYM/2EHCP9vBwT/fggC/40JAP+dCQD/sgkA/7IJAP+yCQD/sgkA/7IJ + AP+yCZ/EAACRzAAAgdEAAHLYAABk3QAAVuIAAErmAABA7AAAOf8AADP/AAAu/wAAKv8EACb/CwAi/xIA + H/8YARr/HAEW/yEBEv8mAQ7/KwIK/zICBf85AwH/QgMA/0wDAP9XBAD/ZAQA/3EFAP9+BQD/jQUA/40F + AP+NBQD/jQUA/40FAP+NBf86HAP/MSgF/y0wBv8wMQb/MTcI/zJCCf8wTQv/LVoN/ypmDv8ncw//JX4S + /yOIFP8ikRb/IZoX/yGiGP8gqRj/ILEZ/x+4Gf8fwBr/Hska/x7UGv8e4Br+HeoZ/B30Gfod/Rn4HP8Y + 9x7/GPce/xr3Hv8a9x7/Gvce/xr3Hv8a9x7/Gv87HAP/MicF/zAuBv8zLwb/NjUI/zhACf82Swv/M1gN + /zBkD/8tcBH/KnsU/yiGFv8njxf/JpgZ/yWgGv8lpxr/JK8b/yS2G/8kvhz/I8gc/yPSHP0j3hz7Iukb + +CLzG/Yi/Br0I/8a9CP/G/Qj/x3zIv8e8yL/HvMi/x7zIv8e8yL/Hv88GwP/NCYF/zMrBf83Kwb/PDMH + /z4+Cf89SQv/OlUN/zZhD/80bRL/MXkV/y6DGP8tjBr/LJUb/yudHP8rpB3/Kqwd/yq0Hv8pvB7+KcYe + +ynQHvkp3B72KOge9CjyHvEo/B3wKf8d7yn/H+8o/yHvKP8i7yj/Iu8o/yLvKP8i7yj/Iv89GgP/NSUF + /zgnBf88KAb/QjEH/0U7Cf9ERgv/QlIO/z5eEP88ahT/OXUX/zaAGv80iRz+M5Ie/TKaH/wyoSD6Makh + +TGxIfgwuSH3MMMi9i/NIvMv2iLwL+ch7S/xIesw/CDqMP8j6i//Jegv/ybnMP8n5zD/J+cw/yfnMP8n + 5zD/J/8/GQP/NyUF/z0kBf9EJQX/Si4G/0w3CP9MQgv/Sk4O/0daEf9EZhb+QXEa+z98Hfk8hR/3O44h + 9jqWIvQ5niPzOKUk8jitJfE4tiXwN8Al7zfLJe032SXpN+Ul5jfxJOU3/CbjNv8p4Tf/K+A3/yzfN/8s + 3zf/LN83/yzfN/8s3zf/LP9BGQP/OiME/0MfBP9LIgX/UioG/1Q0CP9UPgv/UkkO/k9VEvpNYRf2Sm0c + 80d3H/FFgSLvQ4ok7kKSJuxBmifrQKIo6kCqKek/synnP70p5j/IKeU+1inhP+Qp3j/xKtw+/S3aPv8w + 2D7/MdY+/zLVPf8z1T3/M9U9/zPVPf8z1T3/M/9CGAP/Px8E/0gbBP9TIAT/WScF/1wwB/9cOgr9WkUN + 91dQEvJVXRjvUmgd609zIulNfSXnS4Yo5UqOKuRJliviSJ4s4UenLd9HsC3eR7ou3UbHLdxG1S3YR+Qt + 1EbyMdFG/TTPRf82zUX/OMxE/zjJRf85yUX/OclF/znJRf85yUX/Of9EFwP/RBsE/04WA/9aHAP/YCME + /2QsBf5kNQj2YkAM8GBLEetcVxjnWmMe41duI+BVeCjeU4Ir3FKKLdpQky/YT5sw1k6jMtVNrDPTTbc0 + 0kzDNdBM0TXNTeI2yk3xOcdM/jzFS/89w0v/PsBM/z6+Tf8/vk3/P75N/z++Tf8/vk3/P/9FFgP/SRcD + /1UUAv9gGgL/ZyAC/2onBPdrMAbvajsK6WhGEONlUhffY18e22BqJNhddCrUWn0u0liFMs9XjTXOVpY3 + zFSeOcpUpzvJU7I8x1K+PcVSzD7DU94+v1LvQL1S/UK6Uf9EuVH/RLVS/0SzU/9Es1P/RLNT/0SzU/9E + s1P/RP9HFQP/TRMC/1sSAv9mFgH/bBsB/HAiAvFyKwTpcjUI4nBADdxuThXWa1oe0mdlJs5kby3LYngz + yF+AN8ZdiDvEXJA+wluZQMBZokK+WaxEvFi5RbpXyEa5V9pGtVfsR7NX/EmxV/9Jr1f/SatY/0mqWf9J + qln/SapZ/0mqWf9Jqln/Sf9IFAL/URAC/2APAf9qEwH/cRcA9nYdAet4JQLjeS8F3Hg7CtV2SRTPclYe + ym5hKMZrajDCaHM2v2Z8O71khD+6YoxDuGCURrZfnUi0XqhKsl20TLBcw02uXNVNrFzpTqlc+k6nXP9O + pl3/TqNd/02hXv9NoV7/TaFe/02hXv9NoV7/Tf9JFAL/VQwC/2QMAf9vDgD/dREA8XoWAOZ9HQDdfycC + 1X83CM98RhPJeFIew3VdKL9xZjG7bm84t2x3PrRpf0OyZ4dHr2aQSq1kmU2rY6NPqWKwUadhv1KlYdFT + o2HnU6Bh+VOfYf9SnWL/Upti/1GaY/9QmmP/UJpj/1CaY/9QmmP/UP9LEwL/WAgB/2gJAP9yCgDzeQsA + 7H4OAOGBFADYhCEA0IQ0B8mCQhLDfk8evXpZKbh3YzK0dGw5sHF0QK1vfEWqbYRJp2uMTaVplVGiZ59T + oGasVp5mu1ecZc5YmmXlWJhm91eXZv9WlWb/VZNn/1STZ/9Tk2f/U5Nn/1OTZ/9Tk2f/U/9NEQL/XAYB + /2sHAPZ1BgDlfAUA24EFANqFCQDTiR0Ay4kxBcSHPxG+g0wduIBWKLJ8YDKueWk6qnZxQaZ0eEejcYBM + oHCIUJ1ukVObbJxXmGuoWZZquFuUastckmriW5Bq9lqPa/9Zjmv/V41r/1aNa/9VjWv/VY1r/1WNa/9V + jWv/Vf9PDwL/XwQA/24EAOt4AQDcgAEA1oUEANSJBgDOjRkAx44uBMCLPQ+5iEkcs4RUJ62BXTGpfmY6 + pHtuQaB5dUiddn1NmnSFUZdyjlWUcZlZkW+lXI5vtF6Mbshfim7gXolu9V2Jb/9biG//WYdv/1iHbv9X + h27/V4du/1eHbv9Xh27/V/9SDAL/YwIA+3EAAN97AADYgwAA0okCAM+NBADKkBYAw5IrBLuQOg61jEca + rolRJqmGWzGkgmM6n4BrQZt9c0iXe3pOlHmCUpB3i1eNdZZbinSiXodzsmCFcsVhhHLeYYNz9F+Cc/9d + gnP/W4Jy/1mCcv9YgnL/WIJy/1iCcv9YgnL/WP9UCgH/ZgAA83MAANx+AADUhgAAzowBAMuRAgDGlBIA + v5UoA7eUOA2wkUQZqo1PJaSKWDCfh2E5moRpQZaCcEiSgHhOjn6AU4p8iViHepNchHigX4F3r2F/d8Nj + fXbcYn1382B8d/9efXb/XH12/1t9df9afXX/Wn11/1p9df9afXX/Wv9XBwH/aAAA6XYAANmBAADQiQAA + y48AAMaUAADBmA4AupklArOYNQuslUIXppJNI6CPVi6ajF84lYlmQJGGbkeNhHVNiYJ9U4WAhliBf5Fc + fn2dYHt8rWJ4e8FkdnvbZHZ78mJ2e/9fd3r/XXh5/1x4ef9beHn/W3h5/1t4ef9beHn/W/9aBAH/awAA + 4XkAANWEAADNjAAAx5MAAMKYAAC9mwoAtp0iAa+cMwqomUAWopZLIpyTVC2WkVw2kY5kP4yLbEaHiXNN + g4d7Un+GhFd7hI5cd4KbYHSBqmNxgb5kcIDZZHCA8WJwgP9gcX//XnJ9/1xyff9bcn3/W3J9/1tyff9b + cn3/W/9dAAD7bgAA3XwAANGHAADJkAAAw5YAAL2bAAC4nwYAsqEfAKugMAiknj0TnZtIH5eZUSqRllo0 + jJNhPYeRaUSCj3FLfo15UXmLgVZ1ioxbcYiYX22HqGJrh7xkaYbWZGmG8GJphv9ga4T/XmyC/1xtgf9c + bYH/XG2B/1xtgf9cbYH/XP9gAADwcgAA2oAAAM6LAADFlAAAv5oAALmfAACzowIArKUbAKalLQafozsR + maFFHJKeTyeMnFcxh5pfOoGYZkJ9lm5IeJR2T3OSf1RvkYlZao+WXWeOpWBkjrpiYo3UYmKN8GFijP9f + ZIr/XmaI/1xmhv9bZob/W2aG/1tmhv9bZob/W/9kAADkdgAA1IQAAMmPAADBmAAAup8AALSkAACtqAAA + pqoWAKGrKQSaqTcOk6dCGY2lTCSHo1QugaFcNnyfZD53nWtFcptzS22afFFomIdWZJeTWmCWo11dlrhf + W5bTX1qV715blP9dXZH/XF+O/1tgjf9aYI3/WmCN/1pgjf9aYI3/Wv9pAADfewAAz4kAAMWUAAC9nQAA + tqMAAK6pAACmrQAAn7APAJqxJAKUsDMKja4/FYesSR+BqlEpe6lZMXanYTlxpmhAbKRxRmejektiooRR + XaGRVVmgoVhWoLZaVKDRWlOe71pTnf9aVJr/WVeW/1lYlP9YWJT/WFiU/1hYlP9YWJT/WPNvAADZgQAA + yo8AAMCZAAC4ogAAsKkAAKiuAACgswAAl7YHAJK3HgCNty8Gh7Y7EIC1RRl7s04idbJWK3CxXjJqr2Y5 + Za5uP2Ctd0RcrIJJV6uPTVOrn1FPq7RTTavQU02p71NMqP9UTKX/VE6g/1RQnv9UUJ7/VFCe/1RQnv9U + UJ7/VOR2AADRiAAAxJUAALufAACzqAAAq68AAKK0AACYuAAAjr0AAIm/FgCFvygDf782Cnm+QRN0vUob + brxSI2m7WipkumMwX7lrNlq5dDtWuH9AUbiMRE23nUdKuLJJR7jPSUe270lFtP9LRLL/TUat/01Hqv9O + R6r/Tkeq/05Hqv9OR6r/Ttx/AADKjwAAvpwAALWmAACtrgAApLUAAJq6AACQvgAAhsIAAH7HCgB6yB8A + dskvBXHIOwtsyEUSZ8dOGWLHVh9dxl8lWcZoKlTGcS9QxX00S8WKN0fFmzpExrA8QsbOPULF7z0/w/9A + PcH/Qj68/0Q/uf9EP7n/RD+5/0Q/uf9EP7n/RNKIAADClwAAuKMAAK+tAACmtQAAnLsAAJG/AACHwwAA + fcgAAHPOBABt0RIAa9MlAWfTMwRi0z4JXtNID1rTURRW01oZUdNjHk3TbSJJ03kmRdSHKULUmCw/1a4u + PdbNLjzU7C450v8yN9D/NTXP/zc2y/84Nsv/ODbL/zg2y/84Nsv/OMiSAAC7oAAAsqsAAKi0AACeuwAA + ksAAAIfFAAB8yQAAcs0AAGnTAgBg2ggAXt4bAFvfKgFX3zYEU+BACFDgSgtN4VMPSeFdEkbiZxZC4nIZ + P+N/HDzkjx455KMgNuW/IjXm4yIz4/0iMeL/JS7h/ygt4f8pLeH/KS3h/ykt4f8pLeH/Kb+cAAC0qQAA + q7MAAKC8AACUwQAAh8YAAHvKAABwzgAAZtMAAF3ZAABW5wkAU+kZAFDqJgFN6zACSes5BEXsQgZC7UoI + P+1TCjzuXQw572gPNfB0ETLwgxMv8ZUVLfOrFir0yRcp9ewYKPL/GCfv/xgm7/8ZJu//GSbv/xkm7/8Z + Ju//GbamAACtsgAAorsAAJXCAACIxwAAe8sAAG/PAABk1AAAWtkAAFDeAABL8wYAR/UUAET2HwBB9ygB + PvgxAjr4OAM3+UAENPpIBTD7UQYt+1sIKfxmCSb9cwoj/oMMIP+WDR7/rQ4c/8sOG//qDhr//w4Z//8O + Gf//Dhn//w4Z//8OGf//Dq+wAACkuwAAl8IAAInIAAB7zAAAbtEAAGLVAABW2wAATN8AAEPnAAA/+wAA + O/8MADf/FgA0/x8AMf8mAC7/LQEq/zQCJv87AiP/QwMf/0sEG/9WBBj/YgUU/3AGEP+ABw3/kwgL/6kI + Cv/BCAn/3wkI/+0JCP/tCQj/7QkI/+0JCP/tCaa6AACZwgAAi8kAAHzNAABu0gAAYNgAAFTcAABJ4QAA + PuUAADfyAAAy/wAALv8CACr/CwAn/xMAI/8aACD/IAAc/yYAGP8sART/MwEQ/zsBDP9EAgj/TgID/1sD + AP9pAwD/egQA/4sEAP+dBQD/sQUA/74FAP++BQD/vgUA/74FAP++BZvCAACNyQAAfc4AAG7UAABg2gAA + Ut8AAEXjAAA65wAAMOsAACn8AAAl/wAAIP8AABz/AAAY/wYAFf8MABD/EQAM/xYACP8cAAT/IgAA/ykA + AP8xAAD/OgEA/0UBAP9RAQD/YAIA/28CAP99AgD/jAIA/5UCAP+VAgD/lQIA/5UCAP+VAv8rIQP/Ii0E + /yMuBP8lLwX/IzUF/yNABv8gTAf/HVgI/xplCf8XcQn/FHwJ/xSGCf8Tjwn/E5cK/xOeCv8SpQv/EqwL + /xKzC/8Sugz/EcMM/xHNDP8R2Az9EeML+xDuC/gP9wv2Dv8K9RD/CvUQ/wv1EP8N9RD/DfUQ/w31EP8N + 9RD/Df8sIAP/Iy0E/yYrBP8oLAT/KjMF/yo+Bv8nSQf/JFYI/yFjCf8ebgr/G3oK/xqECv8ajQv/GpUM + /xmcDP8Zow3/GKoN/xixDf8YuA3/GMEN/hfKDfwX1Q35F+IN9xbtDfQW9gzyFv8M8Rf/DfEX/w7xFv8Q + 8Rb/EPEW/xDxFv8Q8Rb/EP8tIAP/JSsE/yooBP8sKQT/MTEF/zI8Bv8wRwf/LFMJ/ylfCv8mawv/I3cL + /yKBC/8iig3/IZIO/yGZDv4goA/9IKcP/CCuD/sfthD6H78Q+R/IEPce0xD0HuEP8h7sD+8d9Q7tH/8P + 7R7/Eewe/xLrHv8U6x7/FOse/xTrHv8U6x7/FP8uHwP/KScE/y8jBP8zJAT/OC4F/zo4Bv85RAf/NlAJ + /zJcCv8vaAz/LXMM/it9Dvwqhg/7KY4Q+SmWEfgonRH3KKQS9iirEvUnsxL0J7wS8yfGEvEn0RLuJt8S + 6ybqEegn9hHnJ/8U5ib/FuUn/xfjKP8Y4yj/GOMo/xjjKP8Y4yj/GP8wHgP/LiMD/zUfA/87IgP/QSoE + /0I0Bf9CQAf/P0wJ/zxYC/05ZA36N28O9zV5EPUzghLzM4sT8jKSFPAxmhXvMaEV7jCoFe0wsBbsMLkW + 6zDDFukvzxbnL90V4y/qFeEw9hfgL/8a3TD/HNww/x3bL/8e2y//Htsv/x7bL/8e2y//Hv8yHQP/NB4D + /zsaA/9DHwP/SScD/0swBP9KOwb/SEcJ+kVTC/VDXw7yQGoQ7z51Eu09fhXrPIcW6TuPF+g6lhjmOp0Z + 5TmlGeQ5rRnjObYZ4jnBGeA5zRneOd0Z2znqGtg49h7UOP8g0jj/ItE3/yPQN/8k0Df/JNA3/yTQN/8k + 0Df/JP8zHAP/ORoC/0EVAv9MGwL/USMC/1MsA/9TNgX4UUII8k5OC+1MWg7qSWYR50dwFeRGehfiRYMZ + 4ESLG99DkhzdQpoc3EKiHdtCqh3ZQrQd2EG/HtZBzB7UQdwf0EHqIc1A9yXKQP8nyT//Kcc//yrGP/8q + xj//KsY//yrGP/8qxj//Kv81GwP/PhUC/0kSAf9TGAH/WB8B/1snAvlbMQTxWTwH6lZHCuVUVA7hUmAT + 3lBrF9tPdRrZTX4c1kyGH9RLjiHSSpYi0UmdJM9JpiXOSK8mzEi6JstHxyfJR9YnxkjnKcNH9izARv8u + vkb/L71G/zC8Rf8wvEX/MLxF/zC8Rf8wvEX/MP83GgL/QxAC/08PAf9ZFAH/XxoA/GIiAfJiKwLqYTYF + 419BCN5dTw3ZW1wT1FlnGdFXcB7OVXkhzFOBJcpSiSfIUZApx1CYK8VPoSzDT6ouwk61L8BOwjC+TtIw + vE7kMblN9DO2Tf81tEz/NbNM/zWyTP81skz/NbJM/zWyTP81skz/Nf88FgL/SAwB/1UMAP9fEAD/ZRQA + 9mgbAOtpJAHjaC4C3Gc8BtVmSgzQY1cUzGFiG8heayHFXHQmw1t8KsBZhC2+WIsvvVeTMbtWnDO5VaU1 + t1SwNrZTvje0U844slPhOK9T8jqsU/87q1L/O6lS/zuoUv86qFL/OqhS/zqoUv86qFL/Ov9AEwL/TAcB + /1oIAP9kCgD7aQ0A8GwTAOVuGwDcbiYA1W83BM5tRgzJa1MVxGhdHcBlZyS9Y3ApumF4LrhffzG1Xoc0 + s1yPN7FblzmvWqE7rVmsPaxZuT6qWMo/qFjeP6VY8ECjWP9Aolj/QKFY/z+fWP8+n1j/Pp9Y/z6fWP8+ + n1j/Pv9DDwH/UQQA/18FAPloBQDsbQcA5XAJAN9yEADWdCAAznYzBMh0QgzCcU8VvW5aHrlsYyW1aWwr + smd0MK9lezWtY4M4q2KLO6hgkz6mX51ApF6oQqJdtUSgXcZFn13bRZxd7kWbXf5EmV3/RJld/0OXXv9C + l17/Qpde/0KXXv9Cl17/Qv9HDAH/VQIA/2IBAO1rAADdcQAA2XUEANd3BwDQehsAyXsvA8J6Pwu8d0sV + t3RWHrNxYCavb2gtq21wMqhqeDemaX87o2eHP6Flj0KeZJlEnGOkR5piskiYYsJJlmHXSpRi7EmTYv1I + kmL/R5Fi/0aQYv9FkGL/RZBi/0WQYv9FkGL/Rf9KCQH/WQAA+mYAAOBuAADZdQAA03oCANF8BQDLfhcA + xIAsAr1/PAq3fEgUsnlTHq13XSapdGUtpXJtM6JwdDmfbnw9nGyEQZlqjESXaZZHlGihSpJnrkyQZr9N + jmbUTY1m6k2MZvxLi2b/Sopn/0iJZv9HiWb/R4lm/0eJZv9HiWb/R/9MBQH/XAAA8WkAAN1yAADUeQAA + z34AAMyAAgDGgxQAv4UpArmDOQmzgUYTrX5QHah7WiakeWItoHZqNJx0cTmZcnk+lnGBQpNviUaQbpNK + jWyeTItrq0+JarxQh2rRUIZq6U+Fa/tOhGv/TIRr/0qEav9JhGr/SYRq/0mEav9JhGr/Sf9PAgD/XwAA + 52sAANl2AADRfQAAy4IAAMeEAADChxAAu4kmAbWINgiuhUMSqINOHKOAVyWffWAtm3toNJd5bzqTd3Y/ + kHV+Q410hkiKcpBLh3GbToRvqVGCb7pSgG7PU39u51J/b/tQfm//Tn5v/0x+bv9Kfm7/Sn5u/0p+bv9K + fm7/Sv9RAAD/YgAA4W8AANV5AADNgAAAx4UAAMOIAAC9igwAt4wjALCMNAeqikERpIdMG5+EVSSagl0s + ln9lM5J9bTqOfHQ/i3p7RId4hEiEdo1MgXWZUH50plJ8c7hUenLNVHly5lN5c/pReXP/T3ly/015cv9M + eXL/THly/0x5cv9MeXL/TP9UAAD5ZQAA3nIAANJ8AADKhAAAw4kAAL6MAAC5jggAs5AgAKyQMQamjj4P + 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 + AP/4BKK4AACVwAAAh8UAAHjKAABqzgAAXNMAAE/YAABE3AAAOeAAAC/kAAAn6gAAIvoAAB//AAAb/wUA + GP8NABT/FAAQ/xoADP8gAAj/KAAE/zAAAP86AAD/RQAA/1MAAP9iAQD/dAEA/4cBAP+cAQD/sAEA/8oC + AP/KAgD/ygIA/8oCAP/KApjAAACJxgAAessAAGvQAABc1QAATtsAAEHgAAA14wAAKucAACHqAAAa9QAA + Ff8AABH/AAAN/wAACf8AAAX/BQAA/woAAP8QAAD/FgAA/x0AAP8mAAD/MAAA/zwAAP9KAAD/WQAA/2sA + AP98AAD/jAAA/54AAP+eAAD/ngAA/54AAP+eAP8cJgL/FC0D/xgsA/8WLQP/FDID/xM+BP8QSgT/C1cE + /whjBf8EbwX/AnoE/wKDBP8CjAT/AZME/wGbA/8AoQP/AKgD/wCuA/8AtQL/AL0D/wDGAv8A0AL9ANwC + +gDnAvgA8QL1APoC8wD/AvMA/wLzAP8D8wD/A/MA/wPzAP8D8wD/A/8dJgL/GSsD/xwoA/8cKgP/HDED + /xs8BP8YSAT/FFQF/xFgBf8NbAX/CncF/wqBBf8KiQX/CZEE/wmYBP8JnwT/CKUE/wisA/8IswT+CLsE + /QfEBPsHzgP4B9oD9gbmA/MF8APwBPkC7wb/A+8H/wTvB/8F7wf/Bu8H/wbvB/8G7wf/Bv8eJQL/HScD + /yEkAv8hJQL/JS8D/yU5A/8iRQT/HlEF/xpdBf8XaQX/FXQG/xR+Bv8ThgX+E44F/ROVBfwSnAX7EqIF + +hKpBfkSsAX4ErgF9xHBBfURywXzEdgF8BDlBO0Q7wTrEPoE6hH/BukR/wfoEv8I5xP/CecT/wnnE/8J + 5xP/Cf8gJAL/IiMC/yYgAv8pIgL/LiwC/y82A/8sQQT/KE0F/yVZBf8iZQb+H3AG+x56Bvkegwf3HYsG + 9h2SBvUdmQfzHZ8H8hymB/EcrQfwHLUH7xy/B+4cyQfsG9YH6RvkBuYb7wbkHPoI4xz/CuEd/wvgHf8M + 3x3/Dd8d/w3fHf8N3x3/Df8iJAL/Jx4C/ysaAv8yHgL/NygC/zgyA/83PQT/M0kF/jBVBvktYQf2K2wH + 8yl2CPEofwjvKIcI7iiOCOwnlQnrJ5wJ6iejCeknqwnoJ7MJ5ya8CeUmxwnkJtQJ4SbjCN4m8ArcJvsN + 2Sf/D9gn/xDWJ/8R1if/EtYn/xLWJ/8S1if/Ev8lIQL/LRkC/zIUAf87GgH/QCMB/0EtAv9AOAP8PkQE + 9jpQBvE4XAfuNmcI6zRyCegzewrmM4MK5TKLC+MykgziMpkM4TKgDOAxqAzfMbAM3TG6DNwxxgzbMdQM + 1zHjDdQx8BDQMfwTzjH/Fc0w/xbMMP8XzDD/F8ww/xfMMP8XzDD/F/8qHAL/MhMB/zoRAf9DFwH/SB8B + /0knAftIMgLzRj4D7URKBelBVwflQGIJ4j5tC98+dwzdPX8N2z2HDto8jg/YPJYP1judENU7pRHUO60R + 0jq3EtE6wxLPOtATzTvhE8k67xfGOvwaxDn/G8M5/xzBOP8dwTj/HcE4/x3BOP8dwTj/Hf8vFwL/OA0B + /0INAP9LEgD/TxkA/lEiAPNQLAHrTjcC5UxEBOBKUQfcSl0J2UhoDNVHcg/TRnoR0UaCE89FiRXNRJEW + zESYF8pDoBjJQ6gZx0OyGsZCvhvEQswbwkLdG79C7R68QfsgukH/IrhA/yO3QP8jt0D/I7dA/yO3QP8j + t0D/I/8zEwH/PQgA/0kJAP9RDQD/VhMA9lcaAOxXJADkVi8B3VU9A9hUSwbTU1gLz1JjD8xQbRPJT3UW + x059GcVNhBvDTIsdwUuTHsBLmyC+SqMhvUqtIrtJuSO6ScgjuEnaI7VI6iWySPknsEj/KK5H/yitR/8o + rUf/KK1H/yitR/8orUf/KP84DgH/QgMA/08FAP9XCAD4WwsA710RAOVdGgDcXCYA1V04As9dRwfKXFMM + xlpeEsNYaBfAV3AbvVV4HrtUfyC5U4cjuFKOJbZRlia0UJ8oslCpKbFPtSqvT8Qrrk7VK6tO6CyoTvgt + pk7/LqVO/y6kTf8tpE3/LaRN/y2kTf8tpE3/Lf88CgH/RwAA/1QBAPVcAgDnYAMA4WEHAN5hDgDVYyAA + zmUzAchlQgfDY08NvmFaFLtfYxm4XmwetVx0IrNbeyWwWYInrliKKq1XkiyrVpouqVWlL6dVsTGlVMAx + pFTRMqFU5TKfVPYznVT/M5xT/zKcU/8xm1P/MZtT/zGbU/8xm1P/Mf8/BgD/TAAA/FkAAOZgAADcZQAA + 12gCANVnBwDOahsAyGwvAcFsPga8aksOuGhWFbRmXxuwZGggrWJwJKthdyioX34rpl6GLqRdjjGiXJYz + oFuhNZ5arTacWbw3m1nOOJlZ4ziXWfU3lVn/N5RZ/zaUWf81k1n/NZNZ/zWTWf81k1n/Nf9DAgD/UAAA + 8lwAAN9lAADWawAA0W4AAM5uAwDJcBYAwnIrAbxyOwa2cEgNsW5TFa1sXByqamQhpmhsJqRmdCqhZXsu + n2OCMZxiijSaYZM3mGCdOZZfqTuUXrg8kl3LPJBd4TyPXvQ7jl7/Oo1e/zmMXv84jF7/N4xe/zeMXv83 + jF7/N/9GAAD/VAAA5mAAANpqAADScAAAzHMAAMlzAQDDdRIAvXcnALd3NwWxdUQNrHNPFahxWRykb2Ei + oG1pJ51rcCybangwmGh/M5VnhzeTZZA6kWSaPI5jpj6MY7U/imLIQIli30CIYvI/h2L/PYZi/zyGYv86 + hmL/OoZi/zqGYv86hmL/Ov9IAAD+WAAA4mQAANZuAADOdAAAyHcAAMN4AAC+eQ4AuHwkALJ8NAWsekIM + p3hNFKN2VhyfdF8im3JmKJhwbi2VbnUxkm18NY9rhDiNao08immXPohopEGFZ7NCg2bGQ4Jm3UOBZvFB + gGb/P4Bm/z6AZv88gGb/PIBm/zyAZv88gGb/PP9LAAD2WgAA32gAANNxAADKeAAAxHsAAL99AAC6fQoA + tIAgAK6AMgSofz8Lo31KE556VBuaeFwilnZkKJN1ay2Pc3IyjHF6NolwgjqHboo9hG2VQIFsoUN/a7BE + fWvDRXtq20V7avBDe2r/QXpq/z96av8+e2r/PXtq/z17av89e2r/Pf9NAADtXQAA22sAAM91AADHewAA + wH8AALuBAAC1gQYAr4MdAKqELwOkgzwKn4FIEpp/URqVfVohkXtiJ455aS2Kd3Ayh3Z3NoR0fzqBc4g+ + fnGSQXtwn0R5b65Gd2/BR3Vu2Ud1bvBFdW7/Q3Vu/0F1bv8/dW7/PnVu/z51bv8+dW7/Pv9QAADmYQAA + 2G8AAMx4AADEfwAAvYMAALeFAACxhQIAq4cZAKWILAKghzoJmoVFEZWDTxmRgVggjX9fJ4l9ZyyGfG4x + gnp1Nn95fTp8d4Y+eXaQQnZ1nUVzdKxHcXO/SG9z2Ehvc+9Gb3L/RHBy/0Jwcv9AcHL/P3By/z9wcv8/ + cHL/P/9UAADjZQAA1HIAAMl8AADAggAAuYcAALOJAACsiQAAposWAKGMKQGcizcHlopDD5GITReNhlUf + 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 + dsgAAGfNAABY0gAAStcAADzcAAAw4AAAJeQAABvnAAAS6QAACewAAAT6AAAB/wAAAP8AAAD/AAAA/wAA + AP8DAAD/CQAA/xIAAP8aAAD/JQAA/zEAAP9AAAD/UQAA/2UAAP94AAD/iwAA/50AAP+mAAD/pgAA/6YA + AP+mAP8KKgL/CikC/wsnAv8GKQH/Ai8C/wA7Av8ASAL/AFUC/wBhAv8AbQH/AHcB/wCBAf8AiQH/AJAB + /wCXAP8AnQD/AKMA/wCpAP4AsAD9ALcA+wC/APkAyQD3ANMA9ADgAPMA7ADyAPUA8gD9APEA/wDxAP8A + 8gD/APIA/wDyAP8A8gD/AP8MKgL/ECYC/xEkAf8NJQH/DC4B/wo5Av8GRQL/AlIC/wBeAv8AagL/AHUB + /wB+Af8AhgH/AI0B/wCUAf8AmwH+AKEA/ACnAPsArgD5ALUA9wC9APUAxgDzANEA8QDfAO8A6gDuAPQA + 7QD+AO0A/wDtAP8A7AD/AOwA/wDsAP8A7AD/AP8PKQL/FSIB/xYfAf8VIQH/GCsB/xY2Af8SQgL/DU4C + /wlbAv8GZgL/A3EC/wN7Av4DgwH8AooB+gKRAfkBmAH4AZ4B9wCkAfYAqwD1ALIA8wC7APEAxADwAM8A + 7gDeAOsA6QDoAPQA5wD/AOcA/wHlAv8C5AT/AuQE/wLkBP8C5AT/Av8VJQL/Gh0B/xwZAf8fHgH/IygB + /yIzAf8ePgH/GkoC/xZXAv4TYgL7EG0C+BB3AvYPfwL0DocC8w6OAvEOlAHwDZsB7w2hAe4NqAHtDK8B + 7Ay4AeoMwgHpC84B5grcAOMK6QDhDPUB4A3/At0Q/wPcEf8E3BH/BNwR/wTcEf8E3BH/BP8aHwH/IBgB + /yEUAf8oGgD/LCMB/ywuAf8pOgH/JUUC+iJSAvYfXgLyHWkC7xxzAu0cewLrG4MC6huKAugbkQLnG5gC + 5hqeAuUapQLkGq0C4xq2AuEawALgGc0B3hncAdsa6QLYG/YE1B3/BtMd/wfSHP8I0Rz/CNEc/wjRHP8I + 0Rz/CP8gGwH/JRIB/yoPAP8xFgD/NR8A/zUpAP80NAH3MUAB8S1NAu0rWQLpKmQD5iluA+QodwPiKH8D + 4CiHA98ojgPeJ5QD3CebA9snogPaJ6sD2Se0A9cnvwPVJssE0yfbBNAn6QbMKPYJyij/Csko/wzIKP8N + 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 + dYBsJ3F/dCxufnwwa32GM2d7kjdkeqA5YnqyO2B5xztfeeI6YHj2OGB3/zdgd/81YXf/NGF3/zRhd/80 + YXf/NOdaAADVbAAAx3gAAL2AAAC0hgAArIoAAKOKAACaigAAlIwGAI+NGwCLjiwBh404BYKMQwt+i0wR + eopUF3aJWxxzh2Mhb4ZqJWyFcilohHouZYOEMWGCkDVegZ43XICwOVp/xjpZf+E5WX72N1l9/zZaff81 + Wnz/NFp8/zRafP80Wnz/NOJgAADQcQAAw30AALmFAACxiwAAqI4AAJ6OAACUjwAAjZEAAIiSFQCFkycA + gZM0A32SPwh5kUkOdZBRE3GPWBltjmAdao1nImaMbyZji3gqX4qCLluJjjJYiJw0VYeuNlOHxDdShuA2 + UoX1NVOE/zRTg/8zU4L/M1OC/zNTgv8zU4L/M91nAADLdwAAv4IAALWKAACtkAAApJIAAJmTAACPlAAA + hpcAAIGYDgB9mSEAepkvAnaZOwZymEUKbpdND2uWVRRnll0ZZJVkHWCUbCFck3UmWZJ/KVWRiy1RkJow + T5CsMU2PwjJMj98yS431MkuM/zFLi/8xTIr/MEyK/zBMiv8wTIr/MNZuAADGfQAAuocAALGPAACplQAA + n5cAAJSYAACKmgAAfp0AAHmfBQB1oBkAcqApAG+gNgNroEAGZ59JC2SfUQ9gnlkTXZ1hF1mcaRtWnHIf + Upt9I06aiSZLmpcpSJmpK0aZwStFmN4rRJb1LESV/yxElP8tRJP/LEST/yxEk/8sRJP/LM92AADAgwAA + tY4AAK2VAAClmwAAmZwAAI6eAACEoAAAeaMAAG+mAABqpxAAZ6ghAGWoLwBiqDoCX6hEBVyoTQlZp1UM + VqddEFKmZhRPpm8XS6V6G0ilhh5EpJUhQaSnIj+kvyM+o90iPaH0JDyf/yU8nv8mO53/Jzud/yc7nf8n + O53/J8h+AAC6iwAAsJQAAKicAACfoQAAk6IAAIikAAB9pwAAc6oAAGetAABfsAMAW7EWAFmxJQBXsjIA + VbI9AVKyRwNQslAGTbFYCEqxYQtHsWsORLF2EUCwgxQ9sJIWO7ClGDiwvBk3sNsYNq30GjWs/xw0qv8e + M6n/HzOp/x8zqf8fM6n/H8CHAAC0kwAArJwAAKOjAACZqAAAjKkAAIGsAAB2rwAAa7IAAGC0AABUtwAA + TboHAEq7GABIuyYAR7wyAEW8PQBEvUcBQr1RAj+9WwQ9vWYGOr1xCDe9fgo1vY4MMr2hDTC9uQ4vvtkN + Lrv0Dyy5/xIruP8TKrf/FSq3/xUqt/8VKrf/FbmQAACvmwAAp6MAAJ2qAACRrwAAhbIAAHm0AABttgAA + YbgAAFa7AABMvgAAQsIAADnFBgA2xxUANcciADTILgAyyDoAMclFADDJUAAvylwALcppASvLdwIpy4cD + J8ybBCXMtAQjzdUEI8ryBiHI/wggx/8JH8b/Ch/G/wofxv8KH8b/CrKaAACpowAAoKsAAJSxAACHtQAA + ercAAG66AABivAAAVr8AAEvCAABBxQAAN8kAAC7NAAAm0AQAINMNAB7UGgAd1ScAHNYyABvXPwAa2EwA + GdlaABjaagAX23sAFdyQABTdqQAT3skAEtztABLb/wER2v8CEdj/AxHY/wMR2P8DEdj/A6ujAACirAAA + l7MAAIq3AAB8uwAAbr0AAGLAAABVwwAASsYAAD/KAAA1zQAAK9AAACPUAAAa2AAAE9sCABDiDAAN4xgA + DOQjAArlLgAI5jsAB+dIAAToWAAD6WkAAel9AADqlAAA6rAAAOrVAADq9wAA6v8AAOr/AADq/wAA6v8A + AOr/AKWsAACZtAAAjLkAAH69AABwwAAAYsQAAFTHAABIygAAPM4AADLRAAAo1QAAH9kAABbcAAAO3wAA + B+QAAATwAgAB8AsAAPAVAADwHwAA8SkAAPE1AADyRAAA81QAAPRnAAD0fQAA9JUAAPWyAAD20wAA9vAA + APf/AAD3/wAA9/8AAPf/AJy0AACOuwAAgL8AAHHDAABixwAAVMsAAEbPAAA60wAALtcAACTbAAAa3gAA + EeEAAAjjAAAA5gAAAO8AAAD4AAAA+AAAAPgFAAD4DgAA+RcAAPoiAAD7LwAA/D0AAP5PAAD/YwAA/3oA + AP+RAAD/qgAA/8MAAP/dAAD/3QAA/90AAP/dAJG8AACCwQAAc8UAAGPKAABUzgAARdMAADjYAAAr3AAA + IOAAABXjAAAL5gAAAugAAADqAAAA7wAAAPkAAAD/AAAA/wAAAP8AAAD/AAAA/wUAAP8OAAD/GQAA/ycA + AP82AAD/SAAA/14AAP9zAAD/iAAA/5oAAP+sAAD/rAAA/6wAAP+sAP8AKgH/ACUB/wAjAf8AJAD/AC0A + /wA4AP8ARQD/AFMA/wBfAP8AawD/AHUA/wB+AP8AhgD/AIwA/gCSAPwAmQD6AJ4A+ACkAPcAqgD3ALEA + 9gC5APUAwgD0AM0A9ADaAPMA5gDyAPEA8gD8APEA/wDvAP8A7gD/AO4A/wDuAP8A7gD/AP8CJwH/BiEB + /wQfAf8AIAD/ACoA/wA2AP8AQgD/AE8A/wBcAP8AZwD/AHIA/wB7AP4AgwD8AIkA+gCQAPcAlgD2AJwA + 9ACiAPIAqADyAK8A8QC2APAAvwDvAMoA7gDWAO0A4wDsAPAA7AD5AOsA/wDpAP8A6AD/AOgA/wDoAP8A + 6AD/AP8IIwH/DB0B/woaAP8IHgD/CCcA/wQzAP8APgD/AEsA/wBYAP8AZAD/AG4A/QB3APkAfwD3AIYA + 9QCMAPIAkwDwAJkA7gCfAO0ApQDsAKwA6wC0AOoAvQDoAMcA5wDTAOYA4gDlAO4A5AD3AOQA/wDhAP8A + 4AD/AOAA/wDgAP8A4AD/AP8PHgH/ERgA/xAVAP8TGwD/FSUA/xIvAP8NOgD/CEcA/wRTAPsAXwD3AGoA + 9QBzAPMAewDxAIMA7wCJAO0AkADrAJYA6QCcAOcAogDlAKkA5ACxAOMAuwDhAMUA4ADSAN8A4QDeAOwA + 3AD6ANkA/wDYAP8A2AD/ANgA/wDYAP8A2AD/AP8UGQH/FxIA/xcOAP8dFwD/ICAA/x4rAP8aNgD8FUIA + 9hJOAPIOWgDuDGUA6wxvAOkLdwDnC38A5gqGAOQKjADjCpIA4gmZAOEJnwDfCKcA3QivANwIuQDaCMUA + 2QfSANYI4gDTC/AA0A78Ac8Q/wHOEP8CzRD/As0Q/wLNEP8CzRD/Av8ZFAD/HAsA/yAKAP8nEQD/KRoA + /ygkAPolMADzITwA7R5IAOgcVQDlGmAA4hpqAN8acwDdGnsA3BqCANoZiQDZGY8A2BmWANYZnQDUGqQA + 0xqtANIatwDQGsMAzxrQAMwb4QHIHe8Cxh78A8Qe/wTDHv8Fwh7/BcIe/wXCHv8Fwh7/Bf8eDQD/IQQA + /yoFAP8wCwD/MRMA+zAcAPEtKADpKjQA4yhCAN8nTgDbJ1oA2CdlANQobgDSKHYA0Sl+Ac8phAHOKYsB + zCmSAsspmQLKKaACyCmpA8cpswPFKb8DxCnNA8Eq3gS+Ku0Guyr7B7kq/wm4Kf8Jtyn/Crcp/wq3Kf8K + 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 + KcAZACjAJQAnwTAAJsE7ACXCRgAjwlIAIsNfACHDbQAfxH0AHsSQABzEpwEaxcMBGsTmARnC/AIYwP8E + GL//BRi//wUYv/8FGL//Ba6ZAACmogAAnKkAAJCuAACDsQAAdrMAAGq1AABdtwAAUbkAAEa8AAA7vwAA + McIAACjFAAAfyAAAFssFABLNEAAQzhwAD84oAA7PNAAMz0EAC9BQAArRXwAJ0XAACNKDAAbSmQAF07UA + BNPYAATT9gAF0f8ABtD/AQbP/wEGz/8BBs//AaiiAACfqgAAk7AAAIa0AAB4twAAarkAAF28AABRvgAA + RcEAADrEAAAvxwAAJcoAABzNAAAU0AAAC9MAAAPWAgAA1w4AANgZAADZJQAA2zEAANw+AADdTgAA318A + AOBxAADghgAA4Z8AAOK8AADj3wAA4/cAAOP/AADj/wAA4/8AAOP/AKGqAACWsQAAiLYAAHq6AABsvQAA + XsAAAFDDAABDxgAAOMkAACzMAAAizwAAGNIAABDVAAAH2QAAANsAAADeAAAA3wEAAOEKAADiFQAA5CAA + AOYsAADoOgAA60oAAO1dAADucQAA74gAAPChAADxvQAA8dwAAPLzAADy9wAA8vcAAPL3AJiyAACLuAAA + fbwAAG7AAABfwwAAUMcAAELKAAA1zgAAKdIAAB7VAAAU2QAACtwAAAHfAAAA4QAAAOMAAADlAAAA5wAA + AOkAAADrAwAA7Q0AAPAZAADyJgAA9TUAAPlGAAD7WgAA/HAAAP2HAAD+ngAA/7UAAP/OAAD/1AAA/9QA + AP/UAI25AAB/vgAAcMIAAGDHAABQywAAQc8AADTTAAAn2AAAG9wAABDfAAAF4gAAAOQAAADmAAAA6AAA + AOoAAADsAAAA7gAAAPEAAADzAAAA9gAAAPgEAAD7EQAA/h8AAP8vAAD/QQAA/1YAAP9sAAD/gQAA/5QA + AP+nAAD/qwAA/6sAAP+rAP8AJQH/ACAA/wAeAP8AIAD/ACkA/wA2AP8AQwD/AFAA/wBcAP8AaAD/AHEA + /gB6APwAggD7AIgA+gCOAPkAlAD5AJoA+ACgAPcApgD2AKwA9gC0APUAvQD0AMcA8wDTAPEA4gDvAO4A + 7gD4AO4A/wDuAP8A7gD/AO4A/wDuAP8A7gD/AP8AIgD/AB0A/wAaAP8AHAD/ACYA/wAzAP8APwD/AE0A + /wBZAP8AZAD9AG4A+QB3APcAfwD1AIUA9ACLAPQAkQDzAJcA8gCdAPEAowDwAKkA8ACxAO8AuQDuAMQA + 7ADPAOoA3gDoAOoA5wD1AOcA/wDnAP8A5gD/AOYA/wDmAP8A5gD/AP8AHQD/ARkA/wAWAP8AGgD/ACMA + /wAvAP8AOwD/AEkA/wBVAPwAYAD3AGoA8wBzAPEAewDvAIIA7gCIAO0AjgDsAJQA6wCZAOoAnwDpAKYA + 6ACtAOcAtgDmAMAA5QDMAOMA2wDhAOcA4AD0AN8A/QDeAP8A3gD/AN4A/wDeAP8A3gD/AP8HGQD/BhMA + /wEOAP8GFgD/BCAA/wAqAP8ANwD/AEMA+wBQAPUAXADwAGYA7ABvAOkAdwDoAH4A5gCEAOUAigDkAJAA + 4wCWAOIAnADhAKMA4ACqAN8AswDdAL0A3ADJANoA1gDYAOYA1QDxANQA+wDUAP8A0wD/ANMA/wDTAP8A + 0wD/AP8MFAD/CwwA/wsJAP8REQD/EhsA/w0lAP8HMQD4Aj4A8gBKAO4AVgDpAGEA5ABqAOIAcwDgAHoA + 3gCBAN0AhwDcAI0A2wCTANkAmQDYAKAA1gCnANUAsADTALsA0QDHANAA1QDOAOQAzADxAMoA/gDJAP8A + yAH/AMcB/wDHAf8AxwH/AP8SDQD/EQMA/xcEAP8bCwD/GxUA/xkfAPUTKgDuDjcA6AtEAOMJUADgCFsA + 3AhlANkIbgDXCXYA1Ql9ANQJgwDSCokA0QqPANAKlgDOCp0AzQqlAMwLrgDKC7kAyQvHAMcL1gDEDucA + whD2AL8S/wC+Ev8BvRL/Ab0S/wG9Ev8BvRL/Af8WBgD/FwAA/yAAAP8kBAD/JAwA9SEWAOsdIgDkGC8A + 3hY8ANkWSQDUF1YA0RlgAM8aaQDNG3EAyxx4AMocfwDIHYUAxx2MAMYekgDEHpoAwx6iAMEeqwDAHrcA + vh7EAL0e1AC6H+UBtyD0ArUg/wOzIP8DsyD/A7If/wSyH/8Esh//BP8bAAD/IAAA/ykAAPcsAADuKwIA + 6ycKAOIiFgDaICQA0yM1AM4mQwDKKFAAxypbAMUrZADCLGwAwSx0AL8sewG+LIEBvC2HAbstjgK6LJYC + uCyeArcspwK1LLMDtCzBA7Is0AOvLOMErSzyBass/wapK/8HqCv/B6gr/weoK/8HqCv/B/8gAAD/KAAA + 9jAAAOQ0AADeNgAA2jIBANgpCQDQLR0AyjEvAMU0PgDBNksAvjdWALs4YAG5OGgCtzhvA7U4dgO0OH0E + sjiDBbE4igWvN5EGrjeaBqw3pAerN68HqTa9CKg2zQilNuAJozbxCqE1/wufNf8LnjT/C540/wueNP8L + njT/C/8kAAD/LwAA5zgAAN1AAADVQgAA0EAAAM05BADIORcAwT0pALxAOQC4QkYAtUJRAbJCWwOwQmME + rkJrBaxCcgaqQXgHqUF/CadBhgmmQI0KpECWC6I/oAyhP6sNnz+5DZ4+yg6cPt4OmT7vD5c+/Q+WPf8P + lT3/D5U9/w+VPf8PlT3/D/8oAADyNQAA4kIAANZJAADOTAAAyEsAAMVGAADARBEAuUckALRJNACwS0IA + rUtNAqpLVwSnS18GpUpnCKNKbgmiSXQLoEl7DJ5Igg6dSIoPm0eSEJlHnBGYRqgSlka2E5RFxxOTRdsT + kEXtFI9F/ROORP8TjUT/Eo1E/xKNRP8SjUT/Ev8uAADqPAAA3UkAANFRAADIVQAAwlQAAL5PAAC5TQsA + sk8fAK5SMACpUz4BplNJA6NTUwWgUlsInlJjCpxRagyaUHEOmFB3EJZPfhGVToYTk06PFJFNmRaPTKQX + jUyyGIxLxBiKS9gYiEvsGIdL/BeGSv8WhUr/FoVK/xWFSv8VhUr/Ff8yAADlQwAA2FAAAMxYAADDXAAA + vVwAALdXAACyVAYArFYbAKdZLACjWjoBoFpGA51ZUAaaWVgJl1hgC5VXZw6TVm0QkVZ0Eo9VexSNVIMW + i1OMGIlSlhmHUqEbhVGwG4RRwRyCUNUcgVDqG4BQ+xp/UP8Zf0//GH5P/xh+T/8Yfk//GPU3AADiSQAA + 01YAAMhdAAC/YQAAuGEAALFeAACsWwEAp1wWAKJeKACeYDcBmmBDA5dfTQaUXlUJkV5dDI9dZA+NXGoR + i1txFIlaeBaHWYAYhViJGoJYkxyAV58dflatH31Wvx97VdMfelXpHnlV+h15Vf8beFT/GnhU/xp4VP8a + eFT/Gu48AADeTgAAz1oAAMRiAAC8ZgAAs2YAAKxjAACnYAAAomITAJ1kJACZZTMAlWVAA5JkSgaPY1IJ + jGNaDYpiYRCHYWgShWBvFYNfdheBXn4afl2GHHxckR56W50geFurIXZavCJ1WtEidFroIXNZ+R9zWf8d + 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 + AAAYwAAAEMMAAAfFCQAExhYAA8YhAALHLQABxzkAAMhHAADIVgAAyWYAAMl4AADJjAAAyaMAAMnAAADK + 4QAAyfgAAMn/AADI/wAAyP8AAMj/AKahAACcqAAAkK0AAIKwAAB1swAAZ7UAAFm3AABMugAAQLwAADS+ + AAAqwQAAIMMAABbGAAAMyQAABMsAAADNAAAAzgoAANAVAADRHwAA0isAANQ3AADVRQAA2FUAANlnAADZ + ewAA2pEAANqrAADaygAA2ugAANv6AADb/wAA2/8AANv/AJ6pAACTrwAAhbMAAHe3AABouQAAWrwAAEy/ + AAA/wQAAM8QAACfHAAAdygAAEs0AAAjPAAAA0gAAANQAAADWAAAA2QAAANsGAADcEAAA3hoAAOEmAADj + MwAA5kIAAOhUAADpaAAA6n0AAOuVAADrsAAA68wAAOvmAADr8wAA6/MAAOvzAJWwAACItgAAeboAAGq9 + AABbwAAATMMAAD7HAAAxygAAJM0AABnQAAAO0wAABNYAAADaAAAA3AAAAN4AAADgAAAA4gAAAOQAAADn + AAAA6QgAAOwTAADvIAAA8i4AAPU/AAD4UgAA+WcAAPp9AAD7lQAA/K0AAPzDAAD80wAA/NMAAPzTAIq3 + AAB8vAAAbMAAAF3EAABNxwAAPssAAC/PAAAi0wAAFtgAAArbAAAA3gAAAOEAAADjAAAA5QAAAOYAAADo + AAAA6wAAAO0AAADwAAAA8gAAAPUAAAD5CwAA/BkAAP8oAAD/OgAA/08AAP9lAAD/ewAA/48AAP+gAAD/ + rAAA/6wAAP+sAP8AIAD/ABwA/wAZAP8AGgD/ACYA/wAzAP8AQAD/AE0A/wBaAP8AZQD/AG4A/QB3APwA + fgD7AIQA+gCKAPkAkAD4AJUA+ACbAPcAoQD2AKcA9ACvAPMAtwDxAMEA8ADNAO8A3QDvAOoA7gD3AO4A + /wDtAP8A7QD/AOwA/wDsAP8A7AD/AP8AHAD/ABgA/wAVAP8AGAD/ACMA/wAwAP8APAD/AEkA/wBWAPsA + YQD5AGsA9wBzAPYAewD1AIEA9ACHAPMAjQDyAJIA8QCYAPAAngDvAKQA7QCrAOsAswDqAL0A6QDJAOgA + 2ADnAOcA5gD0AOYA/gDlAP8A5AD/AOQA/wDkAP8A5AD/AP8AGQD/ABMA/wAOAP8AFQD/AB8A/wArAP8A + OAD+AEUA+ABRAPUAXQDyAGcA8ABvAO4AdwDtAH0A7ACEAOsAiQDqAI4A6QCUAOgAmgDmAKAA5QCnAOMA + sADhALkA4ADFAN8A0wDeAOMA3QDwANwA+wDbAP8A2gD/ANkA/wDZAP8A2QD/AP8AFAD/AAsA/wAJAP8A + EwD/ABsA/wAmAP8AMwD3AD8A8ABMAO0AWADqAGIA6ABrAOYAcwDlAHkA4wCAAOIAhQDhAIsA4ACQAN4A + lgDdAJ0A2wCkANkArADYALYA1QDBANQAzwDTAN8A0QDsANAA+QDPAP8AzgD/AM0A/wDNAP8AzQD/AP8D + DAD/AAMA/wAFAP8DDAD/ARYA/wAhAPkALQDvADkA5wBGAOQAUgDiAF0A3wBmAN0AbgDbAHUA2QB7ANgA + gQDWAIcA1QCNANMAkwDRAJkA0ACgAM4AqQDNALIAywC+AMoAywDIANwAxwDqAMUA9gDEAP4AwwD/AMMA + /wDDAP8AwwD/AP8IBQD/BAAA/wsAAP8OBQD/DA4A+gcZAPAAJQDmADIA3wA/ANsATADYAFcA1QBhANIA + aQDQAHEAzwB3AM0AfQDMAIMAygCJAMkAjwDIAJYAxgCdAMUApgDDALAAwQC8AMAAygC+ANsAvQHpALoD + +AC5BP8AuAT/ALcE/wC3BP8AtwT/AP8NAAD/DgAA/xYAAPwYAAD1FQUA8BAPAOYJGwDcBCkA1gY4ANII + RQDOCVEAywtbAMkMZADHDWwAxQ5zAMQPeQDCEH8AwRCGAMARjAC+EZMAvRGbALwRpAC6Ea8AuRG7ALcR + ywC1Et0AshTtALAU+wCuFf8ArRX/AKwU/wCsFP8ArBT/AP8SAAD/GAAA+B8AAOggAADhHgAA3RgDANwO + DQDTER8AzRYwAMgZPwDEHEsAwR5WAL8fXwC9IGcAuyBuALkhdQC4IXsAtyKCALUiiAC0Io8AsiKXALEi + oQCwIqsAriK4AKwiyACrItoAqCPrAaUj+gKkI/8CoyL/AqIi/wKiIv8CoiL/Av8WAAD/IAAA6CgAAN8v + AADYLwAA0isAAM8iBgDKIRgAwyYqAL4pOQC7K0YAtyxRALUuWgCzLmMAsS9qAK8vcQCuL3cBrS9+Aasv + hAGqL4wCqC+UAqcvnQKlL6gDpC+1A6IuxAOhLtYDni7pBJwu+AWaLv8FmS3/BZgt/wWYLf8FmC3/Bf8c + AADwJwAA4jQAANg7AADPPQAAyTkAAMUyAADBLxIAuzMkALY1NACyN0EArzlMAKw6VgCqOl4BqDpmAaY6 + bQKlOnMDozp6A6I6gQSgOogFnzmQBZ05mQacOaQGmjixB5g4wQeXONMHlDfnCJI39wiRN/8IkDb/CJA2 + /wiQNv8IkDb/CP8iAADpMgAA3D4AANBFAADISAAAwUUAAL0+AAC5OgsAsz0fAK5ALwCqQjwAp0NIAKRD + UgGiQ1oCoENiA55DaQScQ28Fm0N2BplCfQeYQoQIlkGMCZRBlgqTQaELkUCuC49AvgyOP9EMjD/lDIo/ + 9gyJPv8MiD7/C4c+/wuHPv8Lhz7/C/goAADkOgAA1kYAAMtNAADCUAAAuk0AALVIAACxRAYArEYaAKdI + KgCjSjgAoEtEAJ1LTgKaS1cDmEteBZZLZQaVSmwHk0pyCZFJeQqQSYELjkiJDYxIkw6KR54PiEerD4dG + uxCFRs4Qg0bkEIJF9Q+BRf8PgET/DoBE/w2ARP8NgET/DfAvAADgQQAA0U0AAMZUAAC9VwAAtFQAAK9Q + AACrTAEApU4VAKBQJgCdUTUAmVJBAZdSSwKUUlMEklJbBpBRYgeOUWkJjFBvC4pQdgyIT34Oh06GD4VO + kBGDTZsSgU2oE39MuBR+S8wUfEviE3tL9BJ6S/8Rekr/EXlK/xB5Sv8QeUr/EOw1AADcRwAAzVMAAMJa + AAC5XAAAr1oAAKlWAAClUwAAoFQRAJtWIgCXWDEAlFg9AZFYSAKOWFAEjFhYBopXXwiIV2YKhlZsDIRV + dA6CVXsQgFSEEn5TjRN8UpkVelKmFnhRthZ3UcoXdVDgFnRQ8xV0UP8Uc0//EnNP/xJzT/8Sc0//Eug7 + AADYTQAAylgAAL9fAAC0YAAAq14AAKRcAACgWQAAmloMAJZcHwCSXS4Aj146AYxeRQKJXU4Eh11VB4Rc + XAmCXGMLgFtqDX5acQ98WnkRelmBE3hYixV2V5YXdFakGHJWtBlwVcgZb1XfGG5V8hduVP8VblT/FG5T + /xNuU/8TblP/E+VBAADUUQAAxlwAALxjAACxZAAAp2IAAKBgAACbXgAAlV8JAJFhGwCNYisAimM3AIdj + QgKEYksEgmJTB39hWgl9YWELe2BoDnlfbxB3XnYSdF1/FHJdiRZwXJQYbluiGWxashpqWsYaaVneGmhZ + 8hhoWf8XaFj/FWhY/xRoWP8UaFj/FOJGAADRVgAAw2AAALlnAACtZwAAo2YAAJxlAACXYgAAkWQFAIxl + GACIZicAhWc1AIJnPwKAZ0kEfWZRBntmWAl4ZV8LdmRlDnRkbRByY3QTb2J9FW1hhxdrYJIZaF+gGmZf + sRtlXsUbY17dG2Nd8RljXf8YY1z/FmNc/xVjXP8VY1z/Fd9LAADNWgAAwWQAALZrAACqagAAoGoAAJhp + AACSZwAAjGgBAIdqFACEayQAgWwyAH5sPQF7a0YEeWtOBnZqVgh0al0LcWljDW9oaxBtZ3ISamZ7FWhl + hRdlZZEZY2SeG2FjrxxfY8McXmLcHF5h8BpeYf8YXmD/F15g/xZeYP8WXmD/FtxPAADKXwAAvmgAALNu + AACmbQAAnG0AAJRtAACNawAAh20AAIJuEAB/byAAfHAuAHlwOgF3cEQDdG9MBXFvUwhvbloKbW5hDWpt + aQ9obHASZWt5FGNqgxdgaY8ZXmmdG1torRxaZ8IcWGfbHFhm8BpZZf8YWWX/F1lk/xZZZP8WWWT/FthU + AADHYwAAu2wAAK9xAACicQAAmHAAAJBwAACIcAAAgnIAAH1zCwB6dB0Ad3UrAHR1NwBydUECb3RJBG10 + UQdqc1gJaHNfDGVyZg5jcW4RYHB3E11wgRZab40YWG6bGlZtrBtUbcAbU2zZG1Nr7xlTav8YU2n/F1Np + /xZTaf8WU2n/FtNaAADDaAAAuHEAAKt0AACfdAAAlHQAAIx0AACCdQAAfHcAAHd4BgB0eRgAcXomAG56 + MwBsej0BaXpGA2d5TgVleVUHYnhcCmB4ZAxdd2wPWnZ1Eld1fxRVdYsWUnSZGFBzqhlOc78aTXLYGU1x + 7xhNcP8XTW//Fk1u/xZNbv8WTW7/Fs5gAADAbQAAtHYAAKd4AACaeAAAkHgAAId4AAB9egAAdnwAAHF9 + AABsfhIAan8hAGeALgBlgDkAY4BCAmF/SgNef1IFXH5ZCFl+YQpXfWoMVH1zD1F8fRFOe4kUS3uXFkl6 + qBdHeb0XRnnWF0Z47hZGdv4WRnX/FUZ0/xRGdP8URnT/FMlmAAC7cgAAsXsAAKJ8AACWfAAAjHwAAIN9 + AAB5fwAAboIAAGmDAABkhQsAYYUbAF+GKABdhjMAW4Y9AFmGRgFXhk4DVYVWBVKFXgdQhGYJTYRwC0qD + eg5Hg4YQRYKVEkKCphNAgbsTP4HVEz9/7RM/fv4TP33/Ez98/xI/fP8SP3z/EsRtAAC3eAAArIAAAJ2A + AACRgAAAh4AAAH6BAAB0hAAAaIgAAGGKAABbiwMAV4wTAFWNIQBTjS0AUY03AFCNQABOjUkBTI1RAkqN + WgNIjGMFRYxtB0OLdwlAi4QLPYuSDTuKpA45irkOOInTDjeI7Q43hv4PNoX/DzaE/w82hP8PNoT/D750 + AACyfwAAp4QAAJiEAACNhAAAgoUAAHiHAABviQAAZIwAAFqQAABSkgAATJQJAEmUGABHlSQARZUvAESV + OQBDlUIAQZVLAECVVAE+lV4CPJVoAzmVcwQ3lIAGNJSPBzKUoQgwk7cIL5PRCC6R7Aguj/4KLY7/Ci2N + /wstjf8LLY3/C7h8AACuhgAAoYkAAJOJAACIiQAAfYsAAHKNAABokAAAXpMAAFOWAABKmQAAQZwAADud + DAA5nRkAN54lADaeLwA1njkAM55DADKeTAAxn1cAL59iAC6fbgEsnnwBKp6LAieenQImnrMDJJ7PAiSc + 6wMjmv4FI5n/BiKY/wYimP8GIpj/BrKFAACpjgAAm44AAI6OAACCjwAAdpEAAGyUAABhlwAAV5oAAE2e + AABCoQAAOaMAADClAAAppwsAJqgYACWoIwAkqC0AIqg3ACGpQgAgqU0AHqlZAB2pZgAbqXQAGqmFABip + mAAWqa4AFanLABWo6QAVpv4BFaX/AhWk/wMVpP8DFaT/A62OAACjlQAAlZQAAIiUAAB7lwAAcJoAAGWd + AABaoAAAT6MAAEWmAAA6qQAAMKwAACauAAAdsAAAFLIGABCzEgAPtB4ADbQpAAy0NAALtEAACbRNAAi1 + WwAGtWoABbV7AAO1jgABtaQAALW+AAC03gABtPYAA7L/AAOx/wADsf8AA7H/AKeXAACdmwAAj5sAAIGd + AAB1oAAAaaMAAF2nAABRqwAARq4AADyxAAAxswAAJrUAABy3AAASuQAACbsAAAG9BwAAvRIAAL4dAAC/ + KAAAvzMAAMBAAADBTgAAwV0AAMFuAADCgQAAwpYAAMKvAADCzAAAwuoAAMH7AADB/wAAwf8AAMH/AKOg + AACWogAAiKQAAHqnAABtqwAAYa8AAFWzAABItQAAO7cAAC+6AAAkvAAAGr4AABDAAAAGwgAAAMQAAADG + AAAAxwcAAMgRAADJGwAAyiUAAMwxAADOPwAAz04AANBfAADRcgAA0YcAANKeAADSuQAA09YAANPuAADT + /QAA0/0AANP9AJunAACPrAAAga8AAHSzAABltgAAVrgAAEi7AAA6vQAALsAAACLCAAAXxQAADMcAAALJ + AAAAzAAAAM4AAADQAAAA0gAAANMCAADVCwAA2BUAANsgAADdLQAA4DwAAOJOAADjYQAA5HYAAOWMAADm + pAAA5r8AAOfZAADo7QAA6O0AAOjtAJKvAACFswAAdrcAAGe6AABXvQAASMAAADrDAAAtxgAAIMkAABTL + AAAIzgAAANEAAADUAAAA1gAAANkAAADbAAAA3QAAAOAAAADiAAAA5QMAAOcOAADrGgAA7igAAPE4AAD0 + TAAA9GIAAPV4AAD2jwAA96cAAPi8AAD40wAA+NMAAPjTAIe1AAB5uQAAab0AAFnBAABJxAAAOsgAACvL + AAAezwAAEdIAAAXWAAAA2gAAAN0AAADfAAAA4QAAAOIAAADlAAAA5wAAAOoAAADtAAAA7wAAAPIAAAD2 + BgAA+hMAAP4iAAD/NAAA/0kAAP9hAAD/eAAA/44AAP+hAAD/swAA/7MAAP+zAP8AGwD/ABYA/wAVAP8A + FwD/ACMA/wAwAP8APQD/AEoA/wBXAP8AYQD/AGsA/QBzAPwAegD7AIAA+gCGAPgAjAD3AJEA9QCWAPQA + nADzAKIA8gCqAPEAsgDwALwA8ADJAO8A2ADuAOcA7QD0AOwA/wDrAP8A6wD/AOsA/wDrAP8A6wD/AP8A + FwD/ABIA/wAOAP8AFAD/AB8A/wAsAP8AOQD/AEYA/QBSAPoAXQD4AGcA9gBvAPUAdwD0AH0A8gCDAPEA + iADvAI0A7QCTAOwAmADrAJ8A6gCmAOkArgDoALgA5wDEAOYA0gDlAOMA5ADxAOMA/QDiAP8A4gD/AOIA + /wDiAP8A4gD/AP8AEgD/AAsA/wAIAP8AEAD/ABsA/wAoAPwANAD3AEIA9QBOAPMAWQDwAGMA7gBrAO0A + cwDrAHkA6QB/AOcAhADmAIoA5ACPAOMAlADiAJsA4QCiAOAAqgDfALQA3gC/AN0AzQDbAN4A2QDtANgA + +QDXAP8A1gD/ANYA/wDWAP8A1gD/AP8ACwD/AAUA/wAFAP8ADAD/ABcA/gAiAPMALwDvADwA7ABJAOoA + VADnAF4A5QBnAOMAbgDhAHUA3wB7AN0AgADbAIYA2gCLANkAkADYAJcA1gCeANQApgDTAK8A0gC7ANAA + yADOANkAzADoAMsA9QDLAP8AygD/AMoA/wDKAP8AygD/AP8ABQD/AAAA/wAAAP8ABwD/ABEA9wAbAOoA + KADmADYA4wBDAOAATgDeAFkA2wBiANgAaQDVAHAA0wB2ANEAfADQAIIAzgCHAM0AjQDMAJMAywCaAMkA + ogDIAKsAxgC2AMQAxADCANMAwQDkAMAA8gC/AP0AvgD/AL4A/wC+AP8AvgD/AP8AAAD/AAAA/wAAAP8A + AAD9AAkA7gATAOIAIADdAC8A2QA8ANUASADSAFMAzwBcAMwAZADKAGsAyAByAMcAeADFAH0AxACDAMMA + iQDBAI8AwACXAL8AnwC9AKgAuwCzALkAwQC4ANAAtgDiALUA7wC0APoAswD/ALIA/wCyAP8AsgD/AP8C + AAD/BQAA/QoAAO8JAADnBAAA4wAIANoAFwDUACYAzwA0AMsAQQDIAE0AxQBXAMIBXwDAAWcAvwJtAL0C + dAC8A3oAugOAALkDhgC4BIwAtgSUALUEnACzBKYAsQSyALAEwACuBdAArQbiAKoH8gCpCf8AqAn/AKcJ + /wCnCf8Apwn/AP8GAAD/DgAA6xQAAOIaAADbGAAA1REAANIECwDMBRwAxwksAMINOgC+EEYAuxJRALkT + WgC3FGIAtRVpALMVbwCyFnYAsRZ8AK8WggCuF4kArReRAKsXmgCqF6QAqBewAKYXvwClFtAAoxfjAKAY + 8wCeGf8AnRn/AJwZ/wCcGf8AnBn/AP8NAADwGAAA5CQAANoqAADRKgAAyiQAAMcbAgDDFhQAvRslALge + NAC0IEEAsSJMAK8jVQCtJF0AqyRlAKklawCoJXIApyV4AKUmfwCkJoYAoyaOAKEmlwCgJqEAniatAJwm + vACbJc0AmSbhAZYm8gGUJv8BkyX/AZMl/wGTJP8CkyT/Av8VAADpJQAA3TEAANE3AADINwAAwTIAAL0r + AAC6JQ0AtCgfAK8rLgCrLTwAqC9HAKYwUQCkMVkAojFhAKAyZwCfMm4AnjJ0AZwyewGbMoIBmTKKAZgy + kwKWMp4ClTGqApMxuQORMcoDjzDfA40w8AOMMP4Eiy//A4ov/wOKL/8Dii//A/McAADkMAAA1jsAAMtB + AADBQQAAuT0AALQ4AACxMgYArDQZAKc2KgCjODcAoDpDAJ47TQCcO1UAmjxdAJg8ZAGXPGoClTxxApQ8 + dwOSO38DkTuHBI87kAWNO5oFjDqnBoo6tgaIOcgGhzndBoU57waDOP4Ggjj/BoI3/wWCN/8Fgjf/Be4m + AADfOAAA0EQAAMVKAAC6SQAAskYAAK1BAACqPAAApT0UAKA/JQCcQTMAmUM/AJdDSQCURFIBkkRZAZFE + YAKPRGcDjURtBIxDdAWKQ3wGiUOEB4dCjQeFQpgIg0GkCYJBswmAQMUKf0DbCn1A7gl8P/0Jez//CHs+ + /wh6Pv8Hej7/B+ouAADaQAAAy0sAAMFRAAC1TwAArE0AAKdIAACjRQAAnkUQAJpHIQCWSS8Ak0o7AJBL + RQCOS04BjEtWAopLXQOIS2QEh0tqBYVKcQeDSnkIgUmBCYBJigp+SJULfEeiDHpHsQx5RsMNd0bZDXZG + 7Qx1RfwLdEX/CnRE/wl0RP8JdET/CeY1AADVRgAAyFEAALxVAACwVQAAp1MAAKFPAACdTAAAmEwLAJRO + HQCQUCsAjVE4AIpRQgCIUksBhlFTAoRRWgSCUWEFgFBoBn9Qbwh9T3YJe09+C3lOiAx3TpMNdU2fDnNM + rg9yTMEPcEvWD29L7A5uS/wNbkr/DG5J/wtuSf8Lbkn/C+M7AADRSwAAxFYAALhaAACsWQAAo1cAAJxV + AACYUQAAk1IHAI9UGQCLVSgAiFY1AIVXPwCDV0kBgVdQA39XVwR9Vl4Ge1ZlB3lVbAl3VXQKdVR8DHNT + hQ5xU5APb1KdEG1RrRFrUb8RalDVEWlQ6xBpT/sOaE//DWhO/wxoTv8MaE7/DOBBAADOUAAAwVoAALRd + AACoXQAAn1wAAJhaAACUVgAAjlgDAIpZFQCGWiUAg1syAIBcPQB+XEYBfFxOA3pcVQR4W1wGdltjCHRa + aglyWXELcFl6DW5Ygw9rV44QaVebEWdWqxJmVb0SZFXTEmNU6hFjVPsQY1P/DmNT/w1jUv8NY1L/DdxF + AADLVQAAvl4AALFgAAClYAAAm18AAJReAACPWwAAiV0AAIVeEgCBXyEAfmAvAHxhOgB5YUMBd2FMAnVg + UwRzYFoGcV9hCG9faAltXm8La114DWhdgQ9mXI0RZFuaEmJaqRNgWrwTX1nSE15Z6RJeWPoQXlf/D15X + /w5eV/8OXlf/DtlKAADIWQAAvGIAAK1kAAChYwAAl2MAAJBiAACKYAAAhWIAAIBjDQB8ZB4AeWUrAHdl + NwB1ZUEBcmVJAnBlUQRuZFgFbGRfB2pjZgloY20LZmJ2DWNhgA9hYIsRX2CYEl1fqBNbXroUWV7RFFld + 6BJZXPoRWVv/EFlb/w9ZW/8OWVv/DtRPAADFXQAAuWYAAKpnAACeZgAAlGYAAIxmAACGZAAAgGYAAHtn + CgB3aBoAdGkoAHJqNABwaj4AbmpHAmtpTgNpaVYFZ2ldB2VoZAljZ2sLYWd0DV5mfg9cZYkRWWSWEldk + phNVY7kUVGPQE1Ni6BJTYfkRU2D/EFRf/w9UX/8PVF//D9BUAADCYQAAtmoAAKZqAACaagAAkGoAAIhq + AACAaQAAemsAAHZsBQBybRYAb24kAG1uMABqbzsAaG9EAWZuTAJkblMEYm5aBmBtYQhebWkKW2xyDFlr + fA5WaocQVGqVEVFppBJPaLgTTmjOE05n5xJOZvkRTmX/EE5k/w9OZP8OTmT/DsxaAAC+ZgAAsm0AAKNt + AACWbQAAjG0AAIRuAAB7bgAAdXAAAHBxAABschIAaXMgAGZzLABkdDcAYnRAAGB0SAFedFADXHNXBFpz + XwZYcmcIVXJwClNxegxQcIUOTXCTEEtvoxFJbrYRSG7NEUdt5hBHbPkQSGv/D0hq/w5Iaf8OSGn/Dshf + AAC7awAArXEAAJ5xAACScQAAiHEAAIByAAB2cwAAbnUAAGl3AABkeAsAYXkbAF95JwBdeTIAW3o8AFl6 + RAFYekwCVnlUA1N5XARReGQGT3htCEx3dwpJd4MMR3aRDUV2oQ5DdbQPQXXMD0F05Q5BcvgOQXH/DUFw + /w1BcP8NQXD/DcRlAAC3cQAAqHQAAJp0AACOdQAAhHUAAHt2AAByeAAAZ3sAAGF9AABcfgQAWX8UAFZ/ + IQBUgC0AU4A3AFGAQABPgEgAToBQAUyAWAJKf2EER39qBUV/dQdCfoEJQH6OCj19nws7fbILOnzKCzl7 + 5Qs5efgLOXj/Czl3/ws5d/8LOXf/C79sAACzdwAAo3gAAJV5AACJeQAAgHkAAHd6AABtfQAAYoEAAFqD + AABThQAAT4YMAEyHGgBKhyYASIcwAEeHOQBFh0IARIdLAEKHVABBh10BP4dnAjyGcQQ6hn4FN4aMBjWF + nAczhbAHMoXIBzGD5AcxgvcIMID/CDB//wgwf/8JMH//CblzAACufQAAnn0AAJB9AACFfQAAe34AAHGA + AABoggAAXYYAAFSJAABLiwAARI0CAD+OEAA+jx0API8oADqPMgA5jzsAOI9EADaPTQA1j1cANI9hADKP + bQEwj3oBLo+IAiuPmQMqjq0DKI7GAyeN4gMni/cEJ4n/BSaI/wYmiP8GJoj/BrR7AACnggAAmIIAAIuB + AACAggAAdYMAAGuGAABhiQAAV4wAAE2PAABEkgAAO5QAADOXBAAvlxIALZgdACyYJwAqmDEAKZg7ACiY + RQAmmE8AJZlaACOZZgAimHQAIJiDAB6YlAAcmKkAG5jDABqX4AAblfcBG5T/AhqT/wMakv8DGpL/A66E + AAChhwAAkocAAIaGAAB7iAAAb4oAAGWNAABakAAAUJMAAEaXAAA8mQAAM5wAACqeAAAhoAMAG6IPABqi + GwAYoiUAF6IvABajOgAUo0UAE6NQABGjXQAQo2wADqN8AAyjjgAKo6IACKK7AAii2QAJofIACp//AAue + /wALnv8AC57/AKmNAACajQAAjYwAAICNAAB0jwAAaZIAAF2VAABTmQAASJwAAD6fAAAzogAAKaUAACCn + AAAXqQAADqsCAAasDAADrRgAAa0jAACtLgAArTkAAK1GAACuUwAArmIAAK5yAACthAAArZgAAK2vAACt + ywAArOgAAKz5AACr/wAAq/8AAKv/AKOUAACVkgAAh5MAAHqVAABtmAAAYZwAAFagAABKowAAP6YAADWp + AAAqrAAAIK8AABaxAAAMswAAA7QAAAC2BQAAtg4AALcYAAC4IgAAuC0AALk5AAC6RgAAulUAALtmAAC7 + eAAAu4wAALqiAAC7vQAAu9sAALrxAAC6/gAAuv8AALr/AJ2aAACOmgAAgJwAAHOfAABmowAAWacAAE2r + AABCrwAANrIAACu1AAAftwAAFLkAAAm7AAAAvAAAAL4AAAC/AAAAwAMAAMIMAADDFgAAxCAAAMYrAADH + OAAAyUYAAMpXAADLaQAAy30AAMuUAADLrQAAy8oAAMzkAADM9AAAzPoAAMz6AJWiAACHowAAeacAAGyr + AABfsAAAUrQAAES3AAA2uQAAKbwAAB2+AAASwAAABsIAAADEAAAAxgAAAMgAAADJAAAAywAAAM0AAADP + BwAA0REAANMcAADWKAAA2jYAAN1GAADeWQAA320AAOCDAADhmgAA4bQAAOHPAADh5QAA4ewAAOHsAI6s + AACArwAAc7QAAGO3AABUugAARLwAADa/AAAowgAAG8UAAA7HAAADygAAAMwAAADOAAAA0AAAANIAAADV + AAAA2AAAANoAAADdAAAA3wAAAOIKAADlFgAA6CQAAOwzAADvRgAA8FsAAPJxAADzhwAA9J8AAPW1AAD1 + ygAA9dIAAPXSAISzAAB2twAAZroAAFa+AABGwQAANsUAACfIAAAZywAADM4AAADRAAAA1AAAANgAAADa + AAAA3AAAAN4AAADhAAAA5AAAAOYAAADpAAAA7AAAAO8AAADyAQAA9g8AAPofAAD+MQAA/0YAAP9cAAD/ + cwAA/4kAAP+dAAD/rgAA/7UAAP+1AP8AFgD/ABIA/wAPAP8AEwD/AB8A/wAtAP8AOgD/AEcA/wBTAP8A + XgD/AGcA/QBvAPsAdgD4AHwA9wCCAPUAhwD0AI0A9ACSAPMAlwDyAJ0A8QClAPEArQDwALgA7wDEAO0A + 0gDsAOQA6wDzAOoA/wDqAP8A6wD/AOsA/wDrAP8A6wD/AP8AEQD/AAsA/wAIAP8AEAD/ABwA/wAoAP8A + NgD+AEMA/ABPAPoAWgD3AGMA9QBsAPIAcwDwAHkA7gB+AO0AhADsAIkA6wCOAOsAlADqAJoA6QChAOgA + qQDnALMA5QC/AOMAzQDiAN8A4QDuAOEA+wDhAP8A4AD/AOAA/wDgAP8A4AD/AP8ACwD/AAUA/wADAP8A + DAD/ABcA/AAkAPgAMQD2AD4A9ABKAPEAVQDuAF8A6wBnAOkAbgDmAHUA5QB6AOQAgADjAIUA4gCKAOEA + kADgAJYA3wCdAN0ApQDcAK4A2gC5ANgAxwDWANgA1QDpANQA9wDUAP8A0wD/ANMA/wDTAP8A0wD/AP8A + BgD/AAAA/wAAAP8ABwD/ABEA9AAeAO8ALADsADkA6gBFAOcAUADkAFoA4QBiAN4AagDcAHAA2gB2ANkA + fADYAIEA1gCGANQAjADTAJIA0gCYANAAoADOAKkAzAC0AMsAwgDKANEAyADkAMcA8wDHAP4AxgD/AMUA + /wDFAP8AxQD/AP8AAAD/AAAA/wAAAP8AAQD2AAoA6wAXAOYAJQDiADMA3wA/ANsASgDYAFQA1ABdANIA + ZQDQAGsAzgByAM0AdwDLAHwAygCCAMkAhwDHAI0AxgCUAMQAnADCAKUAwQCwAL8AvQC9AMwAvADfALsA + 7gC6APoAuQD/ALkA/wC4AP8AuAD/AP8AAAD/AAAA/wAAAPgAAADsAAIA4gAPANwAHgDXACwA0gA4AM4A + RADLAE4AyQBXAMYAXwDEAGcAwwBtAMEAcwDAAHgAvwB+AL0AgwC8AIoAugCQALgAmAC3AKEAtQCsALQA + uQCyAMgAsADaAK8A6gCuAPcArQD/AKwA/wCsAP8ArAD/AP8AAAD/AAAA8AAAAOYAAADgAAAA2QAGANIA + FQDMACMAyAAxAMQAPQDBAEgAvgBSALwAWgC6AGIAuABoALYAbgC1AHQAtAB6ALIAgACxAIYAsACNAK4A + lQCtAJ8AqwCpAKkAtgCnAMYApgDYAKQA6ACjAPUAogD/AKEA/wChAP8AoQD/AP8AAADyBAAA5hAAAN0V + AADUEgAAzQkAAMoACgDFABkAwAAoALsBNgC3BEIAtQZMALIHVQCwCF0ArglkAK0JagCsCnAAqgp2AKkL + fACoC4MApguLAKULkwCjC50AoguoAKALtgCeC8YAnQvZAJoN7ACZDvoAlw7/AJYO/wCWDv8Alg7/AP4F + AADrFQAA3yEAANMmAADJIwAAwh0AAL8UAAC9CxAAtw8gALITLwCuFTwAqxdHAKkYUACnGVgApRpfAKMa + ZgCiG2wAoRtyAJ8ceQCeHIAAnByHAJsckACZHJoAmBymAJYctACVHMUAkxvYAJEd6wCPHfoAjh3/AI0c + /wCNHP8AjRz/APMQAADkIwAA1y4AAMszAADAMAAAuSsAALQlAACzHAgArh4aAKkhKQClIzYAoiVCAJ8m + SwCdJ1QAnChbAJooYgCZKWgAlylvAJYpdQCVKXwAkyqEAJIqjQCQKpcAjymjAI0psQCLKcIAiijVAIgo + 6QGGKPkBhSj/AYQn/wGEJ/8BhCf/Ae0cAADfLgAA0DgAAMQ8AAC4OgAAsTYAAKwxAACpKwEApioUAKEt + JACdLzIAmjA9AJcyRwCVMlAAkzNXAJIzXgCQNGUAjzRrAI40cgCMNHkBizSBAYk0igGINJQChjOgAoQz + rgKDM78CgTLTAn8y6AJ+MfgDfTH/Anww/wJ8MP8CfDD/AukmAADZNwAAykEAAL1DAACyQgAAqj8AAKU7 + AACiNgAAnjQPAJk3HwCWOS0Akjo5AJA7QwCOPEwAjDxUAIo9WwCJPWIBiD1oAYY9bwGFPXYCgzx+AoE8 + hwOAPJEEfjudBHw7rAV7Or0FeTrRBXc65gV2OfcEdTj/BHU4/wR1N/8EdTf/BOQuAADTPgAAxkgAALhJ + AACsSAAApEYAAJ9CAACbPwAAlz0KAJM/GwCPQSkAjEI1AIlDQACHREkAhkRRAIREWAGCRF8BgURlAn9E + bAN+RHMDfEN7BHpDhAV5Q48Gd0KbBnVCqQdzQbsHckDPB3BA5QdvP/YGbj//BW4+/wVuPv8Fbj7/BeE1 + AADPRAAAwk4AALNOAACnTgAAn0wAAJpIAACVRgAAkUUFAI1GFwCJSCYAhkkyAIRKPQCCSkYAgEtOAH5L + VQF8S1wCe0piA3lKaQN3SnEEdkl5BXRJggZySI0HcEiZCG5HpwlsR7kJa0bNCWpG5AlpRfYIaET/B2hE + /wZoQ/8GaEP/Bt07AADLSgAAvlIAAK9SAACjUgAAmlEAAJVOAACQSwAAjEsBAIhMEwCETiIAgU8vAH5P + OgB8UEMAelBLAHlQUgF3UFkCdVBgA3NQZwRyT24FcE93Bm5OgAhsTosJak2XCmhMpQpmTLcLZUvMC2RL + 4wpjSvUJY0n/CGJJ/wdiSP8HYkj/B9lAAADITwAAu1YAAKtWAACgVgAAl1UAAJBTAACMUAAAh1EAAINS + DwB/Ux8AfFQsAHlVNwB3VUAAdVVJAHRWUAFyVVcCcFVeA25VZQRsVGwGalR1B2hTfghmU4kKZFKVC2JR + pAthUbUMX1DKDF5P4gtdT/QKXU7/CV1N/whdTf8IXU3/CNVFAADFUwAAt1kAAKhZAACcWQAAk1kAAIxX + AACIVAAAglYAAH5XCwB6WBsAd1kpAHRaNAByWj4AcVpGAG9aTgFtWlUCa1pcA2laYwRnWWoGZVlzB2NY + fAlhV4cKX1aTC11WogxbVbQMWlXJDFhU4QxYU/QKWFL/CVhS/whYUf8IWFH/CNFKAADDVwAAs1wAAKVc + AACZXQAAj1wAAIhbAACDWQAAfVsAAHlcCAB1XRgAcl4lAG9eMQBtXzsAbF9EAGpfSwFoX1MCZl9aA2Re + YQRiXmgGYF1xB15deglcXIUKWluSC1haoQxWWrMNVFnIDVNY4AxTWPQLU1f/ClNW/wlTVf8IU1X/CM5P + AADAWwAAsF8AAKFgAACVYAAAjGAAAIRfAAB+XgAAeGAAAHNhAwBwYhQAbWIiAGpjLgBoYzgAZ2RBAGVk + SQFjY1ABYWNXA19jXwRdY2YFW2JvB1lheAhXYYMKVGCQC1JfnwxQX7EMT17HDE5d3wxOXPMLTlv/Ck5b + /wlOWv8JTlr/CcpUAAC9YAAArGIAAJ5jAACSYwAAiGMAAIBjAAB5YgAAc2QAAG5mAABqZxAAZ2ceAGVo + KgBjaDUAYWg+AF9pRgBeaE0BXGhVAlpoXANYaGQEVmdtBlNndgdRZoIJT2WOCkxlngtKZLAMSWPFDEhj + 3gtIYvMKSGD/CUhg/wlIX/8JSF//CcdZAAC5ZQAAqGYAAJpmAACOZwAAhWcAAHxnAABzaAAAbWkAAGhr + AABkbAsAYW0aAF5tJgBcbTAAWm46AFluQgBXbkoAVm5SAVRtWgJSbWIDUG1qBU1sdAZLbIAISGuNCUZq + nApEaq4KQ2nECkJp3gpBZ/IJQWb/CUJl/whCZf8IQmX/CMNfAAC1aQAApGkAAJZqAACKagAAgGsAAHhr + AABubQAAZm8AAGFwAABdcgUAWXMUAFdzIQBUcywAU3M1AFF0PgBQdEYATnROAE10VgFLc18CSXNoA0Zz + cgREcn0GQXKKBz9xmgg9cKwIPHDCCDtv3Ag6bvIIOmz/CDpr/wg7a/8HO2v/B75lAACwbQAAn20AAJFu + AACGbgAAfG4AAHRvAABqcQAAYHQAAFp3AABUeAAAUHkNAE15GwBLeiYASnowAEh6OQBHekEARXpKAER6 + UgBCelsBQXplAT56bwI8eXoDOnmIBDd4mAU2eKoGNHfABTN32wUzdfEGMnP/BjJy/wYycv8GMnL/Brpr + AACrcQAAmnEAAI1yAACCcgAAeHIAAG90AABmdgAAW3oAAFR8AABMfgAARoAFAEOBEwBBgR8AP4EpAD2B + MgA8gTsAO4FEADmBTQA4gVYANoFgADWBawAzgXcBMYGFAi6AlQIsgKgDK4C+Ayp/2gIqffADKXz/BCl6 + /wQpev8EKXr/BLVzAACkdgAAlXYAAIh2AAB9dgAAdHcAAGp5AABhewAAVn8AAE2CAABFhAAAPYcAADeI + CQA0iRYAMokhADGJKgAviTQALok9ACyJRgAriVAAKolaACiJZgAniXMAJYmBACOJkQAhiaQAH4i7AB6I + 1wAehvABHoT/Ah+D/wIfg/8CH4P/ArB7AACeewAAj3sAAIN6AAB5ewAAbnwAAGR/AABaggAAUIUAAEaI + AAA+iwAANY0AAC2QAAAlkQoAI5IWACGSIAAgkioAHpIzAB2TPQAbk0cAGpNSABiTXwAXk2wAFZN7ABOT + jAARkqAAEJK3AA2S0wAPkO4AEY7/ABGN/wARjf8BEY3/AaiAAACYgAAAin8AAH9/AABzgQAAaIMAAF6G + AABTiQAASYwAAD+QAAA1kgAALZUAACSXAAAbmQAAEpsHAA6cEwANnB0AC5woAAqcMgAInT0AB51JAAWd + VgAEnWQAApxzAACchAAAnJcAAJutAACbyAAAmuQAAJr3AACZ/wAAmP8AAJj/AKGGAACShQAAhYQAAHmF + AABtiAAAYYsAAFaOAABMkgAAQZUAADeYAAAsmwAAI54AABqgAAARogAACKQAAAClCgAApRQAAKYeAACm + KAAApzMAAKc/AACnTAAAp1oAAKdpAACnewAAp44AAKejAACmvQAAptoAAKXwAACl/QAApP8AAKT/AJqL + AACNigAAf4sAAHKOAABmkQAAWpUAAE6YAABDnAAAOJ8AAC6iAAAjpQAAGagAAA+qAAAGrAAAAK4AAACv + AgAAsAsAALAUAACxHQAAsigAALMzAAC0PwAAtE4AALReAAC1bwAAtYMAALSYAAC1sAAAtM0AALTnAACz + 9wAAs/8AALP/AJSSAACGkgAAeJQAAGuXAABenAAAUqAAAEakAAA6qAAAL6sAACSuAAAZsQAADrMAAAS1 + AAAAtwAAALgAAAC5AAAAuwAAALwIAAC9EQAAvhoAAMAlAADCMQAAxD8AAMRQAADFYgAAxXYAAMWLAADF + owAAxr0AAMbaAADG7QAAxvcAAMb3AI2ZAAB/mwAAcZ8AAGSjAABXqAAASq0AAD6xAAAxtQAAJbgAABi6 + AAAMvAAAAb4AAAC/AAAAwQAAAMMAAADEAAAAxgAAAMgAAADJAwAAywwAAM4WAADQIgAA1C8AANg/AADZ + UgAA2mYAANp7AADbkwAA26wAANzGAADc3QAA3OsAANzrAIajAAB4pwAAa6sAAF2xAABQtgAAQbkAADK8 + AAAkvgAAFsEAAArDAAAAxgAAAMgAAADKAAAAywAAAM0AAADPAAAA0QAAANQAAADXAAAA2gAAAN0FAADg + EQAA5B4AAOgtAADsPwAA7VQAAO5qAADvgAAA8JgAAPCwAADwxQAA8NUAAPDVAICvAABytAAAY7gAAFO7 + AABCvgAAMsEAACPFAAAVyAAAB8sAAADNAAAA0AAAANIAAADUAAAA1wAAANoAAADcAAAA3wAAAOIAAADk + AAAA5wAAAOoAAADuAAAA8gsAAPYaAAD7KwAA/UAAAP9WAAD/bQAA/4MAAP+YAAD/qgAA/7cAAP+3AP8A + EQD/AAsA/wAJAP8AEAD/ABwA/wAqAP8ANwD/AEQA/wBQAP8AWwD9AGQA+gBrAPgAcgD3AHgA9QB+APUA + gwD0AIgA8wCOAPIAkwDxAJkA8ACgAO8AqADuALMA7AC/AOsAzQDqAOAA6gDxAOkA/wDpAP8A6QD/AOkA + /wDpAP8A6QD/AP8ACwD/AAUA/wABAP8ACwD/ABgA/wAmAP8AMwD9AEAA/ABMAPgAVgD0AF8A8QBnAO8A + bgDuAHUA7QB6AOwAgADrAIUA6gCKAOkAjwDoAJUA5wCcAOUApADjAK4A4gC5AOEAyADgANoA3wDrAN8A + +gDeAP8A3gD/AN0A/wDeAP8A3gD/AP8ABQD/AAAA/wAAAP8ABgD/ABMA+gAhAPcALgD0ADsA8gBHAO0A + UQDqAFsA6ABjAOYAagDkAHAA4wB2AOEAewDgAIAA3wCGAN4AiwDdAJEA2wCYANkAnwDXAKkA1QC0ANQA + wgDTANIA0gDlANAA9QDPAP8AzwD/AM8A/wDPAP8AzwD/AP8AAAD/AAAA/wAAAP8AAAD2AA0A8QAbAO0A + KQDpADUA5QBBAOMATADgAFUA3QBeANsAZQDYAGwA1gBxANUAdwDTAHwA0QCBANAAhwDOAI0AzQCTAMsA + mwDKAKQAyQCvAMcAvADGAMwAxADfAMMA7wDCAP0AwgD/AMEA/wDBAP8AwQD/AP8AAAD/AAAA/wAAAPkA + AADtAAYA5wAVAOIAIgDcAC8A2QA7ANUARgDSAFAAzwBYAM0AYADLAGcAyQBsAMcAcgDGAHcAxAB9AMMA + ggDCAIgAwACPAL8AlgC9AJ8AvACqALoAtwC4AMYAtwDYALYA6gC1APgAtAD/ALQA/wC0AP8AtAD/AP8A + AAD/AAAA+QAAAOwAAADjAAAA3AANANQAGwDPACgAywA0AMgAQADGAEoAwwBTAMAAWwC+AGEAvABoALsA + bQC6AHMAuAB4ALcAfgC2AIQAtACLALMAkgCxAJsAsACmAK4AsgCsAMEAqwDSAKkA5QCoAPMApwD/AKcA + /wCmAP8ApgD/AP8AAAD3AAAA6gAAAOEAAADZAAAA0QAEAMoAEwDFACEAwQAtAL0AOQC6AEQAuABNALUA + VQCzAFwAsQBjALAAaQCvAG4ArQB0AKwAegCrAIAAqQCHAKgAjwCmAJgApQCiAKMArwChAL0AoADOAJ4A + 4gCdAPEAnAD7AJsA/wCbAP8AmwD/AP8AAADtAgAA4gwAANYOAADLCwAAxQIAAMEACQC9ABcAuAAlALQA + MgCxAD0ArgBHAKsAUACpAFcAqABeAKYAZAClAGoAowBwAKIAdgChAH0AoAGEAJ4BjACdAZUAmwGgAJkB + rQCXAbwAlgLNAJQD4QCTA/AAkQT9AJEE/wCQBP8AkAT/APQBAADmEwAA2R4AAMsfAADBHAAAuhcAALcO + AAC1Aw0AsAQdAKsIKwCoCjcApQxBAKMNSwChDlMAnxBaAJ0QYACcEWcAmhFtAJkScwCYEnoAlhKBAJUS + igCTE5QAkhOfAJATrACOErwAjRLPAIsS5ACJE/UAhxP/AIcT/wCGE/8AhhP/AO4QAADfIQAA0SsAAMIr + AAC4KQAAsSUAAKwfAACrFwMAqBQVAKMXJACfGjEAnBs8AJkdRgCXHk4AlR5WAJQfXACSH2MAkSBpAJAg + bwCOIHYAjSF+AIshhwCKIZEAiCGcAIcgqQCFILoAgyDMAIIg4gCAIPMAfyD/AH4f/wB+H/8Afh//AOgc + AADZLAAAyTUAALs1AACwMwAAqTAAAKQrAAChJgAAnyEPAJokHwCWJiwAkyg4AJEpQQCPKkoAjSpSAIsr + WQCKK18AiSxmAIcsbACGLHMAhSx7AIMshACCLI4AgCyZAH4spwB9K7cAeyvKAHkr4AB4KvIBdyr/AXYp + /wF2Kf8Bdij/AeMmAADSNQAAwzwAALQ8AACpOwAAojkAAJ01AACZMQAAly0JAJMuGgCPMCgAjDIzAIkz + PQCHNEYAhTROAIQ1VQCCNVwAgTViAIA1aQB+NnAAfTZ4AHs1gQF6NYsBeDWXAXY1pQF1NLUCczTIAnIz + 3wJwM/ECbzL/Am8x/wJuMf8BbjD/Ad8uAADNPQAAvkIAAK9CAACkQgAAnEAAAJc8AACTOQAAkDYEAIw3 + FQCIOSQAhTowAIM7OgCBPEMAfzxLAH09UgB8PVkAez1gAHk9ZwB4PW4Bdj12AXQ9fwJzPYkCcTyVA288 + owNuO7MDbDvGA2o63QNpOvADaDn+A2g4/wJoN/8CaDf/Ats1AADKQwAAuUcAAKpHAACfRwAAl0YAAJJC + AACNQAAAij4AAIY/EQCCQCAAf0EsAH1CNwB7Q0AAeUNIAHdETwB2RFYAdERdAHNEZAFxRGsBcERzAm5D + fANsQ4cDakKTBGlCoQRnQbEFZUHFBWRA3ARjP+8EYj/+BGI+/wNiPf8DYj3/A9Y7AADGSAAAtUsAAKZL + AACbSwAAkkoAAI1IAACJRQAAhEQAAIBFDQB9RhwAekcpAHdINAB1ST0Ac0lFAHJKTQBwSlQAb0pbAW1K + YgFsSWkCaklxAmhJegNmSIUEZEiRBWNHnwVhR68GX0bDBl5F2gZdRe8FXET+BFxD/wRcQv8EXEL/BNJA + AADDTQAAsU4AAKNPAACXTwAAj08AAIhNAACESgAAf0oAAHtLCQB4TBkAdU0mAHJOMQBwTjoAbk5DAG1P + SgBrT1EAak9YAWhPYAFmT2cCZU5vA2NOeARhTYMFX02PBV1MnQZbTK4GWUvCBlhK2QZXSu4GV0n9BVdI + /wVXR/8EV0f/BM5FAADAUAAArlIAAJ9TAACUUwAAi1IAAIRRAACATgAAe08AAHZQBQBzURUAcFIjAG1T + LgBrUzgAaVNAAGhUSABmVE8AZVRWAWNUXQFhVGUCYFNtA15TdwRbUoEFWVKNBldRnAdWUKwHVFDAB1NP + 2AdSTu0GUk39BVJM/wVSTP8FUkv/BctKAAC8VAAAqlUAAJxWAACRVgAAiFYAAIFVAAB8UgAAdlQAAHFV + AQBtVhIAalcfAGhYKwBmWDUAZFg+AGNYRgBhWU0AYFlUAV5ZWwFcWGMCWlhrA1hXdQRWV4AFVFaMBlJW + mgdQVasHT1S/B01U1wdNU+0GTVL9Bk1R/wVNUP8FTVD/BchOAAC4VwAAp1gAAJlZAACNWQAAhFkAAH1Z + AAB3VwAAcVkAAGxaAABoWw4AZVwcAGNcKABhXTIAX107AF1dQwBcXUsAWl1SAFldWQFXXWECVV1pA1Nc + cwRRXH4FT1uKBk1bmQZLWqoHSVm+B0hZ1QdHWOwGR1b8BkdW/wVHVf8FR1X/BcVTAAC0WgAAo1sAAJVc + AACKXQAAgV0AAHldAABxXAAAa14AAGZfAABiYAkAX2EYAF1hJABbYi4AWWI3AFdiQABWYkcAVGJPAFNi + VwFRYl8BT2JnAk1icQNLYXwESWGIBUdglwZFX6gGQ1+9BkJe1AZBXewGQVz8BUFb/wVBWv8FQVr/BcJY + AACwXgAAn18AAJFgAACGYAAAfWAAAHVhAABsYQAAZWMAAGBkAABcZgUAWGcTAFZnIABUZyoAUmgzAFBo + PABPaEQATmhMAExoVABLaFwBSWhlAUdnbwJFZ3oDQmaGBEBmlQU+ZaYFPWW7BTtk0wU7Y+sFO2H7BTtg + /wU7X/8FO1//Bb5eAACsYgAAm2IAAI1jAACCZAAAeWQAAHFlAABmZgAAX2kAAFlqAABVawAAUW0NAE5t + GgBMbSUASm0vAEluOABHbkAARm5IAERuUABDblkAQW5iAD9ubAE9bXcCO22EAzlskwM3bKUDNWu5AzRr + 0gM0aeoDM2j7BDNn/wQ0Zv8ENGb/BLpkAACnZgAAlmYAAIlnAAB+ZwAAdWgAAG1pAABjawAAWm4AAFNw + AABMcgAASHMHAEV0FABDdB8AQXQpAD90MgA+dDsAPHRDADt0TAA6dFUAOHReADZ0aQA1dHQBMnSBATBz + kQEuc6ICLXK3Aity0AErcOkCK2/7Aitu/wMrbf8DK23/A7RpAAChagAAkWsAAIVrAAB6awAAcWwAAGht + AABfbwAAVXMAAE11AABGdwAAPnoAADp7DAA3exgANnsiADR7LAAzfDUAMXw9ADB8RgAufE8ALXxZACt8 + ZAAqe3AAKHt+ACZ7jQAke58AInq1ACF6zgAheOgAIXf6ASF1/wEhdf8CIXT/Aq1uAACbbwAAjG8AAIBv + AAB2bwAAbXAAAGNyAABadQAAT3gAAEd7AAA/fQAAN4AAAC+CAgAqgw4AKIMaACeEIwAlhC0AJIQ2ACKE + PwAhhEkAH4RTAB6EXwAchGsAGoR5ABiEiQAWg5wAFYOxABOCywATgecAFX/6ABV+/wAVff8AFn3/AKZz + AACVcwAAh3QAAHx0AABydAAAZ3YAAF14AABTewAASX4AAECBAAA4hAAAL4YAACeJAAAeiwIAGIwOABeN + GQAVjSMAFI0sABKNNgARjUAAD41LAA2NVwALjWUACo1zAAiMgwAGjJYABIyrAAKLwwADiuAABIn0AAWI + /wAGh/8ABof/AJ95AACPeQAAgngAAHd4AABsegAAYXwAAFd/AABMggAAQoYAADiJAAAvjAAAJo4AAB6Q + AAAVkwAADJUEAAWWDgABlhgAAJYiAACWLAAAljcAAJZCAACWTwAAllwAAJZrAACWfAAAlo4AAJWiAACV + ugAAlNYAAJPuAACT+wAAkv8AAJL/AJd+AACJfgAAfn0AAHJ+AABmgQAAWoQAAE+IAABFiwAAOo4AADCR + AAAmlAAAHZcAABSZAAAKmwAAAp0AAACeCAAAnxEAAJ8aAACgIwAAoC0AAKE4AAChRQAAolMAAKJiAACh + cwAAoYUAAKGZAAChsQAAoMwAAJ/nAACf9gAAnv8AAJ7/AJGEAACFgwAAeIQAAGuGAABfigAAU44AAEeR + AAA8lQAAMZkAACacAAAcngAAEqEAAAijAAAApQAAAKcAAACoAAAAqQcAAKoQAACrGQAArCIAAK0tAACu + OQAAr0cAAK9XAACvaAAAr3oAAK6PAACupgAAr8EAAK7eAACu8AAArfwAAK39AIyKAAB+igAAcY0AAGSQ + AABXlAAASpkAAD6dAAAzoQAAJ6QAABynAAASqgAABqwAAACuAAAAsAAAALIAAACzAAAAtQAAALYEAAC3 + DAAAuBYAALogAAC8KwAAvjkAAL5JAAC/WwAAwG4AAMCDAADAmQAAwLMAAMHOAADA5gAAv/UAAL/3AIWR + AAB3kwAAapcAAFycAABPoQAAQqUAADWqAAAprQAAHrEAABK0AAAGtwAAALkAAAC7AAAAvAAAAL4AAAC/ + AAAAwQAAAMIAAADEAAAAxgcAAMgRAADLHAAAzikAANE5AADSSwAA018AANR0AADViwAA1aQAANa9AADX + 1AAA1+gAANfqAH6bAABwnwAAY6QAAFWpAABIrgAAOrMAAC24AAAfuwAAEr0AAAS/AAAAwQAAAMMAAADF + AAAAxwAAAMgAAADLAAAAzQAAAM8AAADSAAAA1AAAANgAAADcCwAA4BgAAOQnAADoOAAA6U0AAOpkAADr + ewAA7JIAAOyqAADtwAAA7dQAAO3WAHinAABqrAAAXbIAAE+4AAA/uwAAL74AAB/BAAAQxAAAAscAAADK + AAAAzAAAAM4AAADQAAAA0gAAANQAAADXAAAA2wAAAN0AAADgAAAA4wAAAOYAAADqAAAA7gYAAPMUAAD4 + JQAA+zkAAPxQAAD+ZwAA/38AAP+VAAD/qQAA/7sAAP+9AP8ACgD/AAUA/wADAP8ACwD/ABkA/wAnAP8A + NAD/AEEA/wBMAP0AVgD7AF8A+QBnAPgAbgD2AHUA9QB6APQAfwDzAIQA8gCKAPEAjwDwAJUA7gCcAO0A + owDrAK0A6wC6AOoAyQDpANwA6ADuAOgA/gDnAP8A5wD/AOcA/wDnAP8A6AD/AP8ABAD/AAAA/wAAAP8A + BwD/ABUA/wAjAP8AMAD8ADwA+QBHAPYAUgDzAFsA8QBjAO8AagDtAHAA7AB2AOoAewDpAIAA5wCFAOYA + iwDlAJEA4wCXAOIAnwDhAKgA4AC1AN8AwwDeANQA3ADoANsA+QDbAP8A2wD/ANsA/wDbAP8A2wD/AP8A + AAD/AAAA/wAAAP8AAgD9ABAA+AAeAPQAKwDwADcA7wBCAOwATQDpAFYA5gBeAOQAZgDhAGwA3wBxAN4A + dwDcAHwA2wCBANoAhgDYAIwA1gCTANUAmgDTAKMA0gCvANEAvADPAM0AzQDiAMwA8wDMAP8AzAD/AMwA + /wDMAP8AzAD/AP8AAAD/AAAA/wAAAPkAAADzAAoA7gAYAOgAJQDlADEA4gA9AOAARwDcAFEA2ABZANUA + YADTAGcA0QBtANAAcgDOAHcAzQB8AMwAggDKAIcAyQCOAMgAlgDGAJ4AxACpAMMAtgDBAMYAwADaAL4A + 7AC+APsAvQD/AL0A/wC8AP8AvAD/AP8AAAD/AAAA/wAAAPAAAADoAAMA4QARANsAHwDXACsA0wA3ANAA + QQDNAEsAygBUAMgAWwDGAGIAxABoAMIAbQDBAHIAwAB3AL4AfQC9AIMAuwCJALoAkQC4AJoAtwCkALUA + sQCzAMAAsgDSALEA5gCvAPYArgD/AK0A/wCtAP8ArQD/AP8AAAD+AAAA7wAAAOYAAADdAAAA1AAKAM4A + GADJACUAxQAwAMIAOwDAAEUAvQBOALsAVgC5AFwAtwBiALUAaAC0AG0AswBzALEAeACwAH4ArwCFAK0A + jACsAJUAqgCgAKgArACnALoApQDLAKMA4ACiAPEAoQD9AKEA/wCgAP8AoAD/AP8AAADwAAAA5QAAANoA + AADQAAAAyQACAMMAEAC9AB0AugAqALYANQC0AD8AsQBIAK8AUACtAFcAqwBeAKoAYwCoAGkApwBuAKYA + dACkAHoAowCBAKIAiQCgAJEAnwCcAJ0AqACbALYAmQDHAJgA2wCWAOwAlgD5AJUA/wCVAP8AlQD/APYA + AADoAAAA3AgAAM0IAADEBAAAvgAAALkABwC0ABUAsAAiAK0ALgCqADkApwBDAKUASwCjAFIAoQBZAJ8A + XwCeAGUAnQBqAJsAcACaAHcAmQB+AJcAhQCWAI8AlACZAJIApQCRALMAjwDEAI0A2ACMAOoAiwD2AIoA + /wCKAP8AigD/AO8AAADhEQAA0BkAAMMYAAC5FgAAshEAAK4IAACsAAsAqAAZAKQAJwChADMAngI9AJsE + RgCaBU0AmAZUAJYGWwCVB2EAlAdnAJIIbQCRCHQAkAl7AI4JgwCNCY0AiwmXAIkJpACICLMAhgjEAIQI + 2ACDCesAgQr5AIEK/wCACf8AgAn/AOkQAADaHwAAyCQAALolAACwIwAAqB8AAKQZAACiEgAAoQoRAJwN + HwCZECwAlhI3AJMUQQCRFUkAjxVQAI0WVwCMF10AixdjAIkXagCIGHEAhxh4AIUYgQCEGIoAghiVAIAY + ogB/F7IAfRfEAHsW2QB6F+0AeBf8AHgX/wB3F/8Adxb/AOMcAADSKwAAwS0AALIuAACoLQAAoSoAAJwm + AACZIAAAmBoKAJQbGgCQHicAjR8yAIogPACIIUUAhyJMAIUiUwCEI1kAgiNgAIEkZgB/JG0AfiR1AH0k + fgB7JIgAeSSTAHgkoAB2I68AdCPCAHMi1wBxIuwAcCL7AHAi/wBvIf8AbyH/AN4mAADMMwAAujUAAKw1 + AAChNQAAmjIAAJQvAACRLAAAkCYEAIwmFQCIKCIAhSouAIMrOACBLEEAfyxIAH0tTwB8LVYAey1dAHku + YwB4LmsAdi5yAHUuewBzLoUAci6RAHAtngBuLa0AbSzAAGss1QBqLOoAaSv6AGgq/wBoKv8AaCn/ANgu + AADGOQAAtTsAAKY8AACcOwAAlDoAAI83AACLNAAAiTAAAIUvEACCMR4AfzIqAHwzNAB6ND0AeDVFAHc1 + TAB1NVMAdDZaAHI2YQBxNmgAcDZwAG42eQBsNoMAazaOAGk1nAFnNasBZjS+AWQ00wFjM+kBYjL6AWEy + /wFhMf8BYTH/AdM1AADCPgAAsEAAAKJBAACXQQAAjz8AAIo8AACFOgAAgjgAAH83CwB7ORoAeDonAHY7 + MQB0OzoAcjxCAHA8SQBvPVAAbj1XAGw9XgBrPWYAaT1uAGg9dwBmPYEBZDyNAWI8mgFhO6oCXzu8Al06 + 0gJcOegBXDn5AVs4/wFbN/8BWzf/Ac87AAC9QgAArEQAAJ5FAACTRQAAi0QAAIVBAACBPwAAfT4AAHk+ + BwB2PxYAc0AjAHBBLgBuQjcAbEI/AGtCRwBpQ04AaENVAGdDXABlQ2QAZENsAGJDdQFgQn8BXkKLAlxC + mAJbQagCWUC7AldA0QJWP+gCVj75AlY9/wJVPP8CVTz/AsxAAAC5RgAAqEgAAJpJAACPSQAAh0gAAIFG + AAB9RAAAeEMAAHREAwBxRRMAbUYgAGtHKwBpRzQAZ0g9AGVIRABkSEsAY0hTAGFJWgBgSWEAXkhqAVxI + cwFbSH0BWUeJAldHlwJVRqcDU0a6A1JF0ANRROcCUEP4AlBC/wJQQf8CUEH/AslEAAC2SQAApUsAAJdM + AACMTQAAg0wAAH1LAAB5SAAAc0kAAG9KAABrSg8AaEsdAGZMKABkTDIAYk06AGBNQgBfTUkAXU1QAFxO + WABaTl8AWU1oAVdNcQFVTXwCU0yHAlFMlQNPS6UDTkq4A0xKzwNLSeYDS0j4AktH/wJLRv8CS0b/AsZJ + AACyTQAAoU4AAJRPAACJUAAAgFAAAHlPAAB0TAAAbk0AAGpPAABmUAsAY1AZAGBRJQBeUS8AXFI3AFtS + PwBZUkcAWFJOAFdSVQBVUl0AVFJmAVJSbwFQUnoCTlGGAkxQlANKUKQDSE+3A0dPzQNGTuYDRkz3A0ZL + /wJGS/8CRkr/AsNOAACvUAAAnlEAAJBTAACFUwAAfFMAAHVTAABvUQAAaVMAAGRUAABhVQgAXVUWAFtW + IgBZViwAV1c1AFVXPQBUV0QAU1dMAFFXUwBQV1sATldkAExXbQFKV3gBSFaEAkZWkgJEVaIDQlS2A0FU + zANAU+UCQFH3AkBQ/wJAT/8CQE//Ar9RAACrUwAAmlUAAI1WAACCVgAAeVYAAHFWAABqVgAAZFgAAF9Z + AABbWgMAV1sSAFVbHgBTXCgAUVwxAE9cOQBOXEEATFxJAEtcUQBJXFkASFxhAEZcawFEXHYBQluCAkBb + kQI+WqECPFq0AjtZywI6WOQCOlf2AjpW/wI6Vf8COlT/ArtVAACnVwAAl1gAAIlZAAB+WgAAdVoAAG1a + AABkWwAAXl0AAFleAABUXwAAUGANAE5hGQBMYSQASmEtAEhiNgBHYj4ARWJFAERiTQBCYlYAQWJfAD9i + aQA9YnQAO2GAATlhjwE3YJ8CNmCzAjRfygEzXuMBM1z2AjNb/wI0Wv8CNFr/ArVZAACiWwAAklwAAIVd + AAB6XQAAcV4AAGleAABfYAAAV2IAAFFkAABNZQAASWYHAEVnFABDZx8AQWgpAEBoMQA+aDkAPWhBADxo + SgA6aFIAOWhcADdoZgA1aHEAM2h+ADFnjAAvZ50BLmaxASxlyAErZOIBLGP2ASxi/wEsYf8BLGD/AbBd + AACdXwAAjmAAAIFhAAB2YQAAbmEAAGViAABbZAAAU2cAAExpAABGawAAQG0AADxuDQA6bhkAOG4jADZu + LAA1bzQAM289ADJvRQAwb04AL29YAC1vYgArb24AKm57AChuigAmbpsAJG2vACJtxwAibOEAImr1ACNp + /wEjaP8BI2f/AapiAACYYwAAiWQAAH1lAAByZQAAamUAAGFmAABYaQAATmwAAEduAABAcAAAOHMAADJ1 + BQAudhEALHYcACt2JQApdi4AKHY2ACZ2PwAldkkAI3ZTACF2XgAgdmoAHnZ3ABx2hgAadZgAGHWsABZ0 + xAAWc+AAF3L0ABhx/wAYcP8AGW//AKNnAACSaAAAhGgAAHhpAABvaQAAZmkAAFxrAABTbgAASHIAAEF0 + AAA5dgAAMXkAACl7AAAifQcAHn4TAB1+HQAbfiYAGn4vABh+OAAXfkIAFX5MABN+WAASfmUAEH5yAA1+ + ggALfpMACX2nAAd8vwAHfNoACHrwAAp5/gAKeP8AC3j/AJxsAACMbQAAf20AAHRtAABqbQAAYG8AAFZx + AABMdAAAQ3gAADp7AAAxfQAAKYAAACGCAAAYhAAAEIYHAAuHEgAKhxwACIcmAAeHMAAFhzoABIdFAAKH + UAAAh10AAIdsAACGewAAho0AAIagAACFtwAAhNEAAIPqAACD+AAAgv8AAIL/AJVyAACGcgAAenEAAHBx + AABlcwAAWnUAAFB4AABGfAAAO38AADKCAAAphQAAIIcAABiKAAAPjAAABo4CAACPDAAAjxUAAI8eAACQ + JwAAkDEAAJA8AACQSAAAkFUAAJBkAACQdAAAkIYAAI+ZAACPsAAAjsoAAI3lAACN9QAAjP4AAIz/AI53 + AACBdwAAdnYAAGp4AABfegAAU30AAEiBAAA+hAAAM4gAACmLAAAgjgAAFpAAAA2SAAAElAAAAJYAAACX + BQAAmA0AAJkWAACaHgAAmicAAJsyAACcPgAAnEsAAJxbAACcawAAnH0AAJyRAACbqAAAmsIAAJneAACZ + 8QAAmPwAAJj/AIh9AAB9fAAAcH0AAGSAAABXgwAAS4cAAECLAAA1jgAAKpIAAB+VAAAVmAAAC5oAAAGd + AAAAngAAAKAAAAChAAAAogQAAKQMAAClFAAAph0AAKcnAACoMgAAqUAAAKlQAACqYQAAqnMAAKmHAACp + nQAAqbcAAKjTAACo6wAAp/gAAKf9AISCAAB2gwAAaYYAAFyJAABPjgAAQ5IAADeWAAArmgAAIJ4AABWh + AAAJowAAAKYAAACoAAAAqgAAAKsAAACtAAAArgAAALAAAACxCAAAsxEAALQaAAC2JQAAuDIAALlCAAC6 + VAAAumcAALp7AAC6kgAAuqsAALrHAAC64AAAuvAAALr2AH2JAABvjAAAYpAAAFWVAABHmgAAOp8AAC6j + AAAhpwAAFaoAAAqtAAAAsAAAALIAAAC0AAAAtgAAALgAAAC6AAAAvAAAAL0AAAC/AAAAwQIAAMMMAADF + FwAAyCQAAMwyAADNRQAAzVkAAM5tAADPhAAAz5wAAM+3AADQ0AAA0OQAANDrAHaTAABolwAAW5wAAE2i + AAA/pwAAMqwAACWxAAAYtAAAC7gAAAC7AAAAvQAAAL8AAADBAAAAwgAAAMQAAADGAAAAyAAAAMsAAADN + AAAA0AAAANMAAADWBgAA2xMAAN8hAADjMwAA5EgAAOVeAADndAAA6IwAAOikAADpvAAA6c8AAOrZAHCf + AABipAAAVKoAAEewAAA4tgAAKrsAABu+AAAMwQAAAMMAAADGAAAAyAAAAMoAAADMAAAAzQAAANAAAADT + AAAA1gAAANkAAADcAAAA3wAAAOMAAADnAAAA6wAAAO8OAAD1HwAA+DQAAPlLAAD6YwAA+3sAAPySAAD9 + pgAA/bgAAP3BAP8ABAD/AAAA/wAAAP8ACAD/ABYA/wAkAP8AMAD/ADwA/wBIAP8AUwD8AFwA+QBjAPcA + agD1AHAA9AB2APMAewDxAIAA8ACFAO8AiwDuAJAA7QCXAOwAnwDqAKkA6QC0AOgAxADnANcA5gDrAOUA + /ADlAP8A5QD/AOUA/wDlAP8A4gD/AP8AAAD/AAAA/wAAAP8ABAD/ABIA/wAfAPwALAD7ADgA+QBDAPUA + TgDyAFcA7wBfAO0AZgDrAGwA6gByAOgAdwDnAHwA5gCBAOUAhgDjAIwA4gCTAOEAmwDfAKQA3QCvANwA + vgDaAM8A2QDkANgA9gDYAP8A1wD/ANgA/wDYAP8A2AD/AP8AAAD/AAAA/wAAAP8AAAD7AA0A9QAaAPIA + JwDvADMA7QA+AOkASADmAFIA5ABaAOEAYQDfAGcA3gBtANwAcgDaAHcA2QB8ANcAggDVAIcA0wCOANIA + lQDQAJ8AzgCpAMwAtwDLAMgAygDdAMkA8ADIAP8AyAD/AMcA/wDGAP8AxgD/AP8AAAD/AAAA/gAAAPcA + AADwAAcA6QAUAOUAIQDhAC0A3gA4ANwAQwDZAEwA1QBUANIAXADQAGIAzgBoAMwAbQDKAHIAyQB3AMgA + fADGAIIAxQCJAMMAkADCAJkAwACkAL4AsQC9AMEAuwDUALoA6QC4APoAtwD/ALYA/wC2AP8AtwD/AP8A + AAD/AAAA9AAAAOwAAADiAAAA3AAOANUAGwDRACcAzgAyAMwAPQDJAEYAxgBPAMMAVgDBAF0AvwBjAL0A + aAC8AG0AuwByALkAeAC4AH0AtgCEALUAiwCzAJQAsgCeALAAqwCuALoArQDMAKsA4gCpAPMAqQD/AKgA + /wCoAP8AqAD/AP8AAAD1AAAA6gAAAOAAAADVAAAAzQAHAMcAFADDACEAvwAsAL0ANwC6AEAAuABJALUA + UQCzAFcAsQBdALAAYwCuAGgArQBtAKwAcwCqAHkAqQB/AKcAhwClAI8ApACZAKIApgChALQAnwDGAJ4A + 2wCcAO0AnAD8AJsA/wCbAP8AmwD/APkAAADsAAAA3wAAANEAAADIAAAAwQAAALsADQC3ABoAswAmALAA + MQCtADoAqwBDAKkASwCnAFIApQBYAKMAXgCiAGMAoABpAJ8AbgCeAHQAnAB7AJsAgwCaAIsAmACVAJcA + oQCVAK8AkwDAAJIA0wCRAOgAkAD2AI8A/wCPAP8AjgD/APEAAADkAAAA0gIAAMUBAAC7AAAAtQAAALEA + BQCsABIAqQAeAKYAKgCjADQAoAA+AJ4ARgCcAE0AmgBUAJgAWQCXAF8AlgBlAJUAawCTAHEAkgB4AJEA + fwCPAIgAjgCSAIwAngCKAKwAiQC8AIcAzwCGAOQAhQDzAIQA/QCEAP8AhAD/AOoAAADaDgAAyBEAALoS + AACxEAAAqgoAAKYDAACkAAoAoAAXAJ0AIwCaAC4AlwA4AJQAQQCSAEgAkQBPAI8AVQCOAFsAjQBhAIsA + ZwCKAG0AiQB1AIcAfQCGAIYAhACQAIIAnACBAKoAfwC7AH0AzQB8AOIAewHxAHoB/AB6Af8AegH/AOMQ + AADQGwAAvx4AALEeAACnHAAAoBkAAJwUAACaDAAAmQQNAJUEGwCSBygAjwkyAIwKOwCKC0MAiQxLAIcN + UQCGDVgAhA5eAIMOZACCDmsAgA9yAH8PewB9EIQAew+PAHoPnAB4DqoAdg68AHUN0ABzDuUAcg71AHEO + /wBxDv8AcQ3/AN0cAADJJAAAtycAAKooAACgJwAAmCQAAJMhAACRHAAAkBUEAI4TFACKFSIAhxctAIQY + NwCCGT8AgBpHAH8aTQB9G1QAfBtaAHobYQB5HGgAeBxvAHYceAB0HIIAcxyNAHEcmQBvG6gAbhu6AGwa + zgBqGuUAaRr2AGka/wBoGf8AaBn/ANYmAADDKwAAsS4AAKMvAACZLwAAki0AAIwqAACJJgAAhyEAAIYe + DwCCIB0AfyIpAHwjMgB6JDsAeCRDAHclSgB1JVEAdCZXAHMmXgBxJmUAcCZtAG4mdQBtJn8AayaKAGkm + lwBnJaYAZiW4AGQkzABjJOMAYiT1AGEj/wBhIv8AYSL/ANEuAAC9MgAArDQAAJ41AACTNgAAjDQAAIcx + AACDLwAAgCsAAH4pCgB7KhgAeCslAHUsLwBzLTgAcS0/AHAuRwBuLk0AbS5UAGwuWwBqL2IAaS9qAGcv + cwBlL30AZC+IAGIulQBgLqQAXy22AF0tywBcLOIAWyz0AFor/wBaKv8AWir/AM0zAAC4NwAApzkAAJk6 + AACPOwAAhzoAAII3AAB9NQAAejIAAHgxBQB1MRQAcjMhAG8zKwBtNDQAazU8AGk1RABoNUsAZzZRAGU2 + WABkNmAAYjZoAGE2cQBfNnsAXTaGAFw1kwBaNaMAWDS1AFY0ygBVM+EAVDL0AFQx/wBUMf8AVDD/AMg4 + AAC0OwAAoz0AAJU/AACLPwAAgz4AAH08AAB5OgAAdTgAAHI4AQBvOBEAbDkdAGk6KABnOzEAZTs5AGQ7 + QQBiPEgAYTxPAF88VgBePF4AXDxmAFs8bwBZPHkAVzyFAFY7kgBUO6EAUjqzAFA6yABPOeAATzjzAE43 + /wBONv8ATjb/AMQ8AACwPwAAn0EAAJJDAACHQwAAf0IAAHlBAAB1PgAAcT0AAG0+AABpPg0AZj8aAGRA + JQBiQC8AYEE3AF5BPgBcQUYAW0JNAFpCVABYQlwAV0JkAFVCbQBUQncAUkGDAFBBkABOQKABTECyAUs/ + xwFJPt8AST3yAEk8/wBJO/8ASTv/AME/AACsQgAAnEUAAI9GAACERgAAe0YAAHVFAABxQgAAbEIAAGdD + AABkRAkAYUUXAF5FIgBcRiwAWkY0AFlGPABXR0MAVkdKAFRHUgBTR1kAUUdiAFBHawBOR3YATEaBAEpG + jwBIRZ4BR0WxAUVExgFEQ98BRELyAURB/wFEQP8BRED/Ab1DAACpRgAAmUgAAItJAACBSgAAeEoAAHFJ + AABsRgAAZ0cAAGJIAABeSQUAW0oTAFlKHwBXSykAVUsyAFNLOQBSTEEAUExIAE9MTwBNTFcATExgAEpM + aQBJTHQAR0uAAEVLjQBDSp0BQUqvAT9JxQE+SN4APkfyAT5G/wE+Rf8BP0T/AblGAAClSQAAlUsAAIhM + AAB9TQAAdU0AAG1NAABoSwAAYkwAAF1OAABZTgIAVk8QAFNQHABRUCYAT1AvAE1QNwBMUT4ASlFGAElR + TQBIUVUARlFeAERRZwBDUXIAQVB+AD9QjAA9T5wAO0+uATlOxAA4Td0AOEzxADhL/wE5Sv8BOUn/AbVK + AACiTAAAkk8AAIVQAAB6UAAAcVAAAGpQAABjUAAAXFEAAFdTAABTVAAAT1QLAE1VGABKVSIASVYrAEdW + MwBFVjsARFZDAENWSgBBVlIAQFZbAD5WZQA8VnAAOlZ8ADhVigA3VZoANVStADNUwwAyU9wAMlHwADJQ + /wAyT/8BM0//AbBOAACeUAAAjlIAAIFTAAB2UwAAblQAAGZUAABeVQAAVlcAAFFYAABMWQAASVoGAEVb + EwBDWx4AQVsnAEBcLwA+XDcAPVw/ADtcRwA6XFAAOFxZADZcYgA1XG4AM1x6ADFbiAAvW5gALVqrACxa + wQAqWdsAK1fwACtW/gAsVf8ALFT/AKtSAACZVAAAilYAAH1XAABzVwAAalcAAGJYAABaWQAAUVwAAEtd + AABFXwAAQWABAD1hDQA7YhkAOWIiADdiKwA2YjMANGI7ADNiQwAxYkwAMGJVAC5iXwAsYmsAKmJ3AChi + hgAmYZYAJGGpACNgvwAhX9kAIl7vACNc/gAjW/8AJFv/AKZWAACUWAAAhVoAAHlaAABvWwAAZlsAAF5b + AABWXQAATGAAAEZiAABAZAAAOWYAADRoBwAxaRIAL2kcAC1pJQAraS4AKmk2AChpPwAnaUgAJWlRACRp + XAAiaWcAIGl0AB5pgwAcaJMAGminABhnvQAXZtgAGGXuABlj/gAaY/8AGmL/AKBbAACPXQAAgV4AAHVe + AABrXgAAYl8AAFpgAABRYgAASGUAAEFnAAA6aQAAM2wAACtuAAAlcAoAI3AVACFwHwAfcScAHnEwABxx + OQAbcUIAGXFMABdxVwAWcGMAFHBwABJwfwAQcJAADW+jAAtvugAKbtMAC23rAAxr+wANav8ADmr/AJpg + AACJYQAAfGIAAHFiAABnYgAAXmMAAFVlAABMZwAAQ2oAADptAAAzcAAAK3IAACR0AAAcdwEAFXgLABJ5 + FgAReR8AD3koAA15MQAMeTsACnlGAAh5UQAHeF0ABXhrAAJ4egAAeIoAAHedAAB2swAAdswAAHXlAAB0 + 9QAAc/8AAHL/AJNlAACEZgAAd2YAAG1mAABjZgAAWWgAAE9rAABGbgAAPXEAADN0AAArdgAAI3kAABt7 + AAATfgAACoAFAAOBDgAAgRgAAIEhAACBKgAAgTQAAIE+AACBSgAAgVcAAIFkAACAdAAAgIQAAICXAAB/ + rQAAf8YAAH7hAAB98gAAfPwAAHz/AIxrAAB+awAAc2sAAGlrAABebAAAU28AAElyAAA/dQAANXgAACx8 + AAAjfgAAGoEAABKDAAAJhQAAAIcBAACICQAAiRIAAIkaAACKIgAAiisAAIs2AACLQQAAi04AAItdAACL + bAAAi30AAIqRAACKpwAAicAAAIjcAACH8AAAh/sAAIb/AIZwAAB5cAAAb28AAGNxAABXdAAATHcAAEF6 + AAA3fgAALYEAACOEAAAZhwAAEIoAAAeMAAAAjgAAAJAAAACRAwAAkgoAAJMSAACUGgAAlCIAAJUsAACW + OAAAlkUAAJZTAACWZAAAlnYAAJaKAACWnwAAlbgAAJTUAACU7AAAk/gAAJL/AIB2AAB1dQAAaXYAAFx5 + AABQfAAARIAAADmEAAAuiAAAI4wAABmPAAAOkQAABJQAAACWAAAAmAAAAJoAAACbAAAAnAEAAJ4IAACf + EAAAoBgAAKIhAACjLAAApDkAAKRIAAClWQAApWwAAKSAAACklQAAo68AAKLLAACi5gAAovQAAKH9AHx7 + AABvfAAAYn8AAFWDAABIhwAAO4wAAC+QAAAkkwAAGJcAAA2aAAACnQAAAKAAAACiAAAAowAAAKUAAACn + AAAAqAAAAKoAAACsBAAArQwAAK8VAACxIAAAsywAALQ7AAC1TQAAtWAAALV0AAC1igAAtaIAALW+AAC0 + 2wAAtO0AALP4AHWCAABohQAAWokAAE2OAABAkwAAMpgAACadAAAZoAAADaQAAAGnAAAAqgAAAKwAAACu + AAAAsAAAALIAAAC0AAAAtgAAALgAAAC6AAAAvAAAAL4HAADAEgAAwx4AAMcsAADIPgAAyFIAAMlnAADK + fQAAypUAAMqwAADKywAAyuEAAMruAG6MAABhkAAAU5UAAEWbAAA3oAAAKqYAAByqAAAQrgAAA7EAAAC1 + AAAAtwAAALoAAAC8AAAAvQAAAMAAAADCAAAAxAAAAMYAAADIAAAAygAAAM0AAADQAgAA1A4AANocAADe + LQAA30IAAOFXAADibgAA44YAAOSfAADkuAAA480AAOPgAGiYAABanQAATKMAAD6pAAAwrwAAIrQAABS4 + AAAGvAAAAMAAAADCAAAAxQAAAMYAAADIAAAAyQAAAMwAAADPAAAA0QAAANQAAADYAAAA2wAAAN8AAADj + AAAA5wAAAOsKAADwGwAA8y8AAPVGAAD2XQAA+HUAAPmNAAD6owAA+rUAAPvEAP8AAAD/AAAA/wAAAP8A + BQD/ABMA/wAfAP8ALQD/ADgA/wBEAP8ATgD8AFcA+gBfAPgAZgD2AGwA9QByAPQAdwDyAHwA8QCBAPAA + hgDuAI0A7QCTAOsAmwDqAKQA6ACxAOYAvwDlANIA4wDoAOMA+gDiAP8A4wD/AOMA/wDfAP8A2wD/AP8A + AAD/AAAA/wAAAP8AAQD/AA0A/wAbAP0AKAD5ADQA+AA/APUASQDyAFMA7wBbAO0AYgDrAGgA6QBtAOcA + cwDmAHcA5QB8AOMAggDiAIgA4ACOAN8AlgDdAJ8A2wCrANkAuQDXAMoA1QDhANQA9ADTAP8A0wD/ANIA + /wDRAP8AzgD/AP8AAAD/AAAA/wAAAP8AAAD4AAkA9AAWAO8AIwDtAC4A6wA6AOkARADlAE0A4gBVAN8A + XADdAGMA2wBoANkAbQDYAHMA1QB4ANQAfQDSAIMA0QCJAM8AkQDNAJoAywClAMkAsgDIAMIAxgDZAMQA + 7QDDAP4AwQD/AMEA/wDBAP8AwQD/AP8AAAD/AAAA+wAAAPMAAADsAAMA5gARAOEAHQDeACkA2wA0ANkA + PgDVAEgA0QBQAM8AVwDMAF0AygBjAMkAaADHAG0AxgBzAMQAeADCAH0AwACEAL4AiwC8AJQAugCeALgA + qwC2ALsAtQDPALQA5QCzAPgAsgD/ALIA/wCyAP8AsgD/AP8AAAD6AAAA8AAAAOYAAADeAAAA1QAKANAA + FwDMACMAyQAuAMcAOADFAEIAwgBKAL8AUQC8AFgAugBeALgAYwC2AGgAtABtALMAcwCyAHgAsAB/AK8A + hgCtAI8AqwCZAKoApQCoALQApwDHAKUA3gCkAPEApAD/AKMA/wCjAP8AowD/AP0AAADxAAAA5AAAANgA + AADOAAAAxgAEAMEAEQC9AB0AuQAoALcAMgC1ADwAsgBEAK8ATACtAFIAqwBYAKkAXgCoAGMApwBoAKUA + bQCkAHMAowB6AKEAgQCgAIoAngCUAJwAoACbAK4AmgDAAJgA1QCXAOoAlgD6AJUA/wCVAP8AlQD/APQA + AADnAAAA1gAAAMoAAADAAAAAuQAAALMACgCvABYArAAiAKkALACnADYApQA+AKIARgCgAE0AnwBTAJ0A + WQCcAF4AmgBjAJkAaQCYAG8AlgB1AJUAfQCTAIUAkQCPAJAAmwCOAKkAjQC6AIwAzgCLAOQAigD1AIkA + /wCJAP8AiQD/AOwAAADbAAAAygAAAL0AAACzAAAArQAAAKgAAwCkAA8AoQAbAJ4AJgCbADAAmQA5AJcA + QQCVAEgAlABOAJIAVACRAFoAjwBfAI4AZQCMAGsAiwByAIoAeQCIAIIAhwCMAIUAlwCEAKUAggC2AIEA + yACAAN8AfwDvAH4A/AB+AP8AfgD/AOUAAADQBwAAvwsAALILAACoCgAAogUAAJ4AAACbAAcAmAATAJUA + HwCSACoAkAAzAI4APACMAEMAigBKAIgAUACHAFYAhgBbAIQAYQCDAGgAggBuAIAAdgB/AH8AfQCJAHwA + lQB6AKMAeACzAHcAxgB2ANsAdQDtAHQA+AB0AP8AcwD/AN0OAADIFAAAthcAAKkYAACfFwAAmBUAAJQQ + AACSCAAAkAALAI4AFwCLACMAiAAtAIUCNgCDAz4AgQRFAIAETAB/BVIAfQVYAHwGXgB7BmUAeQdsAHgH + dAB2B30AdAeIAHMHlABxBqIAbwayAG4FxQBsBdsAawbrAGoG+QBqBv8Aagb/ANQZAADAHgAAryAAAKIi + AACXIgAAkB8AAIscAACIFwAAiBEBAIcKEACDDB0AgA4oAH4QMQB8EToAehJBAHgSSAB3E04AdRNVAHQT + WwByFGIAcRRqAG8UcgBuFHwAbBSGAGoUkwBoFKEAZxOyAGUSxgBkEt0AYhLwAGIS/QBiEv8AYhH/AM0g + AAC5JQAAqCgAAJsqAACRKQAAiSgAAIQlAACBIgAAfx0AAH8YCQB7GBcAeBojAHYbLQB0HDYAch09AHAd + RABvHksAbR5RAGweWABqHl8AaR9nAGcfcABmH3kAZB+EAGIekQBgHp8AXh2wAF0dxABbHNwAWhzvAFoc + /gBaG/8AWhr/AMgnAAC0KwAAoy4AAJYwAACLMAAAhC8AAH4sAAB7KgAAeCYAAHciBAB0IhMAcSMfAG8k + KQBsJTIAayY6AGkmQQBnJ0gAZidOAGUnVQBjJ10AYihkAGAobQBeKHcAXSeCAFsnjwBZJ50AVyavAFUl + wwBUJdoAUyTuAFMk/QBTI/8AUyL/AMMsAACvMAAAnjMAAJE1AACHNQAAfzQAAHkyAAB1MAAAci0AAHEq + AABuKg4AaysbAGgsJgBmLS8AZC43AGIuPgBhLkUAXy9MAF4vUwBdL1oAWy9iAFkvawBYL3UAVi+AAFQu + jQBSLpwAUC2tAE8twQBNLNkATSvtAEwr/QBMKv8ATSn/AL4xAACrNQAAmjcAAI05AACDOQAAezkAAHU4 + AABxNAAAbTMAAGsxAABnMgoAZTIXAGIzIgBgNCwAXjQ0AFw1OwBbNUIAWTVJAFg1UABWNVgAVTVgAFM1 + aQBSNXMAUDV+AE41iwBMNJoASjSsAEgzwABHMtgARzLtAEcx/ABHMP8ARy//ALo1AACnOAAAlzsAAIo9 + AAB/PQAAdz0AAHA8AABsOgAAaTcAAGU3AABiOAcAXzgUAFw5HwBaOikAWDoxAFc6OQBVO0AAVDtHAFI7 + TgBRO1YATzteAE07ZwBMO3EASjt9AEg6igBGOpkARDmqAEM5vwBBONYAQTfsAEE2/ABBNf8AQTX/ALc4 + AACjPAAAkz8AAIZAAAB8QQAAc0AAAG1AAABoPgAAZTwAAGA9AABcPgMAWT4RAFc/HABVPyYAUz8uAFFA + NgBPQD0ATkBEAE1ATABLQFMASkBcAEhAZQBGQHAAREB7AEJAiABBP5gAPz+pAD0+vgA7PdUAOzzsADs7 + +wA8Ov8APDn/ALM8AACgPwAAkEIAAINDAAB5RAAAcEQAAGlDAABkQgAAYEEAAFtCAABXQwAAVEQNAFFE + GQBPRCMATUUsAEtFNABKRTsASEVCAEdFSQBFRlEAREZaAEJGYwBARW4AP0V6AD1FhwA7RJYAOUSoADdD + vQA2QtQANkHrADZA+wA2P/8ANz7/AK8/AACcQwAAjUUAAIBGAAB1RwAAbUcAAGZHAABgRgAAWkYAAFVH + AABRSAAATkkJAEtJFQBJSiAAR0opAEVKMQBESjgAQktAAEFLRwA/S08APktYADxLYQA6S2wAOEp4ADdK + hQA1SpUAM0mmADFIuwAvR9MAL0bqADBF+wAwRP8AMUP/AKtDAACZRgAAiUgAAH1KAABySgAAaUoAAGJK + AABcSgAAVUsAAE9MAABLTQAASE4FAERPEgBCTxwAQFAlAD9QLQA9UDUAPFA9ADpQRAA5UEwAN1BVADVQ + XwA0UGoAMlB2ADBPhAAuT5MALE6lACpOugAoTdIAKUzqAClL+gAqSv8AKkn/AKdHAACUSgAAhUwAAHlN + AABvTQAAZk4AAF5OAABYTgAATlAAAElSAABFUwAAQVQAAD1VDAA7VRcAOVYhADdWKQA1VjEANFY5ADNW + QQAxVkkAL1ZSAC5WXAAsVmcAKlZ0AChVgQAmVZEAJFSjACJUuQAgU9EAIVLpACJR+gAiT/8AI0//AKJL + AACQTgAAgVAAAHVQAABrUQAAYlEAAFtRAABUUgAASlUAAERXAAA/WAAAOVoAADVbBwAyXBIAMFwcAC5c + JQAtXC0AK1w1ACpcPQAoXEYAJlxPACVdWQAjXGQAIVxxAB9cfwAdW48AG1uhABlatwAXWs8AGFjoABlX + +QAaVv8AGlX/AJ1QAACLUgAAfVMAAHFUAABnVAAAX1QAAFdVAABQVgAAR1kAAEBbAAA5XQAAM18AACxi + AAAoYwsAJWMWACRjHwAiYycAIWQwAB9kOAAdZEEAHGRLABpjVQAYZGEAFmNuABRjfAASY4wAEGKfAA1h + tAAMYc0ADGDmAA5e+AAPXf8AEFz/AJdVAACGVgAAeVcAAG1YAABjWAAAW1gAAFNZAABLWwAAQ10AADpg + AAA0YgAALWUAACZnAAAeagQAGWsOABdrGAAWayEAFGspABJrMgARazsAD2tGAA1rUQALa1wACWtpAAdr + eAAFaogAAmmaAAFprwAAaMcAAGfgAAFm8gADZf4AA2T/AJFaAACBWwAAdFwAAGlcAABgXAAAV1wAAE5e + AABGYAAAPWMAADRmAAAtaQAAJWsAAB5uAAAWcAAADnIGAAhzEAAGcxoABXMjAANzLAABczUAAHM/AABz + SgAAc1cAAHJkAABycgAAcoIAAHGUAABxqQAAcMIAAG/cAABu7wAAbvoAAG3/AIpfAAB7YAAAb2AAAGVg + AABcYAAAUmEAAElkAABAZwAAN2oAAC5tAAAlcAAAHXIAABV1AAANdwAABXkDAAB6DAAAehQAAHscAAB7 + JQAAfC4AAHw4AAB8QwAAfFAAAHtdAAB7bAAAe3wAAHuPAAB6pAAAeb0AAHjYAAB37QAAd/kAAHb/AIRk + AAB2ZQAAa2QAAGJkAABXZgAATGgAAEJrAAA4bgAAL3IAACZ1AAAdeAAAFHoAAAt9AAADfwAAAIEAAACC + BwAAgg4AAIMWAACEHgAAhSYAAIUwAACGOwAAhkgAAIZVAACFZQAAhXYAAIWIAACEngAAhLcAAIPSAACC + 6gAAgfgAAIH/AH1qAABxaQAAaGkAAFxqAABQbQAARXAAADp0AAAwdwAAJnsAABx+AAATgQAACYMAAACG + AAAAiAAAAIkAAACLAAAAjAcAAI0NAACOFQAAjx0AAJAmAACRMQAAkj4AAJJMAACRXAAAkW4AAJGBAACQ + lwAAkLAAAI/MAACO5wAAjvYAAI3/AHhvAABubgAAYW8AAFVyAABJdgAAPXoAADF+AAAnggAAHIUAABKI + AAAHiwAAAI4AAACQAAAAkgAAAJQAAACVAAAAlgAAAJgEAACZCwAAmxMAAJwcAACeJgAAnzMAAJ9BAACg + UgAAn2QAAJ94AACejgAAnqcAAJ7DAACd4AAAnPIAAJz9AHR0AABndQAAWngAAE18AABAgQAANIUAACiJ + AAAcjgAAEZEAAAWUAAAAlwAAAJkAAACbAAAAngAAAKAAAAChAAAAowAAAKUAAACmAAAAqAcAAKoQAACs + GgAAryUAALA0AACxRQAAsVgAALBtAACwhAAAsJsAALC3AACu1QAArusAAK73AG57AABgfgAAU4MAAEWI + AAA4jQAAK5IAAB6WAAARmgAABZ4AAAChAAAApAAAAKYAAACoAAAAqgAAAKwAAACvAAAAsAAAALMAAAC1 + AAAAtwAAALkCAAC8DAAAvxgAAMImAADDOAAAw0wAAMRhAADFdwAAxY8AAMaoAADGwwAAxd0AAMTuAGeF + AABZiQAAS48AAD2UAAAvmgAAIZ8AABSkAAAGqAAAAKwAAACvAAAAsgAAALQAAAC2AAAAuAAAALoAAAC8 + AAAAvwAAAMEAAADDAAAAxgAAAMgAAADMAAAAzwgAANQXAADZJwAA2zsAANxRAADeaAAA3oAAAN+ZAADf + sgAA38oAAN/eAGCQAABSlgAAQ5wAADWiAAAnqAAAGa4AAAqyAAAAtgAAALoAAAC9AAAAwAAAAMIAAADE + AAAAxgAAAMgAAADLAAAAzQAAANAAAADTAAAA1gAAANoAAADeAAAA4gAAAOcFAADsFgAA8CkAAPFAAADz + WAAA9XAAAPaIAAD3nwAA97QAAPfGAP8AAAD/AAAA/wAAAP8AAQD/AA4A/wAcAP8AKAD/ADQA/wBAAP8A + SgD9AFMA+wBbAPkAYgD3AGgA9QBuAPQAcwDzAHgA8QB9APAAgwDvAIgA7QCPAOwAlwDqAKEA6ACsAOYA + uwDlAM4A4wDlAOEA+gDgAP8A3wD/AN4A/wDWAP8A0QD/AP8AAAD/AAAA/wAAAP8AAAD/AAkA/gAXAPwA + IwD6ADAA+QA7APUARQDyAE4A7wBWAO0AXQDrAGMA6QBpAOcAbgDmAHMA5AB4AOIAfgDgAIMA3gCKANwA + kQDZAJsA1gCmANQAtADSAMcA0ADdAM8A8wDOAP8AzAD/AMwA/wDKAP8AxwD/AP8AAAD/AAAA/wAAAPwA + AAD3AAUA8QASAO4AHgDrACoA6gA1AOgAQADkAEkA4QBRAN0AWADaAF4A1wBkANQAaQDSAG4A0ABzAM8A + eADNAH4AywCFAMoAjADIAJUAxgCgAMQArQDCAL8AwADTAL8A7AC9AP4AvQD/AL0A/wC9AP8AvAD/AP8A + AAD/AAAA+QAAAPAAAADoAAAA4gAMAN4AGQDaACUA2AAwANYAOgDRAEMAzABLAMkAUgDHAFkAxQBeAMMA + ZADBAGkAwABuAL4AcwC9AHkAuwB/ALoAhgC4AI8AtgCaALQApgCyALcAsQDKAK8A5ACuAPcArQD/AK0A + /wCtAP8ArQD/AP8AAAD3AAAA6wAAAOEAAADXAAAA0AAGAMsAEwDHAB8AxAAqAMEANAC/AD0AvABFALkA + TAC3AFMAtQBZALMAXgCyAGMAsABoAK4AbgCsAHMAqwB6AKkAgQCnAIkApQCUAKQAoACiAK8AoQDCAJ8A + 2wCfAO8AngD/AJ0A/wCdAP8AnQD/APgAAADsAAAA3QAAANAAAADHAAAAvwAAALoADQC2ABkAsgAjALAA + LQCvADcArQA/AKoARwCnAE0ApQBTAKMAWQCiAF4AoABjAJ8AaACeAG4AnAB0AJsAfACZAIQAmACOAJYA + mgCVAKkAkwC6AJIA0ACRAOgAkAD5AJAA/wCQAP8AkAD/APAAAADfAAAAzgAAAMIAAAC5AAAAsQAAAKwA + BwCoABIApQAdAKIAKACgADEAngA5AJwAQQCaAEgAmABOAJcAUwCVAFkAlABeAJMAZACRAGkAkABwAI8A + dwCNAIAAjACKAIoAlQCIAKMAhwC0AIYAyACFAOAAhADyAIQA/wCDAP8AgwD/AOYAAADTAAAAwgAAALUA + AACrAAAApQAAAKAAAACcAAwAmQAXAJcAIgCUACsAkgA0AJEAPACPAEMAjQBJAIwATwCKAFQAiQBaAIcA + XwCGAGUAhQBsAIMAcwCCAHwAgACGAH8AkQB9AJ8AfACvAHsAwgB6ANkAeQDtAHgA+gB4AP8AeAD/ANwA + AADIAQAAtwUAAKoGAACgBQAAmQEAAJYAAACTAAUAkAARAI0AGwCLACUAiAAuAIcANgCFAD4AgwBEAIIA + SgCAAFAAfwBWAH0AWwB8AGIAewBoAHkAcAB4AHkAdgCDAHUAjgBzAJwAcgCrAHAAvgBvANMAbgDoAG4A + 9gBtAP8AbQD/ANMHAAC/DQAArhEAAKETAACXEgAAkBAAAIsLAACJBQAAiAAJAIUAFACDAB8AgAApAH4A + MQB8ADkAegBAAHkARgB3AEwAdgBSAHUAWABzAF8AcgBmAHEAbgBvAHcAbQCBAGwAjABqAJoAaACqAGcA + vABmANAAZQDmAGQA8wBjAPwAYwD/AMsSAAC3FwAAphsAAJkdAACPHQAAiBsAAIMXAACAEwAAfwwAAH8F + DAB8BBgAeQYjAHYHLAB0CDQAcwk8AHEKQgBwCkkAbgtPAG0LVQBsC1wAagxkAGkMbABnDHUAZQyAAGMM + jABhC5oAYAuqAF4KvQBcCdIAWwrmAFsK9QBbCv8AWwn/AMQaAACwHwAAoCIAAJMkAACIJQAAgSMAAHwh + AAB5HQAAdxkAAHcTBAB1ERIAchIeAG8TKABtFDAAaxU4AGoWPwBoFkUAZxZMAGUXUwBkF1oAYhdhAGAX + agBfF3MAXRd+AFsXiwBZF5kAVxapAFUVvQBUFdMAUxXpAFMU+QBTFP8AUxP/AL4gAACrJQAAmikAAI0q + AACDKwAAeyoAAHYoAABzJQAAcCIAAG8eAABtGw0AahwZAGgdJABmHiwAZB40AGIfOwBhH0IAXyBJAF4g + UABcIFcAWyBfAFkgZwBXIHEAVSB8AFMgiQBSIJcAUB+oAE4euwBMHdEASx3oAEsd+ABLHP8ASxz/ALkl + AACmKgAAli0AAIkvAAB/MAAAdy8AAHEuAABtKwAAaigAAGgmAABmJAkAZCQWAGElIABfJikAXScxAFsn + OABaJz8AWChGAFcoTQBVKFQAVChcAFIoZQBQKG8ATih6AE0ohwBLJ5UASSemAEcmugBFJdAARSXnAEUk + +ABFI/8ARSP/ALUqAACiLgAAkjIAAIUzAAB6NAAAcjQAAGwyAABoMQAAZS4AAGMsAABgKwUAXSsSAFss + HQBZLSYAVy0uAFUuNQBTLjwAUi5DAFAvSgBPL1IATS9aAEwvYwBKL20ASC94AEYuhQBELpQAQi2lAEAs + uAA/LM8APivmAD4q9wA/Kf8APyn/ALEuAACeMgAAjjUAAIE3AAB3OAAAbzcAAGg3AABkNQAAYTIAAF4x + AABaMgEAWDIOAFUyGQBTMyMAUTMrAE80MwBNNDoATDRBAEs0SABJNVAARzVYAEY1YQBENWsAQjR3AEA0 + hAA+NJIAPDOjADoytwA5Mc4AODHlADgw9wA5L/8AOS7/AK0yAACaNgAAizkAAH46AAB0OwAAazsAAGU6 + AABgOQAAXDYAAFg2AABVNwAAUjgKAE84FgBNOSAASzkoAEk5MABIOjcARjo/AEU6RgBDOk4AQjpWAEA6 + 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 + AAAAngAAAKEAAACjAAAApQAAAKcAAACqAAAArAAAAK4AAACwAAAAswAAALUAAAC4BgAAuxIAAL8fAADA + MAAAwEQAAMBZAADAcAAAwIkAAMCiAADAvgAAwNkAAL7sAF9+AABRgwAAQ4gAADWOAAAnlAAAGZkAAAue + AAAAogAAAKYAAACqAAAArAAAAK8AAACwAAAAswAAALUAAAC4AAAAugAAAL0AAAC/AAAAwgAAAMUAAADI + AAAAzAMAANARAADVIQAA1TUAANZLAADYYgAA2XsAANqUAADbrQAA28UAANzZAFiKAABKkAAAO5YAAC2c + AAAeogAAEKgAAAGtAAAAsQAAALUAAAC4AAAAugAAAL0AAAC+AAAAwAAAAMMAAADGAAAAyQAAAMsAAADO + AAAA0QAAANQAAADZAAAA3QAAAOMAAADoEAAA7CQAAO46AADwUgAA8WsAAPKDAADznAAA87IAAPTEAP8A + AAD/AAAA/wAAAP8AAAD/AAoA/wAYAP8AJAD/ADAA/wA8AP8ARgD/AE8A/ABXAPkAXgD2AGQA9ABqAPIA + bwDwAHQA7wB5AO0AfgDsAIQA6wCLAOkAkwDnAJwA5QCoAOMAuADhAMoA3wDkAN0A+QDbAP8A2gD/ANYA + /wDPAP8AywD/AP8AAAD/AAAA/wAAAP8AAAD/AAYA/wATAPwAIAD6ACsA+gA2APYAQQDwAEoA7ABSAOoA + WQDoAF8A5gBlAOQAagDiAG8A4QB0AN8AeQDdAH8A3ACGANoAjgDYAJcA1QCiANIAsQDQAMIAzgDbAMwA + 8gDKAP8AyQD/AMkA/wDEAP8AwQD/AP8AAAD/AAAA/wAAAPsAAAD1AAAA8AAOAO0AGgDrACYA5wAxAOQA + OwDgAEQA3QBMANoAUwDWAFoA1ABfANIAZADQAGkAzgBvAMwAdADJAHoAxwCAAMUAiADDAJEAwQCbAL8A + qQC9ALoAuwDPALoA6gC5AP4AuAD/ALgA/wC4AP8AtQD/AP8AAAD/AAAA9QAAAOwAAADlAAAA3wAIANoA + FQDUACAA0QArANAANQDNAD4AygBGAMYATQDCAFQAwABZAL4AXwC8AGQAugBpALkAbgC3AHQAtgB6ALQA + ggCyAIsAsACVAK4AoQCtALIAqwDGAKkA4QCoAPYAqAD/AKcA/wCnAP8ApwD/AP4AAADyAAAA5wAAANsA + AADRAAAAygACAMUADgDAABoAvgAlALwALwC6ADgAtgBAALMARwCxAE4ArwBUAK0AWQCsAF4AqgBjAKkA + aQCnAG4ApgB1AKQAfACiAIUAoQCPAJ8AmwCdAKoAnAC9AJsA1QCZAO8AmQD/AJgA/wCYAP8AmAD/APUA + AADlAAAA1QAAAMkAAADAAAAAuQAAALMACQCvABQArAAfAKoAKQCoADIApwA6AKQAQgCiAEgAoABOAJ4A + UwCcAFkAmwBeAJkAYwCYAGkAlgBwAJUAdwCTAH8AkgCJAJAAlQCOAKMAjQC1AIwAywCLAOYAigD5AIoA + /wCKAP8AigD/AOkAAADYAAAAxwAAALoAAACxAAAAqQAAAKQAAwCgAA4AnQAZAJsAIwCaACwAmAA0AJYA + PACUAEMAkgBJAJAATgCPAFMAjgBZAIwAXgCLAGQAigBrAIgAcgCHAHoAhQCEAIQAkACCAJ4AgQCvAIAA + wwB/AN4AfgDyAH4A/wB+AP8AfgD/AN8AAADKAAAAugAAAK0AAACjAAAAnQAAAJgAAACUAAgAkQATAI8A + HQCNACYAiwAvAIoANgCIAD0AhgBEAIUASQCEAE8AggBUAIEAWgCAAGAAfgBmAH0AbgB7AHYAegCAAHgA + jAB3AJkAdQCpAHQAvQBzANQAcwDrAHIA+gByAP8AcgD/ANMAAAC/AAAArwAAAKEBAACYAAAAkQAAAI0A + AACKAAIAiAANAIUAFwCDACEAgQAqAIAAMQB+ADgAfAA/AHsARQB5AEoAeABQAHcAVgB1AFwAdABjAHIA + agBxAHMAbwB9AG4AiABsAJUAawClAGoAuABpAM0AaADkAGcA9ABnAP4AZwD/AMkBAAC2BwAApQwAAJgO + AACODQAAiAsAAIMHAACBAQAAfwAGAH0AEQB7ABsAeQAkAHcALAB1ADQAcwA7AHIAQQBwAEcAbwBMAG4A + UgBsAFkAawBgAGkAZwBoAHAAZgB6AGUAhgBjAJMAYQCiAGAAtABfAMkAXgDgAF0A8ABdAPsAXQD/AMIL + AACuEQAAnRYAAJAYAACHGAAAfxYAAHsTAAB4DgAAdwkAAHYCCgB0ABQAcgAeAG8AJwBtAS8AawI2AGoC + PQBoA0MAZwNJAGYETwBkBFYAYwRdAGEFZQBfBW8AXgV5AFwEhQBaBJIAWAOhAFcDswBVAsgAVALeAFQC + 7gBTAvkAVAL/ALsTAACnGQAAlx0AAIofAACAIAAAeR4AAHQcAABwGQAAbhUAAG4QAgBuCg0AawoZAGgL + IgBmDCsAZA0yAGMOOQBhDkAAYA5GAF4PTQBdEFQAWxBcAFoQZABYEG4AVhB4AFQQhQBSEJMAUA6jAE4O + tQBMDcoASw3gAEsN8QBLDPwASwz/ALUaAACiHwAAkiMAAIUlAAB7JgAAcyUAAG0jAABqIAAAaB0AAGYZ + AABmFQcAZBUUAGEWHgBfFycAXRcvAFsYNgBaGD0AWBlDAFcZSgBVGVEAUxlZAFIZYgBQGmsAThl2AEwZ + gwBKGZEASBihAEYXtABEF8kAQxbhAEMW8wBEFf8ARBX/ALAfAACdJQAAjSgAAIEqAAB2KgAAbioAAGgp + AABkJwAAYiMAAGAhAABfHgMAXR0QAFoeGgBYHyMAViArAFQgMwBTIDoAUSFAAFAhRwBOIU8ATCFXAEsh + XwBJIWkARyF0AEUhgQBDIY8AQSCfAD8fsgA9HsgAPB7gADwd8gA9Hf8APRz/AKskAACZKQAAiSwAAH0u + AAByLgAAai4AAGQtAABfLAAAXSkAAFsnAABYJQAAViUMAFQlFwBRJiAATycoAE4nMABMJzcASyg+AEko + RQBHKEwARihUAEQoXQBCKGcAQChzAD4ofwA8J44AOieeADgmsQA2JccANSTfADYk8gA2I/8ANyL/AKco + AACVLQAAhjAAAHkyAABvMgAAZzIAAGAxAABbMAAAWC4AAFYrAABTKwAAUCwIAE0sFABLLB0ASS0lAEct + LQBGLjQARC47AEMuQgBBLkoAQC5SAD4uWwA8LmYAOi5xADgufgA2LYwANC2dADIssAAwK8YALyreADAq + 8QAwKf8AMSj/AKQsAACRMAAAgjMAAHY1AABsNQAAYzUAAF01AABXNAAAUzMAAFEwAABNMQAASjIFAEcy + EABFMhoAQzMjAEEzKgBAMzIAPjQ5AD00QAA7NEgAOjRQADg0WQA2NGQANDRvADIzfAAwM4sALjKbACwy + rgAqMcUAKTDdACov8QArLv8AKy3/AKAwAACONAAAfzYAAHM4AABoOAAAYDgAAFk4AABUNwAATzcAAEs1 + AABHNgAARDcBAEE4DAA/OBcAPTggADs4KAA6OS8AODk2ADc5PgA1OUUAMzlOADI5VwAwOWIALjluACw5 + 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 + AAAArgAAALEAAAC0AAAAtwAAALkAAAC8AAAAvwAAAMIAAADGAAAAygAAAM4KAADTGgAA1C4AANREAADU + WwAA03UAANSOAADUqAAA1cEAANXYAFCDAABCiQAAM5AAACSWAAAVnAAABqIAAACnAAAArAAAAK8AAACz + AAAAtQAAALcAAAC6AAAAvQAAAMAAAADDAAAAxgAAAMkAAADLAAAAzwAAANIAAADWAAAA2wAAAOAAAADl + CgAA6B4AAOo1AADrTQAA7WYAAO5/AADvmAAA768AAPDCAP8AAAD/AAAA/wAAAP8AAAD/AAYA/wAUAP8A + IAD/ACwA/wA3AP8AQgD+AEsA+wBTAPkAWgD3AGAA9QBmAPMAawDxAHAA7wB1AO0AewDrAIAA6ACHAOYA + jwDkAJkA4gClAOAAswDdAMcA2wDiANkA+ADYAP8A2AD/AM4A/wDIAP8AxQD/AP8AAAD/AAAA/wAAAP8A + AAD/AAEA/wAOAP0AGwD4ACcA9wAyAPUAPADxAEUA7QBNAOkAVADlAFsA4wBgAOEAZgDfAGsA3QBwANwA + dQDaAHsA2ACCANUAiQDSAJIA0ACeAM4ArADLAL4AyQDZAMcA8QDGAP8AxAD/AL8A/wC7AP8AuAD/AP8A + AAD/AAAA/wAAAPkAAADzAAAA7wAJAOgAFgDmACEA5QAsAOMANgDdAD8A2QBIANUATwDSAFUA0ABbAM4A + YADMAGUAygBqAMgAbwDGAHUAxQB8AMIAhADAAIwAvgCXALwApQC5ALYAuADNALYA6AC1AP8AtAD/ALMA + /wCuAP8ArAD/AP8AAAD8AAAA8QAAAOkAAADhAAAA2QAEANMAEADRABwAzAAmAMsAMADJADkAxQBCAMIA + SQC/AE8AvABVALoAWgC4AF8AtgBkALQAagCyAG8AsAB2AK4AfgCtAIYAqwCQAKkAngCnAK0ApQDDAKQA + 3gCjAPcAogD/AKMA/wCiAP8AoAD/APwAAADuAAAA4QAAANUAAADMAAAAwwAAAL8ACgC6ABYAuAAgALYA + KgC1ADMAsQA7AK4AQwCrAEkAqQBPAKgAVACmAFkApABeAKMAZACiAGoAoABwAJ4AdwCdAIAAmwCKAJkA + lgCXAKYAlgC5AJQA0gCUAO4AkwD/AJMA/wCSAP8AkgD/AO4AAADfAAAAzgAAAMIAAAC4AAAAsQAAAKsA + BACoABAApgAaAKMAJACiAC0AoQA1AJ4APQCcAEMAmgBJAJgATgCXAFQAlQBZAJQAXgCSAGQAkQBrAI8A + cgCNAHsAiwCEAIoAkACIAJ8AhwCxAIYAxwCFAOQAhQD6AIUA/wCFAP8AhQD/AOMAAADPAAAAvwAAALIA + AACoAAAAogAAAJ0AAACZAAoAlgAVAJQAHgCTACcAkgAvAJEANwCOAD0AjABDAIoASQCJAE4AhwBUAIYA + WQCEAF8AgwBmAIIAbQCAAHUAfwB/AH0AiwB8AJgAegCqAHkAvgB4ANoAeADzAHgA/wB4AP8AeAD/ANUA + AADCAAAAsgAAAKQAAACbAAAAlQAAAJAAAACMAAUAigAPAIgAGQCGACIAhQAqAIMAMQCCADgAgAA+AH4A + RAB9AEkAfABPAHoAVAB5AFoAeABhAHYAaAB1AHEAcwB7AHIAhgBwAJMAbwCkAG4AuABtAM8AbADqAGwA + +wBsAP8AbAD/AMoAAAC3AAAApgAAAJkAAACQAAAAiQAAAIUAAACCAAAAfwAJAH0AEwB7ABwAegAlAHgA + LAB3ADMAdQA6AHQAPwBzAEUAcQBLAHAAUABuAFYAbQBdAGsAZQBqAG0AaAB3AGcAggBlAI8AZACfAGMA + sgBiAMkAYQDiAGEA9ABhAP8AYQD/AMEAAACtAgAAnQcAAJAJAACGCQAAfwcAAHsDAAB5AAAAdwAEAHQA + DQBzABcAcQAgAG8AJwBuAC8AbAA1AGsAOwBpAEEAaABHAGYATQBlAFMAZABaAGIAYQBhAGoAXwB0AF0A + fwBcAIwAWgCcAFkArgBYAMMAVwDcAFcA7wBWAPsAVgD/ALgGAAClDAAAlREAAIgTAAB+EwAAdxIAAHIP + AABvCwAAbgYAAG0ABwBrABEAaQAaAGcAIwBlACoAZAAxAGIANwBhAD0AXwBDAF4ASQBdAFAAWwBXAFoA + XwBYAGgAVgByAFUAfgBTAIsAUQCaAFAAqwBOAMAATgDWAE0A6gBNAPcATQD+ALINAACeFAAAjhgAAIIa + AAB4GwAAcBoAAGsYAABoFQAAZhEAAGUMAABlBQoAYwMUAGEEHgBeBSYAXQYtAFsGNABZBzoAWAdAAFcI + RwBVCE4AVAhVAFIJXgBQCWcATglxAEwJfQBKCIoASQeZAEcHqwBFBr8ARAXVAEMF6ABDBfUAQwX+AKwU + AACZGgAAiR4AAH0gAABzIQAAayAAAGUfAABhHAAAXxkAAF4VAABdEQMAXQ0OAFoOGQBYECEAVhApAFQR + MABTETcAURI+AE8SRABOEkwATBJUAEoTXABJE2YARxNxAEQSfQBCEosAQBGaAD4RrQA8EMIAOw/ZADsP + 6wA7DvgAPA7/AKYaAACUHwAAhSMAAHglAABuJQAAZiUAAGAkAABcIgAAWSAAAFccAABWGQAAVRcKAFMX + FQBRGB4ATxkmAE0ZLQBLGTQASho7AEgaQgBHGkkARRtRAEMbWgBBG2QAPxtvAD0aewA7GokAORmZADcZ + qwA1GMAAMxfYADQX7QA0FvsANRb/AKIfAACQJAAAgScAAHQpAABqKQAAYikAAFwoAABXJwAAVCUAAFIi + AABQIAAATh8GAEwfEQBKHxoASCAjAEYgKgBFITEAQyE4AEEhPwBAIUcAPiJPADwiWAA6ImIAOCJtADYh + eQA0IYcAMiCXADAgqgAuH78ALB7WAC0e7AAuHfsALhz/AJ4jAACMKAAAfSsAAHEsAABnLQAAXi0AAFgs + AABTKwAATyoAAE0nAABLJQAASCYCAEYmDQBEJhcAQiYgAEAnJwA+Jy4APSc1ADsoPQA5KEQAOChMADYo + VgA0KGAAMihrADAoeAAuJ4YAKyeWACkmqQAnJb4AJiTWACYk6wAnI/sAKCL/AJonAACJKwAAei4AAG4v + AABkMAAAWzAAAFUvAABPLwAASy4AAEgsAABFKwAAQisAAEAsCgA9LBQAOywdADotJAA4LSwANi0zADUt + OgAzLkIAMS5KADAuVAAuLl4ALC5pACktdgAnLYUAJSyVACMspwAhK70AHyrVACAp6wAhKPoAIif/AJcq + AACFLgAAdzEAAGsyAABgMwAAWDMAAFEyAABMMgAARzEAAEMxAABAMAAAPDEAADoxBwA3MhEANTIaADMy + IgAyMykAMDMwAC8zOAAtM0AAKzNIACkzUgAnM1wAJTNoACMzdQAhM4MAHjKTABwxpgAaMbwAGTDUABkv + 6gAbLvoAHC3/AJMtAACCMQAAdDQAAGc1AABdNgAAVTYAAE41AABINQAAQzUAAD81AAA6NQAANjYAADM3 + AwAxNw0ALjgWAC04HwArOCYAKTguACg5NQAmOT0AJDlGACI5TwAgOVoAHjlmABw5cwAaOIIAFziSABU3 + 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 + AAAAwwAAAMYAAADJAAAAzQAAANAAAADVAAAA2gAAAOAAAADlBAAA6RcAAOktAADpRgAA6WAAAOp6AADr + kwAA66wAAOzBAP8AAAD/AAAA/wAAAP8AAAD/AAQA/wAPAP8AHAD/ACgA/wAzAP8APQD9AEYA+gBOAPgA + VQD2AFwA9ABiAPIAZwDwAGwA7wBxAO0AdwDrAHwA6QCDAOcAjADkAJUA4QChAN8AsADdAMYA2gDgANkA + +QDWAP8AzwD/AMUA/wC/AP8AugD/AP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAKAPoAFgD4ACIA9QAtAPMA + OADvAEEA6wBJAOgAUADlAFYA4gBcAN8AYQDdAGcA2gBsANgAcQDVAHcA0wB+ANAAhQDOAI8AzACaAMkA + qADHALwAxQDVAMIA8ADBAP8AwQD/ALgA/wCzAP8ArwD/AP8AAAD/AAAA/wAAAPgAAADxAAAA6gAFAOcA + EQDiAB0A4QAnAOEAMgDbADsA1QBDANAASgDOAFEAywBWAMkAXADHAGEAxQBmAMQAawDCAHEAwAB4AL4A + fwC7AIgAuQCUALcAoQC1ALIAswDKALEA5wCvAP8ArgD/AKoA/wClAP8AowD/AP8AAAD6AAAA7wAAAOUA + AADbAAAA1AAAAM0ACwDLABcAyAAiAMUAKwDEADQAwAA9AL0ARAC6AEoAuABQALYAVgC0AFsAsgBgALAA + ZQCuAGsArAByAKkAeQCnAIIApQCMAKMAmgChAKkAoADAAJ8A3ACeAPgAngD/AJ0A/wCZAP8AlgD/APcA + AADpAAAA3AAAAM8AAADEAAAAvAAAALgABgC0ABEAsQAbALAAJQCvAC4ArQA2AKkAPgCmAEQApABKAKIA + TwCgAFUAnwBaAJ0AXwCcAGUAmgBsAJkAcwCXAHwAlQCGAJMAkwCRAKEAkAC2AI4AzwCOAO4AjQD/AI0A + /wCNAP8AiwD/AOoAAADYAAAAxwAAALoAAACxAAAAqQAAAKUAAAChAAsAnwAWAJ4AHwCcACgAmwAwAJgA + NwCWAD4AlABEAJIASQCRAE8AkABUAI4AWQCNAF8AiwBmAIkAbQCIAHYAhgCAAIQAjACDAJoAggCtAIAA + xAB/AOMAfwD7AH8A/wB/AP8AfgD/ANwAAADHAAAAtgAAAKoAAACgAAAAmgAAAJUAAACSAAYAjwAQAI0A + GgCMACIAiwAqAIoAMgCIADgAhgA+AIQARACDAEkAgQBOAIAAVAB+AFoAfQBhAHsAaAB6AHEAeAB6AHcA + hgB1AJQAdAClAHMAuwByANgAcgDzAHIA/wByAP8AcgD/AM4AAAC6AAAAqQAAAJwAAACTAAAAjAAAAIgA + AACFAAEAggALAIAAFAB/AB0AfgAlAH0ALAB7ADMAeQA5AHgAPwB2AEQAdQBKAHQATwByAFUAcQBcAG8A + YwBuAGwAbAB2AGsAgQBpAI4AaACfAGcAswBmAMwAZgDpAGUA/gBmAP8AZgD/AMIAAACtAAAAnQAAAJEA + AACHAAAAgQAAAH0AAAB6AAAAdwAGAHUADwB0ABgAcgAgAHEAJwBwAC4AbwA0AG0AOgBsAEAAagBFAGkA + SwBoAFEAZgBYAGUAXwBjAGgAYQBxAGAAfQBeAIoAXQCaAFwArQBbAMUAWwDhAFoA9gBaAP8AWgD/ALgA + AACkAAAAlAMAAIcFAAB+BQAAdwMAAHMAAABwAAAAbgABAGwACgBqABMAaQAbAGgAIgBmACkAZQAwAGMA + NgBiADsAYABBAF8ARwBeAE0AXABUAFsAXABZAGQAWABuAFYAegBVAIcAUwCWAFIAqABRAL4AUADZAFAA + 7wBQAP0AUAD/AK8BAACcBwAAjQsAAIAOAAB2DgAAbw0AAGoLAABnBwAAZQMAAGQABQBiAA0AYQAWAF8A + HgBeACUAXAAsAFsAMgBZADgAWAA9AFYAQwBVAEoAVABRAFIAWQBQAGIATwBsAE0AdwBLAIQASgCTAEkA + pABHALoARwDRAEYA6ABGAPcARgD/AKgJAACVEAAAhhMAAHoVAABwFgAAaBUAAGMTAABfEQAAXQwAAFwI + AABcAwgAWgARAFgAGQBWACEAVQAoAFMALgBSADQAUAE6AE8BQQBNAUcATAJPAEoCVwBIAmAARwJqAEUC + dgBDAYMAQQCSAEAAowA+ALcAPQDNAD0A4wA8APIAPQD8AKIQAACQFQAAgRkAAHQbAABrHAAAYxsAAF0a + AABZGAAAVhUAAFURAABUDQEAVQgKAFIHFABQCBwATgkkAEwJKwBLCjEASQo4AEgLPgBGC0UARQtNAEML + VgBBDF8APwxqAD0LdgA7C4MAOQqSADcKowA1CbcANAjMADMH4gAzB/AAMwf6AJ0VAACLGgAAfB4AAHAg + AABmIAAAXiAAAFgfAABTHQAAUBsAAE4YAABNFQAATRIFAEwRDwBJERgARxIgAEYSKABEEy4AQhM1AEEU + PAA/FEMAPRRLADwUVAA6FF4ANxRpADUUdQAzFIMAMROTAC8SpAAtErkAKxHQACsQ5QArEPMALA/9AJkZ + AACHHgAAeSIAAGwkAABiJAAAWiQAAFMjAABPIgAASyAAAEkeAABIGwAARhkAAEQZCwBDGRUAQRkdAD8a + JAA9GiwAOxoyADobOQA4G0EANhtJADUbUgAzG1wAMBtnAC4bdAAsG4IAKhqRACgaowAlGbgAJBjPACMX + 5gAkF/YAJRb/AJUeAACDIgAAdSUAAGknAABfJwAAVicAAFAnAABLJgAARyUAAEQjAABCIQAAQCAAAD4g + CAA8IBIAOiAaADggIgA2ISkANSEwADMhNwAyIj8AMCJHAC4iUAAsIloAKiJlACcicgAlIYAAIyGQACEg + ogAfH7cAHR7OAB0e5QAeHfYAHxz/AJEhAACAJgAAcikAAGYqAABbKgAAUyoAAEwqAABHKQAAQygAAD8n + AAA9JgAAOiUAADgmBAA2Jg4ANCYXADInHwAwJyYALictAC0nNAArKDwAKShFACcoTgAlKFgAIyhkACEo + cAAfJ38AHCePABomoQAYJbYAFiTNABYk5AAXI/UAGCL/AI0lAAB9KQAAbisAAGItAABYLQAAUC0AAEkt + AABELAAAPywAADsrAAA4KwAANSsAADIrAQAvLAsALSwUACssHAApLSMAKC0qACYtMgAkLToAIy1CACEu + TAAfLlYAHC1iABotbwAYLX0AFSyNABMsnwARK7QADyrMAA4p4wAQKPQAEif/AIooAAB5LAAAay4AAF8w + AABVMAAATTAAAEYwAABALwAAPC8AADgvAAAzLwAALzAAACwxAAApMQcAJjIQACQyGAAjMyAAITMoAB8z + LwAdMzcAHDNAABozSQAXM1QAFTNgABMzbQARM3wADjKMAAsxnQAJMbEABzDIAAcv3wAJLvEACi39AIYs + AAB2LwAAaDEAAFwzAABSMwAASjMAAEMyAAA9MgAAOTIAADQyAAAvMwAAKDUAACU2AAAiNwMAHzgMABw4 + FQAbOR0AGTkkABc5LAAWOTQAFDk9ABI5RwAQOVIADTldAAo5agAIOHgABjiIAAM3mQABNq4AADXFAAA0 + 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 + cwDpAHkA5wCAAOUAiADjAJIA4ACdAN0ArgDaAMMA1wDfANQA+wDSAP8AxQD/ALsA/wC1AP8AsQD/AP8A + AAD/AAAA/wAAAP8AAAD/AAAA/QAFAPgAEgD3AB4A9AApAPEAMwDtADwA6QBEAOYATADjAFIA4QBYAN4A + XQDcAGMA2QBoANUAbQDSAHMA0AB6AM0AggDKAIwAyACXAMUApQDDALkAwQDTAL8A8gC/AP8AuAD/AK8A + /wCpAP8ApgD/AP8AAAD9AAAA+AAAAPUAAADuAAAA5gAAAOMADADeABgA3QAjANwALQDZADYA0wA+AM0A + RgDJAEwAxwBSAMUAVwDDAF0AwQBiAL8AZwC9AG0AuwB0ALkAewC3AIUAtACQALIAnQCwAK8ArQDIAKsA + 5wCqAP8AqAD/AKIA/wCeAP8AmwD/APsAAADzAAAA7AAAAN8AAADUAAAAzQAAAMcABwDFABIAwwAdAMEA + JwC/ADAAuwA4ALgAPwC1AEYAswBMALEAUQCvAFYArQBbAKsAYQCpAGcApwBuAKUAdQCjAH4AoQCJAJ8A + lgCdAKYAnAC9AJoA2gCZAPgAmAD/AJQA/wCQAP8AjgD/APEAAADkAAAA1QAAAMcAAAC9AAAAtgAAALEA + AQCuAAwAqwAXAKoAIACpACkAqAAxAKUAOQChAD8AnwBFAJ0ASwCbAFAAmQBVAJgAWwCWAGEAlQBnAJMA + bwCRAHgAjwCCAI4AjwCMAJ4AigCzAIkAzQCIAO4AiAD/AIgA/wCEAP8AgwD/AOQAAADQAAAAvgAAALIA + AACpAAAAogAAAJ4AAACaAAYAmAARAJcAGgCWACMAlQArAJMAMgCQADkAjgA/AI0ARQCLAEoAigBPAIgA + VQCHAFsAhQBhAIQAaQCCAHEAgAB7AH8AiAB9AJYAfACpAHoAwQB5AOMAeQD9AHkA/wB4AP8AdwD/ANMA + AAC/AAAArgAAAKEAAACYAAAAkgAAAI0AAACKAAIAiAALAIYAFQCFAB0AhQAlAIQALQCCADMAgAA5AH4A + PwB9AEQAewBJAHoATwB4AFUAdwBcAHUAYwB0AGwAcgB2AHAAggBvAJAAbgCiAGwAtwBsANUAbAD0AGsA + /wBsAP8AawD/AMYAAACxAAAAoAAAAJQAAACKAAAAhAAAAIAAAAB9AAAAegAGAHkAEAB4ABgAdwAgAHYA + JwB1AC4AcwA0AHEAOQBwAD8AbwBEAG0ASgBsAFAAagBXAGkAXgBnAGcAZgBxAGQAfQBjAIoAYQCbAGAA + sABfAMoAXwDqAF8A/wBfAP8AYAD/ALgAAAClAAAAlQAAAIgAAAB/AAAAeAAAAHQAAABxAAAAbwACAG0A + CwBsABMAawAbAGoAIgBqACkAaAAvAGYANQBlADoAYwBAAGIARQBhAEsAXwBSAF4AWgBcAGMAWgBsAFkA + eABXAIUAVgCVAFUAqQBUAMIAVADgAFQA+ABUAP8AVAD/AK4AAACbAAAAiwAAAH8BAAB2AQAAbwAAAGoA + AABnAAAAZQAAAGMABgBiAA4AYQAWAGAAHQBfACQAXgAqAFwAMABbADYAWQA7AFgAQQBWAEcAVQBOAFMA + VgBSAF8AUABpAE8AdABNAIIATACRAEsAowBKALoASQDWAEkA8ABJAP8ASgD/AKYAAACTAwAAhAcAAHgJ + AABuCgAAZwkAAGEGAABeBAAAXAAAAFsAAgBZAAoAWAASAFcAGQBWACAAVQAmAFMALABRADIAUAA4AE8A + PgBNAEQATABLAEoAUwBJAFwARwBmAEYAcQBEAH4AQwCNAEEAnwBAALUAQADNAD8A6AA/APkAQAD/AJ8E + AACNCgAAfg4AAHERAABnEQAAYBEAAFoPAABWDAAAVAkAAFMFAABSAAUAUQANAE8AFQBOABwATQAiAEsA + KQBKAC8ASAA0AEcAOwBFAEEARABIAEIAUABBAFkAPwBkAD0AbwA7AHwAOgCLADgAnAA3ALAANgDIADYA + 4QA2APMANgD+AJkLAACHEQAAeBQAAGwWAABiFwAAWhYAAFQVAABQEwAATREAAEsOAABLCgAASwYIAEkD + EABHAhcARgIfAEQDJQBCAysAQQQyAEAEOAA+BD8APAVGADsFTwA5BVgANwVjADUFbgAzBHsAMQSKADAD + mwAuAa4ALQDEAC0A3AAtAO0ALQD5AJQQAACDFQAAdBkAAGgbAABeGwAAVhsAAE8aAABKGQAARxcAAEUV + AABEEgAAQw4CAEMLCgBBChMAPwsbAD4LIgA8DCkAOwwvADkMNgA3DT0ANg1FADQNTgAyDVgAMA1jAC0N + bwArDXwAKQyLACcMnAAlC68AJArEACMI2wAjCOsAIwj2AJAVAAB/GgAAcB0AAGQeAABaHwAAUh8AAEse + AABGHQAAQhwAAD8aAAA+GAAAPRUAADwTBgA7Eg8AORMXADcTHwA1FCYANBQtADIUNAAwFTsALxVDAC0V + TAArFVYAKBViACYVbgAkFXwAIRSLAB8UnQAdE7EAGxLHABoR3wAbEe4AGxD4AIwYAAB7HQAAbSAAAGAi + AABWIgAATiIAAEciAABCIQAAPiAAADseAAA5HQAAOBoAADYaAgA0GgsAMhoUADAaHAAvGyMALRsqACsb + MQAqGzkAKBxBACYcSgAkHFQAIRxgAB8cbAAdG3oAGhuKABganAAWGbAAFBnGABMY3gAUF/EAFRb7AIgc + AAB4IQAAaSMAAF0lAABTJQAASyUAAEQlAAA/JAAAOiMAADciAAA0IQAAMiAAADAgAAAtIAgALCARACog + GQAoISAAJiEnACUhLwAjIjYAISI/AB8iSAAdIlIAGyJeABgiawAWIXkAEyGJABEgmgAOIK4ADB/EAAse + 2wAMHe4ADRz7AIUgAAB0JAAAZiYAAFonAABQKAAASCgAAEEnAAA7JwAANyYAADMlAAAwJQAALSUAACol + AAAnJgUAJSYNACMmFgAhJx0AHyclAB4nLAAcJzQAGig8ABgoRgAWKFAAFChcABEoaQAOJ3cADCeGAAkm + lwAHJaoABSXAAAQk2AAFI+oAByL3AIEjAABxJwAAYykAAFcqAABNKgAARSoAAD4qAAA5KQAANCkAADAo + AAAsKAAAKCkAACQrAAAhKwEAHiwKABwtEgAaLRoAGC0iABYtKQAVLTEAEy46ABEuRAAOLk4ADC5ZAAkt + ZgAHLXMABC2DAAIslAAAK6cAACq9AAAp1QAAKOkAACj0AH0nAABtKgAAYCwAAFQtAABKLQAAQi0AADss + AAA2LAAAMSsAAC0rAAApKwAAJC0AAB4vAAAbMQAAFzIGABQzDgASMxcAEDMeAA4zJgAMMy4ACjM3AAgz + QAAGM0oABDNVAAEzYgAAM3AAADKAAAAxkQAAMKUAAC+8AAAv0wAALugAAC31AHkqAABqLQAAXC8AAFEw + AABHMAAAPy8AADgvAAAzLgAALy4AACsuAAAmLwAAIDEAABszAAAWNQAAEjcDAAw5CwAIORMABzkbAAU5 + IwADOSsAATkzAAA5PAAAOUYAADlSAAA5XwAAOW0AADh9AAA3jwAANqMAADW6AAA00wAAM+kAADP1AHUu + AABmMQAAWDIAAE0zAABEMwAAPDIAADYxAAAxMQAALDAAACcxAAAiMwAAHDUAABY4AAAROgAADDwDAAU+ + CQAAPxAAAD8XAAA/HwAAPycAAD8vAABAOAAAQEMAAEBOAAA/WwAAP2oAAD56AAA+jAAAPaEAADy5AAA6 + 0wAAOukAADn3AHAzAABhNQAAVDYAAEo2AABBNQAAOjUAADQ0AAAvMwAAKTQAACM2AAAdOAAAFzoAABE9 + AAALPwAABUECAABDCAAARA0AAEUUAABGGwAARyIAAEcrAABHNAAARz8AAEdKAABHWAAARmYAAEZ3AABF + iQAARJ8AAEO3AABB0wAAQOsAAED4AGs3AABcOQAAUDkAAEY5AAA+OAAAODcAADI3AAArOAAAJDkAAB48 + AAAXPgAAEUEAAApDAAAERgAAAEgAAABKBQAASwsAAEwRAABOFwAATx4AAE8mAABPMAAATzoAAE9GAABP + UwAATmIAAE5zAABNhgAATJwAAEu1AABJ0gAASOwAAEf6AGU8AABYPQAATD0AAEM8AAA8OwAANToAAC07 + AAAmPQAAHkAAABdCAAAQRQAACUgAAANLAAAATQAAAE8AAABRAgAAUgcAAFQMAABWEgAAVxkAAFkhAABY + KgAAWDUAAFhBAABYTgAAWF4AAFdvAABWggAAVZgAAFSyAABT0AAAUewAAFD8AF9BAABTQQAASUAAAEE/ + AAA5PgAAMD8AAChCAAAgRAAAF0cAABBLAAAITgAAAFEAAABTAAAAVgAAAFgAAABaAAAAWwIAAF0HAABf + DAAAYRMAAGMaAABkJAAAYy4AAGM7AABjSQAAYlgAAGJpAABhfQAAYJMAAF6uAABdzQAAW+sAAFv8AFpG + AABPRQAARkQAAD5CAAA0RAAAKkYAACFJAAAYTQAADlEAAAZUAAAAWAAAAFoAAABdAAAAXwAAAGEAAABj + AAAAZQAAAGcCAABpBwAAaw0AAG0UAABvHQAAcCcAAG80AABvQgAAblMAAG5jAABtdwAAbI0AAGunAABp + xgAAaOcAAGb7AFVKAABMSQAAQ0cAADlJAAAuTAAAI08AABlTAAAOVwAABFsAAABfAAAAYgAAAGUAAABo + AAAAagAAAG0AAABvAAAAcQAAAHMAAAB1AAAAdwUAAHkMAAB8FAAAfh4AAH4rAAB+OQAAfUoAAHxcAAB7 + cAAAeoYAAHigAAB3vwAAdeIAAHT4AFFOAABJTQAAPU4AADFSAAAmVgAAGloAAA5fAAADZAAAAGgAAABr + AAAAbgAAAHEAAAB0AAAAdgAAAHkAAAB7AAAAfgAAAIAAAACCAAAAhAAAAIcDAACJCwAAjRUAAI8hAACO + LwAAjkAAAI1SAACMZgAAin0AAImXAACHtAAAhtYAAITyAE9SAABDVAAANlgAACldAAAcYgAAD2cAAANs + AAAAcQAAAHUAAAB5AAAAewAAAH4AAACBAAAAhAAAAIcAAACJAAAAjAAAAI4AAACQAAAAkwAAAJYAAACZ + AQAAnAoAAKAWAAChJAAAoTUAAKBIAACeXQAAm3YAAJuNAACZqgAAmMoAAJbpAEhaAAA7XgAALWMAAB9p + AAASbwAAA3UAAAB6AAAAfwAAAIMAAACHAAAAigAAAI0AAACQAAAAkwAAAJYAAACZAAAAnAAAAJ4AAACh + AAAApAAAAKcAAACrAAAArwAAALMJAAC5FgAAuCgAALg7AAC2UQAAtGkAALGDAACunwAArrsAAKzcAEBl + AAAyagAAJHAAABV3AAAGfQAAAIQAAACJAAAAjgAAAJIAAACWAAAAmQAAAJwAAACfAAAAowAAAKcAAACq + AAAArQAAALAAAACzAAAAtwAAALsAAAC/AAAAxAAAAMkAAADPCAAA1BkAANMuAADSRAAA0FwAAM12AADL + kQAAx68AAMbMADhxAAApeAAAGn8AAAqGAAAAjAAAAJMAAACZAAAAngAAAKEAAAClAAAAqAAAAKsAAACv + AAAAtAAAALgAAAC8AAAAvwAAAMMAAADGAAAAygAAAM8AAADUAAAA2gAAAOAAAADmAAAA7AkAAO0fAADs + NgAA608AAOpqAADnhQAA5qAAAOW6AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAIAP8AFAD/AB8A/wAqAP8A + NAD/AD4A+wBGAPYATQDzAFQA8ABaAO4AXwDtAGUA6wBqAOkAcADnAHYA5QB9AOIAhQDgAI8A3QCbANoA + qwDWAMAA0wDfANAA+wDLAP8AvAD/ALMA/wCtAP8AqQD/AP8AAAD+AAAA+gAAAPkAAAD6AAAA+gABAPUA + DQD0ABkA9AAkAPAALgDqADgA5gBAAOMARwDgAE4A3gBUANsAWQDZAF4A1gBkANQAagDRAHAAzgB3AMsA + fwDIAIgAxQCUAMMAowDAALcAvgDRALwA8wC6AP8ArwD/AKYA/wCgAP8AnQD/APwAAAD2AAAA8QAAAO8A + AADpAAAA4gAAAN4ABwDbABMA1wAeANcAKADUADEA0AA6AMsAQQDHAEgAwwBOAMAAUwC+AFgAvABeALoA + YwC4AGkAtgBwALQAeACyAIEArwCNAK0AmgCrAK0AqADGAKYA6AClAP8AoQD/AJoA/wCVAP8AkgD/APMA + AADrAAAA5gAAANgAAADPAAAAxwAAAMIAAgC+AA0AvQAYALwAIgC6ACsAtgAzALMAOwCwAEEArgBHAKwA + TQCqAFIAqABXAKcAXQClAGMAowBpAKEAcQCfAHsAnQCFAJsAkwCYAKMAlwC6AJUA2gCTAPoAkgD/AIwA + /wCJAP8AhwD/AOgAAADeAAAAzQAAAL8AAAC1AAAArwAAAKoAAACoAAcApQASAKQAGwCkACQAowAtAKAA + NACdADsAmgBAAJgARgCWAEsAlABRAJMAVgCRAFwAjwBjAI4AawCMAHQAigB+AIgAiwCGAJsAhQCwAIMA + ywCDAO8AggD/AH8A/wB8AP8AegD/ANsAAADHAAAAtgAAAKoAAAChAAAAmgAAAJYAAACTAAIAkQAMAJEA + FQCQAB4AjwAmAI0ALQCLADQAiQA6AIcAQACGAEUAhABKAIMAUACBAFYAgABdAH4AZQB8AG0AegB4AHkA + hAB3AJMAdgCnAHQAvwBzAOMAcwD/AHMA/wBxAP8AbwD/AMsAAAC3AAAApQAAAJgAAACQAAAAigAAAIUA + AACDAAAAgQAHAH8AEAB/ABgAfwAgAH4AJwB8AC4AegA0AHgAOgB3AD8AdQBFAHQASgByAFAAcABXAG8A + XwBtAGgAbAByAGoAfgBpAIwAZwCeAGYAtQBmANUAZQD2AGUA/wBlAP8AZAD/ALwAAACnAAAAlwAAAIsA + AACCAAAAfAAAAHcAAAB1AAAAcgACAHEACwBxABMAcAAbAG8AIgBuACkAbQAvAGsANABpADoAaAA/AGcA + RQBlAEsAZABSAGIAWQBhAGIAXwBsAF0AeABcAIYAWgCXAFkArABZAMkAWQDsAFkA/wBZAP8AWQD/ALAA + AACcAAAAjAAAAIAAAAB3AAAAcAAAAGwAAABpAAAAZwAAAGUABgBkAA4AYwAWAGMAHQBjACMAYQAqAF8A + LwBeADUAXAA6AFsAQABaAEYAWABNAFYAVQBVAF4AUwBoAFIAdABQAIEATwCRAE4ApgBNAL8ATQDhAE0A + +wBNAP8ATgD/AKUAAACSAAAAgwAAAHcAAABtAAAAZgAAAGEAAABeAAAAXAAAAFoAAwBZAAoAWQARAFgA + GABXAB8AVgAlAFUAKwBTADAAUgA2AFAAPABPAEIATQBJAEwAUABKAFoASQBkAEcAbwBGAH0ARACMAEMA + nwBDALgAQgDWAEIA8gBDAP8AQwD/AJ0AAACLAAAAfAMAAG8FAABmBQAAXgUAAFkDAABVAAAAUwAAAFEA + AABQAAYATwANAE4AFABNABoATQAhAEsAJwBKACwASAAyAEcAOABGAD4ARABFAEMATQBBAFYAPwBgAD4A + bAA8AHkAOwCIADoAmgA5ALEAOADMADgA6gA5AP0AOQD/AJYAAACEBQAAdQkAAGkLAABfDAAAVwwAAFEK + AABNCAAASwYAAEkCAABIAAMARwAJAEYAEABFABcARAAdAEMAIwBCACkAQAAvAD8ANQA9ADsAPABCADoA + SgA5AFMANwBeADUAaQA0AHYAMgCFADEAlwAwAKwALwDFAC8A4gAvAPYAMAD/AJAGAAB/CwAAcA8AAGQR + AABaEgAAUhIAAEwRAABHDgAARA0AAEIKAABBBwAAQQMFAEAADAA+ABMAPQAZADwAIAA6ACYAOQAsADcA + MgA2ADgANABAADMASAAxAFEALwBcAC4AZwAsAHQAKgCDACkAlAAnAKgAJwC/ACYA2gAmAO8AJwD8AIsL + AAB6EQAAbBQAAF8WAABVFgAATRYAAEcVAABCFAAAPhIAADwRAAA6DgAAOgsBADoIBwA5BQ4ANwQWADUF + HAAzBSMAMgYpADAGLwAvBjYALQc+ACwHRgAqB1AAKAdbACYHZwAkB3QAIgaDACAFkwAfBKYAHgK8AB0B + 0wAdAOkAHQD2AIcQAAB2FQAAaBgAAFwZAABRGgAASRoAAEMZAAA9GAAAORcAADcVAAA0FAAAMxIAADMO + AwAyDQoAMQwSAC8NGQAtDSAALA0nACoOLgAoDjUAJw4+ACUORwAiD1EAIA9cAB4PaAAbDnYAGQ6FABcN + lQAVDagAFAy8ABMK0gATCeYAEwjyAIMUAABzGAAAZBsAAFgcAABOHQAARh0AAD8cAAA6HAAANRsAADIZ + AAAwGAAALhcAAC0VAAAsFAYAKhQOACgUFgAnFB0AJRUkACMVLAAhFTMAIBY7AB0WRQAbFk8AGRZaABYW + ZwAUFnUAERWEAA4VlQAMFKgAChO8AAkS0wAJEecAChH0AH8XAABvGwAAYR4AAFUfAABLIAAAQiAAADwf + AAA2HgAAMh4AAC4dAAArHAAAKRsAACcaAAAlGgIAIxoLACIaEwAgGxoAHhsiABwbKQAaHDEAGRw5ABYc + QgAUHE0AEhxYAA8cZQAMHHIAChuBAAcbkQAFGqQAAxm5AAIYzwACF+UAAxfxAHwbAABsHgAAXiEAAFIi + AABIIgAAPyIAADkiAAAzIQAALyAAACsgAAAoHwAAJR8AACIfAAAfHwAAHSAIABshEAAZIRcAFyEfABUh + JgATIi4AESI3AA8iQAANIkoACiJVAAgiYQAFIm4AAyF9AAAhjgAAIKEAAB+3AAAezgAAHeQAABzxAHge + AABoIgAAWyQAAE8lAABFJQAAPSUAADYkAAAwJAAALCMAACgiAAAlIgAAIiIAAB4jAAAZJQAAFiYEABQm + DAARJxQAECccAA0nIwALJysACSgzAAcoPAAFKEYAAyhRAAAoXgAAJ2sAACd7AAAmjAAAJZ8AACS2AAAj + zgAAIuQAACHyAHQiAABlJQAAVycAAEwnAABCJwAAOicAADMnAAAuJgAAKiUAACYlAAAjJAAAHyUAABon + AAAVKQAAESoDAAwsCQAJLREABy0ZAAUtIAADLSgAAS0wAAAtOQAALUMAAC1OAAAtWgAALWkAACx4AAAs + igAAK54AACq1AAAozgAAJ+UAACfzAHElAABhKAAAVCoAAEgqAAA/KgAANyoAADEpAAAsKAAAKCcAACQn + AAAgKAAAGykAABYrAAARLQAADC8CAAcxCAACMg4AADMVAAAzHQAAMyQAADMsAAAzNQAAMz8AADNLAAAz + VwAAM2YAADJ2AAAyiAAAMJwAAC+0AAAuzgAALecAACz1AGwpAABdKwAAUC0AAEUtAAA8LQAANCwAAC8r + AAAqKgAAJioAACEqAAAcLAAAFy0AABIwAAAMMgAABzQCAAE2BwAANwwAADgTAAA5GQAAOiEAADopAAA6 + MgAAOjwAADpHAAA6VAAAOWMAADlzAAA4hQAAN5oAADazAAA0zgAAM+gAADL3AGgtAABZLwAATDAAAEEw + AAA5LwAAMi4AAC0tAAAoLAAAIi0AAB0vAAAXMQAAEjMAAAw1AAAGNwAAAToAAAA8BQAAPQoAAD8QAABA + FQAAQRwAAEElAABBLgAAQTgAAEFDAABBUQAAQV8AAEBwAAA/ggAAPpgAAD2xAAA8zgAAOukAADn6AGIy + AABUMwAASDMAAD4zAAA2MgAAMDAAACswAAAkMQAAHjIAABg0AAASNwAACzkAAAU8AAAAPgAAAEEAAABC + AwAARAcAAEYMAABIEgAASRgAAEogAABKKQAASjQAAEo/AABKTAAASVsAAElsAABIfwAARpUAAEWvAABE + zQAAQuoAAEH7AF02AABPNwAARDcAADs2AAA1NAAALjMAACc0AAAfNgAAGDkAABE7AAAKPgAABEEAAABD + AAAARgAAAEgAAABKAAAATAMAAE4IAABQDQAAUhMAAFQbAABUJAAAVC8AAFQ6AABURwAAU1cAAFJoAABS + ewAAUJEAAE+rAABNygAATOoAAEr9AFc7AABLOwAAQToAADk4AAAyNwAAKjgAACE7AAAZPQAAEUAAAAlE + AAACRwAAAEoAAABMAAAATwAAAFEAAABTAAAAVgAAAFgDAABaCAAAXA0AAF4VAABgHQAAXygAAF80AABe + QgAAXlEAAF5iAABcdgAAW4wAAFmnAABYxwAAVugAAFX9AFJAAABHPwAAPz0AADc8AAAtPQAAJD8AABpD + AAARRgAACEoAAABOAAAAUQAAAFQAAABWAAAAWQAAAFsAAABeAAAAYAAAAGIAAABkAgAAZwgAAGkOAABs + FwAAbCEAAGwtAABsOwAAa0oAAGtcAABpcAAAaIYAAGagAABlvwAAY+QAAGH7AE1EAABEQgAAPEAAADJC + AAAnRQAAHEkAABJNAAAIUQAAAFUAAABZAAAAXAAAAF8AAABiAAAAZQAAAGcAAABqAAAAbAAAAG4AAABx + AAAAcwAAAHUHAAB4DgAAexgAAHskAAB7MwAAekMAAHhVAAB3aQAAdn8AAHWZAABztwAAcdwAAHD2AEpI + AABCRgAANkgAACtLAAAfTwAAE1QAAAdZAAAAXgAAAGIAAABmAAAAaQAAAGwAAABvAAAAcgAAAHUAAAB3 + AAAAegAAAHwAAAB/AAAAgQAAAIQAAACHBQAAig4AAI0aAACNKAAAjDgAAIpLAACJXwAAh3cAAIaPAACD + rQAAgc8AAIDvAEhMAAA7TgAAL1EAACJWAAAVXAAACGEAAABnAAAAawAAAHAAAAB0AAAAdgAAAHkAAAB9 + AAAAgAAAAIMAAACGAAAAiAAAAIsAAACNAAAAkAAAAJMAAACWAAAAmgUAAJ4QAAChHQAAoC4AAJ9AAACd + VQAAnGwAAJqEAACWoQAAlsAAAJPjAEFUAAA0WAAAJl0AABhjAAAJagAAAHAAAAB1AAAAegAAAH8AAACC + AAAAhQAAAIgAAACMAAAAjwAAAJMAAACWAAAAmAAAAJsAAACeAAAAoQAAAKUAAACoAAAArQAAALIEAAC3 + EQAAuCIAALY1AAC1SgAAsmIAAK98AACulQAArbEAAKnUADlfAAArZAAAHGsAAA1xAAAAeAAAAH8AAACF + AAAAiQAAAI4AAACRAAAAlQAAAJgAAACcAAAAoAAAAKQAAACnAAAAqgAAAK0AAACxAAAAtQAAALkAAAC9 + AAAAwgAAAMgAAADPAwAA1RMAANQnAADSPQAAz1YAAMxvAADHiwAAxKgAAMXCADBrAAAhcgAAEnkAAAKA + AAAAiAAAAI4AAACUAAAAmQAAAJ4AAAChAAAApAAAAKgAAACtAAAAsQAAALYAAAC6AAAAvQAAAMEAAADF + AAAAyQAAAM4AAADTAAAA2gAAAOAAAADnAAAA7QQAAPAYAADuLwAA7UgAAOpiAADofQAA5ZgAAOG1AP8A + AAD/AAAA+wAAAPoAAAD7AAAA/QAEAP8AEAD/ABoA/wAlAP8AMAD/ADoA/ABCAPcASQDzAFAA8ABWAO0A + XADrAGEA6QBmAOcAbADlAHIA4wB5AOAAggDdAIwA2gCZANYAqQDSAL4AzwDgAMwA/QDCAP8AtAD/AKsA + /wCkAP8AoAD/AP0AAAD3AAAA8wAAAPEAAADzAAAA9gAAAPMACADxABQA8QAgAPAAKgDoADMA5AA8AOEA + QwDeAEoA2wBQANgAVQDVAFsA0wBgANAAZgDOAGwAzABzAMkAewDGAIUAwwCRAMAAoQC9ALUAugDRALgA + 9ACzAP8ApgD/AJ0A/wCZAP8AlgD/APUAAADtAAAA6QAAAOcAAADkAAAA3gAAANgAAwDWAA4A0gAZANIA + IwDRAC0AzAA1AMgAPQDEAEMAwABJAL0ATwC6AFQAuABaALYAXwC0AGYAsgBtALAAdQCuAH4AqwCKAKkA + mACmAKsApADFAKIA6QChAP8AmQD/AJEA/wCMAP8AigD/AOoAAADiAAAA3AAAANEAAADIAAAAwAAAALwA + AAC4AAgAtwATALcAHQC1ACYAsgAuAK8ANgCsAD0AqgBDAKcASACmAE4ApABTAKIAWQCgAF8AngBmAJwA + bgCaAHcAmACCAJYAkACUAKEAkQC5AJAA2gCOAPwAigD/AIUA/wCBAP8AfwD/AN4AAADSAAAAxQAAALcA + AACtAAAAqAAAAKMAAAChAAIAngAMAJ4AFgCeAB8AngAoAJsALwCYADYAlQA8AJMAQQCRAEcAjwBMAI4A + UgCMAFgAigBfAIkAZwCHAHAAhQB7AIMAiACBAJgAfwCuAH4AywB+APEAfAD/AHcA/wB0AP8AcwD/AM4A + AAC+AAAArgAAAKIAAACZAAAAkgAAAI8AAACMAAAAiwAHAIoAEACJABkAiQAhAIgAKACGAC8AhAA1AIIA + OwCAAEAAfwBGAH0ASwB8AFIAegBZAHgAYAB3AGkAdQB0AHMAgQBxAJAAcACkAG4AvwBtAOUAbQD/AGsA + /wBpAP8AZwD/AMEAAACtAAAAnQAAAJAAAACIAAAAggAAAH0AAAB7AAAAegACAHgACwB4ABMAeAAbAHgA + IgB2ACkAdAAvAHIANQBxADoAbwBAAG0ARQBsAEwAagBTAGkAWgBnAGMAZQBuAGQAegBiAIkAYQCcAGAA + tABfANcAXwD4AF4A/wBdAP8AXAD/ALIAAACeAAAAjwAAAIMAAAB6AAAAcwAAAG8AAABtAAAAawAAAGoA + BgBpAA4AaQAVAGgAHABoACMAZgApAGUALwBjADUAYgA6AGAAQABfAEYAXQBNAFwAVQBaAF4AWABoAFcA + dABVAIMAVACVAFMAqwBSAMkAUgDvAFIA/wBSAP8AUQD/AKYAAACTAAAAhAAAAHgAAABuAAAAZwAAAGMA + AABgAAAAXgAAAF0AAgBcAAkAWwARAFsAFwBbAB4AWgAkAFgAKgBXAC8AVQA1AFQAOwBSAEEAUQBIAE8A + UABOAFkATABjAEsAbwBJAH0ASACOAEcAowBGAL8ARgDjAEYA/wBGAP8ARwD/AJwAAACKAAAAewAAAG8A + AABlAAAAXgAAAFgAAABVAAAAUwAAAFEAAABRAAYAUAAMAFAAEwBQABkATwAfAE0AJQBMACsASgAwAEkA + NgBIAD0ARgBDAEUASwBDAFQAQQBfAEAAawA+AHkAPQCJADwAnQA7ALYAOwDXADsA9gA8AP8APAD/AJMA + AACCAAAAcwAAAGcBAABdAQAAVQAAAFAAAABMAAAASQAAAEgAAABHAAMARgAJAEYADwBFABUARQAbAEQA + IQBCACcAQQAsAD8AMgA+ADkAPABAADsARwA5AFEAOABbADYAZwA1AHQANACEADIAlwAyAK8AMQDNADEA + 7QAyAP8AMwD/AI0AAAB8AQAAbQUAAGEHAABXCAAATwcAAEkGAABEBQAAQQIAAD8AAAA/AAAAPgAGAD0A + CwA8ABIAPAAXADsAHQA5ACMAOAApADcALwA1ADUANAA8ADIARAAxAE0ALwBYAC4AZAAsAHEAKwCBACoA + kwApAKgAKADEACgA5AApAPsAKQD/AIcBAAB2BwAAaAoAAFwMAABRDQAASQwAAEMLAAA+CgAAOgkAADgH + AAA3BAAANgEDADYACAA1AA4ANAAUADMAGgAyACAAMAAlAC8AKwAtADIALAA5ACsAQQApAEsAJwBVACYA + YQAkAG4AIwB+ACEAjwAgAKQAIAC9ACAA3AAgAPMAIAD/AIIHAAByCwAAYw4AAFcRAABNEQAARBEAAD4Q + AAA5DwAANQ4AADIMAAAwCgAALwgAAC8FBQAvAwsALQERACwBFwArAB0AKQAjACgAKQAmADAAJQA3ACMB + PwAiAUkAIAFTAB4BXwAcAG0AGwB8ABkAjQAYAKAAFwC4ABcA0gAXAOwAFwD8AH4LAABtEAAAXxMAAFMU + AABJFQAAQRUAADoUAAA1EwAAMRIAAC0RAAArEAAAKQ4AACkMAgApCQcAKAcNACYHFAAkBxoAIwcgACEI + JwAgCC4AHgg2AB0IPgAbCUgAGQlTABcJXwAUCGwAEgh7ABEHjAAPBZ4ADgS0AA0CzAANAOUADgD0AHoO + AABqEwAAXBYAAFAXAABFGAAAPRgAADYXAAAxFgAALRUAACkVAAAmFAAAJBMAACMRAQAiEAQAIQ4JACAN + EQAeDhgAHQ4fABsOJgAZDy0AFxA2ABUQPwATEEkAEBBUAA0QYAALEG0ACRB7AAcQiwAFDp4ABA2yAAMM + yQACC98AAwnvAHcSAABnFgAAWRkAAEwaAABCGgAAOhoAADMaAAAuGQAAKRgAACYYAAAjFwAAIBYAAB4V + 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 + AJd/AACVmQAAkrkAAJDeADlNAAAsUgAAH1cAABBdAAACZAAAAGoAAABwAAAAdgAAAHoAAAB9AAAAgQAA + AIQAAACIAAAAjAAAAI8AAACTAAAAlgAAAJkAAACcAAAAnwAAAKMAAACnAAAArAAAALIAAAC4CgAAuhoA + ALktAAC3QgAAtFkAALFyAACtjAAAqasAAKjLADFYAAAjXgAAFGUAAAVsAAAAcwAAAHoAAACAAAAAhQAA + AIoAAACNAAAAkQAAAJUAAACZAAAAnQAAAKEAAAClAAAAqAAAAKsAAACvAAAAswAAALcAAAC8AAAAwQAA + AMgAAADQAAAA2Q0AANggAADVNgAA0k0AAM5nAADKgQAAyZoAAMa4AChlAAAZbAAACXQAAAB8AAAAgwAA + AIoAAACQAAAAlgAAAJsAAACdAAAAoQAAAKYAAACrAAAArwAAALQAAAC4AAAAvAAAAMAAAADEAAAAyQAA + AM4AAADTAAAA2gAAAOEAAADoAAAA7wAAAPMSAADyKAAA8EEAAO1bAADqdQAA5pAAAOSrAP4AAAD4AAAA + 9AAAAPMAAAD0AAAA9wABAPsACwD/ABYA/wAhAP8ALAD/ADUA+wA+APcARQDzAEwA8ABSAO0AWADqAF0A + 6ABjAOYAaQDkAG8A4QB3AN4AgADbAIoA2ACXANMApwDQAL8AzQDhAMkA/wC6AP8ArQD/AKIA/wCcAP8A + lwD/APYAAADvAAAA6wAAAOkAAADrAAAA7wAAAPEAAwDuABAA7gAbAO4AJQDoAC8A4wA4AN8APwDbAEYA + 2ABMANUAUgDSAFcA0ABdAM0AYgDLAGkAyQBwAMYAeADDAIMAwACPAL0AnwC6ALMAtwDSALQA9gCqAP8A + nQD/AJYA/wCRAP8AjQD/AOwAAADkAAAA3wAAAN0AAADeAAAA2AAAANIAAADRAAkAzQAVAM0AHwDNACgA + yQAxAMUAOADAAD8AvQBFALoASwC3AFAAtQBWALMAXACxAGIArwBpAKwAcgCqAHsApwCHAKUAlgCiAKoA + nwDEAJ4A6wCbAP8AkAD/AIkA/wCEAP8AggD/AOAAAADWAAAA0AAAAMoAAADAAAAAuQAAALYAAACyAAMA + sgAOALEAGACwACEArgAqAKsAMQCoADgApQA+AKMARAChAEkAnwBPAJ4AVQCcAFsAmgBiAJgAawCWAHQA + kwB/AJEAjQCPAKAAjQC4AIsA3ACJAP8AggD/AH0A/wB5AP8AdgD/ANEAAADHAAAAvAAAAK4AAAClAAAA + oAAAAJwAAACaAAAAmAAIAJgAEQCYABoAmQAjAJYAKgCTADEAkAA3AI4APQCMAEIAigBIAIkATgCHAFQA + hQBbAIQAYwCCAG0AgAB4AH4AhQB8AJYAegCtAHkAzAB4APQAdAD/AG8A/wBtAP8AawD/AMMAAAC2AAAA + pQAAAJkAAACRAAAAigAAAIgAAACFAAAAhAACAIQACwCDABQAgwAcAIMAIwCAACoAfgAwAH0ANgB7ADwA + eQBBAHgARwB2AE0AdQBVAHMAXQBxAGYAbwBxAG0AfgBrAI4AagCjAGgAvwBnAOgAZwD/AGMA/wBhAP8A + YAD/ALYAAACkAAAAlAAAAIcAAAB/AAAAegAAAHUAAAB0AAAAcgAAAHEABQBxAA0AcQAWAHIAHQBwACQA + bgAqAG0AMABrADUAaQA7AGgAQQBmAEcAZQBOAGMAVgBhAGAAYABqAF4AdwBcAIcAWwCaAFkAtABZANoA + WAD8AFcA/wBVAP8AVQD/AKkAAACWAAAAhwAAAHsAAABxAAAAawAAAGcAAABkAAAAYwAAAGIAAQBiAAkA + YgAQAGIAFwBiAB4AYAAkAF8AKgBdAC8AWwA1AFoAOwBYAEEAVwBIAFUAUABUAFoAUgBlAFAAcQBPAIAA + TQCSAEwAqgBLAMsASwDyAEsA/wBKAP8ASgD/AJ0AAACLAAAAfAAAAG8AAABmAAAAXwAAAFoAAABXAAAA + VQAAAFQAAABUAAQAVAALAFQAEgBUABgAVAAeAFIAJABQACoATgAvAE0ANQBLADwASgBDAEgASwBHAFQA + RQBfAEQAbABCAHoAQQCMAEAAogA/AMAAPwDnAD8A/wA/AP8AQAD/AJMAAACBAAAAcwAAAGYAAABcAAAA + VQAAAE8AAABMAAAASgAAAEkAAABIAAEASAAHAEgADQBIABQASAAaAEYAHwBEACUAQwArAEEAMABAADcA + PgA+AD0ARgA7AFAAOgBbADgAZwA3AHUANgCGADUAmwA0ALYANADcADQA/AA1AP8ANgD/AIoAAAB5AAAA + awAAAF8AAABVAAAATAAAAEcAAABCAAAAQAAAAD4AAAA+AAAAPQAEAD0ACgA9ABAAPQAVADwAGwA6ACEA + OQAmADcALAA2ADMANAA6ADMAQgAxAEsAMABWAC8AYwAtAHEALACBACsAlQAqAK4AKgDPACoA8wArAP8A + LAD/AIQAAABzAAAAZQAAAFgCAABOAwAARgMAAEACAAA7AQAAOAAAADYAAAA0AAAANAACADMABwAzAAwA + MwASADMAFwAxAB0ALwAjAC4AKAAtAC8AKwA2ACoAPgApAEgAJwBTACYAXwAkAG0AIwB9ACIAkAAiAKgA + IQDGACEA6QAiAP8AIwD/AH8AAABuAgAAXwUAAFMHAABJCAAAQQcAADoHAAA1BgAAMQUAAC4DAAAtAQAA + LAAAACsABQArAAkAKgAOACoAFAApABoAJwAfACYAJQAlACwAIwAzACIAOwAhAEUAHwBQAB4AXAAcAGoA + GwB6ABoAjAAZAKIAGQC+ABkA4AAZAPsAGgD/AHoCAABpBgAAWwkAAE8LAABEDAAAPAsAADULAAAwCgAA + LAoAACkIAAAmBwAAJQUAACQDAwAkAQcAIwAMACMAEQAiABcAIAAcAB8AIgAeACkAHAAwABsAOQAaAEIA + GABNABcAWQAVAGcAEwB3ABIAiQARAJ0AEQC3ABEA1gARAPIAEgD/AHUGAABlCgAAVw0AAEsOAABAEAAA + OA8AADEOAAAsDgAAJw0AACQMAAAhCwAAHwoAAB4JAgAdBwUAHQUJABwEDgAbBBQAGgQaABgEIAAXBCYA + FgQuABUENgATBEAAEQRLABADVwANA2UACwN0AAoChQAJAJkACACxAAcAzQAIAOoACQD9AHEKAABhDgAA + UxEAAEcSAAA9EgAANRIAAC4SAAAoEQAAJBEAACAQAAAdDwAAGw4AABkNAgAYDAUAFwoHABcJCwAVCREA + FAkXABIJHQARCSQAEAosAA0KNQAMCj8ACQtKAAcLVgAFC2QAAwtzAAEKgwAACZYAAAesAAAFxQAAA+AA + AAD0AG4NAABeEQAAUBQAAEQVAAA6FQAAMhUAACsUAAAlFAAAIRMAAB0SAAAaEgAAGBEAABUQAwAUEAUA + Eg8HABEOCQAODg4ADQ8VAAsQHAAKECMACBAqAAcRMwAFETwAAxFHAAERVAAAEWEAABFxAAAQggAADpYA + AA2sAAALxQAACt4AAAnvAGsRAABbFAAATRYAAEEXAAA3FwAALxcAACgXAAAjFgAAHhUAABsVAAAYFAAA + FRMBABMTBAAREgYADhIHAAsTCAAJFAwABxUTAAUVGQAEFSAAAhYnAAAWMAAAFjkAABZFAAAWUQAAFl8A + ABZvAAAVgQAAFJUAABKsAAARxgAAEOEAAA7yAGcUAABXFwAAShkAAD4aAAA0GgAALBkAACUZAAAgGAAA + HBcAABgWAAAWFgAAExUDABEUBQAOFQUACxYFAAcXBwAEGQsAARoQAAAaFgAAGx0AABslAAAbLQAAGzcA + ABtCAAAbTwAAG10AABttAAAagAAAGZQAABesAAAWyAAAFOQAABP2AGMXAABUGgAARhwAADscAAAxHAAA + KRwAACMbAAAeGgAAGhkAABcYAAAVFwIAEhcCAA4XAgALGAMACBoEAAQbBgAAHQkAAB8NAAAgFAAAIBsA + ACEiAAAhKwAAITQAACE/AAAhTAAAIVsAACBrAAAgfgAAHpMAAB2sAAAbyQAAGuYAABj4AF8bAABQHQAA + Qx4AADgfAAAuHwAAJx4AACEdAAAdGwAAGRoAABYZAAATGQAADxoAAAsbAAAHHAAAAx4CAAAgBAAAIwcA + ACULAAAnEQAAJxgAACcfAAAnKAAAKDEAACg8AAAnSQAAJ1gAACdpAAAmfAAAJZIAACOrAAAhygAAH+kA + AB78AFseAABMIAAAPyEAADQiAAAsIQAAJSAAAB8eAAAcHQAAGBwAABQcAAAQHQAACx4AAAcgAAADIgAA + ACQAAAAmAgAAKQUAACsJAAAtDQAALhQAAC8cAAAvJAAALy4AAC85AAAuRgAALlUAAC5mAAAteQAAK48A + ACqpAAAoyQAAJuoAACX+AFYiAABIJAAAOyUAADEkAAApIwAAIyIAAB8gAAAaHwAAFR8AABAgAAALIgAA + BiMAAAImAAAAKAAAACoAAAAtAAAAMAIAADIGAAA0CgAANxEAADcYAAA3IQAANyoAADc1AAA3QwAANlEA + ADZiAAA1dgAAM4wAADKnAAAwyAAALuoAACz/AFEmAABDKAAAOCgAAC4nAAAnJQAAIiMAAB0iAAAXIwAA + ESQAAAsmAAAGKAAAACoAAAAtAAAALwAAADIAAAA1AAAANwAAADoDAAA8BwAAPwwAAEEUAABAHQAAQSYA + AEExAABAPgAAQE0AAD9eAAA+cgAAPIgAADujAAA5xQAAN+oAADX/AEwrAAA/KwAANCsAACwpAAAmJwAA + ISYAABkmAAASKAAACyoAAAUtAAAALwAAADIAAAA1AAAAOAAAADsAAAA+AAAAQAAAAEMAAABGAwAASAgA + AEsOAABMFwAATCEAAEwsAABLOQAAS0gAAEpZAABIbQAAR4QAAEWeAABCwAAAQOcAAD//AEYvAAA7LwAA + MS4AACsrAAAlKgAAHCsAABQtAAAMLwAABDMAAAA2AAAAOQAAADwAAAA/AAAAQgAAAEUAAABIAAAASwAA + AE0AAABQAAAAUwMAAFYJAABZEQAAWRsAAFgnAABXNAAAV0MAAFZUAABVaAAAU34AAFGZAABPuQAATOIA + AEr/AEEzAAA3MgAAMDAAACkuAAAgLwAAFjIAAA01AAAEOQAAAD0AAABAAAAARAAAAEcAAABKAAAATQAA + AFEAAABTAAAAVgAAAFkAAABcAAAAXwAAAGIDAABlCgAAaBQAAGcfAABmLQAAZTwAAGROAABjYQAAYHgA + AF6SAABcsQAAWtkAAFj6AD03AAA1NQAALjMAACQ0AAAZNwAADjsAAARAAAAARAAAAEkAAABMAAAAUAAA + AFMAAABXAAAAWgAAAF0AAABgAAAAYwAAAGYAAABpAAAAbAAAAG8AAAByAwAAdgwAAHcYAAB2JgAAdTUA + AHRGAABzWgAAcHAAAG+JAABspwAAac0AAGfyADs6AAA0OAAAKDoAAB0+AAARQgAABUcAAABNAAAAUgAA + AFYAAABaAAAAXgAAAGIAAABlAAAAaQAAAGwAAABvAAAAcgAAAHUAAAB4AAAAewAAAH4AAACCAAAAhgMA + AIoNAACKGwAAiSsAAIc+AACEUwAAg2gAAIGAAAB+nQAAe74AAHnlADk+AAAtQAAAIUQAABRJAAAGUAAA + AFYAAABcAAAAYQAAAGUAAABpAAAAbQAAAHEAAAB1AAAAeQAAAH0AAACAAAAAgwAAAIYAAACJAAAAjAAA + AI8AAACTAAAAmAAAAJ0DAACiEAAAoCAAAJ4yAACcRwAAmF4AAJV4AACTkQAAj7IAAI3YADJHAAAlSwAA + F1EAAAhXAAAAXgAAAGUAAABsAAAAcQAAAHUAAAB5AAAAfQAAAIEAAACGAAAAigAAAI0AAACRAAAAlAAA + AJcAAACbAAAAngAAAKIAAACnAAAArQAAALMAAAC6AwAAvRMAALsmAAC4OgAAtFIAALBrAACrhwAAqKMA + AKfCACpSAAAbWAAADF8AAABnAAAAbgAAAHUAAAB8AAAAggAAAIUAAACJAAAAjQAAAJIAAACXAAAAmwAA + AKAAAACkAAAApwAAAKsAAACvAAAAswAAALgAAAC+AAAAxAAAAMsAAADUAAAA3gUAAN8YAADcLQAA10UA + ANFeAADNeAAAyJQAAMK0ACBfAAARZwAAAW8AAAB3AAAAfwAAAIYAAACMAAAAkwAAAJYAAACaAAAAngAA + AKQAAACpAAAArgAAALMAAAC4AAAAvAAAAMEAAADFAAAAygAAANAAAADWAAAA3gAAAOUAAADtAAAA9QAA + APoJAAD5IAAA9jcAAPNRAADvbAAA64YAAOigAAAAAAAAAAAAAAAAAAAAAAABAwQFBggJCgsNDg8REhMU + FhcYGhscHR8gISIkJSYoKSorLS4vMDIzNDY3ODk7PD0+QEFCREVGR0lKS01OT1BSU1RVV1hZW1xdXmBh + YmNlZmdpamtsbm9wcXN0dXd4eXp8fX6AgYKDhYaHiIqLjI6PkJGTlJWWmJmanJ2en6Gio6Smp6iqq6yt + r7Cxs7S1tri5uru9vr/BwsPExsfIycvMzc/Q0dLU1dbX2drb3d7f4OLj5Obn6Onr7O3u8PHy9PX29/n6 + +/z+//////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAA + AQMEBQYICQoLDQ4PERITFBYXGBobHB0fICEiJCUmKCkqKy0uLzAyMzQ2Nzg5Ozw9PkBBQkRFRkdJSktN + Tk9QUlNUVVdYWVtcXV5gYWJjZWZnaWprbG5vcHFzdHV3eHl6fH1+gIGCg4WGh4iKi4yOj5CRk5SVlpiZ + mpydnp+hoqOkpqeoqqusra+wsbO0tba4ubq7vb6/wcLDxMbHyMnLzM3P0NHS1NXW19na293e3+Di4+Tm + 5+jp6+zt7vDx8vT19vf5+vv8/v////////////////////////////////////////////////////// + AAAAAAAAAAAAAAAAAAAAAAEDBAUGCAkKCw0ODxESExQWFxgaGxwdHyAhIiQlJigpKistLi8wMjM0Njc4 + OTs8PT5AQUJERUZHSUpLTU5PUFJTVFVXWFlbXF1eYGFiY2VmZ2lqa2xub3Bxc3R1d3h5enx9foCBgoOF + hoeIiouMjo+QkZOUlZaYmZqcnZ6foaKjpKanqKqrrK2vsLGztLW2uLm6u72+v8HCw8TGx8jJy8zNz9DR + 0tTV1tfZ2tvd3t/g4uPk5ufo6evs7e7w8fL09fb3+fr7/P7///////////////////////////////// + /////////////////////wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSor + LC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZn + aGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKj + pKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f + 4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v9tZnQxAAAAAAMEIQAAAQAAAAAAAAAAAAAAAAAA + AAEAAAAAAAAAAAAAAAAAAAABAAAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYn + KCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJj + ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6f + oKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb + 3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AAEBAgIDAwQEBQYGBwcICAkJCgsLDAwN + DQ4PDxAQERESExMUFBUWFhcXGBkZGhobHBwdHh4fICAhIiIjJCQlJiYnKCkpKissLS0uLzAxMjIzNDU2 + Nzg5Ojs8PT4/QEJDREVGSElKTE1PUFJTVVdYWlxeYGJkZmhqbW9xdHZ5fH6Bg4aJi46QkpWXmZudn6Gj + paeoqqytr7Cys7W2t7m6u7y9v8DBwsPExcbHyMnKy8zNzc7P0NHS0tPU1dbW19jZ2drb29zd3d7f3+Dh + 4eLj4+Tl5ebm5+jo6enq6+vs7O3u7u/v8PDx8vLz8/T09fb29/f4+Pn5+vv7/Pz9/f7+/wABAQICAwME + BAUGBgcHCAgJCQoLCwwMDQ0ODw8QEBEREhMTFBQVFhYXFxgZGRoaGxwcHR4eHyAgISIiIyQkJSYmJygp + KSorLC0tLi8wMTIyMzQ1Njc4OTo7PD0+P0BCQ0RFRkhJSkxNT1BSU1VXWFpcXmBiZGZoam1vcXR2eXx+ + gYOGiYuOkJKVl5mbnZ+ho6WnqKqsra+wsrO1tre5uru8vb/AwcLDxMXGx8jJysvMzc3Oz9DR0tLT1NXW + 1tfY2dna29vc3d3e39/g4eHi4+Pk5eXm5ufo6Onp6uvr7Ozt7u7v7/Dw8fLy8/P09PX29vf3+Pj5+fr7 + +/z8/f3+/v/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/M + z7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg + 4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e + 7tJWduzTXIzp02Gg4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok + +71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB + /7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTw + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/M + z7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg + 4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e + 7tJWduzTXIzp02Gg4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok + +71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB + /7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTw + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/M + z7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg + 4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e + 7tJWduzTXIzp02Gg4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok + +71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB + /7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTw + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg4tFmstvIa8DUwW/M + z7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf/+shQB/7IjCf+wMBX/sjok+71BM/XHSEfxzk9e7tJWduzTXIzp02Gg + 4tFmstvIa8DUwW/Mz7l02MmyeeTCrYTwu7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/ + u7mt/7u5rf+7ua3/u7mt/7u5rf+7ua3/u7mt/7u5rf/+sxQB/7MjCP+wMBX/szoj+L9BM/LKSEfu0k5e + 69dUdujaWo3l3V6i4dxis9rUZsPTzmnPzstv2sbHduS5woLuob2X+KG9l/ihvZf4ob2X+KG9l/ihvZf4 + ob2X+KG9l/ihvZf4ob2X+KG9l/ihvZf4ob2X+KG9l/ihvZf4ob2X+KG9l/j9sxMB/rMjCP+xMBX/tTkj + 9sFAMu/MR0br10xe591SduPhV43g5Vqj2N5etNHZY8LJ02jNwc5t17bJc+CoxH3qlMCN8pTAjfKUwI3y + lMCN8pTAjfKUwI3ylMCN8pTAjfKUwI3ylMCN8pTAjfKUwI3ylMCN8pTAjfKUwI3ylMCN8pTAjfL9tBMB + /rQiCP+yMBX+tzki9MNAMezPRkXn3Etd4+NQdt/oVI7a5liiz+Bes8faYsC/1GfKtc9r06rLcdydx3rk + jMOH7IzDh+yMw4fsjMOH7IzDh+yMw4fsjMOH7IzDh+yMw4fsjMOH7IzDh+yMw4fsjMOH7IzDh+yMw4fs + jMOH7IzDh+z8tBMB/bQiCP+yLxX8uTgh8cY/MOnTRUTj4Epc3+hPddztUo3S6VihyOFdsb7bYb211mXH + rNFpz6HNcNeVyXffh8aD5YfGg+WHxoPlh8aD5YfGg+WHxoPlh8aD5YfGg+WHxoPlh8aD5YfGg+WHxoPl + h8aD5YfGg+WHxoPlh8aD5YfGg+X8tRIB/bUiCP+zLxT5vDgg7sk+L+XXREPe5Elb2+1OddbwUozL6lif + wONcrrbdYLqt2GTDo9RoypnQbtKOzXbZgsqA34LKgN+CyoDfgsqA34LKgN+CyoDfgsqA34LKgN+CyoDf + gsqA34LKgN+CyoDfgsqA34LKgN+CyoDfgsqA34LKgN/7tRIB/LYiB/+0LxT2vjcf6s09LeDcQ0Ha50pZ + 1fBOdNDzUYvE61eduORcq67fX7al22O+nNZnxZPTbcyJ0HTSf81+13/Nftd/zX7Xf81+13/Nftd/zX7X + f81+13/Nftd/zX7Xf81+13/Nftd/zX7Xf81+13/Nftd/zX7Xf81+13/Nftf5thEB+7chB/61LxTzwjYd + 5tE8K9zhQz/U60paz/NOdMn1UIm97VaaseZbqKbhX7Kd3WO5ldpnv43WbMWE1HPLfNF80HzRfNB80XzQ + fNF80HzRfNB80XzQfNF80HzRfNB80XzQfNF80HzRfNB80XzQfNF80HzRfNB80XzQfNF80HzRfND4txEB + +rghB/22LhPvxjUc4dc7KdblRT3P70payPdNc8L3UIe271aXquhao6DkX6yX4GOzj91nuYfbbL6A2HLD + edV6x3nVesd51XrHedV6x3nVesd51XrHedV6x3nVesd51XrHedV6x3nVesd51XrHedV6x3nVesd51XrH + edV6x3nVesf2uBAB+bkgBvq5LRLpyzMZ2946JdHpRT7J9EpawftNcbr4T4Su8VWSo+tanpnnX6aR5GOs + iuFnsoPfbLZ83XG6dtt5vnbbeb5223m+dtt5vnbbeb5223m+dtt5vnbbeb5223m+dtt5vnbbeb5223m+ + dtt5vnbbeb5223m+dtt5vnbbeb7zuQ4A97sfBvS/Kw/i0jEV1OQ+I8vvRUDC+klauf9Mb7H7Tn+m9FWM + m+9blpLrX56L6GSkheZoqH/kbKx54nGwc+B3s3Pgd7Nz4Hezc+B3s3Pgd7Nz4Hezc+B3s3Pgd7Nz4Hez + c+B3s3Pgd7Nz4Hezc+B3s3Pgd7Nz4Hezc+B3s3Pgd7PuuwwA9b0eBe3GKAvZ3S4Pzeo+JsP2REG6/0dY + sP9Kaqj+Tnmd+FWElPRbjYzwYJSF7mWZgOxpnXvqbaB26HKjced3pnHnd6Zx53emced3pnHnd6Zx53em + ced3pnHnd6Zx53emced3pnHnd6Zx53emced3pnHnd6Zx53emced3pnHnd6bovgoA8sAdBOLRIgbQ5TMQ + xfI+Kbr+Q0Cw/0VUpv9JZJ7/TXCV/VR6jPlcgoX2YYiA9GaMfPNqj3jxbpJ08HOVcO93l3Dvd5dw73eX + cO93l3Dvd5dw73eXcO93l3Dvd5dw73eXcO93l3Dvd5dw73eXcO93l3Dvd5dw73eXcO93l3Dvd5fewQYA + 7cUaA9XfHwLI7zUUvPs9KrD/QD6l/0NOm/9HW5P/TWaM/1Rvhf9cdX/+Ynp7/Gd9d/trgHT5b4Jx+HKE + bfd3hm33d4Zt93eGbfd3hm33d4Zt93eGbfd3hm33d4Zt93eGbfd3hm33d4Zt93eGbfd3hm33d4Zt93eG + bfd3hm33d4bZxAUA2dQIAMrqJgW++TUYsf85KqX/PDma/0BGkP9GUYn/TFuD/1Niff9cZ3n/Ymp1/2dt + cv9rb3D/bnFt/3Jza/91dWv/dXVr/3V1a/91dWv/dXVr/3V1a/91dWv/dXVr/3V1a/91dWv/dXVr/3V1 + a/91dWv/dXVr/3V1a/91dWv/dXXVxwUAzuQLAMD2KQmz/zIZpv81J5r/ODOP/z0+hv9ER3//S056/1JU + df9aWHH/YFtv/2Vdbf9qX2v/bWBp/3BiZ/9zY2f/c2Nn/3NjZ/9zY2f/c2Nn/3NjZ/9zY2f/c2Nn/3Nj + Z/9zY2f/c2Nn/3NjZ/9zY2f/c2Nn/3NjZ/9zY2f/c2POzQUAwvIXAbX/KAyo/y0Ym/8wIo//NCyE/zs1 + fP9CPHX/SUJw/1BGbP9WSmn/XUxn/2JOZf9mT2T/alBj/21RYf9wUmH/cFJh/3BSYf9wUmH/cFJh/3BS + Yf9wUmH/cFJh/3BSYf9wUmH/cFJh/3BSYf9wUmH/cFJh/3BSYf9wUmH/cFL/qhMC/6kiCP+mLhT/pzkg + /7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ67JzoeSse67fo4O52puKwtaWksrSj5zRz4qp18yGvty+fL/f + vny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9//qhMC + /6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ67JzoeSse67fo4O52puKwtaWksrSj5zR + z4qp18yGvty+fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/f + vny/3758v9//qhMC/6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ67JzoeSse67fo4O5 + 2puKwtaWksrSj5zRz4qp18yGvty+fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/f + vny/3758v9++fL/fvny/3758v9//qhMC/6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ + 67JzoeSse67fo4O52puKwtaWksrSj5zRz4qp18yGvty+fL/fvny/3758v9++fL/fvny/3758v9++fL/f + vny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9//qhMC/6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU + +75aafq9Yn7zuGuQ67JzoeSse67fo4O52puKwtaWksrSj5zRz4qp18yGvty+fL/fvny/3758v9++fL/f + vny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9//qhMC/6kiCP+mLhT/pzkg + /7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ67JzoeSse67fo4O52puKwtaWksrSj5zRz4qp18yGvty+fL/f + vny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9//qhMC + /6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ67JzoeSse67fo4O52puKwtaWksrSj5zR + z4qp18yGvty+fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/f + vny/3758v9//qhMC/6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ67JzoeSse67fo4O5 + 2puKwtaWksrSj5zRz4qp18yGvty+fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/f + vny/3758v9++fL/fvny/3758v9//qhMC/6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ + 67JzoeSse67fo4O52puKwtaWksrSj5zRz4qp18yGvty+fL/fvny/3758v9++fL/fvny/3758v9++fL/f + vny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9//qhMC/6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU + +75aafq9Yn7zuGuQ67JzoeSse67fo4O52puKwtaWksrSj5zRz4qp18yGvty+fL/fvny/3758v9++fL/f + vny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9//qhMC/6kiCP+mLhT/pzkg + /7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ67JzoeSse67fo4O52puKwtaWksrSj5zRz4qp18yGvty+fL/f + vny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9//qhMC + /6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ67JzoeSse67fo4O52puKwtaWksrSj5zR + z4qp18yGvty+fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/f + vny/3758v9//qhMC/6kiCP+mLhT/pzkg/7FALf+5SD/8vlFU+75aafq9Yn7zuGuQ67JzoeSse67fo4O5 + 2puKwtaWksrSj5zRz4qp18yGvty+fL/fvny/3758v9++fL/fvny/3758v9++fL/fvny/3758v9++fL/f + vny/3758v9++fL/fvny/3758v9//qhMC/6ohCP+nLhP/qTgg/7NALf28Rz75wk9T+MNYaffCYH/yv2iS + 6rpvo+Kzd7LcqX6+16GGyNKajdHOk5fZyoyn4cGFu+azgL3js4C947OAveOzgL3js4C947OAveOzgL3j + s4C947OAveOzgL3js4C947OAveOzgL3js4C947OAveP/qxMB/6ohCP+oLhP/qzgf/7U/LPq+Rj73xk5T + 9MdWafPHXn/xxmWU6MJspuG6c7XasHnC1KeAzs+fiNfKl5LhxpKn6bSIuOyph7vmqYe75qmHu+aph7vm + qYe75qmHu+aph7vmqYe75qmHu+aph7vmqYe75qmHu+aph7vmqYe75qmHu+b/qxIB/6shCP+oLhP/rDcf + /rc/LPjARj30yU1T8cxVau/NXIDvzGKV58poqN/DbrjYuXTG0a96082pg9zFo5Dkupyi6qiSt+6fjrro + n4666J+Ouuifjrron4666J+Ouuifjrron4666J+Ouuifjrron4666J+Ouuifjrron4666J+Ouuj/rBIB + /6shCP+oLhP/rjce/Lk+K/bDRT3xzEtS7tBTaezSWYDq01+W59Nkqd7MarvWxG/J0L5408a0gNy6q4rk + raWc652etu+VlrnqlZa56pWWueqVlrnqlZa56pWWueqVlrnqlZa56pWWueqVlrnqlZa56pWWueqVlrnq + lZa56pWWuer/rBIB/6whB/+pLhP/rzYd+rs+KvPFRDzuz0pS69VRaejZV4Hl3FuX495gq93YZbzSz2zJ + yMZ00729fNyxtYbkoq+W65Kttu+LoLjri6C464uguOuLoLjri6C464uguOuLoLjri6C464uguOuLoLjr + i6C464uguOuLoLjri6C464uguOv/rBIB/6whB/+pLhP/sTYd+L09KfHIRDvr0kpR6NtPaeTgVIHh5FiX + 3OFcrNPcYrvL1WnIwc9x0rbIeNuowYLjmLyS6om/tu6CrLjrgqy464KsuOuCrLjrgqy464KsuOuCrLjr + gqy464KsuOuCrLjrgqy464KsuOuCrLjrgqy464KsuOv/rRIB/6wgB/+qLRL/szUc9r88Ke7KQzro1UhQ + 5OBNaODmUoHe6lWX0+RbqsrdYbrA1WbHttBs0avMc9qeyH3ijsSM6X7Dp+x6urnqerq56nq6uep6urnq + erq56nq6uep6urnqerq56nq6uep6urnqerq56nq6uep6urnqerq56nq6uer+rREB/60gB/+rLRL/tTUb + 9ME8KOvOQjnk2kdP4eZLZ93rUIDY7FWWzOZbqcHeYLi32GXEq9JqzqDOcNeTynfehMaD5XXEmOlzxbLo + c8Wy6HPFsuhzxbLoc8Wy6HPFsuhzxbLoc8Wy6HPFsuhzxbLoc8Wy6HPFsuhzxbLoc8Wy6HPFsuj+rREB + /64gB/+rLRL8tzQa8cQ7JufRQTjg30ZO3OhMZtnwT3/Q71SVxOdap7nfX7Wu2mTAo9RoypjQbtGNzXbY + gMqA3nPHkONtx6Pkbcej5G3Ho+Rtx6Pkbcej5G3Ho+Rtx6Pkbcej5G3Ho+Rtx6Pkbcej5G3Ho+Rtx6Pk + bcej5G3Ho+T9rhAB/64gB/+sLRL6ujMZ7cg6JePWQDbc40ZL1utMZtHzT37J8VSTvehZpLHhXrGm3GO8 + m9doxZLTbcuI0HTSfc1+13LLi9tsypndbMqZ3WzKmd1sypndbMqZ3WzKmd1sypndbMqZ3WzKmd1sypnd + bMqZ3WzKmd1sypndbMqZ3WzKmd37rxAB/68fBv+tLBH2vTIY6cw5I97cPjPW50hK0O9MZsr2T33C8lOR + tepZoKnjXq2e3mK3lNtnvozYbcSD1HPKetJ8z3HQh9NrzpLVa86S1WvOktVrzpLVa86S1WvOktVrzpLV + a86S1WvOktVrzpLVa86S1WvOktVrzpLVa86S1WvOktX5sA8B/7AfBv+xKxDywTEV5NI3INjiQS/Q60hL + yfRMZcL6Tnu59FKNrexYnKHmXaeX4mKwjt9nt4bcbLx/2XLBd9d6xXDVhMlq1I3LatSNy2rUjctq1I3L + atSNy2rUjctq1I3LatSNy2rUjctq1I3LatSNy2rUjctq1I3LatSNy2rUjcv3sQ4A/7IeBf21KQ7sxy8S + 3Ns0G9LnQjDJ8UhMwfpLZLn+TXiw9lGIpO9YlZnqXqCQ5mOniONnrYHhbLJ633G2dN14um7bgb1q2oi/ + atqIv2raiL9q2oi/atqIv2raiL9q2oi/atqIv2raiL9q2oi/atqIv2raiL9q2oi/atqIv2raiL/0sgwA + /rMdBfa8Jwvk0CsO1OI4F8vtQjLB+EdMuP9JYq//THOn+VGCm/RYjZHvXpaJ7GSdguloon3nbaZ35XKq + cuR3rWzifrBo4YSyaOGEsmjhhLJo4YSyaOGEsmjhhLJo4YSyaOGEsmjhhLJo4YSyaOGEsmjhhLJo4YSy + aOGEsmjhhLLvtQsA+7YcBO7EIgfZ3CYHzeo6G8L1QTS4/0VLrv9HXaX/S22d/lF5k/lZg4r1X4uD8mWR + fvBqlXnubph17HObcOt4nmzqfaBo6YKiaOmComjpgqJo6YKiaOmComjpgqJo6YKiaOmComjpgqJo6YKi + aOmComjpgqJo6YKiaOmComjpgqLotwgA+LkaA+LQGQLP5SwJxPM6Hrn+QDSu/0JHpP9FV5v/SmSU/1Bv + i/9Zd4P8YH5++WaCefdrhnX2b4hy9XOLbvR3jWvzfI9o8oCRaPKAkWjygJFo8oCRaPKAkWjygJFo8oCR + aPKAkWjygJFo8oCRaPKAkWjygJFo8oCRaPKAkWjygJHduwQA7MUQANPgFADG8C8Nuvw5Ia7/PDKj/z9C + mf9ET5D/SVqK/09jgv9Zan3/YG94/2ZydP9rdXH/b3du/nJ5bP12e2n8en1n+35+Z/t+fmf7fn5n+35+ + Z/t+fmf7fn5n+35+Z/t+fmf7fn5n+35+Z/t+fmf7fn5n+35+Z/t+fmf7fn7ZvgMA088GAMjtHgK7+jAR + r/81IaP/OC6X/zw6jf9CRYX/SE5//09Wev9XW3X/X19y/2Vib/9qZGz/bWZq/3FnaP90aWb/eGpl/3tr + Zf97a2X/e2tl/3trZf97a2X/e2tl/3trZf97a2X/e2tl/3trZf97a2X/e2tl/3trZf97a2X/e2vTwwMA + ytgGAL34IwWw/y0So/8wHpf/NCmM/zkzg/8/O3v/RkN1/01IcP9UTG3/XFBq/2JSaP9nVGb/a1Vl/25W + Y/9xV2L/dVhg/3dZYP93WWD/d1lg/3dZYP93WWD/d1lg/3dZYP93WWD/d1lg/3dZYP93WWD/d1lg/3dZ + YP93WWD/d1nJywMAv/YPALH/Igik/ycRl/8rGov/LyKB/zYqef89MXH/RDds/0s7Z/9RP2P/V0Fh/11D + X/9iRF7/ZkVd/2lGXP9tR1v/cEha/3JJWv9ySVr/ckla/3JJWv9ySVr/ckla/3JJWv9ySVr/ckla/3JJ + Wv9ySVr/ckla/3JJWv9ySVr/ckn/oxIC/6IgCP+eLRL/njcd/6c/KP+tRzf/sVBJ/rFbXfuuZW/5qW+A + 9KN5j+6dgpvpl4yl5ZGVreGLnbTfh6a43YOvvdt/u8DZfcvEzHTNxshxzMfIcczHyHHMx8hxzMfIcczH + yHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMf/oxIC/6IgCP+eLRL/njcd/6c/KP+tRzf/sVBJ + /rFbXfuuZW/5qW+A9KN5j+6dgpvpl4yl5ZGVreGLnbTfh6a43YOvvdt/u8DZfcvEzHTNxshxzMfIcczH + yHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMf/oxIC/6IgCP+eLRL/njcd + /6c/KP+tRzf/sVBJ/rFbXfuuZW/5qW+A9KN5j+6dgpvpl4yl5ZGVreGLnbTfh6a43YOvvdt/u8DZfcvE + zHTNxshxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMf/oxIC + /6IgCP+eLRL/njcd/6c/KP+tRzf/sVBJ/rFbXfuuZW/5qW+A9KN5j+6dgpvpl4yl5ZGVreGLnbTfh6a4 + 3YOvvdt/u8DZfcvEzHTNxshxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczH + yHHMx8hxzMf/oxIC/6IgCP+eLRL/njcd/6c/KP+tRzf/sVBJ/rFbXfuuZW/5qW+A9KN5j+6dgpvpl4yl + 5ZGVreGLnbTfh6a43YOvvdt/u8DZfcvEzHTNxshxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczH + yHHMx8hxzMfIcczHyHHMx8hxzMf/oxIC/6IgCP+eLRL/njcd/6c/KP+tRzf/sVBJ/rFbXfuuZW/5qW+A + 9KN5j+6dgpvpl4yl5ZGVreGLnbTfh6a43YOvvdt/u8DZfcvEzHTNxshxzMfIcczHyHHMx8hxzMfIcczH + yHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMf/oxIC/6IgCP+eLRL/njcd/6c/KP+tRzf/sVBJ + /rFbXfuuZW/5qW+A9KN5j+6dgpvpl4yl5ZGVreGLnbTfh6a43YOvvdt/u8DZfcvEzHTNxshxzMfIcczH + yHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMf/oxIC/6IgCP+eLRL/njcd + /6c/KP+tRzf/sVBJ/rFbXfuuZW/5qW+A9KN5j+6dgpvpl4yl5ZGVreGLnbTfh6a43YOvvdt/u8DZfcvE + zHTNxshxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMf/oxIC + /6IgCP+eLRL/njcd/6c/KP+tRzf/sVBJ/rFbXfuuZW/5qW+A9KN5j+6dgpvpl4yl5ZGVreGLnbTfh6a4 + 3YOvvdt/u8DZfcvEzHTNxshxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczH + yHHMx8hxzMf/oxIC/6IgCP+eLRL/njcd/6c/KP+tRzf/sVBJ/rFbXfuuZW/5qW+A9KN5j+6dgpvpl4yl + 5ZGVreGLnbTfh6a43YOvvdt/u8DZfcvEzHTNxshxzMfIcczHyHHMx8hxzMfIcczHyHHMx8hxzMfIcczH + yHHMx8hxzMfIcczHyHHMx8hxzMf/oxIC/6IgB/+fLRL/oDcc/6k+KP+wRjf/tU9J/LRZXfmyY3D3rmyC + 8qh2kuyhgJ/mmomq4pSSs96OmrrciaO/2YSuxNeBu8jSfMrLw3LJzcBzysvAc8rLwHPKy8BzysvAc8rL + wHPKy8BzysvAc8rLwHPKy8BzysvAc8rLwHPKy8Bzysv/pBEB/6MgB/+fLBL/ojYc/6s+J/+zRTb+uU1J + +rlXXfe4YHH0tGmE8a9yleqoe6PkoIWv35iNudqRlsHXjKDI1IaszdGCvNLGecTWuXfG0bd4yM+3eMjP + t3jIz7d4yM+3eMjPt3jIz7d4yM+3eMjPt3jIz7d4yM+3eMjPt3jIz7d4yM//pBEB/6MfB/+gLBH/pDUb + /649Jv+1RDb8vUxJ+L5VXfW9XnLxumaG7rVvmOiveKfhpoC0252JwNaVksnSjpzRz4iq18yHv9q6e8Hb + sHzF1a59xtKufcbSrn3G0q59xtKufcbSrn3G0q59xtKufcbSrn3G0q59xtKufcbSrn3G0q59xtL/pREB + /6QfB/+hLBH/pjUb/7A8Jf24QzX5wEtI9sJTXfLCXHPuwGOH6rxrmuW3dKrfrXy52KOExdGZjc7Lk5jU + xY+l2cCMuNyxgsDep4HD16aCxdSmgsXUpoLF1KaCxdSmgsXUpoLF1KaCxdSmgsXUpoLF1KaCxdSmgsXU + poLF1KaCxdT/pREB/6QfB/+hLBH/pzQa/7E8Jfu6QzT2w0pI88dSXfDHWnPsxmGI58NonOG8b63ZsXa8 + 0Kd/x8ifiM/CmZPVu5Sf2rWRst6oib7gn4bC2Z6GxNeehsTXnobE156GxNeehsTXnobE156GxNeehsTX + nobE156GxNeehsTXnobE156GxNf/pRAB/6QfB/+iLBH/qTQZ/7M7JPm8QjT0xUlH8MtQXe7MWHPpzF6J + 5MtlndzAa6/StnO8yax7x8GkhM+5no7Wspqb26uXrd+fkL7hmIvB25eLw9iXi8PYl4vD2JeLw9iXi8PY + l4vD2JeLw9iXi8PYl4vD2JeLw9iXi8PYl4vD2JeLw9j/pRAB/6UfB/+iLBH/qjQZ/rU7I/e/QjPyyEhG + 7s9PXOrRVXPn01uJ4M9hntfGaK/Nu3G8w7F4x7qqgc+ypIvWqqCX26KequCXmL3ikJHA3ZCRwtqQkcLa + kJHC2pCRwtqQkcLakJHC2pCRwtqQkcLakJHC2pCRwtqQkcLakJHC2pCRwtr/phAB/6UeB/+iKxH/qzMY + /Lc6I/XBQTLvykdG69NNXOfYU3Pk21mK3NRen9LLZq/IwG68vrd2xrSwfs+rqofWoqeT25mlpuCQob3i + iZfA3oqWwduKlsHbipbB24qWwduKlsHbipbB24qWwduKlsHbipbB24qWwduKlsHbipbB24qWwdv/phAB + /6YeBv+jKxD/rTMY+7k5IvLDQDHszUZF6NhLW+TeUXPg4FaK2Npcns3QZK7Dxmy7uL5zxq63e8+ksoTV + m66Q25GsouCIq73igp6/3oOdwduDncHbg53B24OdwduDncHbg53B24OdwduDncHbg53B24OdwduDncHb + g53B24Odwdv/phAB/6YeBv+jKxD/rjIX+bs5IfDGQDDp0EVE5dxKWuHkT3Lc5FSJ099bncnVYq2+zGm7 + ssVxxai/ec6euoHVlLaM2oq1nt+Btr3ie6a/3nykwdt8pMHbfKTB23ykwdt8pMHbfKTB23ykwdt8pMHb + fKTB23ykwdt8pMHbfKTB23ykwdv/pw8B/6ceBv+kKxD/sDIW9r04IO3JPy/m1ERC4eFJWd7pTXHX6FOI + zeRZnMPcX62402a6rMxuxKHHdc2Xw37TjcGJ2YLBm955xb7gc7HA3nWuwdt1rsHbda7B23Wuwdt1rsHb + da7B23Wuwdt1rsHbda7B23Wuwdt1rsHbda7B23Wuwdv+pw4B/6ceBv+lKxD/szEV88A3H+nNPS3h2kNA + 3OVJV9jrTXDR7FKHx+lXm7ziXauw3GO4pdVqw5rRcsuPznvRhc6H13rLlttxyrDdbL7B3G66wtluusLZ + brrC2W66wtluusLZbrrC2W66wtluusLZbrrC2W66wtluusLZbrrC2W66wtn9qA4B/6gdBv+nKg/8tjAU + 78Q2HeXSPCrc4EI91ehKVtDuTW/L8lCGwO5WmLPmW6in32G1m9pmv5DVbciF0nTOe89903HNi9dpzJ7Z + Zc2/2GbJxNdmycTXZsnE12bJxNdmycTXZsnE12bJxNdmycTXZsnE12bJxNdmycTXZsnE12bJxNf8qQ0B + /6kdBf+qKQ74ui4S6sk0Gt/ZOifW5UU6z+xKVsjzTW7C9U+Dt/BVlaroW6Oe42Cvk95muInabL+A13PF + eNR7ym/Shc1n0ZTQYdCr0l/QtNJf0LTSX9C00l/QtNJf0LTSX9C00l/QtNJf0LTSX9C00l/QtNJf0LTS + X9C00l/QtNL6qg0A/6ocBf+uJwzzvywP5NAyFtjgPCHP6kU8x/JJVsD5TG25+U+ArvJVkKHsW52W5mCn + jOJmr4PfbLV83XK6ddt5vm7ZgsJn147FYdafx1/Wpcdf1qXHX9alx1/Wpcdf1qXHX9alx1/Wpcdf1qXH + X9alx1/Wpcdf1qXHX9alx1/Wpcf3qwwA/6wcBf6zJQnsxikM3NouEdDmPiPI8EU9v/lIVbf+S2qv/U57 + pPZUiZnwW5WP62GehuhnpH7lbKp443KucuF4sWzgf7Rn3om3Yd2VumDdmrpg3Zq6YN2aumDdmrpg3Zq6 + YN2aumDdmrpg3Zq6YN2aumDdmrpg3Zq6YN2aumDdmrrzrQoA/64bBPe6IQbjzyQH0+IyDsnuPia/90Q+ + tv9HU63/SWWl/010m/pUgZH1XIuI8WKSge5omHrsbZx16nOgcel4o2znfqZn5oWoYuWPq2Dkkqtg5JKr + YOSSq2Dkkqtg5JKrYOSSq2Dkkqtg5JKrYOSSq2Dkkqtg5JKrYOSSq2DkkqvurwgA/7AZA+3EGgPY3B0C + y+s0EcD2Pii2/0I9rP9FT6L/SF+a/0xskv9Udon7XX6C+GOFfPVpinf0b41z8nOQb/F3k2vwfZVn7oOX + Y+2LmmLtjZpi7Y2aYu2NmmLtjZpi7Y2aYu2NmmLtjZpi7Y2aYu2NmmLtjZpi7Y2aYu2NmmLtjZrmsgUA + +bgTAd3RCgDN5yQEwfQ1Fbb/PCmr/z86of9CSZf/R1aQ/0xhif9UaoL/XXF8/2R2d/5qenP8bn1v+3N/ + bfp3gWr5e4Nn+IGFY/eHh2L3iodi94qHYveKh2L3iodi94qHYveKh2L3iodi94qHYveKh2L3iodi94qH + YveKh2L3iofctgEA2cQFANDaCADD8ikIt/40GKv/OCig/zw1lf9AQoz/RUyF/0tVgP9TXHr/XGJ1/2Rm + cf9qaW7/bmts/3Ftaf91b2f/eXBl/35yYv+Ec2L/hXRi/4V0Yv+FdGL/hXRi/4V0Yv+FdGL/hXRi/4V0 + Yv+FdGL/hXRi/4V0Yv+FdGL/hXTZuQIAzswFAMTwFQG4/SoLq/8wGJ//NCSU/zgviv89OYL/REJ7/0pJ + df9RTnH/WlJt/2FVa/9nWGj/bFpm/29bZf9yXGP/dl5h/3pfX/9/YF//gWFf/4FhX/+BYV//gWFf/4Fh + X/+BYV//gWFf/4FhX/+BYV//gWFf/4FhX/+BYV//gWHPwQIAxdUEALn8GwOs/ycMn/8rFpP/Lx+J/zQo + f/87MHj/QTdx/0g8bP9PQGf/VURk/1xGYv9iSGD/Z0lf/2tKXv9uS13/cUxc/3VNWv95T1r/e09a/3tP + Wv97T1r/e09a/3tPWv97T1r/e09a/3tPWv97T1r/e09a/3tPWv97T1r/e0/FywIAuucGAK3/GwWg/yEM + k/8lE4j/Khp9/zAhdf83J27/Pi1o/0UxY/9LNF7/UTZc/1c4Wv9cOVj/YDtX/2M7Vv9nPFX/aj1U/24+ + Uv9yP1L/cz9S/3M/Uv9zP1L/cz9S/3M/Uv9zP1L/cz9S/3M/Uv9zP1L/cz9S/3M/Uv9zP1L/cz//nBAC + /5seB/+XKxD/ljYa/54+JP+jRjH/p05A/6ZaUf6jZWL7n3Bx+Zp7f/aVhorykJCT7ouamuuGo6Dpgquk + 5360qOZ8vavkeciu4nfUsNZw2LLPbNizz2zYs89s2LPPbNizz2zYs89s2LPPbNizz2zYs89s2LPPbNiz + z2zYs89s2LP/nBAC/5seB/+XKxD/ljYa/54+JP+jRjH/p05A/6ZaUf6jZWL7n3Bx+Zp7f/aVhorykJCT + 7ouamuuGo6Dpgquk5360qOZ8vavkeciu4nfUsNZw2LLPbNizz2zYs89s2LPPbNizz2zYs89s2LPPbNiz + z2zYs89s2LPPbNizz2zYs89s2LP/nBAC/5seB/+XKxD/ljYa/54+JP+jRjH/p05A/6ZaUf6jZWL7n3Bx + +Zp7f/aVhorykJCT7ouamuuGo6Dpgquk5360qOZ8vavkeciu4nfUsNZw2LLPbNizz2zYs89s2LPPbNiz + z2zYs89s2LPPbNizz2zYs89s2LPPbNizz2zYs89s2LP/nBAC/5seB/+XKxD/ljYa/54+JP+jRjH/p05A + /6ZaUf6jZWL7n3Bx+Zp7f/aVhorykJCT7ouamuuGo6Dpgquk5360qOZ8vavkeciu4nfUsNZw2LLPbNiz + z2zYs89s2LPPbNizz2zYs89s2LPPbNizz2zYs89s2LPPbNizz2zYs89s2LP/nBAC/5seB/+XKxD/ljYa + /54+JP+jRjH/p05A/6ZaUf6jZWL7n3Bx+Zp7f/aVhorykJCT7ouamuuGo6Dpgquk5360qOZ8vavkeciu + 4nfUsNZw2LLPbNizz2zYs89s2LPPbNizz2zYs89s2LPPbNizz2zYs89s2LPPbNizz2zYs89s2LP/nBAC + /5seB/+XKxD/ljYa/54+JP+jRjH/p05A/6ZaUf6jZWL7n3Bx+Zp7f/aVhorykJCT7ouamuuGo6Dpgquk + 5360qOZ8vavkeciu4nfUsNZw2LLPbNizz2zYs89s2LPPbNizz2zYs89s2LPPbNizz2zYs89s2LPPbNiz + z2zYs89s2LP/nBAC/5seB/+XKxD/ljYa/54+JP+jRjH/p05A/6ZaUf6jZWL7n3Bx+Zp7f/aVhorykJCT + 7ouamuuGo6Dpgquk5360qOZ8vavkeciu4nfUsNZw2LLPbNizz2zYs89s2LPPbNizz2zYs89s2LPPbNiz + z2zYs89s2LPPbNizz2zYs89s2LP/nBAC/5seB/+XKxD/ljYa/54+JP+jRjH/p05A/6ZaUf6jZWL7n3Bx + +Zp7f/aVhorykJCT7ouamuuGo6Dpgquk5360qOZ8vavkeciu4nfUsNZw2LLPbNizz2zYs89s2LPPbNiz + z2zYs89s2LPPbNizz2zYs89s2LPPbNizz2zYs89s2LP/nRAC/5seB/+YKxD/mDUa/6A9I/+mRTD/q01A + /qpYUvunY2P5o21z9554gvSZgo7vk42Y646WoOiIoKbmhKmr5ICyr+J9vLLhesi123bTuM5u1LrIbdW4 + yG3VuMht1bjIbdW4yG3VuMht1bjIbdW4yG3VuMht1bjIbdW4yG3VuMht1bj/nRAB/5weB/+YKhD/mzQZ + /6M8Iv+pQy//r0tA/K9WUvitYGT1qWp286R0hfCefpPsmIie6JKSp+SMnK7hhqW034Kwud1+vL3be8vA + z3POw8Nw0MG+ctK8vnLSvL5y0ry+ctK8vnLSvL5y0ry+ctK8vnLSvL5y0ry+ctK8vnLSvL5y0rz/nhAB + /50dB/+ZKhD/nTMY/6Y7If+tQi/+sko/+bRUUvayXWXyr2d376pwiOykepfonYSj5JeOruCPmLbdiaK9 + 2oOuw9d/vMfRecrLw3LKzLp0zcW1dtDAtXbQwLV20MC1dtDAtXbQwLV20MC1dtDAtXbQwLV20MC1dtDA + tXbQwLV20MD/ng8B/50dBv+aKg//nzMX/6g6IP+vQS78tkk/97lSUvO4W2XvtWR567Btiueqdprion+o + 3ZmItNiQkb7SiJvFzoSnycqBtMzHgMfOunfIz7F4y8ites7DrXrOw616zsOtes7DrXrOw616zsOtes7D + rXrOw616zsOtes7DrXrOw616zsP/nw4B/54dBv+aKg//oDIX/6o5IP+yQS36uUg+9b1QUfG9WWbsu2F6 + 6LZqjOKvcp3cpXqs1JqCuc6TjMDJjZbGxImiy8CGr869hMHQsX3H0al8ysumfs3Fpn7NxaZ+zcWmfs3F + pn7NxaZ+zcWmfs3Fpn7NxaZ+zcWmfs3Fpn7NxaZ+zcX/nw4B/54dBv+bKg//ojIW/6w5H/60QCz5u0c9 + 88FOUe/CV2bqwF965b1njt6zbqDWqHauzp9/uceYiMHBkpLHvI6dzLeLqtCzibzSqYPF06KAyc2fgszH + n4LMx5+CzMefgszHn4LMx5+CzMefgszHn4LMx5+CzMefgszHn4LMx5+CzMf/nw4B/54dBv+bKQ//ozEW + /644Hvy2Pyv3vkY88sVNUO3GVWbnxl174cFkj9q3a6HRrXOuyaR8ucGchcG6l4/ItZKaza+PptGrjrjT + oojF1ZuFyM+ahcvJmoXLyZqFy8mahcvJmoXLyZqFy8mahcvJmoXLyZqFy8mahcvJmoXLyZqFy8n/oA4B + /58dBv+cKQ//pTEV/684Hvq5Pyv1wEU88MhMUOvLU2XlzFp73sVhkNW7aaHMsXGuxKh5ubuhgsG0m4vI + rpeWzaiUo9Gjk7XUm47E1pWJx9GUicrKlInKypSJysqUicrKlInKypSJysqUicrKlInKypSJysqUicrK + lInKypSJysr/oA4B/58cBv+cKQ//pjAV/7E3Hfi7Piryw0Q77stLT+nQUWXj0Vh728lfkNG/Z6DItW+u + vqx3ubalf8Gun4jIp5yTzqGaoNKcmbLVlJXE146OxtKOjcrMjo3KzI6NysyOjcrMjo3KzI6NysyOjcrM + jo3KzI6NysyOjcrMjo3KzI6Nysz/oA4B/58cBv+cKQ//qDAU/7M2HPa9PSnwxkQ6689JTubWT2Tg1VZ7 + 185dj83EZaDDum2tubF0uLCqfMGopYXIoaKQzpqgndKUn6/VjpzD14eTxdOIksnNiJLJzYiSyc2IksnN + iJLJzYiSyc2IksnNiJLJzYiSyc2IksnNiJLJzYiSyc3/oQ0B/6AcBv+dKQ7/qS8T/bU2G/TAPCjtyUM4 + 59NITePdTWPd2lR609Jbj8nIY5++v2qttLdyuKqwesGiq4PImqiNzpOmmdKNpqvVhqTD14CaxdSCl8nO + gpfJzoKXyc6Cl8nOgpfJzoKXyc6Cl8nOgpfJzoKXyc6Cl8nOgpfJzoKXyc7/oQ0B/6AcBf+dKQ7/qy4S + +rc1GvHDPCbpzUE35NlGS+DiS2LY31J5z9hZjsTOYZ65xWisr75wt6S4d8Cbs4DHk6+JzYuuldGFrqjV + f67D13mhxdR7nsjOe57IznueyM57nsjOe57IznueyM57nsjOe57IznueyM57nsjOe57IznueyM7/oQ0B + /6EcBf+fKA7/rS4R+Lo0Ge3GOiTl0kA1399FSdvlS1/T5FF4yd1Xjb/UXp2zzGWrqMZstp7AdL+UvHzG + i7mGzIS4ktB9uKTUd7vE1XGsxdR0p8jOdKfIznSnyM50p8jOdKfIznSnyM50p8jOdKfIznSnyM50p8jO + dKfIznSnyM7/ogwB/6IbBf+hJw3/sC0Q9L4zF+nLOSLg2T4y2uNGRdToS17N6FB2w+NVi7jcW5yt1GKp + oc5ptJfKcL2NxnnEhMSDynzEj851xaLRb8nE02m4xtJsscnNbLHJzWyxyc1sscnNbLHJzWyxyc1sscnN + bLHJzWyxyc1sscnNbLHJzWyxyc39owwB/6IbBf+kJgz9tCsO8MIxFOTRNx/a3z4t0+dHRc3sS17G7E51 + vOhTibDiWJql3l6nmtllso/VbbqF03XBfdKAxnXSjcpt0p7NZtK2z2HIyM9kv8rKZL/KymS/yspkv8rK + ZL/KymS/yspkv8rKZL/KymS/yspkv8rKZL/KymS/ysr8pAsA/6QaBf+oJQr5uCkM6sgvEd3ZNBrT5EEr + zOxHRcXyS1698E1ztO1ShanqV5Wd512ikuRjrIfgarV+3HG7ddp6wG3YhMRl1pDHX9WiyVvVwMldz83G + Xc/Nxl3PzcZdz83GXc/Nxl3PzcZdz83GXc/Nxl3PzcZdz83GXc/Nxl3Pzcb5pQoA/6UaBP+sIwjzviYJ + 49ArDdXgNxXN6kEtxPJHRrz2Sly09UxwrPNQgaHyV46W7V6ai+lko4Llaqp64nGvcuB4tGzegbdm3Yq6 + YNyYvFvbrL5Y27++WNu/vljbv75Y27++WNu/vljbv75Y27++WNu/vljbv75Y27++WNu/vljbv772pgkA + /6cZBP6yHwbsxiIG2tskB87nORjF8UEvvPlGRrP6SFqq+ktro/lPepj3V4aO8l6Qhe9ll33ra5136XKi + ced4pmvmf6lm5IerYeORrlzin7BZ4qyxWeKssVnirLFZ4qyxWeKssVnirLFZ4qyxWeKssVnirLFZ4qyx + WeKssVnirLHyqAcA/6kYA/a6GgPi0BgC0eQqB8bvOhu8+UAxs/9ERKn/R1ag/0plmv9PcZD9WHyH+F+E + gPVminnzbY908XKTb+94lmvufZln7ISbYuuMnl7ql6Bb6qChW+qgoVvqoKFb6qChW+qgoVvqoKFb6qCh + W+qgoVvqoKFb6qChW+qgoVvqoKHsqwUA/64UAuvFDgDV3hAAyO0uCr34OR6z/z4wqP9BQZ//RVCW/0ld + kP9OZ4j/WHCB/2B2e/1ne3X7bX9x+XKDbfh3hWr3fIdn9YKKY/SJjF/zko5d85mPXfOZj13zmY9d85mP + XfOZj13zmY9d85mPXfOZj13zmY9d85mPXfOZj13zmY/jrgIA57kJANPNBgDK6hoBvvcwDrP/Nx+o/zsu + nf8+PJT/Q0iL/0hThf9OW3//V2J6/2Bndf9na3H/bG9t/3Fxav92c2j/enVl/393Y/6FeWD9jXte/ZN8 + Xv2TfF79k3xe/ZN8Xv2TfF79k3xe/ZN8Xv2TfF79k3xe/ZN8Xv2TfF79k3zbsQAA08IDAMvVBgC/9SEE + s/8uEaf/Mx6c/zcqkv88NYn/QT+B/0dHe/9NTnb/VVRy/15Ybv9lW2v/a11o/29fZv9zYWT/d2Ni/3xk + YP+BZV7/h2dc/4xoXP+MaFz/jGhc/4xoXP+MaFz/jGhc/4xoXP+MaFz/jGhc/4xoXP+MaFz/jGjVtwAA + ycoDAMDqCwC0/yMHp/8qEZz/LhuR/zMkh/85LX7/PzV3/0U8cf9MQWz/UkVo/1pIZf9hS2P/Z01h/2xO + YP9vUF//c1Fd/3dSXP97U1r/gVRY/4VVWP+FVVj/hVVY/4VVWP+FVVj/hVVY/4VVWP+FVVj/hVVY/4VV + WP+FVVj/hVXKwAEAwNMCALT/EwGo/x8Im/8kD4//KReF/y8efP81JXT/PCxu/0IxaP9JNWP/Tzhf/1U6 + XP9bPFr/YD5Z/2U/WP9pQFb/bUFV/3BCVP90QlP/eUNS/3xEUv98RFL/fERS/3xEUv98RFL/fERS/3xE + Uv98RFL/fERS/3xEUv98RFL/fETBygAAtdsAAKj/EgKb/xkHj/8eDYP/IxN5/yoZcf8xHmr/OCNk/z4n + X/9FKlr/SixX/1AuVf9VL1P/WTBR/10xUP9gMk//YzNO/2czTP9qNEv/bzVK/3I1Sv9yNUr/cjVK/3I1 + Sv9yNUr/cjVK/3I1Sv9yNUr/cjVK/3I1Sv9yNUr/cjX/lRAC/5MdB/+OKg//jTUY/5U8IP+ZRSv/nU05 + /5xZR/+YZVb9lHFj+5B8b/qMh3n5iZOB94aeh/WDqYzzf7KQ8ny7k/B5xJbvd86Y7nXZmuZx3pzdbOGe + 1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of1Gfjn9Rn45//lRAC/5MdB/+OKg//jTUY + /5U8IP+ZRSv/nU05/5xZR/+YZVb9lHFj+5B8b/qMh3n5iZOB94aeh/WDqYzzf7KQ8ny7k/B5xJbvd86Y + 7nXZmuZx3pzdbOGe1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of1Gfjn9Rn45//lRAC + /5MdB/+OKg//jTUY/5U8IP+ZRSv/nU05/5xZR/+YZVb9lHFj+5B8b/qMh3n5iZOB94aeh/WDqYzzf7KQ + 8ny7k/B5xJbvd86Y7nXZmuZx3pzdbOGe1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of + 1Gfjn9Rn45//lRAC/5MdB/+OKg//jTUY/5U8IP+ZRSv/nU05/5xZR/+YZVb9lHFj+5B8b/qMh3n5iZOB + 94aeh/WDqYzzf7KQ8ny7k/B5xJbvd86Y7nXZmuZx3pzdbOGe1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of + 1Gfjn9Rn45/UZ+Of1Gfjn9Rn45//lRAC/5MdB/+OKg//jTUY/5U8IP+ZRSv/nU05/5xZR/+YZVb9lHFj + +5B8b/qMh3n5iZOB94aeh/WDqYzzf7KQ8ny7k/B5xJbvd86Y7nXZmuZx3pzdbOGe1Gfjn9Rn45/UZ+Of + 1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of1Gfjn9Rn45//lRAC/5MdB/+OKg//jTUY/5U8IP+ZRSv/nU05 + /5xZR/+YZVb9lHFj+5B8b/qMh3n5iZOB94aeh/WDqYzzf7KQ8ny7k/B5xJbvd86Y7nXZmuZx3pzdbOGe + 1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of1Gfjn9Rn45/UZ+Of1Gfjn9Rn45//lRAC/5MdB/+PKg//jjQY + /5U8IP+aRCv/nk04/51YR/+aZFb9lXBk+pF7cPmNhnr3ipKC9oedifSDp47ygLGS8Hy6lu95w5nud82b + 7HbaneRx3Z/aa+Ch0mfiodJn4qHSZ+Kh0mfiodJn4qHSZ+Kh0mfiodJn4qHSZ+Kh0mfiodJn4qH/lg8C + /5QdB/+QKQ//kTMX/5k7H/+eQyr/oks4/6JWSPyfYVj5m2xn9pZ3dPSSgn/yjoyJ8YqYke+Go5ftga2c + 6322oOp6waPoeM2m5XXYqNpv26rPaNysyWvfp8lr36fJa9+nyWvfp8lr36fJa9+nyWvfp8lr36fJa9+n + yWvfp8lr36f/lg4C/5UcBv+RKQ//lDIW/5w5Hv+iQSn/pkk3/KhTSPilXlj1oWlp8pxzd/CXfoTtkoiP + 64yTmOmHnZ/ngqil5X6zquN6v67ieM2x23PVs89s1rXGbNmxwG/cq8Bv3KvAb9yrwG/cq8Bv3KvAb9yr + wG/cq8Bv3KvAb9yrwG/cq8Bv3Kv/lw4B/5UcBv+RKQ7/ljEV/584Hf+lQCj/qkg3+qxRR/WqW1nyp2Zq + 7qJweuuceojoloSU5ZCOn+KJmKffgqKu3H2ttNl4ubjVdce70HLSvcVt0ry9cNa1uHLar7hy2q+4ctqv + uHLar7hy2q+4ctqvuHLar7hy2q+4ctqvuHLar7hy2q//lw4B/5YcBv+SKA7/mDEU/6E3HP+oPyf9rUc2 + 97FPR/OwWVnvrGNr66dsfOehdozimoCZ3pGIpdmJkq7UgZu20H2mus16s73LeMG/yHfQwLxx0MC1dNS4 + sXbYsrF22LKxdtiysXbYsrF22LKxdtiysXbYsrF22LKxdtiysXbYsrF22LL/mA0B/5YbBv+TKA7/mjAU + /6Q3G/+rPib7sEY19bVNRvC0V1nssmBs561qfuKmc4/dnHud1pKDqtGMjbHMhpe3yIKivMV/rr/BfbzB + v3zNwrR1z8Kud9O7qnnWtap51rWqeda1qnnWtap51rWqeda1qnnWtap51rWqeda1qnnWtap51rX/mA0B + /5cbBv+TKA7/nC8T/6Y2Gv+tPSX5s0Q087lMRu65VVnpt15t5LNngN6pb5HWn3eg0JeAqsqQibLFi5O4 + wIadvbyDqcG5gbfDtoDJxK16zcWne9G+pH3Vt6R91bekfdW3pH3Vt6R91bekfdW3pH3Vt6R91bekfdW3 + pH3Vt6R91bf/mQ0B/5cbBv+UKA7/ni8S/6g1Gf+wPCT3tkMz8bxKRey+U1nnvVtt4bdkgdmta5PRo3Sg + ypt9qsSUhrO+j4+5uYuavrSHpcKwhbPFrYTFxqV/zMegf9DAnoDUuZ6A1LmegNS5noDUuZ6A1LmegNS5 + noDUuZ6A1LmegNS5noDUuZ6A1Ln/mQ0B/5gbBv+UKA7/ny4S/6k1Gf2yPCP2uUMy78BJROrDUVjkw1lt + 3bthgdSyaZLMqHKgxZ96qr6Yg7O3k4y6so+Wv62MosOpiq/GpYnByJ6EzMiag8/CmITTu5iE07uYhNO7 + mITTu5iE07uYhNO7mITTu5iE07uYhNO7mITTu5iE07v/mQ0B/5gbBv+VJw7/oS0R/6s0GPy0OyL0vEIx + 7sNIQ+jJT1fhx1dt2r9fgdC2Z5LIrG+fv6R3qridgLOxmIm6q5STv6aRnsShjqzHno69yZeKy8mTh87E + k4fSvJOH0ryTh9K8k4fSvJOH0ryTh9K8k4fSvJOH0ryTh9K8k4fSvJOH0rz/mgwB/5gbBf+VJw3/oi0R + /60zF/q3OiHyv0Ew7MdHQuXOTFbfy1Vs1cRdgMy6ZZHDsG2fuqh1qrKhfbOrnIa6pZmQwJ+Wm8SalKnH + lpO6ypGQysqNi83FjYvRvo2L0b6Ni9G+jYvRvo2L0b6Ni9G+jYvRvo2L0b6Ni9G+jYvRvo2L0b7/mgwB + /5kaBf+XJw3/pCwQ/68yFvi6OSDww0Au6stFQOPTS1Xcz1Nr0sdbgMi+ZJG/tWufta1zqq2merOloYO6 + n56NwJmcmMWTmqbIj5m3yoqWysuGkM3Gh5DRv4eQ0b+HkNG/h5DRv4eQ0b+HkNG/h5DRv4eQ0b+HkNG/ + h5DRv4eQ0b//mgwB/5kaBf+YJgz/pisP/rIyFfW9OB/txj4s5tBEPuDZSVPY1FFqzstaf8TCYZC6umme + sLJwqaeseLKfqIC6mKSKwJKilcSMoKLIh6C0yoKeyst/lszHgZXQwIGV0MCBldDAgZXQwIGV0MCBldDA + gZXQwIGV0MCBldDAgZXQwIGV0MD/mwwB/5oaBf+aJQz/qCoO/LUwE/LANx3pyz0q4tVCPNzeSFDT2U9p + ytBYfr/IX4+1wGadq7luqKKzdbKZr325kauGv4qpkcSEqJ/Hf6ixynunyst3nszIepvQwHqb0MB6m9DA + epvQwHqb0MB6m9DAepvQwHqb0MB6m9DAepvQwHqb0MD/mwsB/5saBf+cJQv/qykN+bgvEu7ENRrk0Dsn + 3t1AONjiR0/O3U5oxdVVfLrOXY6vx2ScpcBrp5u7crCSt3q4irSDvoOyjsN9sZzGd7KuyXOyy8pvp8zH + cqLQwHKi0MByotDAcqLQwHKi0MByotDAcqLQwHKi0MByotDAcqLQwHKi0MD/nAsB/5sZBf+fIwr/rigL + 9bwtEOnKMxff2Dkj2OJDM9HlSE3J4k1mv9xTe7TVWoypzmGanslnpZTEb66LwXe2g76AvHu9i8B1vZnE + b76sxmvAy8dns83GaqzQv2qs0L9qrNC/aqzQv2qs0L9qrNC/aqzQv2qs0L9qrNC/aqzQv2qs0L//nQoA + /5wZBP+iIgj+siYJ8MErDePQMBPZ3zkd0eZDNMrqSEzC50xjuOJReK3dV4mi2F2Xl9Jkoo3Pa6uEzHOz + fMt9uHTKiL1uy5fAaMyqwmPPy8Rfwc/DYrnSvWK50r1iudK9YrnSvWK50r1iudK9YrnSvWK50r1iudK9 + YrnSvWK50r39ngkA/54YBP+mIAf5tyMH6sgnCdzaLA7R5DwdyutDNcLuSEy660tisOhPdaXlVIaa4VqU + j95gn4XcaKd823CudNp6s23bhrdn3JS6YdylvFzbv75Y0tK9W8jUuVvI1LlbyNS5W8jUuVvI1LlbyNS5 + W8jUuVvI1LlbyNS5W8jUuVvI1Ln7nwkA/58XBP+rHQXzvR8E4tAhBdPhLwvK6jwgwvJDNrnyR0yw8Epf + qO9NcZ3tVH+T61qLiephlYHpaJ156HCjceZ5qGrkgqxk4oyvXuGYslngqbNV4MW0VNrWslTa1rJU2tay + VNrWslTa1rJU2tayVNrWslTa1rJU2tayVNrWslTa1rL4oQcA/6EWA/6xGALrxhcB2NwZAczoMg7C8j0i + ufdCN7D2RUqm9khbnvVMapX1U3eM9FuBhPRiiX3yapB28HGVb+14mWrsgJ1l6oigYOmSolvon6RW57Gm + U+fGplPnxqZT58amU+fGplPnxqZT58amU+fGplPnxqZT58amU+fGplPnxqbzowUA/6UUAvK6EADZ0QgA + zuUgAsPxNBG5+jwksPtANqb8Q0ed/EdVlfxMYo38U22F/Ft1f/xkfHj6a4Fy93GGbfZ3iWn0foxl84WP + YvKOkV7xmJNZ8KWVVu+0llbvtJZW77SWVu+0llbvtJZW77SWVu+0llbvtJZW77SWVu+0llbvtJbspQMA + 9K4MANfDBQDQ1gcAxO8lBbr6NBSv/zolpf89NJv/QUGS/0ZOi/9LWIX/UmF+/1toef9kbXT/a3Fv/3B1 + a/52eGj9fHpl/IN9YvuJfl76koBb+Z2CWPiohFj4qIRY+KiEWPiohFj4qIRY+KiEWPiohFj4qIRY+KiE + WPiohFj4qITiqQAA2LcCAM7KBADG7A4AuvkpCK//Mhak/zYjmv86L5D/PzqI/0REgf9KTXv/UVR2/1pZ + cv9iXm7/amFq/29kZ/90ZmX/emhi/39qYP+Fa17/jG1b/5ZvWP+fcFj/n3BY/59wWP+fcFj/n3BY/59w + WP+fcFj/n3BY/59wWP+fcFj/n3DbrQAAzr8CAMXSBAC7+RgBr/8oC6T/LhWZ/zIfj/83KYb/PTJ+/0M6 + d/9JQXL/T0Zt/1dKaf9fTmb/ZlBk/2xTYv9xVGD/dlZe/3pXXP9/WVr/hlpY/41cVv+VXVb/lV1W/5Vd + Vv+VXVb/lV1W/5VdVv+VXVb/lV1W/5VdVv+VXVb/lV3QtgAAxcgCALvaAwCv/xsDo/8jC5j/KBON/y4b + g/8zI3v/Oip0/0Awbv9HNWn/TTlk/1M8YP9ZP13/YEFb/2ZCWv9sRFn/cEVX/3RGVv94R1X/fkhT/4RK + Uf+KS1H/iktR/4pLUf+KS1H/iktR/4pLUf+KS1H/iktR/4pLUf+KS1H/ikvGwAAAu9IAALD1CQCj/xcE + l/8dCov/IxCB/ykWeP8vHHD/NiJq/z0mZP9DKl//SS1b/04wWP9UMVb/WTNU/140Uv9jNVH/ZzZP/2s3 + Tv9vOEz/dDlL/3k6Sv9+Okr/fjpK/346Sv9+Okr/fjpK/346Sv9+Okr/fjpK/346Sv9+Okr/fjq8ygAA + sNoAAKT/CQGX/xEEiv8WCH//HAx1/yMRbf8qFmb/MRpg/zgeWv8+IVb/RCNS/0kkUP9OJk3/UidL/1Yo + Sv9aKUj/XSlH/2AqRf9kK0T/aCtC/20sQf9xLUH/cS1B/3EtQf9xLUH/cS1B/3EtQf9xLUH/cS1B/3Et + Qf9xLUH/cS3/jA8C/4kcB/+FKQ7/hDQW/4s7HP+PRCb/kU0x/5FZPv+OZUv/inFW/oZ9YPyDiWj7gJRv + +n2fdPl6qnj4eLN893a9f/Z0x4H2c9GD9HHdhfFw5obqbOiI4mjqidxk64rcZOuK3GTritxk64rcZOuK + 3GTritxk64rcZOuK3GTritxk64r/jA8C/4kcB/+FKQ7/hDQW/4s7HP+PRCb/kU0x/5FZPv+OZUv/inFW + /oZ9YPyDiWj7gJRv+n2fdPl6qnj4eLN893a9f/Z0x4H2c9GD9HHdhfFw5obqbOiI4mjqidxk64rcZOuK + 3GTritxk64rcZOuK3GTritxk64rcZOuK3GTritxk64r/jA8C/4kcB/+FKQ7/hDQW/4s7HP+PRCb/kU0x + /5FZPv+OZUv/inFW/oZ9YPyDiWj7gJRv+n2fdPl6qnj4eLN893a9f/Z0x4H2c9GD9HHdhfFw5obqbOiI + 4mjqidxk64rcZOuK3GTritxk64rcZOuK3GTritxk64rcZOuK3GTritxk64r/jA8C/4kcB/+FKQ7/hDQW + /4s7HP+PRCb/kU0x/5FZPv+OZUv/inFW/oZ9YPyDiWj7gJRv+n2fdPl6qnj4eLN893a9f/Z0x4H2c9GD + 9HHdhfFw5obqbOiI4mjqidxk64rcZOuK3GTritxk64rcZOuK3GTritxk64rcZOuK3GTritxk64r/jA8C + /4kcB/+FKQ7/hDQW/4s7HP+PRCb/kU0x/5FZPv+OZUv/inFW/oZ9YPyDiWj7gJRv+n2fdPl6qnj4eLN8 + 93a9f/Z0x4H2c9GD9HHdhfFw5obqbOiI4mjqidxk64rcZOuK3GTritxk64rcZOuK3GTritxk64rcZOuK + 3GTritxk64r/jQ8C/4ocB/+FKQ7/hjMV/407HP+RQyb/lEwx/5RXPv+QZEv+jG9X+4h7YvqFhmv4gpJy + 93+dePZ8p331ebGB9He7hPR1xYbzc9CJ8XLciu1v5Izma+aN3Wboj9Zk6o7WZOqO1mTqjtZk6o7WZOqO + 1mTqjtZk6o7WZOqO1mTqjtZk6o7/jQ4C/4scB/+GKA7/iTIU/5E5G/+VQSX/mEox/5lUP/2WYE36kmxa + 9413ZvWJgnDzhY158oGYf/B+ooXve6yK7ni2je11wZDsc82T63HbleVu4ZfcaeSY0mXnmM1n6ZTNZ+mU + zWfplM1n6ZTNZ+mUzWfplM1n6ZTNZ+mUzWfplM1n6ZT/jg4C/4wbB/+HKA7/jDAU/5Q4Gv+ZQCT/nEgw + /p5RP/qbXU32l2hc85J0afGNfnXuiYl+7ISThuuAnY3pfKeS53iyl+Z1vZrlcsmd43DYoNxs36LRZuGj + ymnkncVr55jFa+eYxWvnmMVr55jFa+eYxWvnmMVr55jFa+eYxWvnmMVr55j/jw0C/4wbBv+IKA7/jzAT + /5c3Gf+cPiP/oEcv+6NPPvegW07znGZd75dwbOySe3npjIWE54ePjeSBmZTifKKb4HetoN5zuKTccMan + 2m7VqtFp3KvJad6owmziob5u5Zy+buWcvm7lnL5u5Zy+buWcvm7lnL5u5Zy+buWcvm7lnL5u5Zz/jw0C + /40bBv+JJw3/kS8S/5k2GP+fPSL+o0Uv+KdNPvSlWE7woWNf7JxtbuiXd3zkkIGI4YmLk96ClJvae52j + 1nanqdNzs6zRccCtz3DPr8pu2q/Bbdysu2/gpbdx46C3ceOgt3HjoLdx46C3ceOgt3HjoLdx46C3ceOg + t3HjoLdx46D/kA0C/44bBv+KJw3/ky4R/5w1F/+iPCH8p0Qu9qtMPfGqVk7sp2Bf6KJqcOObdH/fk32N + 2ouGmdWDjqLRfpinzXqiq8p3rq7IdbuwxnTKssJz2LK5cNqwtHLeqLB04aOwdOGjsHTho7B04aOwdOGj + sHTho7B04aOwdOGjsHTho7B04aP/kA0B/44aBv+KJw3/lS0R/580Fv+lOyD6q0Is9K9KPO6vU07prV1g + 5Kdnct+fcILYlXiR0o6Bm82IiqPJg5SpxX6ercJ7qbC/ebazvHjFtLp41rWxdNizrHbcrKl336apd9+m + qXffpql336apd9+mqXffpql336apd9+mqXffpql336b/kQwB/48aBv+LJw3/lywQ/6EzFf+oOh/4rkEr + 8bJIO+u1UU3ms1tg4Ktkc9mibITSmnWRzJJ+m8eMh6PCh5CqvYOar7mApbK2fbG1s3zBt7F807epeNW3 + pXrbrqN73qije96oo3veqKN73qije96oo3veqKN73qije96oo3veqKN73qj/kQwB/48aBv+NJgz/mSsP + /6MyFP6rOR32sUAq77ZHOum7Tkzjt1hg3LBhc9SnaoTNnnORxpd7nMCRhKS7jI2qtoiWsLKEobSugq23 + q4C8uKmAz7mifNS5n33ZsZ1+3aqdft2qnX7dqp1+3aqdft2qnX7dqp1+3aqdft2qnX7dqp1+3ar/kgwB + /5AaBv+OJQz/mysO/6UxE/yuOBz0tT8o7bpFOObATEvgvFZf2LVfc9CraIPIo3CRwZt4nLqVgKS0kImr + r4yTsKqJnbWmhqq4o4W5uqCFy7uagNO7mIHYs5eC3KyXgtysl4LcrJeC3KyXgtysl4LcrJeC3KyXgtys + l4LcrJeC3Kz/kgwB/5AZBf+QJQv/nSoO/6gwEvqxNxvyuD4n675EN+TFSkrdwFRe1LldcsuvZoPDp26Q + vJ92m7WZfqSulIarqZGQsaSNmrWfi6a5nIq1u5mJyLyUhtK8koXWtZGF266RhduukYXbrpGF266Rhduu + kYXbrpGF266RhduukYXbrpGF267/kwsB/5EZBf+SJAv/nykN/6ovEfizNhnwuzwl6MNDNeHJSUjaxVJd + 0LxbccezZIK/q2yQt6Rzm6+ee6SomYOro5WNsZ2Tl7aZkKO5lY+yvJKPxb2Ni9G+jInWtoyJ2q+Midqv + jInar4yJ2q+MidqvjInar4yJ2q+MidqvjInar4yJ2q//kwsB/5EZBf+TIwr/oSgM/6wuEPe2NRjuvzsj + 5sdBM9/OSEXWyVFczcBacMO4YoG6sGqPsqhxm6qjeaSjnoGrnZqKsZeYlLaSlqG6jpWwvYqUwr6GkdG+ + hY7Vt4aN2bCGjdmwho3ZsIaN2bCGjdmwho3ZsIaN2bCGjdmwho3ZsIaN2bD/kwsB/5IZBf+VIwr/oycL + /68tD/W6MxbrxDoh5M0/MNzSRkPSzE9bycRYb7+8YIC2tWePra5vmqWodqOdpH6rlqCHsZCekbaLnJ26 + hpusvYOav75/mNG/fpTUuICS2bGAktmxgJLZsYCS2bGAktmxgJLZsYCS2bGAktmxgJLZsYCS2bH/lAsB + /5MZBf+XIgn/pSYK/bIrDfK+MhTpyTge4dM9LNnYREHO0E1ZxMlWbrvBXn+xumWNqLRsmZ+vc6KXqnuq + kKeEsIqkjraEo5q6f6KpvHuivb53oNG+d5rUuXmY2LJ5mNiyeZjYsnmY2LJ5mNiyeZjYsnmY2LJ5mNiy + eZjYsnmY2LL/lQoB/5MYBf+ZIQj/qCUJ+rYqC+7CLxHkzjUa3Nw6J9PcQ0DK1UtYwM5TbLXHW36rwWKM + ortpmJm2caGRsnipia+Br4KsirR8q5e4d6unu3Orur1vqtK9b6LUuXGf2LJxn9iycZ/YsnGf2LJxn9iy + cZ/YsnGf2LJxn9iycZ/YsnGf2LL/lQoB/5QYBP+cHwf/qyMH9bonCenILA3e1jIV1eA9I87gQj3F20lW + utRRarDOWHylyF+KnMNmlpK/bZ+Ku3Wngrh9rXu3h7J1tpS2b7akuWu2uLtnt9O7Z63VuGmo2bJpqNmy + aajZsmmo2bJpqNmyaajZsmmo2bJpqNmyaajZsmmo2bL/lgkB/5UXBP+gHQX/sCAF8MAkBuLQKAnW3jIP + z+U+I8fkRDu+4EhTtNxPaKnWVXmf0VyHlc1jk4zJapyDxnKje8R6qnTDha9tw5GyaMOhtWPEtrdgxdW3 + X7rWtWGz2q9hs9qvYbPar2Gz2q9hs9qvYbPar2Gz2q9hs9qvYbPar2Gz2q//lwkA/5cXBP+kGwT6tRwD + 6ccdA9raHwTP5DQRx+o/Jb/oRDu25khQrONNZKLfU3WX3FmDjthgjoTVZ5h802+fdNJ4pW3Rgqln0pCt + YdOgr13Ut7FZ1tmyV8nasFrB3KtawdyrWsHcq1rB3KtawdyrWsHcq1rB3KtawdyrWsHcq1rB3Kv/mQgA + /5gWBP+qFwLzvBUB4dASANHiJATI6zYTv+4/J7btQzut60dPpOlKYJrnUW+Q5ld8huReh37jZZB14myX + buJ1nWfif6Fh44ylXOScp1flr6lU5cupUdvbqFPR4KVT0eClU9HgpVPR4KVT0eClU9HgpVPR4KVT0eCl + U9HgpVPR4KX7mwYA/50TAvaxEADaxgcA1NkJAMnqKAbA8jcWtvI+KK3yQjuj8UVLm/BJWpLwUGeJ71dy + ge9fe3rvZoJz726Ibe93jWjwgJFj8IuUXu+Xl1rupJlV7baaUu3Sm0/l3ZtP5d2bT+Xdm0/l3ZtP5d2b + T+Xdm0/l3ZtP5d2bT+Xdm0/l3Zv3nQQA+6QMANq5BADSywYAy+gRAMDzLAm29zcYrfc8KaP4QDiZ+ERG + kfhIU4r4Tl6C+Fdne/hfbnb4Z3Rw+W94a/l2fGf6f4Bj+YiCX/iShVz3nYdY9qqJVPW9ilL10otS9dKL + UvXSi1L10otS9dKLUvXSi1L10otS9dKLUvXSi1L10ovwnwIA3K4BANK/AwDK0QUAwfIaAbb7LQys/DQa + ov05J5j+PTSP/kJAh/9ISoH/TlN6/1Zadf9eX3D/ZmRs/25oaP90a2X/fG5i/4RwX/+Mclz/lnRZ/6F2 + Vf+wd1P+vnhT/r54U/6+eFP+vnhT/r54U/6+eFP+vnhT/r54U/6+eFP+vnjmowAA07UAAMnGAgDB2AUA + tvwfBKz/Kw6h/zEZl/82I43/Oy6F/0A3fv9GQHf/TUZy/1RMbv9cUGr/ZFRm/2tXZP9xWWH/d1te/35d + XP+GX1r/jmFX/5hiVf+lZFL/sGVS/7BlUv+wZVL/sGVS/7BlUv+wZVL/sGVS/7BlUv+wZVL/sGXWrAAA + yr4AAMDPAgC28QwAq/8fBaD/Jw6V/ywWi/8yH4L/OCd7/z4vdP9ENW7/Szpp/1E+Zf9YQWL/YERf/2ZG + Xf9tSFv/ckpZ/3hMV/9+TVX/hE5T/4xQUf+XUU//oVJP/6FST/+hUk//oVJP/6FST/+hUk//oVJP/6FS + T/+hUk//oVLLtgAAwMcAALbXAACr/xEBn/8bBpT/IgyJ/ygTgP8uGnj/NCBw/zsmav9BKmX/SC5g/04x + XP9TNFr/WjZX/184Vf9lOVP/ajpR/3A7UP91PU7/ej5N/4A/S/+IQEn/kEFJ/5BBSf+QQUn/kEFJ/5BB + Sf+QQUn/kEFJ/5BBSf+QQUn/kEHBvwAAt9AAAKrfAACe/w0Ckv8VBYf/HAp9/yIPdP8pFG3/MBlm/zcd + YP89IVz/QyRX/0kmVP9OKFH/UylP/1grTf9cLEv/YS1K/2UuSP9qLkb/bi9F/3QwQ/96MUH/gDJB/4Ay + Qf+AMkH/gDJB/4AyQf+AMkH/gDJB/4AyQf+AMkH/gDK4ygAArNgAAJ7wAACR/wYBhf8NBHv/FQhx/xwM + af8jD2H/KhNb/zEWVv83GVL/PRtO/0IcS/9HHkj/Sx9G/08gRP9TIUL/VyFA/1oiP/9eIz3/YiM7/2Yk + Of9sJTj/cSU4/3ElOP9xJTj/cSU4/3ElOP9xJTj/cSU4/3ElOP9xJTj/cSX/gw8D/38cB/95KA7/ejMT + /4E7Gf+ERCH/hk0r/4ZYNv+DZkD/f3NK/3x/Uv54ilj9dpVe/HOgYvtxqWX6b7Jo+W67a/lsxW34a85u + 9mracPRp5HHyaO1y7mfyc+dk9HTjYfV042H1dONh9XTjYfV042H1dONh9XTjYfV042H1dONh9XT/gw8D + /38cB/95KA7/ejMT/4E7Gf+ERCH/hk0r/4ZYNv+DZkD/f3NK/3x/Uv54ilj9dpVe/HOgYvtxqWX6b7Jo + +W67a/lsxW34a85u9mracPRp5HHyaO1y7mfyc+dk9HTjYfV042H1dONh9XTjYfV042H1dONh9XTjYfV0 + 42H1dONh9XT/gw8D/38cB/95KA7/ejMT/4E7Gf+ERCH/hk0r/4ZYNv+DZkD/f3NK/3x/Uv54ilj9dpVe + /HOgYvtxqWX6b7Jo+W67a/lsxW34a85u9mracPRp5HHyaO1y7mfyc+dk9HTjYfV042H1dONh9XTjYfV0 + 42H1dONh9XTjYfV042H1dONh9XT/gw8D/38cB/95KA7/ejMT/4E7Gf+ERCH/hk0r/4ZYNv+DZkD/f3NK + /3x/Uv54ilj9dpVe/HOgYvtxqWX6b7Jo+W67a/lsxW34a85u9mracPRp5HHyaO1y7mfyc+dk9HTjYfV0 + 42H1dONh9XTjYfV042H1dONh9XTjYfV042H1dONh9XT/gw4D/4AbB/96KA7/fTIT/4M6Gf+HQiH/iEwr + /4lWNv+GZEH/gnBL/n58VPx7iFz6eJJh+XWdZvhzp2r3cbBt9m+5cPVtw3L1bM1082vZdvFq5Hfvae14 + 6WbweeJi8nreYfN53mHzed5h83neYfN53mHzed5h83neYfN53mHzed5h83n/hA4C/4EbB/97KA3/gDAS + /4c4GP+LQSD/jUor/45TNv+LYEL8h21O+YN4WPd/g2D1fI5n9HiZbfN1o3Lyc6x18XC1efBuwHvvbcp+ + 7mvWf+tq44HnaeuC4GXtg9lj8ILUZPN+1GTzftRk837UZPN+1GTzftRk837UZPN+1GTzftRk837/hQ4C + /4IbB/98Jw3/hC8S/4s3F/+PPx//kUgq/5NRNvyQXUP4jGlQ9Yd1W/ODgGXxf4pt73uVc+13nnnsdKh9 + 63GygepvvITobceH52vUieVq4ovfZ+mM12PrjNBm8IfMZ/KDzGfyg8xn8oPMZ/KDzGfyg8xn8oPMZ/KD + zGfyg8xn8oP/hg0C/4IbB/99Jw3/hi4R/441Fv+TPR//lUYp/ZdPNviVWkT1kWZR8YxyXu+HfGjsgody + 6n6Reeh5moDmdaSF5XKuieNvuI3hbMSQ4GrSk91p4ZXWZOeWz2brkclo7ovFafCHxWnwh8Vp8IfFafCH + xWnwh8Vp8IfFafCHxWnwh8Vp8If/hg0C/4MaB/9+Jw3/iS0Q/5E0Ff+WPB7/mUQo+ptNNvWaWETxlmNS + 7ZFuYOqLeWznhoN35ICMgOJ6loffdp+N3XGpkttttJfYasCa1mnOnNNp35zNZ+Wbx2nolsFr7I++bO6L + vmzui75s7ou+bO6Lvmzui75s7ou+bO6Lvmzui75s7ov/hw0C/4QaBv+AJg3/jCwP/5QzFP+aOhz9nUIn + 959LNfKfVUTtm2BT6ZZrYuWQdXDhiX983YKIhtp7kY/WdpqW03KjmdBwrpzObruezG3JoMpt2qDEauKg + v2zmmrlu6ZS3b+yPt2/sj7dv7I+3b+yPt2/sj7dv7I+3b+yPt2/sj7dv7I//hw0C/4UaBv+CJQz/jisO + /5cyE/+dORv7oUEm9KRJNO+lUkPpoV1U5ZtnZOCUcXPbjHqB1YWDi9F/jJLNe5WYynefnMd0qZ/FcrWh + w3HDo8Fx1KS8b+CktnDjnrJy55evc+qTr3Pqk69z6pOvc+qTr3Pqk69z6pOvc+qTr3Pqk69z6pP/iAwC + /4UaBv+FJAv/kSoN/5owEv+gOBr4pT8k8ahHMuurT0Pmp1pU4KBkZdqYbXbUkHaCzop/jMqEiJPGf5GZ + wnyanr55pKG8drCkuXW+prd1z6e0c9+nrnPhoqp15puoduiWqHbolqh26JaoduiWqHbolqh26JaoduiW + qHbolqh26Jb/iQwC/4YZBv+HJAv/kykN/5wvEf6kNhj2qT4j761FMeiwTUHirFdT3KVhZtSdanbOlXOC + yI58jMOJhZS+hI2buoCWn7Z9oKOze6ymsHm6qK55yqmseN2qp3ffpaN55J6ieeeZonnnmaJ555mieeeZ + onnnmaJ555mieeeZonnnmaJ555n/iQwC/4cZBv+JIwr/lSgM/58uEPynNRfzrTwh7LFDL+W1SkDfsFVS + 16pfZc+haHXJmXGCwpN5jb2NgZW4iYqbs4WToa+CnaWrf6ioqH22qqZ9xqykfdusn3veqJ184qCcfeWb + nH3lm5x95ZucfeWbnH3lm5x95ZucfeWbnH3lm5x95Zv/igsC/4cZBv+LIgr/lycL/6EtD/qqNBXxsDsf + 6bZCLeO6SD7btVNR065dZculZnXEnm6CvZd2jbeSf5WxjYecrImQoaiGmaakg6SpoYKyrJ6Bw62cgdau + mH/dq5aA4aKWgOSdloDknZaA5J2WgOSdloDknZaA5J2WgOSdloDknZaA5J3/igsC/4gZBv+MIQn/mSYK + /6QsDfitMhTvtDkd57pAK+C+RzzYulFQz7FbZMepZHS/omyBuJt0jLGWfJWskYScpo6NoqKLlqadiKGq + moavrZeGv6+VhtOvkYPbrZCD4KSQg+OfkIPjn5CD45+Qg+OfkIPjn5CD45+Qg+OfkIPjn5CD45//iwsB + /4gYBf+OIQj/myUJ/6YrDPawMRLtuDcb5b8+KN3DRjnUvVBPy7VZY8OtYnO7pmqBs6ByjKyaeZWmloGc + oJKKopyPk6eXjZ6rk4usrpCKvbCOi9Gwiojar4qH36aKh+KgiofioIqH4qCKh+KgiofioIqH4qCKh+Kg + iofioIqH4qD/iwsB/4kYBf+QIAj/nSQI/6kpC/SzLxDqvDYZ4sQ8JdrHRDbRwU5OyLlYYr+xYHK2qmiA + rqRvi6efd5Shmn+cm5eHopaVkaeRkpyrjJGpromQurCGkM6xg43asISL36eFi+KihYviooWL4qKFi+Ki + hYviooWL4qKFi+KihYviooWL4qL/jAoB/4kYBf+SHwf/oCMH/qwoCfK3LQ7owTQW4Mo6IdbLQjXNxE1M + xL1WYLu2XnGyr2Z/qqlti6KkdJSboHyclZ2Eoo+ajqeKmJmrhZamr4KWt7F/lsyyfJLZsX6Q3qh+j+Gj + fo/ho36P4aN+j+Gjfo/ho36P4aN+j+Gjfo/ho36P4aP/jAoB/4oYBf+UHgb/oiEG+68mCO+7KwvlxjES + 3dE2HNPPQDPJyUtLwMJUX7a7XHCttWN+pa9riZ2rcpOVpnmbj6OBoYmgi6eDn5arfp2jrnqctLB3ncmx + dJrZsXaW3ql4leCkeJXgpHiV4KR4leCkeJXgpHiV4KR4leCkeJXgpHiV4KT/jQoB/4sXBf+XHAX/pR8F + +LMjBuzAKAjizS0O2dgzGc/TPjHFzUlJu8dSXbHBWm6ou2F8n7ZoiJeyb5GPrnaZiKp+oIKoiKV8ppOq + d6WgrXOlsa9wpciwbKLZsG+e3qlxm+CkcZvgpHGb4KRxm+CkcZvgpHGb4KRxm+CkcZvgpHGb4KT/jgkB + /4wXBf+aGgT/qRwD9bgfBOjHIwXd1ScI1NwyF8rYPC/A0kZGts1PW6zHV2yiwl56mb5lhpG6bI+JtnOX + grR7nnuxhaN1sJCob6+dq2uvr61osMauZa3brmen3qhppOGjaaTho2mk4aNppOGjaaTho2mk4aNppOGj + aaTho2mk4aP/jwkB/40WBP+eGAP/rhkC8L4ZAeLPGgLV3iUEzeA1FMTdPCy62URDsNRMWKbPVGmcy1t3 + k8dig4rDaYyCwXCUe755mnS9gqBuvI2kaLybp2O8ralgvcWrXbvdql+y36VhruKhYa7ioWGu4qFhruKh + Ya7ioWGu4qFhruKhYa7ioWGu4qH/kAgB/5EVA/+iFAH1tBIA58YOANnaCgDO5CkGxeQ4Fr3jQCmz4ENA + qdxKVJ/YUWWV1FhzjNFffoPPZod7zW2PdMt2lW3Kf5pnyoueYcqaol3LrKRZzMalV8rgpVfA4qFZu+Sd + WbvknVm75J1Zu+SdWbvknVm75J1Zu+SdWbvknVm75J3/kgcA/5YRAveoDgDcuwcA1cwHAM/jEgDF6CwI + veg5GLTnPyuq5kM9oeRIT5fiTl+N31VthN5beHzcY4F022qIbdtzjmfbfZNh24mXXNuYmlfcq5tU3sSc + Ud3hnFHQ5ZpSy+eXUsvnl1LL55dSy+eXUsvnl1LL55dSy+eXUsvnl1LL55f/kwYA/5wMAd2vBADUwAUA + ztAGAMbsGQG97S8Ls+04G6rtPSuh7EI7l+tGS4/qTFiG6lRjfulbbXfpY3Vw6Gp7aulzgGXpfIVf6YeI + WuqUi1brpI5T7LmPUO7WkE3l5I9N3eiOTd3ojk3d6I5N3eiOTd3ojk3d6I5N3eiOTd3ojk3d6I78lgQA + 6aQDANS1AgDMxQMAxtUGAL3xIAOz8i8OqvM2HKDzOyqX80A4jvNFRIbzS09/81NYePNbYHLzY2Zt9Gtr + aPRzb2T0e3Ng9YV2XPaQeVj3nntV+K59UvnEfk/54n9N8uV/TfLlf03y5X9N8uV/TfLlf03y5X9N8uV/ + TfLlf03y5X/2mQIA2KsAAM28AQDFzAMAveMKALP3IwWp+S4Qn/k0G5X6OSeM+j4yhPtEPH37SkV3+1FM + cfxZUm38YVdp/WlbZf1xXmH+eGFe/oFkW/+KZlj/lmhV/6NqUv+za0//ym1O/95tTv/ebU7/3m1O/95t + Tv/ebU7/3m1O/95tTv/ebU7/3m3cogAAzrMAAMTDAQC80wMAsvsTAaj+Iwed/yoQk/8wGYr/NiKC/zwr + e/9CM3T/STpu/08/af9WRGb/Xkdi/2ZKX/9tTV3/dE9a/3tRV/+DU1X/jFVS/5dXUP+jWE3/tFlM/8Fa + TP/BWkz/wVpM/8FaTP/BWkz/wVpM/8FaTP/BWkz/wVrRqwAAxbwAALzMAACx2gEAp/8VApz/HweR/yYO + iP8sFn//Mx14/zkkcf9AKmv/Ri9m/0wzYf9SNl3/WTla/2A7WP9nPVb/bj9U/3RBUv96QlD/gkNO/4pF + TP+TRkn/oEdI/6pISP+qSEj/qkhI/6pISP+qSEj/qkhI/6pISP+qSEj/qkjHtQAAvMYAALHUAACm7AQA + mv8SAo//GgaF/yEMfP8oEnT/Lxdt/zUcZ/88IWL/QiRd/0gnWf9OKlb/VCxT/1ouUf9fL07/ZTBM/2oy + Sv9wM0j/dzRG/301Rf+ENkP/jjdB/5U4Qf+VOEH/lThB/5U4Qf+VOEH/lThB/5U4Qf+VOEH/lTi9vwAA + ss8AAKbaAACZ9gIAjf8LAoP/EwV5/xsJcP8iDmn/KRJi/zAWXP83GVj/PRtT/0MeUP9IH03/TSFK/1Ii + SP9XI0b/WyRE/2AlQv9lJkD/aic+/28oPP91KDr/fSk5/4MqOf+DKjn/gyo5/4MqOf+DKjn/gyo5/4Mq + Of+DKjn/gyq0ygAAp9YAAJneAACM+AAAgP8DAXb/DARs/xQHZP8cCl3/Iw1X/yoQUv8wEk3/NhRJ/zsV + Rv9AF0P/RRhA/0kZPv9NGjz/UBo6/1QbOP9ZHDb/XRw0/2IdMv9mHTD/bR4v/3EfL/9xHy//cR8v/3Ef + L/9xHy//cR8v/3EfL/9xHy//cR//eA8D/3McCP9tKg3/cDIR/3Y6Fv95RB3/ek4l/3lYLv93Zjb/dHQ+ + /3CARP9ti0r/a5ZO/mmgUf1nqVT8ZrFW+2S6V/tjwln6Ysxa+WHWW/dh4Fz1YOpd82DyXvFf+V7sXv5f + 6l3+X+pd/l/qXf5f6l3+X+pd/l/qXf5f6l3+X+pd/l//eA8D/3McCP9tKg3/cDIR/3Y6Fv95RB3/ek4l + /3lYLv93Zjb/dHQ+/3CARP9ti0r/a5ZO/mmgUf1nqVT8ZrFW+2S6V/tjwln6Ysxa+WHWW/dh4Fz1YOpd + 82DyXvFf+V7sXv5f6l3+X+pd/l/qXf5f6l3+X+pd/l/qXf5f6l3+X+pd/l//eA8D/3McCP9tKg3/cDIR + /3Y6Fv95RB3/ek4l/3lYLv93Zjb/dHQ+/3CARP9ti0r/a5ZO/mmgUf1nqVT8ZrFW+2S6V/tjwln6Ysxa + +WHWW/dh4Fz1YOpd82DyXvFf+V7sXv5f6l3+X+pd/l/qXf5f6l3+X+pd/l/qXf5f6l3+X+pd/l//eA4D + /3QcB/9uKQ3/czER/3k5Fv98Qh3/fUwl/3xXLv96ZDf/d3JA/3N+R/5wiUz9bZNR+2ueVfppplj5Z69a + +Ga4XPhlwV73ZMpf9mPUYPRi4GLyYepi72HyY+1h+mTnXvxk5l79Y+Ze/WPmXv1j5l79Y+Ze/WPmXv1j + 5l79Y+Ze/WP/eQ4D/3UbB/9vKQ3/djAQ/304Ff+AQBz/gUol/4FUL/+AYTn/fG5C/Hh6Svp0hVH4cZBW + 926aWvZso170aqxh9Gi1Y/NnvmXyZchn8WTSae9j32rsY+lr6mLybOZg+G3gYPpq3mD8ad5g/GneYPxp + 3mD8ad5g/GneYPxp3mD8ad5g/Gn/eg4D/3YaB/9wKA3/ei4Q/4E2Ff+EPxz/hUgl/4VSL/+EXjr7gGtE + +Hx3TfZ4glX0dIxb8nGWYPFun2TwbKho7mqxa+1ou23sZ8Vv62XRcelk3nPmY+l05GLzdd9h9nTZYvpv + 1mP7bdZj+23WY/tt1mP7bdZj+23WY/tt1mP7bdZj+23/ew0D/3caB/9yJwz/fS0P/4Q1FP+IPRv/ikYk + /4pPL/uJWzr3hWhF9IB0UPF8fljveIlg7XSSZuxwnGvqbqVv6Wuuc+hpuHXmZ8N45WXPeuNk3XzgY+l9 + 3WLxfdZj9XnQZfl0zmb6cs5m+nLOZvpyzmb6cs5m+nLOZvpyzmb6cs5m+nL/fA0D/3gaB/91Jgz/gCwO + /4gzE/+MOxr/jkQj/I5NLveOWDvzimRH8IVwUu2Ae1zqe4Vl6HeObOZyl3Lkb6F34myqe+BptH/fZ7+C + 3WXMhNtj24bYYeiI02Txg85m9X7IaPh5x2j6d8do+nfHaPp3x2j6d8do+nfHaPp3x2j6d8do+nf/fQ0D + /3kaB/94JQv/gysN/4syEv+QORn/kkIi+ZNKLvOTVDvvj2FI64psVeeEd2Dkf4Bq4XmKc950k3rccJyA + 2Wylhddpr4nVZ7uL02bIjNFm2IzOZeaNymjwiMVp84PAa/Z9vmv3e75r93u+a/d7vmv3e75r93u+a/d7 + vmv3e75r93v/fQwD/3oZB/97JAv/hikM/44wEP+UNxf8l0Ah9ZhILfCZUTrrlV1J5o9oV+KIc2Tegnxw + 2nyFetV2joHScpeGz2+gis1tqozLa7WPyWrCkMdq0ZHFaeKRwWvtjrxs8Ii4bvOCtm71f7Zu9X+2bvV/ + tm71f7Zu9X+2bvV/tm71f7Zu9X//fgwC/3sZBv9+Igr/iSgM/5IuD/+YNhb5mz4f8p1GK+yeTjnmmlpJ + 4ZRlWNyNbmfWhnhz0YCBfM17iYPKd5KIx3SbjMRypZDCcLCSwG+9lL5uzJW7bt6VuG7qk7Rw7YywcfGF + r3Hzg69x84OvcfODr3Hzg69x84OvcfODr3Hzg69x84P/fwwC/3sZBv+AIQn/jCcL/5UtDv+bNBT2oDwd + 76JDKeikSzjioFdI3JlhWdWSa2jPi3R0yoV9fcaAhYTCfI6Kv3mXj7x2oJK5dKuVtnO4l7Ryx5iyctqZ + r3Lol6xz65CpdO+JqHTxhqh08YaodPGGqHTxhqh08YaodPGGqHTxhqh08Yb/fwwC/3wZBv+DIAn/jyYK + /5grDfyfMhLzpDob66dBJ+WpSTbepVRH155fWdCXaGjJkHF0xIp6fb+FgoW7gYqLt36TkLR7nJSweKeX + rnezmqt2w5uqdtWcp3Xlm6R36ZSieO6MoXjviaF474mheO+JoXjviaF474mheO+JoXjviaF474n/gAsC + /30YBv+FIAj/kSQJ/5sqC/qiMRDxqDgZ6aw/JeKuRzTaqlJF0qJcWMubZmfElG90vo93frmKf4a0hoeM + sIKQkax/mZapfaOZpnuvnKN6v52hetGen3nknp166Jebe+yPmnvujJp77oyae+6MmnvujJp77oyae+6M + mnvujJp77oz/gQsC/30YBv+HHwf/kyMI/50pCvimLw/urDYX5rE9It+zRTHWrlBEzqdaV8afZGa/mWxz + uZN0frOOfIauioSNqoeNkqaDlZeigaCan3+snZx+u5+afs2gmH7ioJZ+5pmVfuuRlH7sjpR+7I6UfuyO + lH7sjpR+7I6UfuyOlH7sjpR+7I7/gQsC/34YBv+JHgf/liIH/6AnCfWpLQ3ssDQU47Y7H9y4RC3Ssk9D + yqpZVsKjYWa7nWpztJdyfa6SeoapjoGNpIuKkp+IkpebhZ2bmISpnpWCuKCTgsqhkYLgoY+C5ZuPguqT + j4LrkI+C65CPguuQj4LrkI+C65CPguuQj4LrkI+C65D/ggsC/38YBv+LHQb/mCEG/6MlCPOsKwvptDIR + 4bs4G9m8QizPtU1Cxq5XVb6nYGW2oWhyr5tvfamWd4Wjkn+Nno+HkpqMkJiVipqckYimn46HtaGMh8ij + iofeo4mG5J2JhemViYXrkomF65KJheuSiYXrkomF65KJheuSiYXrkomF65L/ggoC/38YBv+NHAX/mh8F + /aYjBvGwKQnnuS8P3sE2F9XAQCrMuUtAw7JVU7qrXmSypWZxq6BtfKSbdYWel3yMmZSFk5SRjZiPj5ec + i42joIiMsqKFjMWjg4zcpIKK456DieiWg4nqk4OJ6pODieqTg4nqk4OJ6pODieqTg4nqk4OJ6pP/gwoC + /4AXBf+PGwX/nR0E+6khBe60JgfkviwL28czE9HDPynIvUo/v7ZTUrawXGKuqmRwpqVre5+gcoSZnHqM + k5mCko6Xi5iJlJWchZOhoIGSr6N+kcKkfJLapHyP46B9jueXfY3plH2N6ZR9jemUfY3plH2N6ZR9jemU + fY3plH2N6ZT/hAoC/4EXBf+RGQT/nxsD+KweA+u4IgXhxCgI2MsvEc7HPSfEwUg9u7tRULK1WmGpr2Fv + oappepqmcIOUoneLjp9/koidiJeDm5KcfpmeoHqYraJ3mMCkdZjYpHSV4qB2k+eYd5LplXeS6ZV3kumV + d5LplXeS6ZV3kumVd5LplXeS6ZX/hAkB/4QWBf+UFwP/oxkC9bAaAui+HQLeyyEE088tD8rLOyXAxkY7 + tsBPTq26V1+ktV9tnLFmeJWtbYKOqXWKh6Z8kIGkhZZ8oo+bd6Gbn3KgqqFvoL6jbaDWo2yd4qBvmueY + cJjolXCY6JVwmOiVcJjolXCY6JVwmOiVcJjolXCY6JX/hQkB/4cUBP+YFQL+pxUB8bUUAOTFFADZ1BYA + z9MrDcXQOSK7y0M4scZNTKjBVVyfvFxqlrhjdo+1an+IsnKHga95jnutgpR1q4yZb6qYnGupqJ9nqryh + ZarVoWSm459noueXaKDplWig6ZVooOmVaKDplWig6ZVooOmVaKDplWig6ZX/hggB/4sSA/+cEQHxqw4A + 37wKANjMCADT2REAytkoC8DVNh+10UE1q81KSKLIUlmZxVlnkMFhcoi+aHyBu2+Eerl3i3S4f5ButoqV + aLWWmWO1ppxgtbudXrfWnVyy5ZxfrOiVYKrqk2Cq6pNgquqTYKrqk2Cq6pNgquqTYKrqk2Cq6pP/iAgB + /48PAvagDADbsQUA1cAGANHPBgDL3hQAwt4sCLncNRyv2T4xpdRHRJvRT1WSzlZiictdboLJZHd6x2x/ + c8V0hm3EfYtnw4eQYsOUk13DpZZZxLqXV8XYmFXA6JdYueuRWLbsj1i27I9YtuyPWLbsj1i27I9YtuyP + WLbsj1i27I//igcB/5QLAOGmAwDUtgQAzsQEAMnTBgDC4hsBuuMvC7HiORqo4D4snt5FP5TbTE+L2VNc + gtZaaHvVYXF01Gl4bdNxfmfSe4Nh0oaIXNKTi1fTpI1U1LuPUdXaj0/R6o9RyO6KUsXviVLF74lSxe+J + UsXviVLF74lSxe+JUsXviVLF74n/jAYB8JsEANasAADOuwIAyMkDAMHYBwC55yEDsOgwDqfoOBye5z0r + leZCOozlSUiD5FFUfONYXnTiX2du4mduZ+Jvc2LieHhc4oN8V+OPgFPkn4JP5bSETebPhEvl6oRM2u+B + TdbwgE3W8IBN1vCATdbwgE3W8IBN1vCATdbwgE3W8ID/jgQA26IAAM+yAADHwQEAwM8EALjqDgCv7SUF + pu4vEJ3uNhyU7jwpi+5BNYPuR0B87k9Kde5XUm/uX1hq7mdeZe5vYmHveGZc74FqWPCNbVTxmm9R8qtx + TvPAckz03HNK7+5zSevwc0nr8HNJ6/BzSevwc0nr8HNJ6/BzSevwc0nr8HPmmAAA0qkAAMi5AADAyAEA + t9UEAK7yFgGl9CUHm/UtEJL2NBuJ9jolgfZAL3r3Rjd0900/bvdURWn4XUpl+GVOYfltUV75dFVa+n1X + V/qHWlT7k1xR/KFeTv2wYEz+xGFJ/+JiSP/sYkj/7GJI/+xiSP/sYkj/7GJI/+xiSP/sYkj/7GLXoQAA + ybIAAMDBAAC3zwEArdsDAKP6GAKZ/CIIkP0qD4f+MRh//jcgeP8+J3H/RC5r/0szZv9ROGL/WTte/2E+ + W/9oQVj/cERW/3dGU/+ASFD/iUpO/5VMS/+hTUn/sE5H/8VPRv/OUEb/zlBG/85QRv/OUEb/zlBG/85Q + Rv/OUEb/zlDMqwAAwboAALfKAACs1QAAoe8HAJf/FQON/x4HhP8mDXz/LRR0/zQabv87H2j/QSRi/0go + Xv9OK1r/VC5X/1swVP9hM1H/aDRP/282Tf93OEr/fzlI/4g7Rv+SPET/nT1C/6w+Qf+zPkH/sz5B/7M+ + Qf+zPkH/sz5B/7M+Qf+zPkH/sz7CtQAAuMQAAK3RAACg2wAAlfcFAIr/EAKB/xkGeP8hC3D/KA9p/zAU + Y/83GF7/PRtZ/0MeVf9JIVL/TiNP/1QkTP9aJkr/XydH/2UoRf9sKkP/cytA/3osPv+CLTz/iy46/5cv + Of+cLzn/nC85/5wvOf+cLzn/nC85/5wvOf+cLzn/nC+6vwAArs0AAKHXAACT3gAAiPoAAH7/CQJ0/xMF + bP8bCGX/Iwte/yoPWP8xElP/NxRP/z0WS/9CGEj/RxlF/0waQ/9RG0D/VRw+/1odPP9gHjn/Zh83/2wg + Nf9yITP/eSIx/4IiMP+GIzD/hiMw/4YjMP+GIzD/hiMw/4YjMP+GIzD/hiOwyQAAo9QAAJTcAACG4gAA + e/wAAHH/AgFo/wsDX/8UBlj/GwhS/yMKTf8pDEj/Lw5E/zUPQf85ET7/PhI7/0ISOP9GEzb/ShQz/04V + Mf9TFS//WBYt/10XKv9iFyj/aBgm/28YJf9yGSX/chkl/3IZJf9yGSX/chkl/3IZJf9yGSX/chn/bBME + /2cfCP9fLQz/ZTEP/2s6FP9tRBn/bU4g/2tZJ/9pZy3/ZnUz/2OBOP9hjDz/X5Y//12fQf9cqEP/W7BE + /lq4Rv1ZwEf8WclI+1jSSPlX3Un3V+ZJ9VbvSvNW9krxVv1K71X/Su9V/0rvVf9K71X/Su9V/0rvVf9K + 71X/Su9V/0r/bBME/2cfCP9fLQz/ZTEP/2s6FP9tRBn/bU4g/2tZJ/9pZy3/ZnUz/2OBOP9hjDz/X5Y/ + /12fQf9cqEP/W7BE/lq4Rv1ZwEf8WclI+1jSSPlX3Un3V+ZJ9VbvSvNW9krxVv1K71X/Su9V/0rvVf9K + 71X/Su9V/0rvVf9K71X/Su9V/0r/bRIE/2cfCP9gLAz/ZzEP/245E/9wQxn/cE0g/25YJ/9sZS7/aXM0 + /2Z/Ov9kij7/YZRB/mCeRP1epkb8Xa5I+1y3Sfpbv0r6WshL+VrRTPdZ3E31WOZN8ljvTvBY9k7uWP1O + 7Vf/Tu1X/07tV/9O7Vf/Tu1X/07tV/9O7Vf/Tu1X/07/bhIE/2geCP9iKwz/ay8P/3I4E/90QRn/dUsg + /3NVKP9xYi//bnA2/2t8Pf1oh0H7ZZFF+mOaSflho0v4YKtN91+0T/ZevFD1XcZS9FzPU/Jb21TwW+ZV + 7lrvVeta91bqWf5W6Fr/U+ha/1PoWv9T6Fr/U+ha/1PoWv9T6Fr/U+ha/1P/bhEE/2keB/9lKQz/by4O + /3U2Ev94Pxj/eUkg/3hTKP92XzD+cmw4+295P/lshEX3aY5K9maXTfRkoFHzY6lT8mGxVfFgulfwX8RY + 717OWu5d2lvrXOVc6FzvXeZb913lXP5b4l3/WOJd/1fiXf9X4l3/V+Jd/1fiXf9X4l3/V+Jd/1f/bxED + /2odB/9oJwv/cywN/3k0Ev98PRj/fUYf/3xQKP57XDH6d2k693N1QvVwgEnzbIpO8WmUU/BnnVbuZaVZ + 7WOuXOxit17rYMFg6l/MYule2WPmXeVk413vZeFd92TfX/5g2mD/XNpg/1zaYP9c2mD/XNpg/1zaYP9c + 2mD/XNpg/1z/cBAD/2sdB/9sJQv/disN/30yEf+BOxf/gkQf/4FOKPqAWDL2fGY883hyRfB0fU3tcIdT + 622QWepqmV3oZ6Jh52WqZOZjtGfkYb5p42DJa+Jf123eXuVu3F3vbtlg+GrWYv9m0WT/YdBk/2HQZP9h + 0GT/YdBk/2HQZP9h0GT/YdBk/2H/cRAD/2wcB/9vIwr/eioM/4ExEP+FORX/h0Ed+4dLJ/aGVTLxgmI9 + 7n1uSOp4eFHodIJZ5XCMX+NslWXhaZ1q32ambd5ksHHcYbp02mDHdtlf1XfVXuN40mDvddBj+HDNZv5r + yGf/Zshn/2bIZ/9myGf/Zshn/2bIZ/9myGf/Zshn/2b/cg4D/20bB/9zIgn/figL/4UvDv+KNxT+jD8c + 94xIJvGLUTLsiF4+6IJqSuR9dFXheH5e3nOHZttukG3Yaphz1WihdtNmq3nRZLZ60GPCfM5jz33MYuB9 + yWPte8dn+HbEaf1xv2r/a79q/2u/av9rv2r/a79q/2u/av9rv2r/a79q/2v/cw4D/28bB/92IQn/gSYK + /4ktDf+ONBL6kT0a85JFJe2RTjHnjVo+44hmTN6CcFjae3lk1XaCbNJyi3LPb5R2zGycespqpn3IabB/ + xmi8gMRnyoLCZ9uCv2fqgb5q9nu7bPp2t239cLZt/XC2bf1wtm39cLZt/XC2bf1wtm39cLZt/XD/dA0D + /28aB/95Hwj/hSUJ/40rC/+TMhD3ljoY75dCI+mXSzDjk1c+3Y1iTdeHbFvSgXVlzXx+bcp4h3TGdI95 + w3GYfcFvoYC/bauDvGy3hLtrxYa5a9WGtmrmhrVu9ICyb/h6rnD7dK5w+3SucPt0rnD7dK5w+3SucPt0 + rnD7dK5w+3T/dQ0D/3AaB/98Hgf/iCMI/5ApCv2XMA/zmzgW651AIOWdSC3emVQ92JNfTdGMaVrLhnJm + xoF6bsJ9g3W/eYt7u3aTf7h0nIO2cqaGs3CyiLFvwImwb9CKrW7jiq1y8oWqcvV+p3P5d6dz+Xenc/l3 + p3P5d6dz+Xenc/l3p3P5d6dz+Xf/dQwD/3EZBv9/HQb/iyIH/5QnCfqaLg3wnzUT6KI9HeGjRivanlI7 + 0pdcTMuRZlrFi29mwIZ3b7uBf3a3fod8tHuQgbF4mIWudqKIq3SuiqlzvIync8yNpXLgjaR18IiidvOC + oHb3e6B293qgdvd6oHb3eqB293qgdvd6oHb3eqB293r/dgwD/3IZBv+BHAb/jSAG/5clB/eeLAvtpDMR + 5ac6Gt2oRCfVo085zZxaS8aVY1nAj2xluop0b7WGfHexgoR9rX+Mgqp8lYamep+Ko3iqjaF3uI+fd8iQ + nXfdkJ157oybefKFmXr2fZl69n2ZevZ9mXr2fZl69n2ZevZ9mXr2fZl69n3/dwsC/3QYBv+DGwX/kB8F + /5ojBvSiKQnqqDAO4qw4F9qtQiTRp004yaBYSsKZYVm7lGpltY5yb7CKenerhoF9p4OJg6OBkoegfpuL + nX2njpp7tJCYe8WSlnvakpV87I6UffCHk331f5N99X+TffV/k331f5N99X+TffV/k331f5N99X//dwsC + /3YXBf+GGgT/kh0E/5whBfKlJwforC0M37I0E9axQCPNqkw3xaRWSb6dX1i3mGdksJNvbquOd3emi399 + oYiGg52Fj4iZg5iMloGkj5OAsZKRf8KTj3/WlI6A6pGOgO+JjYD0gY2A9IGNgPSBjYD0gY2A9IGNgPSB + jYD0gY2A9IH/eAsC/3gWBf+IGQT/lBsD/J8fBO+pJAXlsSoJ3LcxD9O0PiHKrko1wahUR7qhXVeynGVj + rJdtbqaTdXahj3x9nIyEg5iJjIiUh5aNkIWhkI2Er5OKg7+UiITUlYiE6ZOIhO6LiIPzg4iD84OIg/OD + iIPzg4iD84OIg/ODiIPzg4iD84P/eAoC/3oVBf+KFwP/lxkC+qIcAu2sIQPitSYG2bwvDM+3PSDHskg0 + vqtSRralW1auoGNip5trbaGXcnack3p9l5CBg5KOioiOjJONioqekYaJrJSEiL2VgojRloGI6JSCiO2N + gofyhYKH8oSCh/KEgofyhIKH8oSCh/KEgofyhIKH8oT/eQoC/3wUBP+MFgP/mRcC96UZAeqwHALfuyED + 1r8sC8y7Ox7DtUcyuq9RRLKqWVSqpWFho6BpbJyccHWXmXd9kZZ/g42Th4iIkZGNhI+ckYCOqZR9jbqW + e47PlnqN5pV7je2OfIvxhnyL8YZ8i/GGfIvxhnyL8YZ8i/GGfIvxhnyL8Yb/egoC/38TA/+PFAL/nBQB + 9KkVAOe1FgDcwRkB0sMqCci/ORy/ukUwtrRPQ62vV1Klql9gnqVna5iibnSRnnV8jJx9goeZhYiCl46N + fZWZkXmUp5R2lLiWdJTNlnKT5ZZ0kuyPdpDxh3aQ8Yd2kPGHdpDxh3aQ8Yd2kPGHdpDxh3aQ8Yf/ewkC + /4IRA/+SEQH4oBAA6q0OAOC7DADYxw8AzscoCMTDNxq7vkMusblMQKm0VVChsF1emaxkaZKoa3KMpXJ6 + hqJ6gYCggod7nouMdp2WkHKcpJNvm7aVbJvLlmub5JVtmeyPb5bwh2+W8YdvlvGHb5bxh2+W8YdvlvGH + b5bxh2+W8Yf/fAkC/4UPAv+VDgDrpAoA2bIGANW+BwDSygsAycslBsDINRi2xEArrb9KPaS7U02btlpb + lLNhZoywaXCGrXB4gKp3fnqof4R0p4iJb6WUjmukopFnpLSTZaXKlGOk5JNloe2OZ53xh2ed8YZnnfGG + Z53xhmed8YZnnfGGZ53xhmed8Yb/fQgC/4kMAfSZCQDaqAMA1LUFANDCBQDMzgcAxNAhBLrNMhWxyj0o + p8ZHOp7CUEqVvldXjrtfY4a4ZmyAtm10ebR0e3OyfYFusYaGaLCRimSvn41gr7KPXbDKkFyv5ZBdrO6L + X6fyhWCn8oVgp/KFYKfyhWCn8oVgp/KFYKfyhWCn8oX/fwgB/44JAOGeAQDVrAIAz7kDAMrGAwDF0QYA + vdUcArTULhGq0Tokoc5ENZjKTUWPyFRTh8VcXoDDY2d5wWpvc79ydm2+entnvYSAYryPhF28nodZvLGJ + V73JilW954pWufGGWLL0gViy9IFYsvSBWLL0gViy9IFYsvSBWLL0gViy9IH/gQcB85MCANijAADPsQEA + yb4CAMPKAwC81QcAtdwdAq3bLA2j2TcfmtZAMJHUST+I0lFMgNBYV3nOYGBzzWdobMxvbmbLeHRhy4J4 + XMuOfFfLnX9Ty7GBUc3Lgk/M6YJQyPR/UcD3e1HA93tRwPd7UcD3e1HA93tRwPd7UcD3e1HA93v/hgMA + 3pkAANGpAADJtgAAwsMAALvPBAC03AkArOIiBKTiLw6b4TgckuA+KonfRjiB3k5Eed1VT3LcXFhs22Rf + ZttsZWDbdWpb239uVtuMcVLcm3RP3a92TN7Id0ve53ZL2vV1TNH4ckzR+HJM0fhyTNH4ckzR+HJM0fhy + TNH4ckzR+HLzjgAA1qAAAMuvAADCvAAAu8kBALLUBQCq6BQAouklBpnpLxCR6TYbiOk9J4DoRDJ56Es7 + c+hTQ23oW0pn6GNQYuhrVV7odFpZ6X1dVemJYVHqlmNO66dlS+y8Zknt12dH7fJnR+P6Zkfj+mZH4/pm + R+P6Zkfj+mZH4/pmR+P6Zkfj+mbdlwAAzagAAMO2AAC7xAAAss8BAKjZBACg7xgCl/AkB47xLRCG8TUZ + fvI7InfyQipx8kkxa/JQOGbzWD1i82BBXvRoRVr0cUhX9XlLU/WDTlD2j1FN955TSviuVEj4wlVG+dxW + RPn4VkT5+VZE+flWRPn5VkT5+VZE+flWRPn5VkT5+VbSoAAAxbAAALy+AACyywAAqNUAAJ3pBwCU9xcC + jPkiB4P5Kg57+jIVdPs5HG77QCJo/EcoY/xNLF79UzBa/VszV/5jNlT+azhR/3M7T/98PUz/hj9J/5JB + Rv+gQkT/r0NC/8FEQP/dRUD/3kVA/95FQP/eRUD/3kVA/95FQP/eRUD/3kXHqgAAvbkAALPHAACo0QAA + nNoAAJH0CACI/xQCgP8eB3j/Jgxw/y4Rav81FmT/PBpf/0MeWv9JIVb/TyRT/1YmUP9cKU3/YypK/2os + SP9yLkX/ey9D/4UxQP+QMj7/nDM8/6o0Ov+9NTr/vTU6/701Ov+9NTr/vTU6/701Ov+9NTr/vTW+tAAA + tMMAAKnOAACc1wAAj94AAIX6BAB8/xACdP8ZBWz/IQll/ykNX/8wEFr/NxNV/z0WUf9DGE3/SRpK/08c + R/9UHUX/Wh9C/2AgP/9nIT3/byM6/3ckOP+AJTb/iSYz/5QnMf+jJzH/oycx/6MnMf+jJzH/oycx/6Mn + Mf+jJzH/oye2vgAAqssAAJ3UAACP2wAAguIAAHj9AABv/wkBZ/8TBGD/GwZa/yMJVP8qC0//MA5L/zYP + R/88EUP/QRJA/0YTPf9KFTv/UBY4/1UWNv9bFzP/YRgw/2gZLv9vGiv/dxsp/38bJv+LHCb/ixwm/4sc + Jv+LHCb/ixwm/4scJv+LHCb/ixysyAAAn9IAAJDZAACC3wAAdegAAGv/AABi/wEBWv8KAlP/EwRN/xsG + SP8iB0P/KAk//y4KPP8yCzj/Nww1/zsNMv8/Di//Qw4t/0gPKv9NECf/UhAl/1gRIv9fEiD/ZRId/2wT + Gv91Exr/dRMa/3UTGv91Exr/dRMa/3UTGv91Exr/dRP/YBYE/1kjCP9SLwv/WjIN/186Ef9hRBb/YE8b + /11bIP9baCX/WHUp/1aBLf9UjC//U5Yx/1GfM/9QpzT/T681/0+3Nv9Ovjb/Tsc3/U3QN/tN2jf5TeM4 + 90ztOPVM9Dj0TPo48kz/OPFL/zfxS/838Uv/N/FL/zfxS/838Uv/N/FL/zf/YBYE/1oiCP9ULgv/WzAN + /2E5Ef9jQxX/Yk4b/19ZIP9dZyb/WnQq/1iALv9WizH/VZQz/1OeNf9Spjb/Ua43/lG1OP1QvTn9T8Y5 + /E/POvpP2Tr3TuM69U7sOvNO9DvxTfo68E3/Ou9N/zrvTf86703/Ou9N/zrvTf86703/Ou9N/zr/YRUE + /1siB/9XLAv/Xy8N/2U3EP9oQRX/Z0wb/2RWIf9hZCf/X3Es/119MP9aiDT/WZI2/VebOPxWozr7Vas7 + +lSzPPlTuz34UsQ++FLNP/ZR2D/0UeJA8VDsQO9Q9EDtUPtA7FD/QOtQ/z7rUP8+61D/PutQ/z7rUP8+ + 61D/PutQ/z7/YhUE/1whB/9aKgr/Yy0M/2k2EP9sPxX/a0kb/2lUIf9mYSj/Y24u/2F6Mv1ehTb7XI86 + +lqYPPhZoT73WKlA9lexQfVWuUL0VcJD81TLRPJU1kXwU+JF7VPsRutT9EbpUvtG51P/ROZU/0LmVP9C + 5lT/QuZU/0LmVP9C5lT/QuZU/0L/YxQE/10hB/9eJwr/ZywM/200D/9wPRT/cEcb/25SIv9rXin+aGsv + +2V3Nfligjr3YIw+9V6VQfRcnkPyW6ZF8VquR/BZtkjvWL9J7lfJSu1W1EvrVeFM6FXrTeZV9E3kVftM + 4lb/SeFX/0fhV/9H4Vf/R+FX/0fhV/9H4Vf/R+FX/0f/ZBQE/14gB/9hJQn/bCoL/3IyD/91OxT/dUUa + /3NPIv5xWir6bmgx9mp0OPRnfj3xZIhC8GKSRu5gmkntXqJM7FyrTupbs1DpWr1R6FnHU+dY01TlV+BV + 4lfrVt9X9FXdWfxR3Fr/Ttpc/0zaXP9M2lz/TNpc/0zaXP9M2lz/TNpc/0z/ZRME/18gB/9lIgn/cCkK + /3cwDv96ORP/ekIZ/nlMIfl3Vir0dGQz8XBvO+5sekLraYRH6WaNTOhjllDmYZ5T5V+nVuNdsFjiXLlb + 4VrEXN9Z0V7dWeBf2ljrX9da9VvVXfxY0l//VNFg/1HRYP9R0WD/UdFg/1HRYP9R0WD/UdFg/1H/ZhME + /2AfB/9pIQj/dCcJ/3suDP9/NhH/gD8Y+n9JIfR9UyrvemA063VrPehxdkblbYBN4mmJU+BmkljeY5pc + 3GGjYNperGPZXbZl11zBZtVczmfTW95n0FvqZs1e9WLLYf1eymP/Wslk/1fJZP9XyWT/V8lk/1fJZP9X + yWT/V8lk/1f/ZxIE/2IeB/9uHwf/eSUI/4AsC/+ENBD8hjwW9YVFH++ETyrqgFw15XtnP+F2ckndcXtS + 2m2EWtdpjWDUZpVj0mSeZtBjp2nOYbBrzWC8bMtgyW3JYNhtxl/nbcRi82jDZfxkwmf/X8Bo/1zAaP9c + wGj/XMBo/1zAaP9cwGj/XMBo/1z/aBID/2MdB/9xHQf/fSMH/4QpCv+JMQ74izkU8ItCHeqKSyjkhlg0 + 34FjQdp7bU3VdndW0XKAXc5uiGPLbJBnyWmZasdnoW3FZqtvw2W2ccFkw3K/ZNJzvWPjc7tm8W66aPtp + uWv/ZLdr/2G3a/9ht2v/Ybdr/2G3a/9ht2v/Ybdr/2H/aRED/2YbBv91HAb/gCEG/4gnCP6NLgz0kDYS + 7JE/G+WQSCbfjFQz2YdfQdKBak7OfHNXyXd7X8Z0hGXDcYxqwG6Ubr5snXG7aqZzuWmxdbdovne2aM14 + s2ffeLJp7nSxbPlusG7/aa5u/2Wubv9lrm7/Za5u/2Wubv9lrm7/Za5u/2X/ahED/2kZBv94GwX/gx8F + /4wlB/qSKwrwlTMP6Jc7GOGXRSPaklEx0oxcQcyGZk3HgW9Ywn14YL55gGa7dohsuHOQcLVxmHOzb6J2 + sG2sea5suXqsbMl7q2zbfKlt63mpcPhzqHH/baZy/2mmcv9ppnL/aaZy/2mmcv9ppnL/aaZy/2n/axAD + /2wXBf97GQT/hh4E/48jBfeWKQjtmjAM5J04FN2cQx/Ul08wzZFaQMeLY03BhmxYvIF1YLh+fGe0eoRt + sXiMcq51lHarc555qHKoe6ZxtX2kcMV/onDXf6Fw6X2hc/Z2oHX9cJ91/2yfdf9sn3X/bJ91/2yfdf9s + n3X/bJ91/2z/axAD/24VBf9+GAT/iRwD/5IgBPSZJgbpny0K4aI0EdmiQBzQnEwuyZVXP8KQYUy8impY + toZyYbKCeWiuf4FuqnyJc6d6kXekeJp7oXalfp51sYCcdMGBm3TTgpl054Cad/V6mXj8c5h4/m+YeP5v + mHj+b5h4/m+YeP5vmHj+b5h4/m//bA8D/3AUBP+AFwP/jBoD/pUdA/GdIgTmoykH3qgwDdSlPhvMoEot + xJpVPr2UXky3j2dXsYpvYKyGd2iog35upICGc6B+jnidfJd8mnqhf5d5roKVeL2Dk3jQhJJ45IOTe/R8 + k3v6dpJ7/XGSe/1xknv9cZJ7/XGSe/1xknv9cZJ7/XH/bQ4D/3MTBP+CFQL/jhgC+5gaAu6hHwLjqCUE + 260uCdGpPBrIo0gswJ1TPLmYXEuyk2VWrI5tYKeKdGijh3xunoSDdJuCi3mXgJR9lH6egJF9q4OOfLqF + jXzNhot74oaNfvN/jX/5eIx+/HOMfvxzjH78c4x+/HOMfvxzjH78c4x+/HP/bQ4D/3USA/+FFAL/kRUB + +ZsXAeukGwHgrCAC17ArB86sOhjFp0cqvaFRO7WcWkmul2NVqJJrX6OPcmeei3lumYmBdJWGiXmShJJ9 + joKcgYuBqISIgLiGhoDLh4SA4YeGgvKBh4L4eoaB+3WGgft1hoH7dYaB+3WGgft1hoH7dYaB+3X/bg0D + /3gRA/+HEgH/kxMB9p4TAOioFQDdsRkA07MpBsqwORfBq0UpuaVPOrGgWEiqm2FUpJdpX56TcGeZkHdu + lI1+dJCLhnmMiY9+iIeagoWGpoWChbWHgIXIiH6E34iAhvGCgYb3e4GF+naBhfp2gYX6doGF+naBhfp2 + gYX6doGF+nb/bw0D/3oPAv+JEAH6lg8A7aEOAOWsDQDatg8A0LcnBcezNxW+rkMntalOOK2kV0emn19T + n5tmXZqYbmaUlXVtj5J8dIuQhHmGjo1+goyXgn+Lo4V8irOHeYrGiXiJ3Yl5i/CDeor2fHuJ+Xd7ifl3 + e4n5d3uJ+Xd7ifl3e4n5d3uJ+Xf/cAwD/30NAv+MDQDwmQsA3qUHANivBwDVuQsAzLokBMO3NRO6s0El + sa5MNqmpVUWipF1Rm6FkXJWda2WPmnJsiph6c4WVgXiBk4p9fJKUgniRoYV1kLCHcpDEiXGQ3IlykO+E + dI/2fXSO+Xh0jvl4dI75eHSO+Xh0jvl4dI75eHSO+Xj/cQwC/4AMAfuPCgDjnAUA2KgFANOyBgDQvAcA + yL4hA7+7MxG2tz8jrbNJM6WuUkKdqlpPlqdiWpCjaWOKoXBrhJ53cX+cf3d6mod8dpmSgXKYnoRul66G + a5fCiGqX24hrl++EbZX2fW6U+HlulPh5bpT4eW6U+HlulPh5bpT4eW6U+Hn/cgsC/4MJAfCSBQDaoAIA + 06sDAM61BADLwAQAw8IeArrAMA6xvT0gqLlHMKC1UECYsVhMka5fV4qrZmCEqG1ofqZ0b3mkfHV0ooV6 + b6GPfmugnIJnn6yEZJ/AhmKf2oZjn++DZZ32fGab+Xhmm/l4Zpv5eGab+Xhmm/l4Zpv5eGab+Xj/dAkC + /4cGAN+XAADVowEAzq8CAMm5AgDExAEAvccZAbXGLQyrwzoco79ELZq8TTySuVVJi7ZcVISzY11+sWpl + eK9ya3OtenFtrIN2aKuNe2Sqmn5gqqqBXaq/gluq2oJbqe+AXqb4el+k+nZfpPp2X6T6dl+k+nZfpPp2 + X6T6dl+k+nb/eQUB9IwAANmbAADQqAAAybMAAMO9AAC9xwIAts0UAK7MKAmlyjYYncdBKJTESjeMwlJE + hb9ZTn69YVh4u2hfcrpvZmy4d2xnt4BxYraLdV22mHlZtql7Vra/fFS323xUtvF7VrL6dliv/HNYr/xz + WK/8c1iv/HNYr/xzWK/8c1iv/HP/fwEA4JEAANOgAADKrQAAw7gAALzCAAC1ywQArtMMAKfTIwWe0jIT + ltA9I43ORjGFzE49fspWSHfIXVFxx2VYa8ZsX2bFdWRhxX5pXMSJbVfEl3BTxKhzUMW/dE7F3HROxPRz + UMH9b1G8/21RvP9tUbz/bVG8/21RvP9tUbz/bVG8/235hgAA2ZcAAM2mAADEsgAAvb4AALXIAQCt0AUA + pdkJAJ7cIQOX2y8Ojto5HIbZQil+10s1d9ZTP3HVWkhr1GJPZdNqVWDTclpb03xfVtOIY1LTlmZO1Kho + S9XAaUnV3mlJ1PJoStH+ZkrM/2RKzP9kSsz/ZErM/2RKzP9kSsz/ZErM/2ThjgAA0Z4AAMasAAC+uQAA + tsQAAKzNAQCj1QUAnOMTAJXjJAWN5C8OheM4GX3jPyN240ctcOJPNWriVzxl4l9CYOJnSFvicExX43lQ + UuOEVE7kkldL5KJZSOW3Wkbm0ltF5u1aReP/WUXf/1hF3/9YRd//WEXf/1hF3/9YRd//WEXf/1jYlgAA + yaYAAL+0AAC3wAAArcoAAKPSAQCZ2gQAkesXAYrsJAaC7C4Oe+02FnTtPh5u7UUlaO1MK2PuVDBf7lw1 + W+5kOFfvbDxT73U/UPB/QkzwjEVJ8ZpHRvKrSUTzwUpC9NpKQfTzSkDy/0pA8v9KQPL/SkDy/0pA8v9K + QPL/SkDy/0rNoAAAwa8AALi8AACuyAAAo9AAAJjXAACO6gcAhvQXAn/1IgZ39isMcfYzEmr3Oxhl90Id + YPhJIVv4TyVX+VcoU/leK1D6Zi1N+m8wSvt4Mkj8gjRF/I82Qv2dOED+rjk+/sA6PP/ZOjv/6zs7/+s7 + O//rOzv/6zs7/+s7O//rOzv/6zvDqgAAubgAAK/FAACjzgAAl9UAAIvbAACC9AcAev0UAnP+HgVs/ycJ + Zv8vDmD/NxJb/z4VV/9EGFL/ShtP/1EdTP9XH0n/XiFG/2YjQ/9uJED/dyY9/4IoO/+OKTj/myo3/6kr + Nf+6LDT/yiw0/8osNP/KLDT/yiw0/8osNP/KLDT/yiy6tAAAsMEAAKXMAACY0wAAitoAAH7fAAB2+gMA + bv8PAWf/GQRh/yIHW/8qClb/MQxR/zgPTf8+EUn/QxNG/0kUQ/9PFkD/VRc9/1sYOv9iGTf/ahs0/3Mc + Mf99HS//iB4s/5QfK/+hHyr/qyAq/6sgKv+rICr/qyAq/6sgKv+rICr/qyCyvgAApsoAAJnRAACL2AAA + fd4AAHHlAABp/wAAYf8IAVv/EgJU/xsET/8jBkr/KQhG/zAKQv81Cz7/Ogw7/z8NOP9EDjX/SQ8y/08Q + L/9VESz/XBIp/2QTJv9sFCP/dRQh/34VHv+JFh3/kRYd/5EWHf+RFh3/kRYd/5EWHf+RFh3/kRaoxwAA + m9AAAIzWAAB93QAAcOIAAGTsAABc/wAAVP8AAE3/CQFI/xIDQv8aBD7/IAU6/yYGNv8rBzL/MAgv/zQI + LP84CSn/PQom/0IKI/9HCyD/TQsd/1MMGv9aDRf/Yg0U/2kOEv9yDg//eA8P/3gPD/94Dw//eA8P/3gP + D/94Dw//eA//UxoE/0wmB/9JLgn/TzEL/1Q5Dv9WQxL/VU8W/1JbGv9PaB7/THUh/0qAI/9IiyX/R5Um + /0adJ/9FpSj/RK0p/0S0Kf9EvCn/Q8Mp/0PMKv1D1ir6QuAq+ELpKvZC8in0Qvgp80L+KfFC/yjxQv8o + 8UL/KPFC/yjxQv8o8UL/KPFC/yj/VBoE/00mB/9MLAn/Uy8L/1g3Dv9aQhL/WUwW/1ZZG/9TZh//UHIi + /05+Jf9MiSf/S5Ip/0qbKv9Joyv/SKss/keyLP1Hui38R8It+0bLLflG1C33Rt8t9UXpLfNF8S3xRfgt + 70X+Le5F/yztRf8s7UX/LO1F/yztRf8s7UX/LO1F/yz/VRoE/00lB/9PKgn/Vi0L/1w2Dv9eQBL/XUsW + /1pWG/9XYyD/VHAk/1J8J/9Qhin/T5Ar/U2ZLfxMoS77S6gv+kuwMPlKuDD4SsAx90nJMfZJ0jH0Sd4x + 8UjoMu9I8TLtSPkx60j/MepI/zDqSP8v6kj/L+pI/y/qSP8v6kj/L+pI/y//VhkE/08lB/9SKAn/WywK + /2A0Df9jPhH/YkkW/15TG/9cYCH/WW0l/1Z5Kf1UhCz7U40u+VGWMPhQnjL3T6Yz9k6tNPVOtTX0Tb41 + 80zHNvJM0TbvS9437UvoN+pL8TfoS/k350v/NeZM/zTlTP8z5Uz/M+VM/zPlTP8z5Uz/M+VM/zP/VxgE + /1AkB/9WJgj/XyoK/2UyDf9oPBH/Z0YW/2RRHP9hXCL+Xmon+lx2K/hZgC/2V4oy9FaTNfNUmzbxU6M4 + 8FKrOe9RsjruULs77VDFPOxPzz3qT9w9507nPuVO8T7jTvk94U//O+BQ/znfUf8431H/ON9R/zjfUf84 + 31H/ON9R/zj/WBgE/1EjB/9bIwj/ZSgJ/2swDP9tORD/bUMV/2tNHP1nWCL4ZWYp9WJyLvJffDPwXIY3 + 7lqPOuxYlzzrV58+6lanQOhVr0LnVLhD5lPCROVSzUXjUdtG4FHnR95R8UbcU/lD2lT/QddW/z7WVv89 + 1lb/PdZW/z3WVv891lb/PdZW/z3/WRcE/1MiB/9fIAf/aiYI/3AuC/9zNg//c0AU/XFKG/duVSPza2Iq + 72htMexkeDfpYYI851+LQOVdk0PkW5tG4lmjSOFYrErfVrVM3lW/Tt1Uy0/bU9pQ2FPmUdRV8U3SV/pK + 0Fn/R85a/0TOW/9Dzlv/Q85b/0POW/9Dzlv/Q85b/0P/WhYE/1cfBv9kHgb/byQH/3UrCf95Mw3/eT0T + 93hGGvF1USLscl0r6G5pM+VqdDviZn1B32OGRt1gj0vbXpdP2VufUtdaqFTVWbFV01i7VtJYyFfQWNVY + zlfkWMta8FTJXPpQx13/TcZf/0nGX/9Ixl//SMZf/0jGX/9Ixl//SMZf/0j/XBUE/1scBv9pHAb/cyIG + /3ooCP9+MAv6fzkR8n5DGOx8TSLmeVkr4nRlNd5wbz7aa3lG1meCTdNlilHRYpJUz2GaV81folnLXqtb + yV22XMhdwl7GXNBexFzgXsFd7lvAYPhXv2H/U71j/0+9ZP9OvWT/Tr1k/069ZP9OvWT/Tr1k/07/XRUE + /18aBf9tGgX/eCAF/38mBv+DLQn1hTYP7YU/FuaDSCDgf1Ur23phNtV1a0HRcXRJzW19T8pqhVTIaI1Y + xWaVW8NknV7BY6Zgv2KxYr5hvWO8YctkumDcZLhh62K3ZPZdtmb/WLVn/1S0aP9TtGj/U7Ro/1O0aP9T + tGj/U7Ro/1P/XhQE/2IXBf9xGQT/ex0E/4MjBfuIKgfxizIM6Is7E+GKRR3bhlIp1IBdNs57Z0HKd3BK + xnN5UcJwgVe/bYlbvWuQX7ppmWK4aKFktmasZrRluGiyZcZpsWXWaa5l52iuZ/RirWn+Xa1r/1isbP9X + rGz/V6xs/1esbP9XrGz/V6xs/1f/XxQE/2UUBP90FwP/fxsD/4cgBPeMJgXskC4J5JE2EN2QQhnVjE4n + zoZaNciBZEHDfG1Lvnh1Urt1fVi3coVdtXCMYbJulGWwbJ1nrWunaqtqs2ypacFtqGnSbqZo5G2la/Nn + pW39YqVv/1ylb/9bpW//W6Vv/1ulb/9bpW//W6Vv/1v/XxMD/2gSBP93FQP/ghkC/4sdAvORIwPplSoG + 4JcyDNiWPxbQkEwmyYtXNMKGYUG9gWpLuH1yU7R6eVmwd4FfrXSJY6tykWeocJlqpW+jbaNur2+hbb1w + n23OcZ1s4XGdb/FrnnH8ZZ5z/1+ec/9ennP/Xp5z/16ec/9ennP/Xp5z/17/YBMD/2sRA/96EwL/hRYB + /Y4aAfCUHgLlmSUE3J0tCNOaPBXLlUklxI9UM72KXkC3hWdKsoFvU65+dlqqe35fp3mFZKR3jWihdZZs + nnOgb5xyq3GacblzmHHKdJZw33SWcu9ul3X7aJd3/2KXd/9hl3f/YZd3/2GXd/9hl3f/YZd3/2H/YRMD + /24QA/99EgH/iBMB+pEWAOyYGgHinh8C2aEqBc+eOhPHmUcjv5NSMrmOXD+zimVKrYZsU6mCdFqlgHtg + oX2CZZ57immbeZNtmHeccJV2qHOTdbZ1kXXHdo903HaPdu5xkHj6a5F6/2WRev9jkXr/Y5F6/2ORev9j + kXr/Y5F6/2P/YhID/3AOAv9/EAH/ihEA95QSAOmbFADeohkA1KQoBMyhOBLDnEUivJdQMbSSWj6ujmJJ + qYpqUqSGcVmghHlgnIGAZZh/h2qVfZBuknuacY96pXSMebN3innFeIl42niJeux0inz5bYt9/2eLff9l + i33/ZYt9/2WLff9li33/ZYt9/2X/YhID/3MNAv+BDQH6jQ0A7ZYMAOWfDQDbphAA0aglA8ilNhDAoEMg + uJtOMLCWWD2qkmBIpI5oUZ+Lb1mbiHZfl4V9ZZODhWqPgY1ujICXcol+o3WGfbF4hH3CeYN92HqDfet2 + hH/5b4WA/2mFgP9nhYD/Z4WA/2eFgP9nhYD/Z4WA/2f/YxED/3ULAf+ECwDxjwkA4ZkHANmiBwDWqQoA + zqsjAsWoNA+8pEEftJ9MLq2aVjymll5HoJJmUZuPbViWjHRfkop7ZY6Hg2qKhotvhoSVc4OCoHaAga95 + foHAenyB1Xt8gep3foP4cX+E/2p/g/9pf4P/aX+D/2l/g/9pf4P/aX+D/2n/Zg8D/3gKAf2GCADnkgUA + 2ZwEANWkBQDSrAcAyq4gAsGsMg25qEAdsKNKLKmeVDqimlxGnJdkT5aUa1iRkXJejY55ZYmMgGqFiolv + gYmTc32HnnZ6hqx5eIa+e3aG03t2hul4eIj4cnmI/2t6h/9qeof/anqH/2p6h/9qeof/anqH/2r/aAwC + /3oIAfWJBQDclQAA1Z8DANGnBADOrwQAxrEeAb2wMAy1rD4brKdIKqWjUjien1pEl5xhTpKZaVaNlm9d + iJR3ZIOSfml/kIZue46Qc3eNnHZ0jKp5cYy8e2+M0Xtvi+h5co33c3OM/2xzjP9rc4z/a3OM/2tzjP9r + c4z/a3OM/2v/awkC/34FAOqMAQDZmAAA0aICAMyqAgDJsgIAwbUaALm0LgqwsDsZqKxGKKCpTzaZpVdC + k6JfTI2fZlSHnG1cgpp0Yn6YfGh5loRtdZWOcnGUmXVtk6h4apK6emiSz3pokud5apP3c2yS/2xtkv9r + bZL/a22S/2ttkv9rbZL/a22S/2v/bwYB/4ECAN6PAADUmwAAzaUAAMiuAQDDtgAAvLoWALS5KwistjkW + o7JEJZuvTTOUq1U/jalcSYemY1KCpGpZfaJyYHigeWZznoFrbp2Lb2qcl3Nmm6V2Y5u4eGGbznhgmud3 + Y5v3cmWZ/2xlmf9qZZn/amWZ/2plmf9qZZn/amWZ/2r/cwIB84UAANqTAADPnwAAyKkAAMKyAAC9ugAA + tr4RAK++JwWmvDYSnrlBIZa2Si+Ps1I7iLBaRYKuYU58rGhVd6pvXHKpd2Jtp39naKaJbGOllXBfpaNy + XKS2dFqlznVZpOd0W6T4b16i/2peof9pXqH/aV6h/2leof9pXqH/aV6h/2n/eAAA4YoAANSYAADLpAAA + w64AAL23AAC2vgAAr8QKAKjFIgOgwzIPmME9HZC+RyqJvE82grpXQHy4Xkl2tmVQcLVsV2uzdFxmsn1i + YbGHZl2wk2pZsKJtVbC1blOwzm9Sr+huVK/5a1at/2ZWrP9lVqz/ZVas/2VWrP9lVqz/ZVas/2X8fgAA + 248AAM6dAADFqQAAvrMAALe8AACvwwAApsoEAKDMHAGZyy0Kkck5F4nIQySCxkwve8RUOXXDW0JwwWJJ + asBqT2W/clVgvntaW76FXle+kmJTvaFkUL61Zk2+zmdMvepmTbz7Y0+6/2BPuf9fT7n/X0+5/19Puf9f + T7n/X0+5/1/lhQAA05YAAMijAAC/rwAAuLkAAK/BAACnyAEAns8FAJfUEwCR1CcGidM0EYLSPxx70Ugn + dc9QMW/PWDlpzl9AZM1nRl/Nb0tazHhQVcyDVFHMkFdNzaBaSs21W0jO0FxHzetbR8z6WUjK/1dIyP9X + SMj/V0jI/1dIyP9XSMj/V0jI/1fcjQAAzJ0AAMGqAAC5tQAAsb8AAKfHAACezQEAlNQFAI3dEQCH3iME + gd4wDHrdOhV03UQebd1MJmjcVC5j3Fw0XtxkOlncbD9V3HVDUNyAR0zdjUpJ3Z1MRt6yTUTfzE5D3ulN + Q935TULb/0tC2/9LQtv/S0Lb/0tC2/9LQtv/S0Lb/0vSlgAAxKUAALuxAACyvQAAqMYAAJ7MAACT0gAA + itkEAIPmFgF95yQFd+cvC3DnOBJq6EAYZOhHHmDoTyNb6FgoWOlgLFTpaDBQ6XEzTep7NknrhzlG65Y7 + Q+ynPUHtvT4/7tk+Pu7wPj3q/z096v89Per/PT3q/z096v89Per/PT3q/z3InwAAva0AALS6AACqxAAA + nssAAJPRAACI1wAAf+YFAHnwFgFy8SIFbPEsCWbyNQ5h8z0SXPNEF1f0SxpT9FIdUPVaIE31YiNK9mol + RvZ0KEP3fypA94ssPviaLTv5rC85+sAvOPvYMDf78TA2+/cwNvv3MDb79zA2+/cwNvv3MDb79zC/qQAA + tbYAAKvCAACfygAAk9AAAIfWAAB83AAAc/IFAG36FAFn+x8EYfwoB1z9MApX/TgNU/4+EE7/RRJL/0sU + R/9SFkT/WRhB/2EaPv9pHDv/cx04/34fNf+LIDP/mSEx/6kiMP+6Iy7/0SMu/9kjLv/ZIy7/2SMu/9kj + Lv/ZIy7/2SO3swAArcAAAKHJAACU0AAAhtUAAHrbAABv4AAAZ/oCAGH/DgFb/xkCVv8iBFH/KgZM/zEI + SP83CkT/PQxB/0MNPf9JDzr/TxA3/1YRNP9dEjH/ZRMu/28VK/96Fij/hhcm/5MYJP+gGCL/sRki/7UZ + Iv+1GSL/tRki/7UZIv+1GSL/tRmvvQAAo8gAAJXPAACH1AAAedoAAG3fAABi5wAAW/8AAFT/BwBO/xIB + Sf8aAkT/IgRA/ygFPP8uBjn/NAc1/zkIMv8+CS//Qwos/0kKKP9PCyX/Vwwi/18NH/9oDhv/cg8Y/30P + Fv+IEBT/lRAU/5gQFP+YEBT/mBAU/5gQFP+YEBT/mBClxgAAl84AAIjUAAB52gAAbN8AAF/kAABU8AAA + Tf8AAEf/AABB/wgAPP8RATf/GAIz/x4DMP8kAyz/KQQo/y0EJf8xBSL/NgYe/zsGG/9ABxj/RwcV/04I + Ef9WCA3/XgkK/2cJB/9wCgT/egoD/30KA/99CgP/fQoD/30KA/99CgP/fQr/Rh4E/z0qB/9BLQj/Ri8J + /0o4C/9LQg7/S04S/0daFf9EZxf/QXMa/z9/G/89iRz/PJMd/zubHv86ox7/Oqoe/zqxH/85uB//OcAf + /jnIH/040R77ONwe+DjmHvY47x70OPYd8jj9HfE4/xzwOP8c8Dj/HPA4/xzwOP8c8Dj/HPA4/xz/Rx4E + /z4qB/9EKwj/SS0J/042C/9PQA7/TkwS/0xYFf9IZRj/RXEb/0N9Hf9Bhx7/QJEf/z+ZIP8+oSD/Pqgh + /j2vIf09tiH8Pb4h+zzHIfo80CH3PNsh9TvmIfM77iDwO/Yg7zv9IO47/x/tO/8f7Tv/H+07/x/tO/8f + 7Tv/H+07/x//SB4E/z8pB/9HKQf/TSsJ/1I1C/9UPw7/U0oS/1BWFv9NYxn/Sm8c/0d6Hv9FhSD/RI4h + /UOXIvxCniP7QqYj+kGtJPlBtCT4QLwk90DFJPZAziT0P9ok8T/lJO8/7iTsP/Yk6z/9I+o//yPpP/8i + 6T//Iuk//yLpP/8i6T//Iuk//yL/SR0E/0EoBv9LJgf/UioI/1czC/9ZPA7/WEcS/1VTFv9SXxr/T2wd + /013IPxLgiL6SYsk+UiUJfdHnCb2RqMn9UaqKPRFsijzRbop8kTDKfFEzCnvQ9gp7EPkKepD7innQ/Yp + 5kP9KOVE/yfkRP8m5ET/JuRE/ybkRP8m5ET/JuRE/yb/ShwE/0UlBv9PIwf/WCgI/10wCv9fOg3/XkQR + /1tPFv9YXBv9VWgf+VJ0I/dQfiX1T4go802QKfFMmCvwS6As70qnLe5Kry7tSbcu7EnAL+tIyi/pSNYv + 5kfjMONH7TDhSPYv4Ej9Ld9J/yzdSv8r3Ur/K91K/yvdSv8r3Ur/K91K/yv/SxsE/0oiBv9UIAb/XiYH + /2MuCf9lNwz/ZUER/2JMFvteVxv3W2Qh81lwJfBXeinuVIQs7FOMLupRlTDpUJwy6E+kM+ZOqzTlTbQ1 + 5E29NuNMyDfiTNU430viONxL7TjaTfc12E7+M9VP/zLTUP8w01D/MNNQ/zDTUP8w01D/MNNQ/zD/TRsE + /04fBf9ZHQX/YyMG/2krCP9sNAv/bD4Q+2lIFfVmUxzwY18i7GBrKOlddiznWn8x5FiINOJWkDfhVZg5 + 31OgO95SqD3dUbE+21C6QNpPxkHYT9NB1U/iQdJQ7T/QUvc8zVP+OsxU/zjLVf82y1X/NstV/zbLVf82 + y1X/NstV/zb/ThoE/1McBf9fGgX/aSEF/28oB/9yMAr9cjoO9XBEFO9tThvqalsj5WdnKuJjcTDfYHs1 + 3F2EOtpbjD7XWZRB1VecQ9NWpEXSVaxG0FW2R89UwUjNVM5Jy1TeSchV60fGV/ZDxVj/QMNZ/z7CWv87 + wlr/O8Ja/zvCWv87wlr/O8Ja/zv/TxkE/1cYBP9kGAT/bh4E/3QlBf94LQj3eTYM73c/Euh1ShrjcVci + 3m1iK9ppbTPVZnY60mN/P9Bgh0PNXo9Gy12WSMpcnkrIW6dMxlqwTsRZvE/DWclPwVnZUL9Z50+9W/RK + u1z9R7pe/0O5X/9BuV//Qblf/0G5X/9BuV//Qblf/0H/URkE/1sVBP9oFwP/cxwD/3kiBPx9KQbyfzEJ + 6X47D+N8RRfdeVMh1nReK9FwaDXNbHI8yml6QsdmgkbEZIpKwmKRTcBhmU++YKJRvF+rU7petlS5XcRV + t13TVrVc5FazX/FRsmH8TLFi/0mxY/9GsWP/RrFj/0axY/9GsWP/RrFj/0b/UhgE/14SA/9tFAL/dxkC + /34eAveCJQTthC0H5IU2DN2DQhTWf08fz3paK8p2ZTXGcm09wm92RL5sfkm8aYVNuWiNULdmlVO1ZJ1W + s2OmWLFisVmvYr9brmHOW6th4FuqY+9XqmX6Uqlm/02pZ/9KqWf/Sqln/0qpZ/9KqWf/Sqln/0r/UxgE + /2IPA/9wEgL/ehYB/4IaAfOHIALoiigE4IswCNiJPhHQhUseyYBXK8R7YTW/d2o+u3RyRbdxeku0b4FP + sWyJU69rkFasaZlZqmiiW6hnrV2mZrpfpWXKYKNl3WCiZ+1coWn5VqFq/1Kha/9OoWv/TqFr/06ha/9O + oWv/TqFr/07/VRUD/2UNAv9zEAH/fhMB/IUWAO+LGwHkjyIC25ErBNKOOw/LikkdxIVUKr6AXjW5fGc+ + tHlvRrB2dkytc35RqnGFVadvjVilbZVcomyeXqBrqWGearZinGnGY5tp2WSaautgmmz3Wppu/1Wab/9R + mm//UZpv/1Gab/9Rmm//UZpv/1H/WBMD/2gMAv92DQH/gRAA+YgRAOuOFQDgkxoA1pUnAs6SOQ7GjkYc + v4lRKbmFWzSzgWQ+rn1sRqp6c0yneHtRpHWCVqFziVqecpJdm3CbYJlvpmOXbrNllW7DZpNt1WeSbuhk + k3D2XZNy/1iUc/9UlHP/VJRz/1SUc/9UlHP/VJRz/1T/WhED/2sKAf95CwD6gwsA7osMAOeSDQDclxEA + 0pklAsqWNg3CkkQbu41PKLSJWTSuhWI9qYFqRaV+cUyhfHhSnnp/Vpt4hluYdo9elXSYYpJzo2WQcrBn + jnHAaIxx0mmLcudnjHT1YI11/1uOdv9Wjnb/Vo52/1aOdv9Wjnb/Vo52/1b/XQ8C/24JAf97CQDxhggA + 4o4GANqVBwDYmgoAz5wiAcaaNAu+lkIZt5FNJ7CNVzOqiV89pYVnRaCCbkycgHVSmX58V5V8hFuSeoxf + j3iVY4x3oGaKdq1piHW9aoZ10GuFdeVphnf0Yod5/12Iev9YiHr/WIh6/1iIev9YiHr/WIh6/1j/Xw0C + /3AHAf1+BgDoiAQA2pEDANWXBQDTnQcAy58gAcOdMgq7mUAYs5VLJayRVTGmjV08oYplRJyHbEuYhHNR + lIJ6VpCAgVuNfolginyTZId7nWeEeqpqgnm7a4B5zmx/eeRrgHvzZIJ8/l+Dff9ag33/WoN9/1qDff9a + g33/WoN9/1r/YQoC/3MFAPaAAwDeiwAA1pMCANKaBADPoAUAx6IdAL+hMAm3nT4Wr5lJJKiVUzCikVs6 + nI5jQ5eLakuTiHFRj4Z4VouEf1uIgodghIGQZIF/m2h+fqhrfH64bHp9zG15feJte3/zZnyA/mB9gf9c + fYH/XH2B/1x9gf9cfYH/XH2B/1z/ZAgB/3UDAO2CAADajQAA05YBAM6dAgDLowMAw6UaALukLgezoTwU + q51HIqSZUS6elVk5mJJhQpOPaEqOjW9Qiot2VoaJfVuDh4Vgf4aOZHuEmWh4g6ZrdoK2bXSCym5yguFu + dIPyZ3aE/mF4hf9deIX/XXiF/114hf9deIX/XXiF/13/ZgUB/3gBAOKFAADXkAAAz5kAAMqgAQDGpgEA + v6kWALeoKwavpToSqKFFIKCeTyyamlc3lJdfQY+VZkiKkm1PhZB0VYGOe1t9jYNgeYuMZHaKl2hyiaRr + b4i0bW2IyG5sh+BubojxaHCJ/mJyiv9dcor/XXKK/11yiv9dcor/XXKK/13/agIB+nsAAN2IAADTkwAA + zJwAAMajAADBqQAAuq0TALOsKASrqjcQo6ZDHZyjTCqVoFU1j51cPoqbY0eFmGpOgJZxVHyUeFl4k4Be + c5GJY2+QlGdsj6JqaY6ybGeOxm1ljt9tZ47xZ2mP/mJrj/9ea4//XmuP/15rj/9ea4//XmuP/17/bQAA + 734AANmMAADPlwAAyKAAAMGnAAC8rQAAtbENAK6xJQOmrzQOn6xAGpepSieQplIyiqRaO4WhYUR/n2hL + e51vUXacdldymn5cbZmHYWmYkmVll59oYpawamCWxWtelt5rYJbxZmKW/mFklv9dZJb/XWSW/11klv9d + ZJb/XWSW/13/cgAA4YMAANSQAADLmwAAw6QAALysAAC2sgAArrYIAKi3IAGhtTELmbM9F5KwRyOLrk8u + hatXOH+pXkB6p2VHdaZsTXCkc1Nro3xYZ6KFXWKhkGFeoJ1kW6CuZlmgxGdXn95nWZ/xY1uf/19cnv9b + XJ7/W1ye/1tcnv9bXJ7/W1ye/1v8dwAA3IgAAM+VAADGoAAAvqkAALewAACwtgAAp7wBAKG9GwCavCwH + k7s5E4y4Qx6Ftkwpf7RUMnmzWzp0sWJCb7BpSGqucU5lrXlTYKyDV1yrjltYq5xeVautYVKrw2FRqt5h + UqnyX1Op/1tVqP9YVaj/WFWo/1hVqP9YVaj/WFWo/1jpfQAA1Y0AAMmbAADApQAAua4AALG2AACpvAAA + oMEAAJnEEwCTxCcEjMM1DoXCPxh/wEkjeb5RLHO9WDNuvF86aLtnQWS6b0ZfuXdLWriBT1a4jFNSt5tW + T7esWEy4w1lLuN9ZS7b0V0y1/1RNtP9STbT/Uk20/1JNtP9STbT/Uk20/1LfhAAAz5QAAMOhAAC7qwAA + s7QAAKq8AAChwQAAl8cBAI/MCQCKzR8BhM0vCH7MOhJ3y0QbcspNI2zJVStnyFwxYsdkN13HbDxZxnVB + VcZ/RVDGi0lMxplMScasTUfHxE5GxuFORcX2TUbE/0tGw/9KRsP/SkbD/0pGw/9KRsP/SkbD/0rWjAAA + x5sAAL2oAAC1sgAArLsAAKLCAACYxwAAjswBAIXSBQB/1hQAe9cnA3XXNApv1j8SatZIGmXVUCBg1Vgm + W9VgLFfVaTBT1XI1T9V8OEvViTxH1Zg+RNarQELXxUFB1+JAQdX0QEDU/z9A0v8/QNL/P0DS/z9A0v8/ + QNL/P0DS/z/MlQAAwKMAALevAACuuQAApMEAAJnHAACOzAAAhNEAAHvYBQB14RQAcOIkA2viMAdm4joN + YeJCElzjSxdY41McVONcIFHjZCNN5G0nSuR3Kkblgy1D5ZEvQOajMT7nuTI86NQyO+fuMjvk/zE64/8y + OuP/Mjrj/zI64/8yOuP/Mjrj/zLDnwAAuawAALC3AACmwQAAmscAAI7MAACD0QAAedYAAHDgBABr6xYA + ZuwjAmHtLQZc7TYJWO4+DVPvRRBP700TTO9VFknwXRhG8GUbQvFvHT/yeh888ochOvOWIzf0qCQ19b8l + NPXZJTP28CUy9P8lMvT/JTL0/yUy9P8lMvT/JTL0/yW7qQAAsrUAAKfAAACbxwAAj80AAILRAAB31gAA + bNwAAGXvBABg9hMAW/cfAlb4KARS+TEGTvo4CEr6PwpG+0YMQ/tMDkD8VBA8/FwROf1kEzb+bhUz/noW + MP+IGC7/lxkr/6gaKv+8Gin/0Rso/+cbKP/nGyj/5xso/+cbKP/nGyj/5xuzsgAAqb4AAJ3HAACQzQAA + gtEAAHbWAABq3AAAX+AAAFn4AQBU/w0AT/8YAUv/IQJG/ykDQv8wBT//NwY7/zwHOP9CCDX/SQkx/1AL + Lv9XDCv/YA0o/2sOJP92DyH/hBAf/5IRHf+hERz/sRIb/8ESG//BEhv/wRIb/8ESG//BEhv/wRKrvAAA + n8YAAJHMAACD0QAAddYAAGjcAABd4AAAUugAAEz+AABH/wYAQv8QAD7/GAE6/yACNv8mAjP/LAMv/zEE + K/82BCj/PAUl/0IGIv9JBh7/UQca/1oIF/9kCRP/bwkP/3wKDf+ICwz/lAsK/6ALCv+gCwr/oAsK/6AL + Cv+gCwr/oAuhxAAAk8wAAITRAAB21wAAaNwAAFvhAABP5QAARfIAAD//AAA5/wAANf8FADD/DQAs/xUB + Kf8bASX/IAEh/yQCHv8pAhr/LgIX/zMDE/85AxD/QAQL/0gEB/9RBQP/WgUA/2UGAP9vBgD/eQYA/4MH + AP+DBwD/gwcA/4MHAP+DBwD/gwf/OSIE/zItBv84Kwb/Oy4H/z83Cf9AQgv/Pk0N/ztaEP83ZhL/NHIT + /zJ+FP8wiBX/L5EV/y+ZFf8uoBX/LqcV/y6uFf8ttRX/LbwV/y3FFf0tzhT7LdgU+S3iE/Ys7BP0LPQS + 8iz7EvEs/xHwLP8R8Cz/EfAs/xHwLP8R8Cz/EfAs/xH/OiIE/zQrBv87KQb/PiwH/0M1Cf9EQAv/Q0sO + /z9YEP88ZBL/OXAU/zZ7Ff80hhb/NI8W/zOXF/8znxf/MqUX/jKsF/0ysxf8MbsX+zHDF/oxzBb4MdYW + 9jDiFvMw6xXxMPQV7zD7FO4w/xTtMP8U7TD/FO0w/xTtMP8U7TD/FO0w/xT/OyEE/zcoBf8+Jwb/QyoH + /0gzCP9JPgv/SUkO/0VVEP9CYhP/P24V/zx5F/86gxj/OYwY/TiVGfw4nBn7N6MZ+jeqGfk2sRn4NrgZ + 9zbBGfY2yhn0NtQZ8TXhGe816xjsNfMY6jX7F+k1/xfpNf8X6DX/F+g1/xfoNf8X6DX/F+g1/xf/PCEE + /zsmBf9DJAX/SSgG/04xCP9POwv/TkYO/0xSEf9IXhT/RWoW/kJ2GPxAgBr6P4kb+D6RHPY9mRz1PaAd + 9DynHfM8rh3yPLYd8Tu+HfA7yB3vO9Id7DvgHek76h3mO/Mc5Tv7HOQ7/xvjO/8b4jv/G+I7/xviO/8b + 4jv/G+I7/xv/PSAE/z8iBf9IIAX/UCUG/1UuB/9WOAr/VUIN/1NOEf9PWhX7TGYY+ElyGvVHfBzzRoYe + 8UWOH/BEliDuQ50h7UKkIexCqyLrQrMi6kG8IulBxiPoQNEj5UDeI+JA6SPgQPMi3kH8Id1B/yHaQ/8g + 2kP/H9pD/x/aQ/8f2kP/H9pD/x//Px8E/0QfBP9NHAT/ViMF/1wrB/9dNQn/XT8N/1pKEflWVhX1U2IZ + 8VFuHO5OeB/sTYEi6kuKI+hKkiXnSZkm5UigJ+RIqCjjR7Ap4ke5KeBGwyrfRs8q3UXdK9pF6SrYRvMp + 1Ef8J9JI/ybRSf8l0Un/JdFJ/yXRSf8l0Un/JdFJ/yX/QB8E/0kbBP9TGQT/XSAE/2IoBf9kMQj/ZDsL + +WFFEPNdUBXuWl0a6lhpH+ZVdCLkU30m4lKGKOBQjSveT5Us3E6dLttNpC/aTK0x2Eu2MtZLwTLVSs0z + 00rbM9BL6DLNTPQwy038LslO/yzITv8qyE7/KshO/yrITv8qyE7/KshO/yr/QR4E/04XA/9ZFwP/Yx0D + /2kkBP9rLQb6azYK8mlBDuxlTBTmYlka4l9kIN5dbyXbWngq2FeBLtZWiTHUVJAz0lOYNdBSnzbPUac4 + zVGxOcxQuzrKUMc6yVDVO8ZQ5TrDUfE3wlL7NcBT/zK/VP8wvlT/L75U/y++VP8vvlT/L75U/y//RRsE + /1ITA/9fFQL/aBoC/24hA/5xKQT0cjIH7HA8DOVtRxLfalQa2mdgIdVjaijSYHMuz158MsxchDXKWos4 + yFmTO8ZYmjzEV6I+w1arP8FWtkDAVcJBvlXQQrxU4UK6Vu8/uFf5O7dY/zi2Wf81tln/NbZZ/zW2Wf81 + tln/NbZZ/zX/SRgD/1YQAv9kEgL/bRcB/3MdAvl3JAPueCwF5nc2Cd91Qg/YclAY0m5bIs1qZirJZ28w + xmR3NcNifznAYIY8vl+OP7xdlUG7XJ1DuVumRbdasEa1Wr1ItFnLSLJZ3UiwWuxFr1z4Qa5d/z6tXv87 + rV7/Oq1e/zqtXv86rV7/Oq1e/zr/TRUD/1oMAv9oEAH/chMB/3gYAfN8HgHpfiYC4H4wBtl8PgzReEwX + y3RYIsZwYivBbWsyvmpzN7toezy4ZoJAtmSJQ7NikEWxYZhIr2ChSq5frEysXrhNql7HTqle2E6nXulM + pmD2R6Vh/0OlYv8/pWP/PqVj/z6lY/8+pWP/PqVj/z7/UBIC/14KAf9sDQD/dRAA/HwTAO+AGADkgx8B + 24MqAtKCOwvLfkgWxXpUIb92Xiu7cmcyt29vObNtdz6wa35CrmmFRatnjEipZpRLp2SdTqVjp1CjY7RR + oWLCUqBi1FOeYuZRnmT0S55m/kedZ/9DnWf/Qp1n/0KdZ/9CnWf/Qp1n/0L/UxAC/2IIAf9vCgD9eQsA + 838NAOqEEQDfhxYA1YgmAc2GNwrGg0UVv39RIbl7Wyq0d2QzsHRsOa1ycz+pb3pDp26BR6RsiUuiapFO + n2mZUJ1opFObZ7BVmWa/Vphm0FeWZuRWlmjyT5Zq/UuWa/9Glmv/RZZr/0WWa/9Flmv/RZZr/0X/VQ0C + /2UHAf9yBwDzewcA5oIHAN6HCADbigsA0YwjAcmLNQjBh0MUuoNOILR/WCqvfGEyq3lpOad2cD+jdHdE + oHJ+SJ5whUybb41PmG2WUpZsoFWUa6xXkmq7WZBqzVqPauFZj2zxU49t/E6Qbv9JkG//SJBv/0iQb/9I + kG//SJBv/0j/WAoB/2gFAP11BADpfgIA24UCANeKBQDVjggAzZAgAMWPMge9i0ATtohMH7CEVimqgF8y + pn1nOaF6bj+eeHVEm3Z7SZh0g02Vc4pRknGTVJBwnVeNb6lZi264W4puylyIbd9ciW/wVolx+1CKcv9M + inL/Sopy/0qKcv9KinL/Sopy/0r/WggB/2sDAPZ3AQDegQAA2IgBANONAwDQkQUAyZMcAMGSMAa5jz4S + sotKHauIVCimhFwxoYFkOZ1+az+ZfHJElXp5SZJ4gE2Pd4hRjXWQVYp0m1iHc6dbhXK2XYNyyF6Cct1e + gnPuWIN0+lOEdf9OhHb/TIR2/0yEdv9MhHb/TIR2/0z/XQUB/20BAO55AADcgwAA1IsAAM+QAgDMlAMA + xZYZAL2WLQW1kzwQro9HHKiMUSeiiFownYViOJiCaT6UgHBEkH52SY19fk2Ke4VSh3mOVoR4mFmCd6Rc + f3azXn12xl98ddtffXfuWn54+lR/ef9Pf3n/Tn95/05/ef9Of3n/Tn95/07/XwMB/3AAAOV8AADZhgAA + 0Y4AAMuTAQDIlwEAwZoWALmZKwSxlzoPqpNFG6SQTyWejFgvmYlgN5SHZz6QhG5DjIJ0Sf/i8ABJQ0Nf + UFJPRklMRQAIComBe02Ff4NSgn6MVn98llp8e6JdenqxX3h6xGB2etpgd3rtW3h8+VZ6fP9Renz/T3p8 + /096fP9Penz/T3p8/0//YgAA/HIAAN9/AADViQAAzZEAAMiWAADDmwAAvZ0TALWdKAOumzcNp5dDGaCU + TSSakVYtlY5eNpCLZT2LiWxDiIdzSISFeU2AhIFSfYKKVnmBlFp2gKBddH+vX3J/wmFwfthhcX/sXHOA + +Vd0gf9SdIH/UHSB/1B0gf9QdIH/UHSB/1D/ZAAA9HUAANyCAADRjAAAypQAAMSaAAC/ngAAuKAPALGh + JQKqnzULo5xBF5yYSyKWlVQskJNcNIuQYzuHjmpCg4xwR3+Ld017iX9Rd4iIVnSGklpwhZ5dboStX2uE + wGFqhNZhaoTrXWyF+Vduhf9SboX/UW6F/1Fuhf9RboX/UW6F/1H/aAAA6XgAANiFAADOjwAAxpcAAMCd + AAC6ogAAs6QLAK2lIgGlozIJnqE/FJeeSR+Rm1EpjJhZMoeWYDmClGdAfpJuRnqRdUt2j31Qco6FVW6N + kFlqi5xcZ4urXmWKvmBjitRgZIrqXWaK+Fdoi/9TaIv/UWiL/1Foi/9RaIv/UWiL/1H/bAAA4XwAANSJ + AADKkwAAwpsAALyhAAC1pgAArqkGAKeqHgCgqS8HmaY8EpOkRhyMoU8mh59WL4KdXjd9m2U9eJlrQ3SY + c0lwlnpObJWDUmiUjVZkk5paYZKpXF6SvF5dktNeXZHqW1+R+VZhkf9SYZH/UWGR/1Fhkf9RYZH/UWGR + /1H6cAAA3YEAAM+NAADGmAAAvqAAALemAACwqgAAp64AAKGvGQCbrysFlK04Do2rQxmHqUwigaZUK3yl + WzN3o2I5c6FpP26gcEVqn3hKZp2BT2Gci1NdnJhWWpuoWVebu1pWm9NaVprqWFia+VRZmv9QWpn/T1qZ + /09amf9PWpn/T1qZ/0/qdgAA14YAAMqSAADBnQAAuaUAALKrAACqsAAAoLQAAJm1EgCUtiYCjrQ0Coez + PxSBsUgde69RJnauWC1xrF80batmOmiqbj9kqXZEX6h/SVunik1XppZQVKamU1GmulRPptJUT6TrU1Ck + +lBSo/9MUqP/S1Kj/0tSo/9LUqP/S1Kj/0vhfAAA0IwAAMWYAAC8ogAAtKoAAKywAACjtQAAmrkAAJG8 + CQCMvR8Bhr0vBoC8Ow97ukUXdblNH3C4VSdrt1wtZrZkM2K1azhdtHM9WbN9QVWziEVRspVITrKlS0uy + ukxJstNMSbHsS0qw+0lKr/9GS67/Rkuu/0ZLrv9GS67/Rkuu/0bahAAAypMAAL+eAAC3qAAAr7AAAKa3 + AACcuwAAkr8AAIfEAQCCxhYAfsYoA3nGNQlzxUAQbsRJGGnDUR5kwlkkYMJgKlzBaC5XwXEzU8B7N0/A + hjtLwJM+SMCkQEbAuUFEwNRBQ7/uQUO9/T9DvP8+RLz/PkS8/z5EvP8+RLz/PkS8/z7QjAAAw5oAALml + AACxrwAAqLcAAJ69AACTwQAAicUAAH/KAQB3zwkAc9AeAG/QLQRq0DkJZtBDD2HPTBVdz1QaWc9cH1XP + ZSNRz24nTc94K0nPgy5Gz5ExQ8+jM0DQuTQ/0NY0Ps7uND3N/DQ9y/80Pcv/Mz3L/zM9y/8zPcv/Mz3L + /zPIlQAAvKIAALOtAACqtgAAoL0AAJXCAACJxgAAf8oAAHXPAABs1QUAZtsSAGPcIwFg3TEEXN08CFjd + RgxU3U8QUd1XFE3eYBdK3mkbR95zHkPffyFA340jPeCeJTvgsyY54c4mOeDrJTfe+iY23f8nNt3/Jzbd + /yc23f8nNt3/Jzbd/ye/nwAAtasAAKy1AACivQAAlsMAAIrIAAB+zAAAdNAAAGrVAABh2wMAXeYUAFnn + IgFW6C0DUuk2BU7pPwdK6kcKR+pPDETqVw9B62ARPuxqEzvsdhU47YMXNe6SGTPupBox77sbMPDYGy/w + 7xsu7f8aLuz/Gi7s/xou7P8aLuz/Gi7s/xq3qAAArrMAAKS9AACYxAAAi8kAAH7NAABy0QAAaNUAAF7b + AABW6QIAUvIRAE7zHQBL9CcBR/UwA0T1OARA9j8GPfZGBzr3Tgg3+FYKNPhfCzD5aQ0t+nUOKvqDECj7 + kxEm/KYSJP27EiP+0xIi/uwSIf7yEiH+8hIh/vISIf7yEiH+8hKwsQAAprwAAJnEAACMyQAAfs4AAHLS + AABm1gAAW9wAAFHgAABL9AAARv4LAEL/FgA//yAAO/8nATj/LgI0/zUDMf87Ay7/QgQr/0kFJ/9RBiT/ + Wwcg/2UIHf9yCRr/gAoY/5AKFv+hCxT/sgsT/8cME//ODBP/zgwT/84ME//ODBP/zgyouwAAm8QAAI3K + AAB/zgAAcdMAAGTYAABY3QAATeEAAEPnAAA++wAAOf8DADX/DQAy/xYALv8dACv/IwEn/ykBJP8uASD/ + NAId/zsCGf9CAxb/SgMS/1QEDv9fBAr/awUG/3kGBP+HBgL/lQYB/6QHAf+pBwH/qQcB/6kHAf+pBwH/ + qQeewwAAkMoAAIHPAABy1AAAZNoAAFfeAABK4wAAP+cAADfxAAAx/wAALP8AACj/AgAk/wkAIf8RAB3/ + FwAZ/xsAFf8gABL/JQAN/ysBCv8xAQb/OAEC/0ECAP9LAgD/VQIA/2EDAP9uAwD/eQMA/4YDAP+JBAD/ + iQQA/4kEAP+JBAD/iQT/LCcE/yosBP8vKgX/MSwF/zM1B/8zQQj/MU0K/y1ZC/8pZgz/JnIN/yR9Dv8i + hg7/Io8O/yGXDv8hng3/IaUN/yCsDf8gsg3/ILkM/yDBDP4fygz8H9ML+h/fC/ce6Qr1HvIK8h75CfEe + /wnwHv8J8B7/CfAe/wnwHv8J8B7/CfAe/wn/LSYE/y0pBP8yJwX/NCoF/zgzBv85Pwj/NkoK/zNXDP8v + Yw3/LG8O/yl6Dv8ohA//J40P/yeVD/8mnA//JqMP/iapDv0lsA78JbcO+yW/DvolyA34JdIN9iTdDPMk + 6AzxJPEL7iP5C+0k/wvtJP8L7CT/C+wk/wvsJP8L7CT/C+wk/wv/LiYE/zAmBP82JAT/OScF/z4xBv8/ + PAj/PUgK/zpUDP82YA7/M2wP/zB3EP8ughD/LooQ/S2SEfssmRH6LKAR+SynEfgsrhD3K7UQ9iu9EPUr + xhD0K88P8SrcD+4q5w7sKvAO6Sr5Dukq/w7oKv8O5yr/Ducq/w7nKv8O5yr/Ducq/w7/LyUE/zQiBP87 + IQT/QCUF/0UvBv9GOQj/RUUK/0FRDP8+XQ7/OmkQ/Th0Efs2fhL4NYcT9zSPE/U0lhP0M50T8zOkE/Iz + qxPxMrIT8DK6E+4ywxPtMs0T6zHbEugx5hLlMfAS5DH5EuMx/xLiMf8S4DP/EeAz/xHgM/8R4DP/EeAz + /xH/MCQE/zkfBP9AHQT/SCME/0wsBf9NNgf/TEEJ/0pNDP5GWQ/6Q2UR9kBwE/Q+ehTxPYMV7zyLFu47 + kxbsO5oX6zqhF+o6qBfpOq8X6Dm3F+c5wRfmOcwX5DjZF+A45RfeOfAX3Dn5F9o5/xfYOv8W1zr/Ftc6 + /xbXOv8W1zr/Ftc6/xb/NCEE/z4bA/9GGQP/TyAD/1QoBP9VMgb/VD0J/VFIDPdOVA/zS2AS70hrFOxG + dhbpRX8Y50SHGeZDjxrkQpYb40GdHOJBpBzgQKwd30C0Hd5Avh3dP8oe2z/YHtg/5R7VQPAd0kD5HdBB + /xzOQf8bzkH/G85B/xvOQf8bzkH/G85B/xv/OR4D/0MXA/9NFgL/Vh0C/1slA/9dLgX9XDgH9llDC/BW + Tw/rUlsS51BnFuNOcRnhTHob30uDHd1Kix/bSZIg2UiZIthHoSPWR6gj1EaxJNNGuyXRRcYl0EXTJs1F + 4ibKRu8lyEf5I8dH/yLFSP8hxEj/IMRI/yDESP8gxEj/IMRI/yD/PRoD/0kSAv9UFAL/XRkC/2IhAv9k + KQP3YzMG72E+CehdSQ7jW1YS31hiF9tWbBvYVHYf1FJ+ItJQhiTQT40mzk6UKM1OmynLTaMqykyrK8hM + tSzHS8EtxUvOLcNL3i7ATOwsvk33Kr1O/yi7Tv8mu07/JbtO/yW7Tv8lu07/JbtO/yX/QhYC/00OAv9a + EQH/YxYB/2gcAfpqJALwai0E6Gg4B+FlRAvbY1ER1mBdGNFdZx7OW3Eiy1l5JshXgSnGVogsxFWPLsNU + li/BU54xv1KmMr5SsDO8Ubs0u1HJNblQ2jW3UekztVL1MLNT/y6yU/8sslT/KrJU/yqyVP8qslT/KrJU + /yr/RhMC/1EKAf9fDQD/aBEA/20XAPVwHgHqcCcC4W8xBNpuPwjTa00RzmdZGclkYyDFYmwlwl90Kr9e + fC29XIMwu1uKMrlZkTS3WJk2tVehOLRXqzmyVrY6sFbEO69V1DytVeU6q1fzN6pY/TOpWf8xqVn/L6lZ + /y+pWf8vqVn/L6lZ/y//SQ8C/1YHAf9jCgD/bAwA/HERAO90FgDkdR4A23UqAdN0OgfMcUkQxm5UGcFr + XyG9aGgnumVwLLdjdzC0Yn4zsmCFNrBfjDmuXZQ7rFycPapbpj6pW7JAp1rAQaVa0EGjWuJBolvxPKJd + /DihXf81oV7/M6Fe/zOhXv8zoV7/M6Fe/zP/TQwB/1sFAP9nBgD5bwgA73UKAOl4DQDfeRQA1XslAM16 + NwbGd0UQwHRRGbtwWyG2bWQos2tsLa9pczKtZ3o2qmWBOahkiDymYpA+pGGYQKJgokKgX65Enl+7RZ1e + zEabXt9GmmDvQZph+j2ZYv85mWP/N5lj/zeZY/83mWP/N5lj/zf/UAkB/14DAP9qAwDucwMA4HgDANp8 + BQDZfQoA0H8hAMh/MwXBfEIPunlOGLV1WCGwcmEorHBpLqlucDOmbHc3o2p+O6FohT6eZ4xBnGaVQ5pk + nkaYZKpIlmO4SZVjyEqTYtxKkmTtRZJl+UGSZv89kmf/OpJn/zqSZ/86kmf/OpJn/zr/UwYB/2IAAPht + AADhdgAA2nwAANWAAwDTgQYAy4QdAMODMAS8gT8OtX1LF7B6VSCrd14op3RmLqNybTOgcHQ4nW57PJpt + gj+Ya4lClWqRRZNpm0iRaKZKj2e0TI1nxU2MZtlNi2frSYxp+ESMav9AjGr/PYxq/z2Mav89jGr/PYxq + /z3/VQMA/2QAAO9wAADdeQAA1YAAANGEAgDOhQQAx4caAL+HLgS4hTwMsYJIFqt+Ux+me1snonljLp52 + ajOadHE4l3N4PJRxf0CSb4ZDj26PR41tmEqKbKRMiGuxTodrwk+FatZQhWvqTIVt90aGbv9Chm7/P4Zu + /z+Gbv8/hm7/P4Zu/z//WAAA/2cAAOVzAADafAAA0oMAAM2HAADJiQIAwosXALuLKwO0iToLrYZGFaeC + UB6if1knnX1hLZl6aDOVeG84knd1PI91fECMc4REinKMSIdxlkuFcKFOgm+vUIBuwFF/btRSf2/oToBw + 9kiAcf9EgXH/QYFx/0GBcf9BgXH/QYFx/0H/WgAA/GoAAOB1AADWfwAAz4YAAMmKAADFjQAAvo4TALeP + KAKwjTgKqYpEFKOGTh2dg1cmmYFfLZR+ZjKRfGw3jXtzPIp5ekCHeIFEhHaKSIJ1k0x/dJ9PfXOtUXty + vlJ5ctJTeXLnUHpz9kp7dP9GfHX/Qnx1/0J8df9CfHX/Qnx1/0L/XAAA9WwAAN14AADTggAAy4kAAMaN + AADBkAAAupEQALOSJgGskDUJpY1CEp+KTByZiFUklYVdLJCDZDKMgWo3iX9xPIZ9eECDfH9Ff3qISXx5 + kUx6eJ1Pd3erUnV2vFNzdtBUc3bmUnV39Ux2eP9Hdnj/RHZ4/0R2eP9Ednj/RHZ4/0T/XwAA7G8AANp8 + AADQhQAAyIwAAMKRAAC8kwAAtpUMAK+WIwGolDMHoZE/EZuPShqWjFMjkYlbKoyHYjGIhWg2hINvO4GC + dkB+gH1Een+GSXd+j0x0fJtQcXypUm97ulRue85UbXvlU2989E1wfP9IcX3/RXF9/0Vxff9FcX3/RXF9 + /0X/YgAA5HIAANZ/AADNiAAAxY8AAL6UAAC4lwAAsZkIAKuZHwCkmDAGnZY9D5eTRxmRkVAhjI5YKYiM + Xy+EimY1gIhtOnyHdD95hntEdYSDSHKDjUxugplPbIGnUmmAuFRogM1UZ4DkU2mB9E1qgf9Ja4H/RWuB + /0Vrgf9Fa4H/RWuB/0X/ZgAA4HYAANOCAADJjAAAwZMAALqYAAC0mwAArJ0DAKaeGwCgnS0EmZs6DZOY + RRaNlk4fiJRWJ4OSXS1/kGQze45rOXeNcj5zi3lDcIqBR2yJi0toiJdOZYelUWOHtlNhhstTYIbjUmKG + 9E1khv9JZYb/RWWG/0Vlhv9FZYb/RWWG/0X2agAA3HoAAM+GAADFkAAAvZcAALacAACvnwAAp6EAAKCi + FwCaoikDlKA3Co6eQhOInEscg5pTJH6YWit6l2ExdpVoNnKUbztukndAapF/RWaQiUlij5VMX46jT1yO + tVFbjspRWY3iUVuN9Exdjf9IXo3/RV6N/0Vejf9FXo3/RV6N/0XnbwAA2H8AAMqLAADBlAAAuZwAALKh + AACqpAAAoKcAAJmoEQCUqCUBjqczCIilPxCDo0gYfaJQIHmgWCd0n18tcJ1mMmycbThom3Q8ZJl9QWCY + h0VcmJNJWJehS1aXs01UlslNU5biTVSV9ElWlf9GV5X/Q1eV/0NXlf9DV5X/Q1eV/0PidQAA0YQAAMaQ + AAC9mQAAtaEAAK2mAACkqgAAmqwAAJKuCQCNrx8AiK4vBYKtOwx9q0QUeKpNG3OpVSJup1woaqZjLWal + ajJipHI3XqN7O1qihT9WopFDUqGgRk+hskdNoclITKDiR02f9EROnv9CT57/QE+e/0BPnv9AT57/QE+e + /0DcfAAAzIoAAMCWAAC4nwAAsKYAAKisAACesAAAlLIAAIm1AACEthcAgLYpAnu2Ngd2tUAOcbRJFWyz + URtoslkhZLFgJmCwaCtbr3AwV655NFOugzhPrY87TK2ePkmtsT9HrclARqzjP0eq9T1Hqv88SKn/Okip + /zpIqf86SKn/Okip/zrTgwAAxZEAALucAACzpQAAq6wAAKGyAACXtgAAjLkAAIK8AAB6vwwAdr8gAHK/ + LwNuvzsIab5FDmW+TRRhvVUZXbxdHVm8ZSJVu20mUbt2Kk26gS5Kuo4xRrqdM0S6sTVCusk1QbnlNUG4 + 9zRBt/8zQbb/M0G2/zNBtv8zQbb/M0G2/zPLjAAAv5kAALWjAACtrAAApLMAAJq4AACPuwAAhL4AAHnC + AABvxwIAaskUAGfKJQBkyjMDYMo+B13KRwtZyVAPVclYFFLJYBdOyWkbSslzH0fJfiJDyYslQMmbJz7J + sCg8yckoO8nmKDrH+Cg6xf8pOcT/KTnE/yk5xP8pOcT/KTnE/ynDlQAAuKEAALCrAACnswAAnLkAAJC+ + AACFwQAAesUAAHDIAABmzQEAXdMGAFnVFwBX1ScAVdY0AVLWPwRP1kgGTNdRCUnXWwxG2GQPQ9huEkDY + ehU82YgYOtmYGTjarRo228cbNdrlGjTY9hwy1v8dMdX/HTHV/x0x1f8dMdX/HTHV/x27ngAAsqkAAKmz + AACeugAAksAAAIbDAAB6xwAAb8oAAGXOAABb0wAAUtkDAE3hEQBL4h8ASeMsAEbjNgFD5D8DQeRIBD7l + UQY75VsIOeZlCjbncAwz534OMeiNDy7pnxEs6rcRK+rTESrq7hEp5/8RKOb/Eijm/xIo5v8SKOb/Eijm + /xK0pwAAq7IAAKC7AACUwQAAh8UAAHrJAABuzAAAY9AAAFnVAABP2gAAR+EAAEPtDgBB7hoAPu8lADvw + LgA48TYBNfE+AjPyRgMw8k8ELfNYBSr0YwYn9XAHJPV+CCL2jwkf96IKHvi5Cxz51Asb+ewLG/j8Cxv4 + /Asb+PwLG/j8Cxv4/AutsQAAoroAAJbBAACIxgAAe8oAAG7OAABh0gAAVtYAAEzcAABC4AAAPO4AADj6 + CAA1+xMAMvwcAC/8JAAs/SsAKf4yACX+OQEi/0EBH/9KAhz/VAMY/18DFf9sBBL/ewUP/4wFDf+fBgz/ + swYK/8gGCf/dBgn/3QYJ/90GCf/dBgn/3QalugAAmMIAAIrHAAB8zAAAbtAAAGDUAABU2QAASd4AAD7h + AAA05QAAMPcAACv/AAAo/wkAJP8RACH/GAAe/x4AGv8kABf/KwAU/zIAEP85AAz/QgEI/0wBBP9YAQD/ + ZgIA/3UCAP+FAwD/lQMA/6UDAP+zAwD/swMA/7MDAP+zAwD/swOawQAAjMgAAH3NAABv0QAAYNYAAFPc + AABG4AAAOuQAADDnAAAo7wAAI/8AAB7/AAAa/wAAF/8EABT/CwAQ/xAAC/8VAAf/GwAD/yEAAP8oAAD/ + MAAA/zkAAP9DAAD/TwAA/10BAP9rAQD/eQEA/4UBAP+RAQD/kQEA/5EBAP+RAQD/kQH/HywD/yIqA/8l + KQP/JSsE/yc0Bf8lPwb/IksH/x5YB/8aZAj/F3AI/xR7CP8UhQj/E40I/xOVCP8SnAf/EqIH/xKpB/8R + rwb/EbYG/xG9Bv8QxgX9EM8F+hDbBfgO5gT1Du8E8w33A/EN/gPwDf8D8A7/BPAO/wTwDv8E8A7/BPAO + /wT/ICsD/yUnA/8pJgP/KSgE/y0yBP8tPQX/KUkH/yVWCP8hYgj/Hm4J/xt5Cf8aggn/GosJ/xmSCf8Z + mQj/GaAI/himCP0YrQf8GLQH+xi7B/oXxAb5F80G9hfZBvMW5AXxFe4F7hX2BO0V/gTsFf8F7BX/BewV + /wXsFf8F7BX/BewV/wX/IikD/ykkA/8tIgP/MCUD/zQwBP81OgX/MUYH/y1SCP8pXwn/JmsJ/yR1Cv8i + fwr+IYgK/CGQCvshlwr5IJ0J+CCjCfcgqgn2H7EJ9R+4CPQfwQjzH8sI8R7WB+4e4wfrHu0G6R72Buce + /gfnHv8H5h7/B+Ye/wfmHv8H5h7/B+Ye/wf/JiYD/y4gA/8yHQP/NyMD/zssBP88NwX/OkMG/zZPCP8y + Wwn/L2cK/C1yC/krfAv3KoQL9SqMC/QpkwvyKZoL8SigC/AopwvvKK4L7ii2Cu0nvwrsJ8kK6ifVCecn + 4gnkJ+wJ4if2CeEn/wrgJ/8K3Sn/Ct0p/wrdKf8K3Sn/Ct0p/wr/KyED/zMbAv84GQL/PyAC/0MpA/9E + MwT/Qz8G/z9LCPw8Vwr4OGML9DZuDPI0eA3vM4AN7TOIDewykA7qMpYO6TGdDugxpA7nMasO5jCzDuQw + vA3jMMcN4jDTDd8w4Q3cMOwN2jD2Dtgx/w7VMf8O1DH/DtQx/w7UMf8O1DH/DtQx/w7/Lx0C/zgXAv8/ + FQL/SBwC/0wlAv9MLwT/SzoF+0hGB/VFUgnwQl4L7D9pDek+cw7nPHwP5TyEEOM7jBHhOpMR4DqaEd86 + oBHeOagS3DmwEts5uhLaOMUS2DjREtU44BPSOOwTzzn3E805/xPMOf8Tyzn/Eso5/xLKOf8Syjn/Eso5 + /xL/NBkC/z4SAv9HEgH/TxkB/1MhAf9UKgL7UzUE81BABu1NTAnoSlkM5EhkDuBGbxDeRXgS20SAE9lD + iBTYQo8V1UKWFtRBnBfSQaQY0UCsGNBAtRnOQMAazUDNGstA3BrIQOkaxUH1GcNB/xnCQf8YwUH/F8BB + /xfAQf8XwEH/F8BB/xf/ORUC/0MNAf9ODwH/VhUA/1ocAf1cJQHzWy8D61g6BeVURgjfU1ML21FfDtZP + ahLTTXMV0Ux7F89LghnNSokby0mQHMlJlx7ISJ4fxkimIMVHsCDDR7shwkbHIcBG1iK+RuYhu0fzILlI + /R+4SP8dt0j/HLdI/xy3SP8ct0j/HLdI/xz/PhEB/0gHAf9UCwD/XBAA/2AWAPZiHgDsYSgB5F8zA91d + QAXWW04K0VlaEM1XZBXKVW4Zx1R2HMVSfR7DUYQgwVCLIr9PkiS9TpklvE6hJrpNqie5TbUot0zCKbZM + 0SmzTOIpsU3wJrBN+ySvTv8jrk7/Ia5O/yGuTv8hrk7/Ia5O/yH/Qg0B/00EAP9ZBwD/YQsA/WUQAPBn + FgDlZx8A3WYrAdVlOwTPY0kKyWFVEcVeYBfBXGkbvlpxH7tZeCK5V38lt1aGJ7VVjSm0VJQqslOcLLBT + pS2uUrAurVK9L6tRzTCpUd8wqFLuLaZT+SqmU/8opVT/JqVU/yWlVP8lpVT/JaVU/yX/RggB/1ICAP9e + BAD3ZQUA7mkIAOprDQDfaxQA1WwkAM5sNwPIakUKwmhREb1lXBi5Y2QdtmBtIbNfdCWwXXsorlyCKqxb + iC2qWpAvqVmYMKdYoTKlV6w0o1a5NaJWyDWgVts2n1frM55Y+C+dWP8snVn/Kp1Z/ymdWf8pnVn/KZ1Z + /yn/SQUA/1cAAPxiAADqaQAA3W4AANpwBQDYbwoAz3IgAMhyMwPBcEEKu21OEbZrWBiyaGEermZpI6tk + cCepY3cqpmF+LaRghDCiX4wyoF2UNJ5dnTacXKg4m1u1OZlbxDqYWtc6llvpOJZc9jOVXf8wlV7/LZVe + /y2VXv8tlV7/LZVe/y3/TAEA/1oAAPJlAADfbQAA2XIAANR1AgDSdQYAynccAMJ3LwK8dT4JtnNKEbBw + VRisbV4eqGtlJKVpbCiiZ3Msn2Z6L51lgTKbY4g0mWKQN5dhmTmVYKQ7k2CxPZFfwT6QX9M+jl/nPI5h + 9TeOYf80jmL/MY5i/zCOYv8wjmL/MI5i/zD/TwAA/14AAOdoAADbcQAA1HcAAM96AADMegMAxXsYAL18 + LAK3ejsIsHhHEKt1UhimclseonBiJJ9uaSicbHAsmWp3MJdpfjOUaIU2kmeNOZBlljuOZKE+jGSuQIpj + vkGJY9BBh2PlQIhl9DqIZf42iGb/M4hm/zOIZv8ziGb/M4hm/zP/UgAA/GEAAOFsAADYdQAA0HsAAMt+ + AADHfgAAwH8UALmAKQGyfjgHrHxFD6Z5TxeidlgenXRgI5pyZyiWcG0tlG90MJFtezSObII3jGuKOopq + kz2HaZ5AhWirQoNnu0OCZ85EgWfjQ4Fo8z2Caf05gmr/NYJq/zWCav81gmr/NYJq/zX/VAAA9GMAAN5v + AADUeAAAzX4AAMeBAADCggAAvIMRALWEJgGugjYGqIBCDqJ9TRade1YdmXhdI5V2ZSiSdGssjnNxMIxx + eDSJcIA4h2+IO4RukT6CbZxBf2ypQ31ruUV8a8xGe2rhRXxs8j98bf07fW3/N31t/zZ9bf82fW3/Nn1t + /zb/VwAA7GYAANxyAADRewAAyYEAAMOFAAC+hgAAuIYNALGHIwCqhjMFpIRADZ6BShWZf1MclHxbIpF6 + YieNeGksindvMId1djSEdH04gXOFPH9yjz98cJpCenCnRXhvt0Z2b8pHdW7gR3Zv8UF3cPw8d3H/OXhx + /zh4cf84eHH/OHhx/zj/WgAA5WkAANl1AADOfgAAxoQAAMCIAAC6iQAAs4oJAK2LIACmijEEoIg+DJqF + SBSVg1EbkIBZIYx+YCeJfWcrhXttMIJ6dDSAeHs4fXeDPHp2jUB3dZhDdHSlRXJztUdxc8hIb3LfSHFz + 8EJydPw+cnT/OnN0/zlzdP85c3T/OXN0/zn/XQAA4mwAANV5AADLgQAAw4gAALyLAAC2jQAAr40GAKiO + HACiji4DnIw7CpaJRhKRh08ajIVXIIiDXiaFgWUrgX9sL35+cjR7fXk4eHyBPHV6i0ByeZZDb3ijRm14 + s0drd8ZIanfdSGt470NsePs/bXj/O214/zpteP86bXj/Om14/zr6YAAA33AAANF8AADIhQAAwIsAALmP + AACykQAAqpEBAKSSGQCekisCmJA5CZKORBCNjE0YiIpVH4SIXCSAhmMqfYVpLnmDcDN2gnc3c4F/O2+A + iT9sfpRDaX2hRWd9sUdlfcVIZHzcSGV870Nmffs/Z33/O2h9/ztoff87aH3/O2h9/zvwZAAA23QAAM6A + AADEiQAAvI8AALWTAACulQAApZUAAJ+WFACZligBk5U2B46TQQ6IkUoWhI9SHH+OWSJ7jGAoeIpnLXSJ + bjFxiHU2bYd9OmqGhz5mhJJBY4SfRGGDr0Zfg8NHXoLbR1+C7kNggvs/YYL/O2GC/zthgv87YYL/O2GC + /zvnaAAA13gAAMqEAADBjQAAuZMAALGXAACpmgAAoJoAAJmbDwCUmyMAjpsyBYmZPQyDl0cTf5ZPGnqU + VyB2k14lc5FlKm+QbC9rj3MzaI17OGSMhTxgi5A/XYudQlqKrkRYisJFV4naRViJ7kFZifs+Won/OluJ + /zpbif86W4n/OluJ/zribgAA0n0AAMaJAAC9kQAAtZgAAK2cAAClnwAAmaAAAJKhCACNoR4AiKEuA4Og + Ogl+nkQQeZ1MFnWbVBxxmlsibZliJ2mYaStll3EwYpZ5NF6VgzhalI48V5ObPlSSrEBSksFBUZLZQVGR + 7j5Skfs7U5D/OFSQ/zhUkP84VJD/OFSQ/zjddAAAzYMAAMGOAAC4lgAAsJ0AAKihAACfpAAAlaYAAIun + AQCFqBcAgagoAX2nNQZ4pkAMc6VJEm+kURdro1gdZ6JfIWOhZyZfoG4qW593L1iegTNUnYw2UJ2aOU2c + qztLnMA7SpzZO0qb7jlLmvw3TJn/NUyZ/zVMmf81TJn/NUyZ/zXVewAAx4kAALyUAAC0nAAArKMAAKOn + AACZqgAAj6wAAIKuAAB8rw4AebAhAHWwMAJwrzsHbK5FDGitTRFkrVUWYKxcG12rZB9ZqmwjVap0J1Gp + fitOqIouSqiYMUeoqjNFp780RKfaM0Sm7zJEpf0xRKT/MESk/y9EpP8vRKT/L0Sk/y/OgwAAwZAAALea + AACvogAAp6kAAJ2tAACSsAAAiLMAAHy1AAByuAMAbrkXAGu5KABouTUDZLk/B2C4SAtduFAPWbdYE1a3 + YBdStmkbTrZyHku1fCJHtYglRLSXJ0G0qSk/tb8pPrTbKT6z8Ck9sf4pPbD/KD2w/yg9sP8oPbD/KD2w + /yjGiwAAu5cAALKhAACqqQAAoK8AAJW0AACKtgAAf7kAAHS7AABpvwAAYsIKAF/DHABcxCsAWsQ3AlfE + QQRUxEsHUcRTCk7DXA5Kw2QRR8NuFETDeRdAw4YaPcOVHDvDpx05w74eOMPcHTfB8h42wP8fNb7/HzW+ + /x81vv8fNb7/HzW+/x+/lAAAtZ8AAKypAACjsAAAmLYAAI26AACBvAAAdb8AAGvCAABgxgAAV8oCAE/O + DABNzx0AS88rAErQNwBI0EEBRtBLA0PRVAVB0V4HPtFoCTvRdAw40oEONdKREDPSpBEx070RMNPcES/R + 8RIu0P0ULc7/FSzO/xUszv8VLM7/FSzO/xW3nQAAr6gAAKaxAACbtwAAj7wAAIK/AAB2wgAAa8UAAGDJ + AABWzAAATNEAAEPWBAA93AwAO90bADrdKAA43jMAN98+ADbfSQE04FMCMuBeAzDhagQt4XgGK+KHBynj + mggn5LAJJeTNCSTk6wkj4fwJIuD/CyLg/wsi4P8LIuD/CyLg/wuxpwAAqLAAAJ24AACRvgAAhMIAAHfF + AABqyAAAX8sAAFTPAABK0wAAQNgAADjcAAA06AoAMekWAC/qIQAt6yoAK+wzACnsPQAn7UYAJO5RASHu + XAEf72kCHPB4AxrxiQQY8p0EFvO1BRT00gUT9O0FEvL/BBLx/wQS8f8EEvH/BBLx/wSqsAAAn7gAAJO/ + AACFwwAAd8cAAGrLAABdzgAAUtIAAEfWAAA92wAANN4AACzlAAAp9QQAJvYOACP3FwAg+B8AHfknABr5 + LgAY+jcAFftAABL8SwAO/FcACv1lAQf+dQEF/4cBA/+cAgL/sgIB/8oCAP/lAgD/6QIA/+kCAP/pAgD/ + 6QKhuAAAlb8AAIfFAAB4yQAAas0AAFzRAABQ1QAARNoAADneAAAv4QAAJuQAACHwAAAd/gAAGv8EABb/ + DAAT/xMADv8ZAAv/HwAH/ycABP8vAAD/OAAA/0QAAP9QAAD/XwAA/3AAAP+CAAD/lAEA/6YBAP+6AQD/ + vgEA/74BAP++AQD/vgGXwAAAicYAAHrKAABrzwAAXdMAAE/ZAABC3QAANuEAACvkAAAh5wAAGesAABT5 + AAAQ/wAADP8AAAj/AAAE/wQAAP8KAAD/EAAA/xYAAP8dAAD/JQAA/y8AAP87AAD/SAAA/1cAAP9nAAD/ + dwAA/4YAAP+VAAD/mAAA/5gAAP+YAAD/mAD/FCwD/xooAv8bJwL/GSoD/xkyA/8WPQP/EkoE/w5XBP8K + YwT/Bm8E/wR5BP8DgwT/A4sE/wKSA/8CmQP/AZ8D/wGmAv8ArAL/ALIC/wC6Av8AwgH9AMsB+wDVAfgA + 4QH1AOwA8wD0APAA/ADwAP8A8AD/AfAA/wHwAP8B8AD/AfAA/wH/GSkC/x4lAv8fJAL/HiYC/yExA/8f + OwP/G0cE/xZUBP8SYAX/DmwF/wx3Bf8LgAT/C4gE/wqQBP8KlwT/CZ0D/gmjA/wIqQP7CLAC+gi3AvkH + vwL4BskC9gbTAfMF4AHwBOoB7QP0AewE/AHrBP8B6wX/AesF/wHrBf8B6wX/AesF/wH/HSYC/yIhAv8k + IAL/JiQC/ykuAv8oOQP/JEQE/yBRBP8cXQX/GWkF/xZ0Bf8VfQX9FIUF+xSNBPoTlAT4E5oE9xOgBPYS + pgT1Eq0D9BK0A/MRvQPyEcYC8BDRAu0P3gLqDukB5w7zAeYQ/ALlEP8C5RH/A+MS/wPjEv8D4xL/A+MS + /wP/ISIC/ycdAv8pGgL/LiAC/zErAv8yNgP/LkEE/ypNBP8mWQX+I2UF+iBwBvgfeQb1HoIG9B6JBfId + kAXxHZcF7x2dBe4cowXtHKoE7ByxBOsbugTqG8QE6BvPA+Ya3QPjGugD4RvzA98b/QTdHP8F2x3/Bdsd + /wXbHf8F2x3/Bdsd/wX/Jh4C/ywXAf8vFAH/Nx0B/zomAv86MQL/OT0D/zRIBPoxVQX2LWAG8itrBu8p + dQbtKX4H6yiFB+kojAfoJ5MG5yeaBuYnoAbkJ6cG4yavBuImtwbhJsEF3ybNBd0l3AXaJugG2CbzB9Qn + /QfSJ/8I0Sf/CNEn/wjRJ/8I0Sf/CNEn/wj/KxkC/zISAf84EQH/QBkB/0MhAf9DLAL/QTcC+D5DBPI7 + TwXtOFsG6TVmB+Y0cQfkM3kI4jOBCOAyiQjfMo8I3TGWCNwxnQjbMaQI2TGsCdgwtQnWML8J1DDLCdMw + 2gnPMOcKzDHzC8ox/QzJMf8MyDH/DMcx/wzHMf8MxzH/DMcx/wz/MBQB/zcMAf9ADgD/RxUA/0sdAP9L + JgH3STEB70c9A+lESQTkQVYG4D9hB90+bAjaPXUJ2Dx9CtU8hAvTO4sM0juSDdA7mA3POp8OzjqnD8w6 + sA/LOroPyTnGEMg51BDFOuQQwjrxEcA6/BG+Ov8QvTr/EL06/xC9Ov8QvTr/EL06/xD/NQ4B/zwGAP9I + CgD/ThAA/1IXAPlSIADvUSoA5041AeFLQgPbSlAF1klcB9NHZwrPRnAMzUV4DstFfxDJRIYRx0OMEsZD + kxPEQ5oUw0KiFcFCqhbAQbUWvkHBF71Bzxe7QeAXuEHuF7ZB+ha0Qf8Vs0H/FbNB/xSzQf8Us0H/FLNB + /xT/OQoB/0MCAP9OBQD/VAkA/1gQAPJYFwDoVyEA31QtANhUPAHSU0sFzVJXCclQYQ3GT2oQw05yE8FN + ehW/TIAWvUuHGLtKjhm6SZUauEmcG7dIpRy1SLAdtEe8HrJHyh6wR9werkfrHaxI9xyrSP8aqkj/GalI + /xmpSP8ZqUj/GalI/xn/PgYA/0kAAP9TAQD3WgMA710HAOtdDQDgWxYA2FslANBcNwHKW0YFxVpSCsBY + XA+9VmUTulVuFrdUdRi1Unwas1GCHLJRiR6wUJAfrk+YIaxOoCKrTqsjqU23JKhNxiWmTdclpE3oJKNO + 9SGiTv8foU7/HqBO/x2gTv8doE7/HaBO/x3/QQEA/04AAPpYAADoXgAA3mEAANpiBADZYAoA0GIgAMlk + MwHDY0EGvWFOC7lfWBC1XWEUsltpGK9acButWXceqld+IKlWhCKnVYskpVSTJaNUnCeiU6YooFKyKZ5S + wSqdUtIrm1LlKZpT8yaZVP4kmFT/IphU/yGYVP8hmFT/IZhU/yH/RQAA/1IAAO5cAADfYwAA2GgAANNp + AQDRZwUAymkbAMJqLgG8aT4FtmdKC7JlVBGuY10WqmFlGqdfbB2lXnMgo116IqFcgCWfW4cnnVqPKZtZ + mCuZWKIsl1euLpZXvS+UV88vklfiL5JY8iuRWf0okVn/JZFZ/ySRWf8kkVn/JJFZ/yT/SAAA/lYAAONg + AADaaAAA020AAM5vAADLbQIAxG4XAL1vKwC2bzoFsW1HC6xqURGnaFoWpGZiGqFlaR6eY3AhnGJ2JJlh + fSeXYIQplV6MLJNdlC6RXZ8wj1yrMY5bujOMW8szi1vgM4pc8C6KXfwril3/KIpe/yeKXv8nil7/J4pe + /yf/SwAA9VkAAOBkAADWbQAAznIAAMl0AADFcwAAv3MTALh0JwCxczcEq3FDCqZvThCibVcWnmtfG5tp + Zh+YaG0ilWZzJZNleiiRZIErj2OILYxikTCKYZwyiGCoNIdgtzaFX8k2hF/eNoNg7zKEYfsuhGL/K4Ri + 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 + TQE6y1cCN8tiAzXLbQUzzHoGMMyJCC7MmwkszLIJKs3OCSrL6wooyvoMJ8j/DSfH/w4nx/8OJ8f/DifH + /w60nQAArKYAAKOuAACXtAAAi7kAAH67AAByvgAAZsAAAFvDAABRxgAAR8oAAD3OAAA00gQALtUNAC3W + GwAr1ycAKtgyACnZPgAo2UkAJ9pVACbbYgAl23EBI9yAASHdkwIf3qkCHd7GAhzd5gIb3PgEGtv/BRra + /wYa2v8GGtr/Bhra/waupgAApa8AAJq2AACNuwAAgL4AAHPBAABmxAAAWscAAE/KAABFzgAAO9EAADLV + AAAq2gAAI+AFACHkEQAf5RwAHeYmABvmMAAZ5zsAF+hGABXpUwAT6mEAEutwABDrggAN7JcBDO2vAQru + zgEJ7+wBCOz+AQfq/wEH6v8BB+r/AQfq/wGnrwAAnLcAAI+8AACCwAAAdMQAAGbHAABZygAATc4AAELR + AAA41QAALtkAACbdAAAd4AAAGewAABbxCQAT8hIAEPMaAA30IgAK9SsAB/U1AAT2QQAB904AAPhdAAD5 + bgAA+YEAAPmWAAD5rwAA+coAAPnlAAD59AAA+fQAAPn0AAD59ACetwAAkr0AAITCAAB1xgAAZ8oAAFnN + AABM0QAAQNUAADTaAAAq3QAAIeAAABjjAAAR5wAADfUAAAn+AAAG/wUAAv8MAAD/EwAA/xsAAP8kAAD/ + LgAA/zkAAP9HAAD/VwAA/2kAAP98AAD/kQAA/6YAAP+6AAD/ygAA/8oAAP/KAAD/ygCUvgAAhsMAAHfI + AABozAAAWdAAAEvVAAA+2gAAMt4AACbhAAAc5AAAE+cAAArpAAAE8gAAAP0AAAD/AAAA/wAAAP8AAAD/ + AwAA/woAAP8SAAD/GwAA/yUAAP8xAAD/PwAA/1AAAP9iAAD/dAAA/4UAAP+VAAD/oAAA/6AAAP+gAAD/ + oAD/DSgC/xIlAf8RJAH/CiYB/wkwAf8FOwL/AUgC/wBVAv8AYQL/AG0C/wB4Af8AgQH/AIkB/wCQAf8A + lgH/AJwA/wCiAP8AqAD9AK8A+wC1APkAvQD3AMYA9QDQAPMA3QDyAOgA8QDyAPAA+gDvAP8A7wD/AO8A + /wDvAP8A7wD/AO8A/wD/EiYC/xYhAf8VIAH/EyMB/xMuAf8QOQL/C0UC/wZSAv8BXgL/AGoC/wB1Av8A + fgH/AIYB/wCNAf8AlAH+AJoB/ACgAPsApgD5AKwA9wCzAPUAugDzAMQA8QDOAO8A2wDtAOYA7ADwAOsA + +QDqAP8A6gD/AOkA/wDpAP8A6QD/AOkA/wD/FyIB/xocAf8aGwH/HCAB/x4rAf8aNgH/FkIC/xFPAv8N + WwL/CWcC/wZxAv4FegL8BYMB+gSKAfgDkQH3A5cB9gKdAfUCowD0AakA8gCwAPEAuADvAMEA7QDLAOoA + 2QDoAOUA5gDwAOUA+gDkAP8A4gH/AOAD/wDgA/8A4AP/AOAD/wD/HB0B/x8YAf8fFgH/JR0B/ycnAf8m + MwH/IT4B/x1KAv8ZVwL8FWIC+RJtAvYRdwL0EX8C8hCGAfAQjQHvD5MB7Q6ZAewOnwHrDaYB6g2tAekM + tQDnDL8A5gvJAOQK1gDhCuQA3wvwAN0N+gHaD/8B2RD/AdgQ/wLYEP8C2BD/AtgQ/wL/IBkB/yQTAf8n + EQD/LhkA/zAjAP8wLgH/LToB/ShGAvgkUgLzIV4C8B9pAu0dcgLqHXsC6ByCAucciQLlG5AC5BuWAeMb + nAHiGqMB4BqqAd8asgHeGrwB3RnIAdsZ1QHYGuQB1BrwAtEc+gPPHP8Dzhz/A84c/wTOHP8Ezhz/BM4c + /wT/JRMB/yoMAP8wDQD/NxUA/zkeAP84KAD8NzQB9TNAAe8vTALqLFkC5ipkAuMpbQLhKXYC3yh+At0o + hQLbKIwC2ieSAtknmQLXJ6AC1SenA9QnrwPSJ7kD0SbFA88m0gPNJ+EEySjuBcco+gbFKP8GxCj/BsMo + /wbDKP8Gwyj/BsMo/wb/Kw0A/zAGAP85CQD/PxAA/0EYAP1AIQD0Pi0A7Ds5AOY4RgHhNlMB3TVeAtk0 + aQLWNHID0zR5BNIzgATQM4cFzjONBs0zlAbLM5sGyjKiB8kyqgfHMrQIxjLACMQyzQjCMt0IvzLrCb0y + +Aq6Mv8KuTL/Crky/wq5Mv8KuTL/Crky/wr/MAgA/zYAAP9BBAD/RgkA/0gQAPVHGQDrRSQA40ExAN1A + PgDXQEwB0kBZA84/YwTLP2wGyT50B8c+ewjFPYIJwz2ICsI9jwvAPJUMvzydDL08pQ28O68Nuju6Drk7 + yA63OtkPtDvoD7I79Q+xO/8Orzr/Dq46/w6uOv8Orjr/Dq46/w7/NAMA/z0AAP9HAAD6TAMA804IAO1N + EADjShkA2kgnANNJOADNSkcCyUpTBMVJXgfCSGcJv0dvC71Gdgy7Rn0OuUWDD7dFiRC2RJARtEOYErND + oBOxQ6oUsEK2FK5CwxWtQtMVqkLlFahC8xSnQv4TpkL/EqVC/xKlQv8SpUL/EqVC/xL/OAAA/0MAAPpN + AADpUQAA31MAANxSBADbTgwA0lEhAMtTMwDFU0ICwFNOBbxRWQm5UGILtk9qDrNOcRCxTXgSr0x+E65M + hRWsS4sWqkqTF6lJmxinSaUZpkixGqRIvxujSM8boUjiG59I8RmeSfwYnUn/F5xJ/xacSf8WnEn/FpxJ + /xb/PAAA/0kAAOxRAADfWAAA2VwAANRbAQDSVwYAylkbAMNbLgC9Wz4CuFpKBrRZVAqwV10NrVZlEKtV + bROoU3MVplN6F6VSgBijUYcaoVCPG59Plx2eT6EenE6sH5pOuiCZTcshl03eIZZO7h6VT/sclE//GpRP + /xmUT/8ZlE//GZRP/xn/QAAA+k0AAONXAADaXwAA0mMAAM1jAADLXwIAxGAWAL1iKgC3YjkCsWBGBq1f + UQqpXVoOplxiEqNaaRShWW8Xn1h2GZ1XfBubVoMdmVWLH5dVkyGVVJ0ik1OpJJJTtyWQU8clj1LbJo5T + 7CONVPkgjVT/HoxU/xyMVP8cjFT/HIxU/xz/QwAA71EAAN9cAADVZAAAzWgAAMhpAADEZgAAvmYSALdn + JgCxZzYCq2ZDBqdkTQqjY1YPn2FeEpxgZRWaX2wYmF1yG5VceR2TW4AfkVuHIY9akCOOWZkljFilJ4pY + syiJV8Qph1fYKYZY6yaGWPgjhln/IYVZ/x+FWf8fhVn/H4VZ/x//RwAA51UAANthAADRaQAAyW0AAMNu + AAC+bAAAuGsNALFsIgCrbDIBpms/BaFpSgqdaFMPmmZbEpZlYhaUY2kZkWJvHI9hdh6NYHwhi1+EI4le + jSWHXZYohV2iKoNcsCuBXMEsgFvVLH9c6Sp/Xfcmf13/I39d/yF/Xf8hf13/IX9d/yH/SwAA5FoAANhl + AADNbQAAxXIAAL9zAAC6cQAAs3AJAK1wHgCncS8BoXA8BZxuRwqYbFAOlGpYEpFpXxaOaGYZjGdsHIll + cx+HZHohhWOBJINiiieBYpQpf2GgK31gri17YL8uemDTL3lg5yx5YfYoeWH/JXph/yN6Yf8jemH/I3ph + /yP4TgAA4V4AANRpAADKcQAAwnUAALt3AAC1dgAAr3QFAKh0GwCidSwBnXQ6BJhyRQmUcE4OkG9WEoxt + XRWJbGMZh2tqHIRqcB+CaXcigGh/JX1niCh7ZpIreWWdLXdkrC91ZL0wdGTRMHNk5i50ZPUqdGX/J3Rl + /yR0Zf8kdGX/JHRl/yTxUQAA32EAANFtAADHdAAAv3kAALh7AACxegAAqngBAKR4FwCeeSkAmXg3A5R2 + QgiPdUsNi3NUEYhxWxWFcGEYgm9nG39ubh99bXUie2x9JXhrhSh2ao8rdGmbLnJoqjBwaLsxbmfPMW5n + 5TBvaPUrb2j/KG9o/yZvaP8mb2j/Jm9o/ybrVQAA3GUAAM5wAADEeAAAvHwAALV+AACufgAApnwAAJ98 + FACafCYAlXw0A5B6QAeLeUkMh3dREIR2WRSBdF8YfnNmG3tybB95cXMidnB7JXNvhClxbo4sbm2aLmxs + qDBqbLkyaWvOMmhr5DFpbPQsamz/KWps/ydqbP8namz/J2ps/yfoWQAA2GkAAMt0AADBewAAuYAAALKC + AACqggAAooAAAJuAEACVgCMAkIAxAox/PQaHfUcLg3tPD4B6VxN8eV0XendkG3d2ah50dXEicXR5JW9z + gilscowsaXKYLmdxpjFlcLcyY3DMMmNw4zFkcPMtZXD+KmVw/ydlcP8nZXD/J2Vw/yfkXQAA1G0AAMh3 + AAC+fwAAtoMAAK6GAACnhgAAnYQAAJaECwCQhB8AjIQuAYeDOgWDgkQJf4BNDnt/VBJ4flsWdX1iGnJ7 + aB1vem8hbHp3JWp5gChneIorZHeWLmF2pDBfdbYxXnXLMl114jFedfMtX3X+KmB1/yhgdf8nYHX/J2B1 + /yfhYgAA0HEAAMR7AAC7ggAAs4cAAKuKAACjiwAAmIgAAJGJBwCLiRsAh4krAYOINwR+h0EIeoZKDHeF + UhFzg1kVcIJgGG2BZhxqgG4gZ391I2R+fidhfYgqXn2ULVt8oy9Ze7QwWHvJMVd74TBYevMsWXr+Klp6 + /ydaev8nWnr/J1p6/yfdZwAAzHUAAMGAAAC4hwAAsIwAAKiPAACfkAAAko4AAIuOAQCFjhUAgY4mAH2O + MwJ5jT4GdYxHCnKLTw5uilYSa4ldFmiIZBplh2sdYoZzIV6FfCRbhIYoWIOSK1WDoS1TgrMuUYLILlGB + 4C5SgfIrUoD+KFOA/yZTgP8mU4D/JlOA/ybXbQAAyHsAAL2EAAC0jAAArJEAAKSUAACblQAAj5UAAISU + AAB+lA4AepQgAHeULwFzlDoEb5NDB2ySTAtokVMPZZBaE2KPYRZfj2kaXI5xHViNeiFVjIQkUouRJ0+L + nylNirEqS4rHK0qJ4CpLifIoS4j+JkyH/yVMh/8kTIf/JEyH/yTRdAAAw4AAALmKAACwkQAAqJYAAKCa + AACWmwAAi5sAAH2bAAB2mwcAcpsZAG+cKQBsmzUCaJs/BGWaSAhimVALX5lXDlyYXhJZl2YVVZZuGVKW + eBxPlYIfS5SPIkiUniRGlLAlRJPGJUST4CVEkfIjRJD+IkSQ/yFEkP8hRJD/IUSQ/yHLewAAvoYAALSQ + AACslwAApJwAAJufAACRoQAAhaIAAHmiAABuowAAaKMRAGWjIQBjpC4AYKM6Al2jQwRao0sHV6JTCVSi + WwxRoWMPTqBrEkugdRZIn4AYRZ+NG0KenB0/nq8ePp7GHj2d4B09nPMdPZv/HTya/x08mv8dPJr/HTya + /x3EggAAuY0AALCWAAConQAAn6IAAJWmAACKpwAAfqgAAHOpAABlqwAAXqwFAFqsFwBXrSUAVa0yAFOt + PAFRrUUCT61OBEysVgZJrF8JRqxoC0Orcg5Aq30QPaqLEzuqmxQ4qq4VN6rFFTap4RU1p/QWNKb/FjSl + /xc0pf8XNKX/FzSl/xe9igAAs5UAAKudAACjpAAAmakAAI6sAACCrQAAdq8AAGuwAABfsgAAU7UAAEy2 + CQBJtxkASLcnAEa4MgBFuD0AQ7hGAEG4UAE/uFkDPbhjBDq4bQY3uHoINbeHCjK3mAswt6wML7jEDC63 + 4QsttfUNLLP/Diuy/w8rsv8PK7L/Dyuy/w+3kwAArp0AAKalAACdqwAAka8AAIWyAAB5swAAbbUAAGG3 + AABWuQAAS7wAAEDAAAA6wgkAN8MYADXDJAA0xC8AM8Q6ADLERAAwxU8AL8VaAC3FZgErxnMCKcaCAifG + kwMlxqgEI8fCBCPG4QMixPcFIcL/ByDB/wggwf8IIMH/CCDB/wixnAAAqaUAAJ+sAACUsgAAiLUAAHu4 + AABuugAAYrwAAFe+AABMwQAAQcQAADjHAAAuywAAJc4FACHQEQAg0R0AH9EoAB7SNAAc0j8AG9NLABrT + WQAY1GcAF9V3ABXVigAU1qAAEte8ABHY3gAR1fMAEdT/ARHS/wIR0v8CEdL/AhHS/wKrpQAAoq0AAJez + AACKuAAAfbsAAG+9AABjwAAAVsIAAEvFAABAyAAANswAACzPAAAk0gAAG9UAABPZAwAO3wsADeAXAAvg + IwAK4S4ACOI6AAfjSAAF41YAA+NnAALjeQAA444AAOSnAADkxAAA5eUAAOX5AADl/wAA5f8AAOX/AADl + /wCkrQAAmbUAAIy6AAB/vgAAccEAAGPDAABWxgAAScoAAD3NAAAz0AAAKdMAACDXAAAX2gAAD90AAAfg + AAAE7AMAAesLAADrFQAA6x8AAOspAADsNQAA7EMAAO1TAADuZQAA73kAAO+OAADwpgAA8cEAAPLcAADy + 8QAA8vIAAPLyAADy8gCbtQAAj7sAAIHAAABywwAAY8cAAFXKAABIzgAAO9EAADDVAAAl2QAAHNwAABLf + AAAJ4QAAAuQAAADqAAAA8wAAAPMAAADzBgAA8w4AAPQYAAD0IwAA9S8AAPc9AAD5TgAA+mEAAPt2AAD8 + iwAA/aAAAP60AAD+ygAA/ssAAP7LAAD+ywCRvAAAg8EAAHTFAABlyQAAVs0AAEfSAAA61gAALdsAACLe + AAAX4QAADeQAAATmAAAA6AAAAOoAAAD0AAAA+gAAAPoAAAD6AAAA+wAAAPwGAAD9EAAA/hoAAP8nAAD/ + NgAA/0gAAP9cAAD/cAAA/4IAAP+TAAD/owAA/6QAAP+kAAD/pAD/BSUB/wchAf8EIAH/ACMB/wAtAf8A + OQD/AEYA/wBTAP8AYAD/AGwA/wB2AP8AfgD/AIYA/wCNAP4AkwD8AJkA+gCfAPgApAD3AKsA9gCxAPUA + uQD0AMEA9ADMAPMA2ADyAOQA8QDvAPAA+QDwAP8A7gD/AO0A/wDtAP8A7QD/AO0A/wD/CyIB/w0dAf8K + HAD/BSAA/wMrAP8ANgD/AEMA/wBQAP8AXAD/AGgA/wBzAP8AewD/AIMA/ACKAPoAkAD4AJYA9gCcAPQA + ogDyAKgA8QCuAPAAtgDvAL4A7gDJAO0A1ADsAOEA6wDtAOoA9wDpAP4A6AD/AOcA/wDnAP8A5wD/AOcA + /wD/ER0B/xEZAP8OGAD/EB4A/xAoAP8LMwD/BT8A/wBMAP8AWQD/AGQA/wBvAPwAeAD6AIAA9wCHAPQA + jQDyAJMA8ACZAO4AngDsAKUA6wCrAOoAswDoALsA5wDGAOYA0QDlAN8A5ADrAOMA9ADiAP0A4AD/AN8A + /wDeAP8A3gD/AN4A/wD/FRkB/xYTAP8UEQD/GhoA/xslAP8YLwD/EzsA/w1IAP4JVAD6BWAA9gJqAPQB + dADxAHwA8ACDAO4AiQDsAI8A6gCVAOgAmwDmAKEA5ACoAOMAsADhALkA4ADDAN8AzwDdAN0A3ADpANoA + 9QDWAP8A1QH/ANUB/wDUAf8A1AH/ANQB/wD/GhMA/xwMAP8eDQD/JBYA/yUgAP8jKwD/HzYA+xpCAPUW + TwDxElsA7RBmAOoObwDoDncA5g1/AOQMhQDjDIwA4QuSAOALmADfCp4A3QqlANsJrQDZCbYA2AnBANYJ + zgDUCd0A0QzsAM4P+ADMEP8ByxD/AcoQ/wHKEf8ByhH/AcoR/wH/Hw0A/yEGAP8oCAD/LRAA/y4ZAP8s + JAD5KjAA8SU8AOshSQDnHlUA4x1gAOAcagDdG3MA2xt6ANkagQDYGogA1hqOANQalADTGpsA0RuiANAb + qgDPG7MAzRu+AMwbywDKG9sAxh3pAcQe9gLCHv8CwB7/A78e/wO/Hv8Dvx7/A78e/wP/JAgA/ycAAP8x + BAD/NQoA/zYSAPk0HADwMSgA6C41AOIqQgDdKE8A2ChaANQpZQDSKW4Azyl1AM4pfAHMKoMByiqJAckp + jwHIKZYCximdAsUppQLDKa4Cwim5A8ApxgO/KdUDvCnmBLkq8wW3Kv8FtSr/BbUp/wW0Kf8FtCn/BbQp + /wX/KQEA/zAAAP85AAD+PQMA+D0JAPA7EwDmNx0A3jMrANgzOgDSNEgAzjZVAMo2XwHHNmgCxTZwA8M2 + dwPBNn4EvzWEBL41igW8NZEFuzWYBrk0oAa4NKkHtjS0B7U0wgezM9EIsTTiCK408QmtM/0JqzP/Caoz + /wmqM/8IqjP/CKoz/wj/LgAA/zcAAPtAAADtQwAA5EMAAOJABwDeOxEA1TwiAM4/NADJQUMAxEFPAcBB + WgK9QWMEu0BrBbhAcga3P3kHtT9/CLM+hQmyPowKsD2TCq89mwutPaQMrDyvDKo8vQ2pPMwNpzzfDaQ8 + 7g2jPPsNoTz/DKE7/wygO/8MoDv/DKA7/wz/MgAA/z4AAOxFAADgSwAA2k0AANZLAQDURQgAzEccAMVJ + LgDASz4Au0tKArdKVQS0SV4GsUlmCK9IbQmtR3QKq0Z6DKlGgA2oRYcOpkWOD6VElhCjRKARoUOrEqBD + uBKeQ8gTnUPbE5tD6xKZQ/kRmEP/EJdD/xCXQ/8Pl0P/D5dD/w//NgAA90MAAONNAADaVAAA01YAAM5V + AADMTwIAxVAXAL5SKQC4UzkAs1NGAq9SUQWsUVoHqVBiCqZPaQukTm8Nok12D6BNfBCfTIMRnUuKE5tL + khSaSpwVmEqnFpZJtBeVScQYlEnWGJJJ6ReQSfcVkEn/FI9J/xOPSf8Sj0n/Eo9J/xL/OwAA6kgAAN9U + AADUWwAAzV4AAMhdAADEWAAAvlcRALdZJQCxWjUArFlCAqhYTQWkV1YIoVZeC59VZQ2cVGsPmlNyEZhT + eBOXUn8UlVGGFpNQjhiRUJgZkE+jGo5PsBuMTsAci07THYpO5xuJT/UZiE//F4hP/xaHT/8Vh0//FYdP + /xX/QAAA5k4AANpZAADQYAAAyGQAAMJkAAC+YAAAuF4MALFfIACrYDEApl8+AqJeSQWeXVIJm1xaC5hb + YQ6VWmgQk1luEpFYdRSPV3sWjVaDGIxVixqKVZQciFSgHYZUrR+FU70gg1PQIIJT5R+BVPQcgVT/GoFU + /xiBVP8YgVT/GIFU/xj4RAAA41MAANZeAADMZQAAxGkAAL5pAAC4ZgAAsmMIAKtkHACmZS0AoWQ7Apxj + RgWYYk8JlWFXDJJgXg6PX2URjV5rE4tdcRWJXHgYh1uAGoVaiByDWZEegVmdIH9YqiF+WLoifFfNI3tX + 4yJ7WPMfe1j+HHtY/xp7WP8ae1j/GntY/xrwRwAA4FgAANJjAADIagAAwG0AALpuAAC0bAAArWgEAKZp + GQChaioAnGk4ApdoQwWTZ0wIkGVUC4xkWw6KY2IRh2JoE4VhbxaDYHUYgV99G39fhR19Xo8ge12aInlc + qCN3XLgldlzLJXVc4SR1XPIhdVz9HnVd/xx1Xf8bdV3/G3Vd/xvrTAAA3VwAAM9mAADFbQAAvXEAALZy + AACvcAAAqG0AAKJtFQCcbicAl201AZJsQASOa0oIi2pSC4hoWQ6FZ18RgmZmE4BlbBZ+ZHMZfGR6G3pj + gx53Yo0hdWGYI3NhpiVyYLYmcGDJJ29f4CZvYPEicGD9IHBg/x5wYP8dcGD/HXBg/x3oUAAA2mAAAMxq + AADCcQAAunUAALN2AACsdQAApHEAAJ1xEgCXciMAk3IyAY5xPQSKb0cHhm5PC4NsVw6Aa10QfWpjE3tp + ahZ5aXEZd2h4HHVngR9yZoshcGWWJG5lpCZsZLQna2TIKGpj3ihqZPAkamT8IWtk/x9rZP8ea2T/Hmtk + /x7mVAAA1mMAAMluAAC/dAAAt3kAALB6AACoeQAAoHUAAJl1DQCTdiAAjnYvAYp1OwOGc0UGgnJNCn9x + VA18cFsQeW5iE3duaBZ1bW8Zcmx2HHBrfx9taokia2mUJGlpoiZnaLIoZWjGKGRn3ShlaO8kZWj8ImZo + /x9maP8fZmj/H2Zo/x/jWAAA0mcAAMZxAAC9eAAAtXwAAK1+AAClfQAAm3kAAJR6CQCOehwAinosAIZ5 + OAKCeEIFfnZLCXt1Ugx4dFkPdXNgEnNyZhVwcW0YbnF1G2twfR9ob4chZm6TJGRtoCZibbEoYGzFKF9s + 3ChfbO8lYGz7ImFs/yBhbP8fYWz/H2Fs/x/fXQAAz2sAAMN1AAC6fAAAsoAAAKqCAAChggAAl34AAI9+ + BQCJfhkAhX4pAIF9NQJ9fEAEentICHZ6UAtzeVcOcXheEW53ZBVrd2sYaXZzG2Z1ex5jdIUhYXORJF5y + nyZccq8nWnLDKFlx2yhace4lWnH7Iltx/yBbcf8fW3H/H1tx/x/bYgAAy28AAMB5AAC3gAAAr4QAAKeG + AACehwAAkYIAAIqDAACEghQAgIIkAHyCMgF4gj0DdYFFBnKATQpvf1UNbH5bEGl9YhNmfGkWZHtxGWF7 + eR1eeoMgW3mPIlh4nSVWeK4mVHfCJ1N32iZUd+0kVHb7IlV2/yBVdv8fVXb/H1V2/x/WZwAAx3QAAL19 + AAC0hAAAq4kAAKOLAACaiwAAjIgAAISIAAB9iA4AeoggAHaILgBziDkCcIdCBWyGSghphVILZ4RZDmSE + YBFhg2cUXoJvF1uBeBpYgIIdVYCNIFJ/myJQf6wkTn7AJE1+2SRNfe0iTn37IE58/x9PfP8eT3z/Hk98 + /x7RbQAAw3kAALmCAACwiQAAqI4AAKCQAACWkQAAipAAAH2OAAB3jggAco4aAG+OKABsjjQBaY4+A2aN + RwVjjE8IYIxWC16LXQ5bimURWIltFFWJdhdSiIAaT4eLHUyHmh9JhqsgSIa/IUeG2CBHhe0fR4T7HkeD + /x1Ig/8cSIP/HEiD/xzMcwAAv38AALWIAACsjgAApJMAAJyWAACSlwAAhpYAAHiVAABvlQAAapUSAGeW + IgBkli8AYpU5AV+VQgNclUsFWpRSCFeTWgpUk2INUZJqEE6RcxNLkX4VSJCKGEWQmBpDj6kbQY++G0CP + 1xtAje0bQIz7GkCM/xlAi/8ZQIv/GUCL/xnGegAAuoUAALGOAACplAAAoJkAAJecAACMnQAAgZ0AAHSd + AABnnQAAYJ0JAF2eGQBanicAWJ4zAFaePQFUnUYCUZ1OBE+dVgZMnF4ISpxnCkebcA1Em3sPQZqIEj6a + lhM8mqgUOpm9FTmZ1hQ4mO0VOJb8FTiV/xU4lf8VOJX/FTiV/xXAggAAtYwAAKyUAACkmwAAnJ8AAJGi + AACGowAAeqQAAG6kAABhpQAAVqYAAFGnDgBOpx0ATKcqAEunNQBJpz8AR6dIAUWnUAJDp1kDQadiBT6m + bAc7pngJOaaFCjallAw0paYNMqW8DTGl1g0wo+4NL6H9Dy+g/w8voP8PL6D/Dy+g/w+5iQAAsJQAAKib + AACgoQAAlaUAAIqoAAB+qQAAcqoAAGarAABarAAATq4AAESwAQBAsREAPrEeADyyKgA7sjQAObI+ADiy + SAA3slIANbJcATOyZwIxsnMDL7KBBCyykQUqsqMFKLK6BSey1gUnsO8GJa7+CCWt/wkkrf8JJK3/CSSt + /wmzkgAAq5sAAKOjAACZqAAAjqwAAIKuAAB1rwAAabEAAF2yAABStAAARrYAADu5AAAyuwEALb0OACu9 + GwAqvicAKL4xACe+PAAmvkYAJL9SACO/XgAiv2sAIMB6AB7AiwAcwJ8AGsC3ABnA1AAZvu8BGL3/Ahi8 + /wMYu/8EGLv/BBi7/wStmwAApqMAAJyqAACRrwAAhbIAAHi0AABrtgAAXrcAAFK5AABHvAAAPL4AADLB + AAAoxAAAH8cAABfKBwAUyxMAE8sfABLMKgARzDYAD81CAA3NTwAMzV4ACs5uAAnOgAAHzpQABs6rAATP + yAAEzucABc36AAbM/wAGy/8ABsv/AAbL/wCopAAAn6sAAJSxAACHtQAAebgAAGy6AABfvAAAUr4AAEbB + AAA7wwAAMcYAACfJAAAezAAAFc8AAAzRAAAE1AQAAtUQAADWGwAA1yYAANgyAADZPwAA204AANxeAADc + bwAA3YMAAN2ZAADesgAA3s4AAN/pAADe+QAA3v8AAN7/AADe/wChrAAAlrIAAIm3AAB7uwAAbb4AAF/A + AABSwwAARcYAADnIAAAuywAAJM8AABrRAAAR1AAACNcAAAHaAAAA3AAAAN4DAADfDQAA4RcAAOIiAADk + LgAA5jsAAOhLAADpXAAA6m8AAOuEAADsmgAA7bMAAO3LAADu4gAA7usAAO7rAADu6wCYtAAAi7kAAH69 + AABvwQAAYMQAAFLHAABEygAAN80AACvRAAAg1AAAFtgAAAzbAAAD3QAAAN8AAADhAAAA4wAAAOUAAADn + AAAA6QYAAOsRAADtGwAA8CgAAPI2AAD2RwAA91oAAPluAAD6gwAA+5gAAPusAAD8vwAA/MgAAPzIAAD8 + yACOugAAgL8AAHHDAABixwAAUsoAAEPOAAA20gAAKdcAAB3bAAAS3gAAB+EAAADjAAAA5QAAAOcAAADo + AAAA6gAAAO0AAADvAAAA8QAAAPMAAAD2CAAA+RQAAPwhAAD/MAAA/0IAAP9WAAD/agAA/30AAP+PAAD/ + ngAA/6UAAP+lAAD/pQD/ACEA/wAdAP8AHQD/AB8A/wAqAP8ANgD/AEQA/wBRAP8AXgD/AGkA/wBzAP8A + ewD9AIMA+wCKAPoAkAD5AJUA+QCbAPgAoQD3AKcA9gCtAPYAtQD1AL0A9ADHAPMA0wDyAOEA8ADsAO4A + 9gDtAP8A7QD/AO0A/wDtAP8A7QD/AO0A/wD/Ax0A/wIbAP8AGQD/AB0A/wAnAP8AMwD/AEEA/wBOAP8A + WgD/AGYA/wBwAPsAeAD4AIAA9gCHAPUAjQD0AJIA8wCYAPIAnQDxAKMA8ACqAO8AsQDuALoA7QDDAOwA + zwDrAN0A6QDpAOcA9ADmAP4A5gD/AOUA/wDlAP8A5QD/AOUA/wD/CBoA/wcVAP8CFAD/AhsA/wAlAP8A + MAD/ADwA/wBKAP8AVgD+AGIA+QBsAPUAdADyAHwA7wCDAO4AiQDtAI8A7ACUAOsAmgDqAKAA6QCmAOgA + rQDnALYA5gDAAOQAywDjANkA4ADmAN8A8gDeAPsA3QD/ANwA/wDcAP8A3AD/ANwA/wD/DRQA/wwPAP8K + DQD/DhYA/w0hAP8HKwD/ATgA/wBFAPwAUQD3AF0A8gBnAO4AcADqAHgA6AB/AOYAhQDlAIsA5ACRAOMA + lgDiAJwA4QCjAN8AqgDeALIA3QC8ANsAyADZANQA1gDkANQA7wDTAPgA0gD/ANIA/wDRAP8A0QD/ANEA + /wD/Ew4A/xIHAP8VCQD/GREA/xkbAP8VJgD/DjIA+Ak/APIETADuAFcA6gBiAOYAawDiAHMA4AB7AN4A + gQDdAIcA2wCNANoAkgDZAJgA1wCfANUApgDUAK8A0gC5ANAAxQDOANIAzADiAMsA7gDJAfsAyAL/AMYD + /wDGBP8AxgT/AMYE/wD/GAcA/xgAAP8fBAD/IgsA/yIUAP4fIAD1GisA7hU4AOgRRQDjDlEA3wxcANwL + ZgDZC24A1gt2ANQLfQDTC4MA0QyJANAMjwDODJUAzQycAMwMpADKDK0AyQ23AMcNxADFDdIAww/jAMAR + 8QC+E/0AvBP/ALsT/wG7E/8BuxP/AbsT/wH/HQAA/yEAAP8oAAD/KwQA/yoMAPUnFgDrIyMA5B4wAN0a + PQDYGkoA0xtWANAcYADNHWkAyx1xAMkeeADIHn4Axh6EAMUeigDDH5EAwh+XAMAfnwC/H6gAvR+zALwf + vwC6H84AuB/fALUg7gGzIfsCsSD/ArAg/wKwIP8CsCD/ArAg/wL/IgAA/ykAAP8xAADzMwAA7DECAOst + CwDiKBcA2iUlANInNgDNKUQAySpQAMUrWwDDLGQAwC1sAL4tcwC8LXkBuy1/AbkshQG4LIwBtyyTArUs + mwK0LKQCsiyuArAsuwOvLMoDrSzcA6os6wSoLPkEpyz/BaYr/wWlK/8FpSv/BaUr/wX/JwAA/zEAAO83 + AADiOwAA3TwAANk3AgDYLwoAzzEeAMk0MADDNj4AvzdLALs4VgC4OF8BtjhnAbQ4bgKyOHQDsDd6A683 + gQStN4cErDeOBao2lgWpNp8GpzaqBqY2tgakNcUHozXXB6A16AieNfcInTX/CJw1/webNf8HmzX/B5s1 + /wf/KwAA9jcAAORAAADcRgAA1EgAANBFAADNPQQAxz0YAMA/KgC6QTkAtkJGALJCUQGvQloCrEFiA6pB + aQSoQXAFp0B2BqVAfAejP4IHoj+KCKA+kQmfPpsKnT6lCpw9sguaPcEMmT3TDJc95gyVPfULkz3/C5M9 + /wuSPf8Kkj3/CpI9/wr/MgAA6j4AAN9JAADVTwAAzVEAAMhPAADFSQAAv0cSALhJJQCySjQArktBAKpK + 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 + /xLBeQAAtoQAAK2MAAClkgAAnZYAAJOYAACImAAAfJgAAHCYAABjmAAAWZgBAFSYEgBRmCAAT5grAE6Y + NgBMmD8ASphIAUiYUAJGl1gDRJdhBEGXawY/lnYIPJaCCjmWkAs3laEMNZW1DTSVzQ0zk+cNM5L3DjKR + /w4ykP8OMpD/DjKQ/w67gQAAsYsAAKmSAAChmAAAmJwAAI2eAACCnwAAdp8AAGqfAABdoAAAUaAAAEmh + BgBFoRUAQ6EiAEGhLQBAoTcAPqFAAD2iSQA7olMAOqFcATehZgI1oXIDM6F/BDCgjQUuoJ8GLKCzBiug + zAYqn+cHKZ34CCmc/wkom/8KKJv/Ciib/wq2iQAArJIAAKSZAACcngAAkqIAAIakAAB6pQAAbqYAAGKm + AABWpwAASagAAD+qAAA3qwgANKwWADKsIgAxrCwAL6w2AC6sQAAtrEoAK6xUACqtYAAorWwAJqx6ACSs + iQEirJsBIayxAR+sywEfq+cCHqn5Ax2o/wQdp/8FHaf/BR2n/wWwkQAAqJoAAKCgAACWpQAAiqgAAH6q + AABxqwAAZawAAFmtAABNrwAAQrEAADazAAAttQAAJLcFACC4EgAfuB4AHbgpABy4MwAbuT4AGblJABi5 + VQAWuWMAFblxABO6ggARupUAD7qsAA26xwANueUADrf4AA62/wEOtf8BDrX/AQ61/wGqmgAAo6EAAJmn + AACNqwAAga4AAHSwAABnsgAAWrMAAE61AABCtwAAN7kAAC27AAAjvQAAGsAAABHCAQAJxAsAB8UYAAbF + IwAFxS8AA8Y7AALGSAABxlYAAMZlAADGdgAAxokAAMaeAADGtwAAxtQAAMbtAADG+wAAxf8AAMX/AADF + /wClogAAnKkAAJCuAACEsgAAdrQAAGm3AABbuQAATroAAEK9AAA2vwAALMEAACLEAAAYxgAADskAAAbL + AAAAzQIAAM4MAADPFwAA0CEAANEsAADSOQAA00YAANVWAADVZwAA1XoAANWOAADVpgAA1cAAANXcAADW + 7gAA1voAANb6AADW+gCeqgAAk7AAAIa0AAB4uAAAarsAAFy9AABOvwAAQcIAADXEAAAqxwAAH8oAABXM + AAALzwAAAtEAAADTAAAA1QAAANgAAADZCAAA2xIAAN0dAADfKAAA4TUAAORDAADlVAAA5mcAAOd7AADn + kQAA56kAAOfDAADo2QAA6OkAAOjpAADo6QCVsgAAiLcAAHq7AABsvgAAXcEAAE7EAABAxwAAM8oAACfN + AAAb0AAAEdMAAAbWAAAA2QAAANsAAADdAAAA3wAAAOEAAADjAAAA5QIAAOcLAADqFgAA7CIAAO8wAADz + QAAA9VMAAPZnAAD3ewAA+JEAAPinAAD4ugAA+MsAAPjLAAD4ywCLuAAAfb0AAG7BAABfxAAAT8gAAEDL + AAAyzwAAJdMAABjWAAAN2gAAAt0AAADgAAAA4gAAAOMAAADlAAAA5wAAAOkAAADsAAAA7gAAAPEAAADz + AwAA9g4AAPocAAD9KwAA/zwAAP9QAAD/ZQAA/3kAAP+LAAD/mwAA/6kAAP+pAAD/qQD/AB0A/wAaAP8A + GQD/ABsA/wAnAP8ANAD/AEIA/wBPAP8AWwD/AGcA/wBwAP4AeQD9AIAA/ACHAPsAjAD6AJIA+QCXAPgA + nQD4AKMA9wCpAPYAsQD1ALkA8wDDAPEAzgDwAN0A7wDqAO4A9gDuAP8A7QD/AO0A/wDtAP8A7AD/AOwA + /wD/ABoA/wAWAP8AFAD/ABkA/wAkAP8AMQD/AD4A/wBLAP8AVwD9AGMA+gBtAPgAdQD2AH0A9QCDAPQA + iQDzAI8A8gCUAPIAmgDxAJ8A8ACmAO8ArQDtALUA6wC/AOkAygDoANgA5wDnAOYA8wDmAPwA5QD/AOUA + /wDkAP8A5AD/AOQA/wD/ABYA/wAQAP8ADQD/ABYA/wAhAP8ALAD/ADoA/wBHAPwAUwD2AF8A8wBpAPEA + cQDvAHkA7gB/AO0AhQDsAIsA6gCQAOoAlgDpAJsA6ACiAOYAqQDkALEA4gC6AOEAxQDfANMA3gDiAN0A + 7wDcAPkA2wD/ANoA/wDZAP8A2QD/ANkA/wD/BQ8A/wIIAP8ACQD/ARMA/wAcAP8AKAD/ADUA+wBBAPQA + TgDuAFoA6wBkAOkAbQDnAHQA5QB7AOQAgQDjAIcA4QCMAOAAkgDfAJcA3gCeANwApADaAKwA2AC2ANYA + wQDUAM4A0gDeANEA6wDQAPcAzwD/AM4A/wDNAP8AzQD/AM0A/wD/CggA/wcAAP8KBAD/DA0A/wsXAP8E + IgD7AC4A9AA7AOwASADlAFQA4wBeAOAAaADeAG8A3AB2ANoAfQDYAIIA1gCIANUAjQDTAJMA0gCZANAA + oADOAKkAzACyAMsAvQDJAMoAyADaAMYA6ADFAPQAwwD9AMIA/wDCAP8AwQD/AMEA/wD/EAAA/w4AAP8V + AAD/FwYA/xUPAPoRGwDxCScA6gM0AOIAQQDdAE0A2QBYANUAYgDTAGoA0QBxAM8AeADNAH4AzACDAMoA + iQDJAI8AxwCWAMYAnQDEAKUAwgCvAMEAugC/AcgAvQLYALwD5wC5BfYAuAb/ALcH/wC2B/8Atgf/ALYH + /wD/FQAA/xkAAP8fAAD6IAAA9R0FAPAZEQDnEx0A3wwqANgKOQDTDEYAzw5SAMwPXADJEGUAxxFsAMUR + cwDDEnkAwRJ/AMAShQC+EosAvRKSALwTmgC6E6IAuROsALcTuQC1E8cAtBPYALEV6QCuFvcArRf/AKwX + /wCrF/8Bqxf/AasX/wH/GgAA/yIAAPQnAADmKAAA4SYAAN4fBADdFxAA1BghAM4bMgDIHkAAxB9MAMAg + VgC+IV8AuyFnALkibgC4InQAtiJ6ALUigACzIocAsiKOALAilQCvI54ArSOoAKwjtACqIsMAqSLTAKYj + 5gGkI/UBoiP/AqEj/wKhI/8CoCP/AqAj/wL/HwAA9yoAAOYyAADeNgAA2DYAANMxAADRJwcAyicaAMQq + KwC+LDoAui1GALYuUQCzLloAsS9iAK8vaQCtL3AArC92AKovfAGpL4IBpy+JAaYvkQGkLpkCoy6kAqEu + sAKgLr4Dni7PA5wu4gOaLvIEmC7+BJcu/wSWLv8Eli7/BJYu/wT/JgAA6zIAAOA9AADWQgAAz0MAAMo/ + AADHNwEAwTMTALo2JQC1NzQAsDlBAK05TACqOVUApzldAaU5ZQGjOWsCojlxAqA5dwKfOX4DnTiFA5w4 + jASaOJUFmTifBZc3rAaWN7oGlDfLBpI33weQN/AHjzf9B443/waONv8GjTb/Bo02/wb5LQAA5jsAANpG + AADQSwAAyE0AAMNKAAC+QwAAuT4NALJAIACtQS8AqEI8AKVCSAChQlEBn0JZAZ1CYAKbQmcDmUFtBJdB + cwSWQHkFlECABpJAiAeRP5EIjz+cCI4/qAmMP7YKiz7ICok+3AqIPu4Khj77CYY+/wmFPv8JhT7/CIU+ + /wjvMwAA4UMAANRNAADKUwAAw1UAAL1TAAC3TAAAskcHAKtIGwClSSsAoUo4AJ1KQwCaSk0Bl0pVApVJ + XAOTSWMEkUhpBY9IbwaNR3YHjEd9CIpGhQmJRo4Kh0WYC4VFpAyERbMNgkXFDoFE2Q6AROwNf0T6DH5E + /wt+RP8LfkT/C35E/wvrOgAA3UoAANBUAADGWQAAvlsAALdaAACxVQAAq08CAKVPFgCfUCcAmlA0AJdQ + QACTUEkBkFBRAo5PWASMT18Fik5lBohObAeGTXIJhE15CoNMgQuBTIoNf0uVDn5LoQ98SrAQe0rCEXpK + 1hF4SuoQeEr5DndK/w13Sv8Nd0r/DHdK/wzoQAAA2U8AAMxZAADCXwAAumEAALNgAACsXAAAplUAAJ9V + EgCZViMAlFYxAJFWPACNVkYBilVOA4hVVQSFVFwFg1NiB4FTaQiAUm8JflJ2C3xRfg17UYgOeVCSEHdQ + nxF1T60SdE+/E3NP1BNyT+gScU/4EHFP/w9xTv8OcU7/DnFO/w7kRgAA1VQAAMheAAC/YwAAt2YAAK9l + AACoYQAAoFsAAJlaDQCUWx8Aj1stAItbOQCIW0MBhVpLA4JZUgSAWVkFflhfB3xXZgh6V2wKeFZ0DHZW + fA51VYUPc1WQEXFUnBNvVKsUblS9FWxT0hVsU+cUa1P3EmtT/xBrU/8Pa1P/D2tT/w/hSgAA0lgAAMVi + AAC8ZwAAtGoAAKxqAACkZwAAnGAAAJRfCQCOXxsAil8qAIZgNgCDX0ABgF5IAn1eUAR7XVYFeFxdB3Zc + Ywh1W2oKc1txDHFaeg5vWoMQbVmOEmtZmhRpWKkVaFi7FmdY0BZmV+YVZlf2E2ZX/xFmV/8QZlf/EGZX + /xDeTwAAzlwAAMNlAAC5awAAsW4AAKluAAChawAAl2UAAI9kBQCKYxcAhWQmAIFkMwB+Yz0Be2NGAnhi + TQN2YVQFc2BaBnJgYQhwYGgKbl9vDGxfeA5qXoERaF2ME2ZdmRVkXKcWY1y5F2FczhdhW+UWYVv1FGFb + /xJhW/8RYVv/EWFb/xHbUwAAy2AAAMBpAAC3bgAArnEAAKZyAACdcAAAk2kAAItoAQCFaBQAgGgjAHxo + MAB5ZzoAdmdDAnRmSwNxZVIEb2VYBm1kXwhrZGYKaWNtDGdjdg5lYn8RY2KKE2FhlxVfYaYWXWC4F1xg + zRdbYOQXXF/1FFxf/xNcX/8SXF//EVxf/xHYVwAAyGQAAL1tAAC0cgAAq3UAAKN2AACadAAAjm4AAIZt + AAB/bBAAe2wfAHhsLAB1bDcAcmtBAW9rSQNtalAEa2pXBmlpXQhnaWQKZWhsDGJodA5gZ34QXmaIE1xm + lRVaZaQWWGW2F1dlzBdWZOMXVmT0FFdk/xNXY/8SV2P/Eldj/xLUXAAAxWgAALpwAACxdgAAqXkAAKB6 + AACXeQAAinIAAIFxAAB7cQsAdnAcAHNwKQBwcDQAbXA+AWtwRgJpb04EZm9VBWRuWwdibmIJYG1qC11t + cg1bbHwQWWyHElZrlBRUaqMWUmq1FlFqyhdQaeIWUWn0FFFo/xNRaP8SUWj/ElFo/xLQYQAAwm0AALd1 + AACuegAApn0AAJ1+AACUfgAAh3kAAHx2AAB1dgYAcHYXAG12JQBqdjEAaHY7AGZ2QwFjdUsDYXVSBF90 + WQZddGAIWnNoClhzcAxVcnoPU3GFEVBxkhNOcKEUTXC0FUtwyRVLb+EVS27zE0tu/xJLbf8RS23/EUtt + /xHLZgAAv3EAALR5AACrfgAAo4IAAJqDAACRgwAAhIAAAHh9AABvfAEAansSAGZ8IABkfCwAYnw3AGB8 + QAFee0gCW3tPA1l7VgVXel4GVXlmCFJ5bgpPeXgNTXiDD0p3kBFId6ASRnayE0V2yBNEduETRHXzEkR0 + /hFFc/8QRXP/EEVz/xDHbAAAu3YAALF+AACogwAAoIcAAJeJAACNiAAAgYcAAHSEAABpggAAYoILAF+C + GwBcgicAWoMyAFiDPABWgkQBVIJMAlKCUwNQgVsEToFjBkyAbAhJgHYKRn+BDER/jw5Bfp4PP36xED5+ + xxA9feAPPXzyDz17/g89ev8PPXr/Dz16/w/CcgAAtnwAAK2DAACkiQAAnI0AAJSOAACJjgAAfY0AAG+L + AABkigAAW4oDAFaKFABTiiEAUYosAE+KNgBOij8ATIpHAEqKTwFIiVcCRolgA0SJaQVBiHQHP4h/CDyH + jQo6h5wLOIevCzeGxgs2huALNoTyDDWD/ww1gv8MNYL/DDWC/wy9eQAAsoIAAKmJAAChjwAAmZMAAI+U + AACElAAAeJQAAGuTAABekgAAU5IAAEySCgBJkhgARpIkAEWSLwBDkjgAQpJBAECSSgA/klIAPZJcATuS + ZQI5knADNpF8BDSRigUykZoGMJCuBi6QxQYuj98GLY7zByyM/wgsjP8JLIv/CSyL/wm3gAAArYkAAKWQ + AACelQAAlJgAAIqaAAB+mwAAcpoAAGWaAABYmgAATZsAAEKbAAA8nA0AOpwaADicJgA2nDAANZw5ADOc + QgAynEsAMJxVAC+cYAAtnGsAK5x4ASmbhwEnm5cCJZurAiSbwwIjmt8CIpjzAyKX/wQilv8FIpb/BSKW + /wWyiAAAqZAAAKGXAACZnAAAjp8AAIOgAAB2oQAAaqEAAF6hAABRogAARaMAADukAAAxpQAAKqYNACim + GgAnpyQAJacuACSnOAAip0IAIadNAB+nWAAep2QAHKdyABqngQAYp5MAF6enABWnwAAUpt4AFaTzABWj + /wEVov8CFaL/AhWi/wKskAAApZgAAJ2eAACSogAAh6UAAHqmAABtpwAAYagAAFSpAABIqgAAPasAADKt + AAAorwAAHrAAABayCQAUshUAErMgABGzKwAPszYADbNBAAyzTQAKs1sACbNpAAezeQAFs4sAA7KfAAGy + twAAstIAAbHsAAKw+wADr/8AA6//AAOv/wCnmQAAoKAAAJalAACKqAAAfasAAHCsAABjrgAAVq8AAEqx + AAA+sgAAM7QAACi2AAAeuAAAFLoAAAu8AAADvQkAAL0UAAC+HwAAvikAAL81AAC/QQAAwE8AAMBeAADA + bgAAwIAAAMCTAADAqgAAwMQAAL/gAAC/8gAAvv4AAL7/AAC+/wCjoQAAmacAAI2rAACArwAAc7EAAGWz + AABXtQAASrcAAD65AAAyuwAAJ70AABy/AAASwQAACcMAAADFAAAAxgAAAMcJAADIEwAAyR0AAMonAADL + MwAAzEAAAM5PAADOYAAAz3IAAM+FAADPmwAAz7MAANDNAADQ5QAAz/QAAM/2AADP9gCbqAAAkK4AAIOy + AAB1tQAAZrcAAFi6AABKvAAAPb4AADHBAAAlwwAAGsUAAA/HAAAFygAAAMwAAADOAAAA0AAAANEAAADT + BAAA1Q0AANcYAADZIwAA3C8AAN4+AADgTwAA4WIAAOF1AADiigAA46EAAOO5AADjzwAA5eIAAOXmAADl + 5gCSsAAAhbQAAHe4AABouwAAWb4AAEvBAAA9xAAAL8YAACPJAAAXzAAAC84AAAHRAAAA1AAAANYAAADY + AAAA2wAAAN0AAADfAAAA4QAAAOQGAADmEQAA6R0AAOwqAADvOgAA8U0AAPJiAADydwAA840AAPSiAAD1 + tgAA9cgAAPXMAAD1zACItgAAeroAAGu+AABbwQAATMUAADzIAAAuzAAAIc8AABTSAAAI1gAAANkAAADc + AAAA3gAAAOAAAADiAAAA5AAAAOYAAADpAAAA6wAAAO4AAADxAAAA9AkAAPgWAAD8JQAA/zYAAP9LAAD/ + YQAA/3cAAP+LAAD/nQAA/6wAAP+wAAD/sAD/ABkA/wAWAP8AFQD/ABgA/wAkAP8AMgD/AD8A/wBMAP8A + WQD/AGQA/wBtAP4AdgD9AH0A/ACDAPsAiQD6AI8A+QCUAPgAmQD3AJ8A9QClAPQArADyALUA8gC/APEA + ywDwANoA7wDoAO4A9QDtAP8A7AD/AOsA/wDrAP8A6wD/AOsA/wD/ABUA/wARAP8ADgD/ABYA/wAhAP8A + LgD/ADsA/wBIAP4AVQD7AGAA+QBqAPgAcgD2AHkA9QCAAPQAhgDzAIsA8gCQAPAAlQDvAJsA7QChAOwA + qADrALAA6gC6AOkAxgDoANQA5wDjAOUA8QDkAPwA4gD/AOIA/wDiAP8A4gD/AOIA/wD/ABAA/wAKAP8A + CQD/ABIA/wAdAP8AKQD/ADYA+gBEAPcAUAD0AFwA8gBlAPAAbgDuAHUA7QB8AOsAgQDqAIcA6QCMAOcA + kQDlAJcA5ACdAOMApADhAKwA4AC1AN8AwQDeAM4A3ADfANoA7QDYAPgA1wD/ANYA/wDWAP8A1gD/ANYA + /wD/AAgA/wADAP8ABQD/AA4A/wAYAP8AJAD6ADEA8QA+AO4ASwDsAFYA6QBgAOcAaQDlAHEA4wB3AOIA + fQDgAIMA3gCIANwAjQDaAJIA2QCZANgAnwDWAKcA1ACxANMAvADRAMkAzwDZAM0A6ADMAPQAywD/AMoA + /wDKAP8AyQD/AMkA/wD/AQEA/wAAAP8AAAD/AAgA/wATAP4AHQDxACoA6AA4AOUARQDiAFAA3wBbAN0A + ZADaAGsA2AByANUAeADTAH4A0QCDANAAiADOAI4AzQCUAMwAmwDKAKMAyACsAMcAtwDFAMQAwwDTAMEA + 4wDAAPEAvwD7AL4A/wC9AP8AvQD/AL0A/wD/BgAA/wYAAP8LAAD/CwAA/wcKAPYAFQDoACIA4AAwANwA + PgDYAEoA1ABVANEAXgDOAGYAywBtAMkAcwDIAHkAxgB/AMUAhADDAIoAwgCQAMAAlwC/AJ8AvQCoALsA + swC5AMAAuADPALYA4QC1AO4AswD5ALIA/wCxAP8AsQD/ALEA/wD/CwAA/xEAAPsVAADvFAAA6Q8AAOoI + CgDdABcA2AAnANIBNgDNAkMAyQNOAMYDWADDBGAAwQVoAL8FbgC9BXQAvAZ6ALoGgAC5BoYAtwaMALYG + kwC0BpwAswelALEHsQCvB74ArgfOAKwI4ACqCvAAqAv9AKcM/wCmDP8Apgz/AKYM/wD/EAAA+xoAAOkf + AADhIwAA3CAAANgYAQDWCgoAzwwdAMkQLgDDEjwAvxRIALwVUgC5FlsAthZiALQXaQCzF28AsRd1AK8X + ewCuGIEArRiIAKsYkACqGJgAqBiiAKcYrgClGLwApBjMAKIZ3wCfGvAAnRr9AJwb/wCbG/8Amxv/AJsb + /wD/GQAA7SQAAOIuAADZMgAA0jEAAM0rAADKIQQAxRwWAL4gJwC5IjUAtSNCALEkTACuJVUArCVdAKol + ZACoJWsApiVxAKUmdwCjJn0AoiaEAKEmiwCfJpQAniaeAJwmqgCaJrgAmSbIAJcm3AGVJu0Bkyf7AZIn + /wKRJv8CkSb/ApEm/wL3IQAA5zAAANw5AADRPgAAyj4AAMU5AADAMQAAvCoOALUsIQCvLjAAqy88AKcw + RwCkMFAAojFYAKAxYACeMWYAnTFsAJsxcgCaMXkAmDGAAZcxhwGVMZABlDGaApIxpgKQMLQCjzDEAo4w + 2AOMMOoDijD5A4kw/wOIMP8DiDD/A4gw/wPvKgAA4jkAANVDAADLSAAAw0gAAL1FAAC4PgAAszYIAK03 + GwCnOCsAojk3AJ86QgCcOkwAmTpUAJc6WwCVOmIBlDpoAZI6bgGQOnUCjzp8Ao06gwOMOYwDijmWBIk5 + ogSHObAFhjnBBYU41AWDOOgGgTj3BYE4/wWAOP8FgDf/BYA3/wXqMgAA3UEAAM9LAADFUAAAvlAAALdO + AACxSAAAq0ACAKVAFgCfQSYAm0IzAJdCPgCUQkgAkkJQAI9CVwGNQl4BjEJkAopBagKIQXEDh0F4BIVB + gASEQIgFgkCTBoBAnwd/QK0Ifj++CHw/0Qh7P+YIej/2CHk//wd5Pv8HeD7/B3g+/wfmOgAA2EgAAMtR + AADBVgAAuVcAALJVAACrUAAApUkAAJ5HEQCZSCEAlEkvAJBJOgCNSUQAi0lMAIhJVAGGSFoChEhhAoNI + ZwOBR20Ef0d1BX5HfAZ8RoUHe0aQCHlGnAl3RaoKdkW7C3VFzwt0ReQLc0X1CnJE/wlyRP8IckT/CHJE + /wjjQAAA000AAMdWAAC9WwAAtV0AAK1bAACmVgAAn1AAAJhNDACSTh0Ajk8rAIpPNwCHT0EAhE9JAIJO + UAGATlcCfk1dA3xNZAR7TWoFeUxyBndMeQd2TIMIdEuNCnJLmQtxS6cMb0q4DW5KzA1tSuMNbErzC2xK + /wpsSf8KbEn/CWxJ/wngRQAA0FIAAMRbAAC6YAAAsmIAAKphAACiXQAAmlYAAJJTBwCNUxkAiFQnAIVU + MwCCVD0Af1RGAHxTTQF6U1QCeFJaA3ZSYQR1UmgFc1FvBnFRdwhwUIAJblCLC2xQlwxrT6UNaU+2DmhP + yg5nT+EOZk/yDWZO/wtmTv8LZk7/CmZO/wrcSgAAzFcAAMFfAAC3ZAAAr2YAAKdlAACeYgAAlVwAAI1Y + AwCHWBUAg1gkAH9YMAB8WDoAelhDAHdYSwF1V1ECc1dYA3FWXgRvVmUFblZtB2xVdQhqVX4KaFWJC2dU + lQ1lVKMOY1O0D2JTyQ9hU+APYVPyDmFS/gxhUv8MYVL/C2FS/wvZTgAAyVsAAL5jAAC0aAAArGoAAKRq + AACbZwAAkWAAAIldAACCXBEAfl0gAHpdLQB3XDcAdFxAAHJcSAFwW08CbVtVAmxbXARqWmMFaVprB2da + cwhlWXwKY1mHDGFYkw5gWKIPXlizEF1XxxBcV98QXFfxDlxX/Q1cVv8MXFb/DFxW/wzVUgAAxl8AALtm + AACyawAAqW4AAKFuAACYawAAjWUAAIRiAAB9YQ0AeWEdAHVhKQByYTQAcGE9AG1gRQFrYE0BaWBTAmdf + WgRmX2EFZF9pB2JecQhgXnoKXl2FDFxdkQ5aXKAPWVyxEFdcxhBWW94QV1vwD1db/Q1XWv8NV1r/DFda + /wzSVwAAxGIAALlqAACvbwAAp3IAAJ5yAACVcAAAiWoAAH9mAAB5ZgkAdGUZAHBlJgBtZTEAa2U7AGll + QwBnZUsBZWRSAmNkWANhZF8FX2NnBl1jbwhbY3kKWWKDDFdikA1VYZ4PU2GwEFJhxRBRYNwQUWDwD1Ff + /Q5SX/8NUl7/DFJe/wzOWwAAwWYAALZuAACtcwAApHYAAJx2AACSdQAAhW4AAHprAAB0awUAbmoVAGtq + IwBoai4AZmo4AGRqQQBiakgBYGpPAl5pVgNcaV0EWmllBlhobQdWaHcJVGeCC1Jnjg1QZp0OTmauD0xm + ww9LZdsPTGXvDkxk/A1MZP8NTGP/DExj/wzKYAAAvWsAALNyAACqdwAAoXoAAJl7AACPegAAg3UAAHdy + AABucAAAaG8RAGVvHwBicCoAYHA0AF5wPQBdcEUAW29NAVlvVAJXb1sDVW5jBVNuawZQbnUITm2ACkxt + jQxKbJsNSGytDkZswg5Fa9oORWruDUZp/A1Gaf8MRmn/DEZp/wzGZQAAum8AALB3AACnfAAAn38AAJaA + AACMfwAAgHsAAHR5AABpdgAAYnULAF52GgBcdiYAWnYwAFh2OgBWdkIAVHZKAFN2UQFRdVkCT3VhBE11 + aQVKdHMHSHR+CEVziwpDc5oLQXKrDEBywQw/ctkMP3HuDD9w/As/b/8LP2//Cz9v/wvCawAAtnQAAKx8 + AACkgQAAnIQAAJOFAACJhQAAfYMAAHCAAABlfgAAW3wEAFZ8FABUfCAAUn0rAFB9NQBOfT4ATX1GAEt9 + TgBJfFYBSHxeAkV8ZwNDe3EFQXt8Bj57iQc8epgIOnqqCTl6vwk4edgJOHjtCTd3+wk3dv8JN3b/CTd2 + /wm9cQAAsnoAAKmBAAChhgAAmYkAAJCLAACFiwAAeYkAAGuHAABghgAAVIQAAE2EDABKhBoASIQlAEeE + LwBFhDgARIRBAEKESQBBhFEAP4RaAT2EZAE7g24COYN6AzaDhwQ0g5YFMoKoBjGCvgYwgtcFL4DtBi9/ + /Acvfv8HL37/By9+/we4dwAAroAAAKWHAACdjAAAlpAAAIyRAACAkQAAdJAAAGeOAABajQAAT40AAESM + AwA/jREAPY0dADyNKAA6jTEAOI06ADeNQwA2jUwANI1VADONXwAxjWoAL4x2AS2MhAErjJQCKYymAieL + vAImi9YCJontAyWI/AQlh/8EJYb/BSWG/wWzfwAAqocAAKKOAACakwAAkZUAAIaXAAB6lwAAbpYAAGGW + AABTlQAASJUAAD2WAAA0lgYAMJYTAC6XHgAslygAK5cyACmXOwAol0QAJ5dOACWXWQAjlmQAIpZxACCW + gAAelpAAHJajABqWugAZldQAGZTtABqS/AEakf8CGpH/AhqR/wKuhwAApo8AAJ6VAACWmQAAi5sAAH+d + AABznQAAZp0AAFmdAABNnQAAQJ4AADafAAAsoAAAIqEFAB6hEgAcoR0AG6EnABmhMQAYoTsAFqJFABWi + UAATol0AEaJrAA+hegANoYsAC6GeAAmgtAAHoM4ACJ/pAAme+QAKnf8ACpz/AAqc/wCpjwAAopYAAJqc + AACPnwAAg6IAAHejAABqowAAXaQAAFCkAABEpQAAOKYAAC2oAAAjqQAAGaoAABCsAwAJrQ4AB60aAAWt + JAAErS8AAq07AACtRwAArVQAAK1iAACtcQAArIIAAKyVAACsqwAAq8QAAKvgAACq8gAAqvwAAKn/AACp + /wCklwAAnZ4AAJOiAACHpgAAeqgAAG2pAABfqgAAUqsAAEWsAAA5rQAALq8AACOxAAAZsgAAD7QAAAa2 + AAAAtwYAALcRAAC4GgAAuCQAALkvAAC5OwAAukgAALpWAAC6ZgAAuncAALmLAAC5oAAAubgAALnSAAC4 + 6gAAuPYAALj9AAC4/QCgnwAAlqUAAIqpAAB9rAAAb64AAGGvAABTsQAARrIAADm0AAAttgAAIrgAABe6 + AAAMvAAAA74AAAC/AAAAwAAAAMEGAADCDgAAwxgAAMQiAADGLQAAxzoAAMlIAADJWAAAymoAAMp9AADK + kgAAyaoAAMnEAADK3QAAyuwAAMr0AADK9ACYpwAAjasAAICvAABysgAAY7QAAFS2AABGuAAAOboAACy9 + AAAgvwAAFcEAAArDAAAAxQAAAMcAAADJAAAAygAAAMwAAADNAQAAzwoAANAUAADTHgAA1SoAANk4AADb + SAAA3FoAAN1uAADeggAA35gAAN+wAADeyQAA3t0AAN/nAADf5wCPrgAAgrIAAHS1AABluAAAVrsAAEe9 + AAA4wAAAK8MAAB7FAAASyAAABsoAAADMAAAAzwAAANEAAADTAAAA1QAAANgAAADaAAAA3QAAAN8DAADh + DQAA5BkAAOcnAADrNgAA7UgAAO5cAADwcQAA8YYAAPGcAADysQAA8sMAAPPOAADzzgCFtAAAdrgAAGe7 + AABYvgAASMIAADnFAAAqyQAAHMwAABDPAAAD0QAAANQAAADYAAAA2gAAANwAAADeAAAA4QAAAOMAAADm + AAAA6AAAAOsAAADuAAAA8QUAAPUSAAD4IgAA/DMAAP5IAAD/XQAA/3MAAP+IAAD/mgAA/6kAAP+zAAD/ + swD/ABQA/wARAP8AEAD/ABUA/wAhAP8ALwD/AD0A/wBKAP8AVgD/AGEA/wBqAP8AcwD9AHoA/ACAAPoA + hgD5AIsA9wCQAPYAlQD1AJsA9AChAPMAqADzALEA8gC7APEAxwDwANYA7gDmAO0A9ADsAP8A6wD/AOsA + /wDrAP8A6wD/AOsA/wD/ABAA/wALAP8ACQD/ABIA/wAeAP8AKgD/ADkA/wBGAP4AUgD7AF0A+QBnAPcA + bwD2AHYA9AB8APIAggDwAIcA7wCMAO4AkQDtAJcA7ACdAOsApADqAKwA6QC2AOgAwgDmANAA5ADhAOMA + 7wDiAPwA4gD/AOEA/wDhAP8A4QD/AOEA/wD/AAoA/wAGAP8ABAD/AA4A/wAZAP8AJgD6ADQA9wBBAPYA + TQDzAFgA8QBiAO8AagDtAHIA6gB4AOgAfQDmAIMA5QCIAOQAjQDjAJMA4gCZAOEAoADgAKgA3gCxAN0A + vADbAMoA2ADaANcA6gDVAPgA1QD/ANQA/wDUAP8A0wD/ANMA/wD/AAMA/wAAAP8AAAD/AAkA/wAUAPkA + IADxAC4A7gA7AOwASADqAFMA5wBdAOQAZQDiAG0A3wBzAN0AeQDcAH4A2gCEANkAiQDYAI4A1gCUANQA + mwDTAKMA0QCsAM8AtwDNAMQAywDTAMoA5QDJAPIAyAD9AMcA/wDGAP8AxgD/AMYA/wD/AAAA/wAAAP8A + AAD/AAMA/wANAPAAGQDoACcA5QA1AOIAQgDfAE0A3ABXANgAYADVAGcA0gBuANAAdADPAHkAzQB/AMwA + hADLAIoAyQCPAMgAlgDGAJ4AxACnAMIAsQDAAL4AvwDNAL0A3wC8AO0AuwD5ALoA/wC5AP8AuQD/ALkA + /wD/AAAA/wAAAP8AAAD5AAAA9gAEAOUAEADgAB8A2wAuANYAOwDSAEcAzwBRAMsAWgDJAGIAxwBpAMUA + bwDDAHUAwgB6AMAAfwC/AIUAvQCLALsAkgC6AJkAuACiALYArQC0ALkAswDIALEA2gCvAOoArgD2AK0A + /gCtAP8ArAD/AKwA/wD/AAAA/wcAAO8JAADmCQAA4QQAAN0ABQDXABYA0QAlAMwAMwDIAEAAxABKAMEA + VAC+AFwAvABjALoAagC4AHAAtgB1ALUAewCzAIAAsgCHALAAjgCuAJYArQCfAKsAqQCpALYAqADFAKYA + 1gCkAOcAowD1AKIB/wChAf8AoAL/AKAC/wD/CQAA7xIAAOUbAADdHgAA1hoAANISAADPBAoAyQIaAMME + KgC+BzgAuglEALYKTgCzC1YAsQteAK8MZACtDGsArAxwAKoMdgCpDHwApw2DAKYNigCkDZIAow2cAKEN + pwCgDbQAng3EAJwN1wCaEOoAmBH5AJcS/wCWEv8AlRL/AJUS/wD4EwAA6SEAAN4qAADTLQAAzCwAAMcl + AADEGwEAwBIRALkVIgC0FzEArxk9AKwaSACpG1EAphtYAKQbXwCjHGYAoRxsAJ8ccgCeHHgAnRx+AJsc + hgCaHI4AmB2YAJYdowCVHbEAkx3BAJId0wCQHucAjh73AI0f/wCMHv8AjB7/AIwe/wDvHgAA4i0AANY2 + AADMOgAAxDkAAL80AAC6LAAAtiIKAK8jHACqJSsApiY4AKInQgCfJ0sAnChTAJooWgCZKGEAlyhnAJUo + bQCUKXMAkil6AJEpggCQKYoAjimUAI0poACLKa0Aiim9AIgp0ACHKeUBhSn1AYQp/wGDKf8Bgyn/AYMp + /wHqKQAA3TcAAM9AAADFRAAAvkMAALdAAACyOQAArDADAKcuFgChMCYAnTEyAJkxPQCWMkcAkzJPAJEy + VgCPMl0AjjNjAIwzaQCLM28AiTN2AIgzfgCHM4cBhTKQAYQynAGCMqoCgTK6An8yzQJ+MuICfDLzAnsy + /wN7Mf8CejH/Anox/wLmMQAA1z8AAMpIAADASwAAuEwAALFJAACrQwAApTsAAJ83EQCZOCAAlTouAJE6 + OQCOOkIAjDtLAIk7UgCIO1kAhjtfAIQ7ZQCDO2wBgTpzAYA6egF+OoMCfTqNAns6mQN6OqYDeDq3BHc5 + ygR2OeAEdTnxBHQ5/gRzOf8Eczj/BHM4/wThOQAA0kYAAMZOAAC8UgAAtFMAAKxRAAClSgAAnkQAAJg/ + CwCSQBwAjkEpAIpBNQCHQj8AhEJHAIJCTgCAQlUAf0FcAH1BYgF8QWgBekFvAnlBdwJ3QYADdUCKBHRA + lgVyQKQFcUC0BnBAyAZuP94GbT/wBm0//QVtP/8FbD7/BWw+/wXePwAAzkwAAMJTAAC4VwAAsFkAAKhX + AACgUgAAmUwAAJFGBgCMRhcAh0clAIRHMQCBSDsAfkhDAHxHSwB6R1IAeEdYAXZHXwF1R2UCc0dtAnJG + dANwRn0Eb0aIBW1GlAZsRaEHakWyB2lFxQhoRdwIZ0XvB2dE/AZmRP8GZkT/BmZE/wbaRAAAylEAAL9Y + AAC1XAAArV4AAKVcAACcWAAAlFIAAIxMAgCGTBMAgUwhAH5MLQB7TTgAeE1AAHZNSAB0TE8AckxVAXBM + XAFvTGMCbUxqA2xLcgRqS3sFaUuFBmdLkQdmSp8IZEqwCGNKwwliStoJYUruCGFJ/AdhSf8HYUj/B2FI + /wfWSQAAx1UAALxcAACyYAAAqmIAAKJhAACZXQAAkFcAAIdSAACAUQ8AfFEeAHhRKgB1UTQAc1E9AHBR + RQBuUUwAbFFSAGtQWQFpUGACaFBoA2dQcARlUHkFY1CDBmJPjwdgT54JXk+uCV1PwgpcTtkKW07tCVtO + +whbTf8IW03/B1tN/wfSTQAAxFkAALlgAACwZAAAp2YAAJ9mAACWYgAAjFwAAINXAAB8VgsAd1YaAHNW + JwBwVjEAbVU6AGtVQgBpVUkAZ1VQAGZVVwFkVV4CY1VmA2FVbgRgVXcFXlSCB1xUjghbVJwJWVOsClhT + wApXU9cKVlLsCVZS+glWUf8IVlH/CFZR/wjPUgAAwlwAALdkAACtaAAApWoAAJxqAACTZwAAiGEAAH5d + AAB3WwcAcloXAG5aIwBrWi4AaFo3AGZaQABkWkcAY1pOAGFaVQFgWlwCXllkA11ZbARbWXUFWVmAB1dY + jAhVWJoJVFirClJYvwpRV9UKUVfrClFW+glRVv8IUVX/CFFV/wjMVgAAv2AAALRnAACrbAAAom4AAJpu + AACQbAAAhWYAAHpiAAByYAMAbF8TAGlfIABmXysAY181AGFfPQBgX0UAXl9MAFxfUwFbXloBWV5iAlhe + agRWXnQFVF5+BlJdiwhQXZkJTl2qCk1cvQpMXNQKTFvqCUxb+QlMWv8ITFr/CExa/wjIWgAAvGQAALFr + AACocAAAoHIAAJdzAACOcQAAgWsAAHZnAABtZQAAZ2QPAGNkHABgZCgAXmQyAFxkOgBaZEIAWWRKAFdk + UQBWZFgBVGRgAlJjaANQY3IETmN9BkxiiQdKYpcISWKoCUdivAlGYdMJRmHqCUZg+QhGX/8IRl7/CEZe + /wjFXwAAuWkAAK5wAACmdAAAnXcAAJR3AACLdgAAfnIAAHNuAABoawAAYWkKAF1pGABaaSQAWGouAFZq + NwBVaj8AU2pHAFJqTgBQalYBTmleAUxpZgJKaXAESGl7BUZohwZEaJYHQminCEFnuwhAZ9IIQGbpCEBl + +QhAZf8IQGT/B0Bk/wfBZAAAtW0AAKx0AACjeQAAm3wAAJJ9AACIewAAfHgAAHB1AABlcgAAW3AEAFZw + EwBTcB8AUXAqAE9wMwBOcDwATHBEAEtwSwBJcFMASHBbAUZwZAFEcG4CQm95BEBvhQU+bpQGPG6lBjpu + uQY5btEGOW3oBjls+AY5a/8HOWr/Bzlq/we9agAAsnMAAKh5AACgfgAAmIEAAI+CAACGgQAAeX8AAGx8 + AABhegAAVXcAAE53DQBLdxoASXclAEd3LgBGdzcARHc/AEN3RwBBd1AAQHdYAD53YQE8d2sBOnZ3Ajh2 + gwM2dpIDNHWjBDN1uAQxdc8EMXToBDFz+AUxcv8FMXH/BTFx/wW5cAAArngAAKV/AACdhAAAlYcAAIyI + AACChwAAdYUAAGeDAABcgQAAUIAAAEZ+BQBBfhMAP38eAD1/KAA8fzIAOn86ADl/QwA4f0sANn9UADV/ + XgAzfmgAMX50AC9+gQEtfpABK36hAip9tgIofc4CKHznAih7+AMoev8DKHn/BCh5/wS0dgAAqn8AAKKF + AACaigAAko0AAIiNAAB9jQAAcIwAAGOKAABWiQAASogAAD+HAAA3hwoANIcWADKHIQAwhyoAL4gzAC6I + PAAsiEUAK4hOACmHWQAnh2QAJodwACSHfQAih40AIIefAB6GtAAdhs0AHYXnAB2D+AEdgv8BHYL/Ah2C + /wKvfgAApoYAAJ6MAACXkAAAjpMAAIKTAAB2kwAAapIAAF2RAABPkQAARJAAADmQAAAukAAAJpELACSR + FwAikSEAIZErAB+RNAAekT0AHJFHABuRUgAZkV4AF5FrABWReQATkYkAEZGbABCQsQANkMoADo/lAA+N + 9wAQjP8AEIz/ABCM/wCqhQAAoo0AAJuTAACTlwAAiJgAAHyZAABvmQAAYpkAAFWZAABImQAAPJkAADGZ + AAAnmgAAHZsAABScCQARnBUAEJwfAA6cKQANnDQAC5w+AAmcSgAInFYABpxjAASbcgACm4IAAJuUAACa + qQAAmsEAAJncAACY7wAAmPsAAJf/AACX/wCmjgAAn5UAAJeaAACMnQAAgJ4AAHOfAABmnwAAWaAAAEyg + AAA/oQAAM6EAACiiAAAeowAAFKQAAAqmAQACpgsAAKcWAACnIAAApyoAAKc1AACnQAAAp00AAKdbAACn + agAAp3oAAKaMAACmoAAApbgAAKXSAACk6QAAo/YAAKP/AACj/wCilgAAmpwAAJCgAACEowAAd6QAAGml + AABbpgAATqcAAEGoAAA0qQAAKaoAAB2rAAATrQAACa4AAACwAAAAsAQAALENAACyFgAAsiAAALMqAACz + NQAAtEEAALRQAAC0XwAAtHAAALSCAAC0lwAAtK0AALPIAACz4QAAsvEAALL7AACy+wCdngAAk6MAAIem + AAB6qQAAbKoAAF2sAABPrQAAQq4AADWwAAAosQAAHbMAABK1AAAGtwAAALgAAAC6AAAAuwAAALwCAAC9 + CgAAvhQAAL8dAADAKAAAwjQAAMRBAADEUgAAxGMAAMR2AADEigAAxKEAAMS6AADE0wAAxOcAAMTzAADE + 8wCWpQAAiqkAAH2sAABurwAAYLEAAFGyAABCtAAANLYAACe4AAAbugAAD7wAAAS+AAAAwAAAAMIAAADD + AAAAxQAAAMcAAADIAAAAygYAAMwPAADOGQAA0CQAANMyAADWQQAA2FMAANlnAADZfAAA2ZIAANmqAADa + wgAA2tcAANroAADa6ACMrAAAf68AAHGyAABitQAAUrcAAEO6AAA0vAAAJr8AABnBAAANxAAAAcYAAADI + AAAAygAAAMwAAADOAAAA0AAAANIAAADUAAAA1wAAANoAAADdCQAA4BQAAOMhAADnMAAA6kIAAOtWAADt + awAA7oAAAO6XAADurQAA78EAAO7SAADu0gCCsgAAc7UAAGS5AABUvAAARb8AADXCAAAmxQAAGMgAAArL + AAAAzgAAANAAAADSAAAA1QAAANgAAADaAAAA3QAAAN8AAADiAAAA5AAAAOcAAADqAAAA7QIAAPEPAAD1 + HgAA+S4AAPxCAAD9WAAA/m4AAP+DAAD/lwAA/6gAAP+2AAD/tgD/ABAA/wAMAP8ACwD/ABIA/wAeAP8A + LQD/ADoA/wBHAP8AUwD/AF4A/wBnAP4AbwD8AHYA+gB8APgAggD3AIcA9gCMAPYAkgD1AJcA9ACdAPMA + pADyAK0A8gC3APAAwwDuANIA7QDkAOwA8wDrAP8A6wD/AOsA/wDrAP8A6wD/AOsA/wD/AAoA/wAGAP8A + AwD/AA0A/wAaAP8AKAD/ADYA/wBDAP0ATwD7AFoA+QBjAPYAawDzAHIA8QB4APAAfgDvAIMA7gCJAO0A + jgDsAJMA6wCZAOoAoADpAKgA5wCyAOYAvQDkAMsA4wDeAOIA7QDhAPsA4AD/AOAA/wDfAP8A3wD/AN8A + /wD/AAUA/wAAAP8AAAD/AAkA/wAVAPsAIwD4ADEA9gA+APQASgDyAFUA7wBfAOwAZwDpAG4A5wB0AOYA + egDlAH8A5ACEAOIAiQDhAI8A4ACVAN8AmwDdAKMA2wCsANkAuADYAMUA1QDWANQA5wDTAPYA0gD/ANEA + /wDQAP8A0AD/ANAA/wD/AAAA/wAAAP8AAAD/AAQA+wAOAPIAHQDvACsA7AA4AOoARQDoAE8A5ABZAOAA + YgDeAGkA3ABvANoAdQDZAHoA1wB/ANUAhQDUAIoA0gCQANEAlgDPAJ4AzQCnAMsAsgDKAL8AyADOAMcA + 4QDFAPAAxAD9AMMA/wDCAP8AwgD/AMIA/wD/AAAA/wAAAP8AAAD/AAAA8AAHAOkAFgDlACUA4gAyAN4A + PwDbAEoA1gBTANMAXADRAGQAzgBqAM0AcADLAHUAygB7AMgAgADHAIUAxQCLAMMAkQDBAJkAwACiAL4A + rAC8ALkAuwDIALkA2gC3AOsAtgD4ALUA/wC1AP8AtAD/ALQA/wD/AAAA/wAAAPgAAADuAAAA5gAAAOAA + DQDbAB0A1gArANEAOADNAEMAygBNAMcAVgDEAF4AwgBlAMAAawC+AHAAvQB1ALsAewC6AIAAuACGALcA + jQC1AJQAswCdALEApwCvALMArgDCAKwA0wCqAOUAqQDzAKgA/gCoAP8ApwD/AKcA/wD/AAAA9AAAAOkD + AADhAwAA3AAAANcABADRABQAywAjAMYAMADCADwAvwBHALwAUAC5AFgAtgBfALQAZQCzAGsAsQBwAK8A + dgCuAHsArACCAKsAiACpAJAApwCZAKYAowCkAK8AogC+AKAAzgCfAOIAngDwAJwA+gCcAP8AmwD/AJsA + /wD6AAAA6w4AAOEXAADYGAAA0BUAAMsLAADIAAkAwgAYAL0AJwC4ADQAtABAALEASQCuAFIAqwFZAKkB + YACoAmYApgJrAKQCcQCjAncAoQN9AKADhACeA4wAnQOVAJsDoACZA6wAlwO7AJYEzACUBeAAkwfwAJEI + /QCRCP8AkAj/AJAI/wDxEAAA5B4AANgmAADOKQAAxiYAAMEgAAC9FQAAuQgNALMKHgCuDS0Aqg85AKYQ + QwCkEUwAoRFUAJ8SWgCdEmEAnBJnAJoTbACZE3MAlxN5AJYTgACUE4kAkhOSAJEUnQCPFKoAjhS6AIwU + zACKFOEAiRXyAIcW/wCGFv8Ahhb/AIYW/wDrHQAA3SoAANAzAADGNgAAvzQAALkvAACzJwAArxsFAKkZ + FwCkGyYAoB0zAJwePQCZHkcAlx9OAJUfVQCTH1wAkSBiAJAgaACOIG4AjSB1AIsgfACKIIUAiCCOAIcg + mgCFIacAhCG2AIIhyQCBId4AfyLwAH4i/gB+If8AfSH/AH0h/wDlJwAA1jQAAMo9AADAQAAAuD8AALE7 + AACrNAAApisAAKAlEQCbJyAAlygtAJMpOACQKkIAjipKAIsqUQCKKlcAiCpeAIYqZACFK2oAgytxAIIr + eACBK4EAfyuLAH4rlgB8K6MAeyuzAHorxgB4K9sAdyvuAXYr/AF1K/8BdSr/AXUq/wHgMAAA0T0AAMVE + AAC7SAAAs0gAAKxEAAClPgAAnjYAAJgvCwCTMBsAjjEoAIsyNACIMz0AhTNFAIMzTQCBM1MAgDNaAH4z + YAB9M2YAezNtAHozdQB5M34AdzOIAHYzkwF0M6ABczOwAXIzwwFwM9kBbzPsAm4z+wJuMv8CbTL/Am0y + /wLcNwAAzEQAAMFLAAC3TgAArk8AAKdMAACfRgAAmEAAAJE4BQCLOBYAhzkkAIQ5LwCBOjkAfjpBAHw6 + SQB6OlAAeDpWAHc6XAB1OmMAdDpqAHM6cgBxOnsBcDqFAW46kAJtOp4CazquAmo6wQNpOtYDaDrrA2c5 + +gNnOf8DZzn/Amc4/wLYPgAAyEkAAL1QAACzVAAAq1UAAKNTAACbTQAAk0cAAItBAACFPxIAgD8fAH1A + KwB6QDUAeEA+AHVARQBzQEwAckBTAHBAWQBvQGAAbUBnAGxAbwFrQHgBaUCCAmhAjgJmQJwDZUCrA2NA + vgRiQNQEYT/pBGE/+QNhP/8DYD7/A2A+/wPTQwAAxU4AALpVAACwWQAAqFoAAKBYAACXVAAAjk4AAIZI + AAB/RQ0Ae0UcAHdFKAB0RTIAcUU6AG9GQgBtRUkAa0VQAGpFVgBoRV0AZ0ZlAGZGbQFlRnYCY0aAAmJF + jANgRZoEX0WqBF1FvAVcRdIFW0XoBFtE+ARbRP8EW0P/BFtD/wTPSAAAwlMAALdZAACuXQAApV4AAJ1d + AACUWQAAi1MAAIJOAAB6SgkAdUoYAHFKJABuSi4Aa0o3AGlKPwBnSkYAZUpNAGRKVABjSlsAYkpiAGBL + awFfS3QCXUt+A1xKigNaSpgEWUqoBVdKuwVWStEFVknnBVVJ9wVVSP8EVUj/BFVH/wTMTAAAv1YAALRd + AACrYQAAo2MAAJpiAACRXwAAh1kAAH1UAAB1UAUAcE8UAGxPIQBpTysAZk80AGROPABiTkMAYE5KAF9P + UQBeT1gAXE9gAFtPaQFaT3ICWE98A1dPiARVT5YEU06mBVJOuQZRTs8GUE7mBVBN9wVQTP8FUEz/BFBM + /wTJUQAAvVoAALJhAACpZQAAoGcAAJhmAACOYwAAhF0AAHpZAABwVQEAalQRAGZUHQBjUygAYVMxAF5T + OQBdU0EAW1NIAFpTTwBZVFYAV1ReAFZUZwFVVHACU1R7A1FUhwRQU5UETlOlBU1TuAZMU84GS1LmBUtR + 9gVLUf8FS1D/BUtQ/wXHVQAAul4AAK9lAACmaQAAnmsAAJVrAACMaAAAgGIAAHZeAABrWgAAZVkMAGFY + GgBeWCUAXFgvAFlYNwBYWD8AVlhGAFVYTQBUWVUAUllcAFFZZQFPWW4CTll5AkxYhQNKWJMESVijBUdY + twVGWM0FRlflBUZW9gVGVf8FRlX/BUZV/wXDWQAAt2MAAK1pAACkbQAAnG8AAJNvAACJbQAAfWgAAHJk + AABoYAAAYF4IAFtdFgBYXiIAVl4rAFReNABSXjwAUV5EAFBeSwBOXlIATV5aAEteYwFKXmwBSF53AkZe + gwNEXZIEQ12iBEFdtQVAXcwFQFzkBUBb9QVAWv8FQFr/BEBa/wTAXgAAtGcAAKptAACicgAAmXQAAJB0 + AACHcwAAe24AAG9rAABlZwAAWmQEAFVjEgBSYx4AUGMoAE5kMQBMZDkAS2RBAElkSABIZFAAR2RYAEVk + YQBEZGoBQmR1AUBkggI+Y5ADPGOgAztjtAQ6Y8oEOWLjBDlh9QQ5YP8EOl//BDpf/wS8YwAAsWwAAKhy + AACfdgAAl3kAAI55AACEeAAAeHUAAGxxAABhbgAAVWsAAE5qDABLahkASWojAEdqLQBFajUARGo9AEJq + RQBBak0AQGpVAD5qXgA8amgAO2pzATlqgAE3ao4CNWqfAjRpsgIyackCMmjiAjJn9AMyZv8DMmX/AzJl + /wO4aAAArnEAAKV3AACcfAAAlH4AAIx/AACCfgAAdnsAAGh4AABddgAAUXMAAEdxBgBCcRMAQHEeAD5x + KAA9cTEAO3E5ADpxQQA4cUkAN3FSADZxWwA0cWUAMnFxADFxfQAvcYwBLXGdAStwsQEqcMgBKnDhASpu + 9AIqbf8CKmz/Aips/wK0bwAAqncAAKJ9AACagQAAkoQAAImFAAB+hAAAcoIAAGR/AABYfQAATHsAAEF6 + AAA5eQsANnkXADR5IgAzeSsAMXkzADB5PAAueUQALXlNACt5VwAqeWIAKHluACZ5ewAkeYkAI3maACF4 + rgAgeMYAH3fgACB28wAgdf8BIHT/ASB0/wGwdQAAp30AAJ6DAACXhwAAj4oAAIWKAAB5iQAAbIgAAF+G + AABShQAARoMAADuCAAAwggIAKoIPACiCGgAmgiMAJYIsACOCNQAigj4AIYJIAB+CUgAegl0AHIJpABqC + dwAYgoYAFoKYABSBrAASgcQAEoDfABN/8wAUfv8AFH3/ABR9/wCrfAAAo4QAAJuKAACUjgAAi5AAAH+Q + AABzkAAAZo4AAFmNAABLjAAAP4wAADSLAAApiwAAH4sEABmMEAAYjBoAFowjABWMLQATjDYAEoxAABCM + SwAOjFcADIxkAAqLcgAIi4EABouTAASKpgACir0AAonYAAOI7AAEh/oABYf/AAWG/wCnhAAAn4sAAJmR + AACQlAAAhZYAAHiWAABrlgAAXpUAAFGVAABDlAAAN5QAACyUAAAilQAAGJUAAA2WBAAGlg4ABJYZAAOW + IwABli0AAJY4AACWQwAAllAAAJZdAACWawAAlXsAAJWMAACVoAAAlLYAAJPQAACS6AAAkvUAAJH9AACR + /wCjjQAAnJMAAJSXAACJmgAAfZsAAHCcAABinAAAVZwAAEecAAA6nAAALp0AACOdAAAYngAADp8AAASg + AAAAoAgAAKESAAChGwAAoSUAAKEvAACiOgAAokYAAKJUAACiYwAAoXMAAKGFAACgmAAAoK4AAJ/IAACf + 4gAAnvEAAJ37AACd/gCflQAAmJoAAI2eAACBoAAAdKEAAGaiAABYowAASqMAADykAAAwpQAAJKYAABin + AAANqAAAA6kAAACqAAAAqgEAAKsJAACsEgAArBsAAK0kAACuLwAArjsAAK9JAACvWAAAr2kAAK97AACu + jwAArqUAAK69AACt2QAAresAAKz2AACs+gCbnAAAkKEAAISkAAB3pgAAaKcAAFqoAABLqQAAPqsAADCs + AAAkrQAAGK4AAAywAAABsQAAALMAAAC0AAAAtQAAALYAAAC3BgAAuA8AALkYAAC6IgAAvC4AAL47AAC/ + SwAAv10AAL9vAAC/gwAAv5kAAMCxAADAygAAv+IAAL7wAAC+9ACTowAAh6cAAHqqAABrrAAAXK0AAE2v + AAA+sQAAMLMAACO0AAAWtgAACbgAAAC6AAAAuwAAAL0AAAC+AAAAwAAAAMEAAADDAAAAxQEAAMcKAADJ + FAAAyx8AAM4sAADROwAA0U4AANJhAADTdgAA04sAANSjAADUuwAA1dAAANXiAADV5wCJqgAAfK0AAG6w + AABfsgAAT7QAAD+3AAAwuQAAIrsAABS+AAAHwAAAAMIAAADEAAAAxgAAAMcAAADJAAAAywAAAM0AAADP + AAAA0gAAANQAAADYAwAA3A4AAN8bAADkKgAA5zsAAOhQAADpZQAA6XsAAOqSAADrqQAA674AAOzPAADs + 1QB/sAAAcbMAAGG2AABRuQAAQbwAADG/AAAiwgAAE8UAAAXHAAAAygAAAMwAAADOAAAA0AAAANIAAADU + AAAA1wAAANoAAADdAAAA4AAAAOMAAADmAAAA6gAAAO4JAADyGAAA9ygAAPk8AAD7UgAA/GkAAP1/AAD+ + lQAA/qgAAP64AAD+vgD/AAoA/wAGAP8ABAD/AA0A/wAcAP8AKgD/ADcA/wBEAP8AUAD/AFsA/wBkAPwA + bAD6AHMA+QB5APgAfwD3AIQA9gCJAPUAjgD0AJQA9ACaAPMAoADxAKkA8ACzAO4AvwDtAM4A7ADhAOsA + 8QDrAP8A6gD/AOkA/wDpAP8A6QD/AOkA/wD/AAQA/wAAAP8AAAD/AAkA/wAXAP8AJQD/ADMA/wBAAP0A + TAD5AFcA9gBgAPMAaADxAG8A8AB1AO8AewDuAIAA7QCFAOwAigDrAI8A6gCVAOgAnADnAKQA5QCuAOQA + uQDiAMgA4QDaAOAA6wDfAPoA3gD/AN0A/wDdAP8A3QD/AN0A/wD/AAAA/wAAAP8AAAD/AAQA/QASAPoA + IAD3AC4A9QA7APMARwDvAFEA6wBbAOkAYwDnAGoA5QBwAOQAdgDjAHsA4gCAAOAAhQDfAIsA3QCRANwA + lwDaAJ8A2ACoANYAswDUAMEA0wDRANEA5QDQAPUAzgD/AM4A/wDOAP8AzQD/AM0A/wD/AAAA/wAAAP8A + AAD9AAAA9AALAPAAGwDsACgA6gA1AOcAQQDjAEwA4ABWAN0AXgDbAGUA2QBsANcAcQDVAHcA0wB8ANIA + gADQAIYAzgCMAM0AkgDLAJkAygCjAMgArQDGALoAxADKAMMA3QDBAO4AwAD8AL8A/wC/AP8AvwD/AL4A + /wD/AAAA/wAAAP8AAADxAAAA6gAFAOUAFADhACIA3gAvANoAOwDWAEYA0gBQAM8AWADNAGAAywBmAMkA + bADHAHEAxQB2AMQAewDCAIEAwQCHAL8AjQC+AJQAvACdALoApwC4ALQAtgDDALQA1ACzAOcAsgD3ALEA + /wCwAP8ArwD/AK8A/wD/AAAA/AAAAO4AAADnAAAA4QAAANsACwDVABoA0AAoAMwANADJAEAAxgBJAMMA + UgDAAFoAvQBhALsAZgC6AGwAuABxALcAdgC1AHwAtACBALIAiACwAI8ArgCYAKwAogCrAK4AqQC8AKcA + zQCmAOEApADxAKIA/ACiAP8AogD/AKEA/wD+AAAA7wAAAOUAAADdAAAA1QAAANAAAgDKABIAxQAgAMEA + LQC9ADkAugBDALYATAC0AFQAsQBbAK8AYQCuAGcArABsAKoAcQCpAHcApwB9AKYAgwCkAIsAogCTAKAA + nQCeAKkAnQC3AJsAyACZANsAmADsAJcA+QCWAP8AlgD/AJUA/wDzAAAA5wsAANwSAADRFAAAyhAAAMUF + AADBAAcAvAAWALcAJACyADEArwA8AKsARgCoAE4ApgBVAKQAWwCiAGEAoABnAJ8AbACdAHIAnAB4AJoA + fwCZAIYAlwCPAJUAmQCTAKUAkQCzAJAAxACOANgAjQDpAIwA9gCLAP8AigD/AIoA/wDsDgAA3xsAANIj + AADIJQAAwSEAALsaAAC2EAAAsgIMAK0AGwCoAykApAU1AKEGPwCeB0cAmwhPAJkIVgCYCFwAlgliAJQJ + ZwCTCW0AkQp0AJAKewCOCoMAjAqMAIsKlwCJCqMAiAqyAIYKxACFC9gAgwzrAIIN+QCBDf8AgA3/AIAN + /wDmGwAA2CgAAMsvAADBMQAAuS8AALMqAACtIgAAqBYAAKMPEgCeEiEAmhQuAJcVOACUFkIAkRZJAI8X + UACNF1cAixddAIoXYwCIGGkAhxhwAIUYdwCEGH8AghiJAIEYlAB/GKAAfhiwAHwYwgB7GNYAeRnrAHga + +gB3Gv8Adxr/AHcZ/wDgJgAA0DIAAMU5AAC7PAAAszsAAKw2AAClLwAAnyYAAJodCwCVHhsAkCAoAI0h + MwCKITwAiCJFAIYiTACEIlIAgiJYAIAjXgB/I2UAfSNsAHwjcwB7I3sAeSOFAHgjkAB2I50AdSOsAHMj + vwByI9MAcSTpAHAk+QBvJP8AbyP/AG8j/wDbLwAAyzsAAMBBAAC2RAAArkQAAKZAAACfOgAAmDIAAJIp + BQCMKBUAiCkjAIUqLgCCKzgAfytAAH0rRwB7K04AeStUAHgsWwB2LGEAdSxoAHQscAByLHgAcSyCAG8s + jQBuLJoAbS2qAGstvABqLNEAaS3nAGgs9wBoLP8AZyz/AGcr/wDVNwAAx0EAALxIAACySwAAqksAAKJI + AACaQgAAkjwAAIs0AACFMBAAgDEeAH0yKgB6MjMAeDM8AHYzQwBzM0oAcjNRAHAzVwBvM14AbTNlAGwz + bABrNHUAaTR/AGg0iwBnNJgAZTSnAGQ0ugFjNM8BYjTlAWEz9gFhM/8BYTL/AWAy/wHRPQAAw0cAALhO + AACvUQAAplEAAJ5PAACWSQAAjUQAAIU9AAB+OAsAejgaAHY4JgBzOTAAcTk4AG85QABtOUcAazlNAGk5 + VABoOVoAZzliAGU6agBkOnMAYzp9AGE6iABgOpYBXzqlAV06twFcOs0BWzrkAVs59QFaOf8BWjj/AVo4 + /wHNQgAAwEwAALVSAACsVgAAo1YAAJtVAACSUAAAiUoAAIFEAAB5PgcAdD4WAHA+IgBtPiwAaj41AGg+ + PABmPkMAZD5KAGM+UQBhP1cAYD9fAF8/ZwBeP3AAXUB7AFtAhgFaQJQBWECjAVdAtgJWP8sCVT/iAlU/ + 9AJVPv8CVD7/AlU9/wLKRwAAvVAAALJXAACpWgAAoVsAAJhaAACPVgAAhlAAAHxKAABzRAMAbkMSAGpD + HgBnQykAZEMxAGJDOQBgQ0AAXkNHAF1DTgBbRFUAWkRdAFlEZQBYRW4AV0V5AFZFhAFURZIBU0WiAlFF + tAJQRMoCT0ThAk9E8wJPQ/8CT0L/Ak9C/wLHSwAAu1QAALBbAACnXgAAnl8AAJZeAACMWwAAglUAAHlQ + AABvSgAAaEgOAGRIGwBhSCUAX0guAFxINgBaSD0AWEdEAFdISwBWSFMAVUlaAFRJYwBTSWwAUkp3AFBK + gwFPSZABTUmgAkxJswJLScgCSkngAkpI8wJKR/8CSkf/AkpG/wLETwAAuFgAAK5fAACkYgAAnGQAAJNj + AACKYAAAf1oAAHVVAABqUAAAY04KAF9NFwBcTSIAWU0rAFdNNABVTTsAU01CAFJNSQBRTVEAUE5YAE9O + YQBOTmsATE51AEtOgQFJTo8BSE6fAkZOsQJFTscCRE3fAkRN8gJFTP8CRUv/AkVL/wLBUwAAtVwAAKtj + AACiZgAAmmgAAJFnAACIZQAAfF8AAHFbAABnVgAAXlMGAFlSFABWUh8AVFIoAFJSMQBQUjkATlJAAE1S + RwBMUk8AS1NWAElTXwBIU2kAR1NzAEVTgAFEU40BQlOdAkFTsAI/U8YCP1LeAj9R8QI/Uf4CP1D/Aj9P + /wK+WAAAs2EAAKlnAACgagAAmGwAAI9sAACFagAAeWUAAG5hAABkXQAAWVgCAFNXEABQVxsATlclAExX + LgBKWDYASVg9AEdYRQBGWEwARVhUAENYXQBCWWcAQVlyAD9ZfgE+WIwBPFicATtYrgI5WMQCOVjdATlX + 8QI5Vv4COVX/AjlV/wK7XAAAsGUAAKZrAACebwAAlXEAAI1xAACDbwAAd2sAAGxoAABhZAAAVWAAAE1e + CwBKXRcAR14hAEVeKgBEXjMAQl46AEFeQgBAXkoAPl5SAD1eWwA7XmUAOl9wADhefAA3XooANV6aATRe + rQEyXsMBMl3cATJc8AEyW/0BMlv/AjNa/wK4YgAArWoAAKRwAACbdAAAk3YAAIp2AACBdQAAdXEAAGlu + AABdawAAUmcAAEdlBgBCZBIAQGQdAD5kJgA8ZC8AO2Q3ADlkPwA4ZUcAN2VPADVlWAA0ZWIAMmVtADFl + egAvZYgALWWYACxkqwArZMIAKmTbACpj7wEqYv0BK2H/AStg/wG0ZwAAqm8AAKF1AACZeQAAkXwAAIh8 + AAB/ewAAcngAAGV1AABZcgAATW8AAEJtAAA6bAwAN2wYADVsIQAzbCoAMmwyADFsOgAvbEMALmxLACxs + VQArbF8AKWxrACdsdwAmbIYAJGyWACJrqQAha8AAIGvaACFq7wAhaP0AImj/ACJn/wGwbQAAp3UAAJ57 + AACWfwAAjoEAAIaCAAB7gQAAbn4AAGB7AABUeQAASHcAADx1AAAydAUALXQRACt0GwApdCQAJ3QtACZ0 + NQAldD4AI3RHACJ0UQAgdFwAHnRnAB10dAAbdIMAGXSUABdzpwAVc74AFHPYABVx7gAWcPwAF2//ABdv + /wCsdAAAo3wAAJuBAACUhQAAjIgAAIKIAAB2hgAAaYUAAFuCAABOgQAAQn8AADd+AAAsfQAAIn0IAB59 + EwAcfRwAG30mABl9LgAYfTcAFn1BABV9SwATfVYAEX1jABB9cQANfX8AC3yQAAl8owAHe7kABnvSAAd6 + 6QAJefkACXj/AAp3/wCoewAAoIMAAJmIAACRjAAAiI0AAHyNAABvjAAAYosAAFWJAABHiAAAO4cAADCH + AAAlhgAAGoYAABGGCAAMhhMAC4YdAAmHJgAIhzAABoc6AAWHRQADhlAAAYZdAACGawAAhnoAAIaLAACF + nQAAhLMAAIPMAACD5AAAgvMAAIL8AACB/wCkgwAAnIoAAJaPAACNkgAAgZMAAHWTAABokgAAWpEAAE2R + AAA/kAAAM5AAACePAAAdkAAAEpAAAAiQAgAAkQwAAJEWAACRHwAAkSgAAJEyAACRPQAAkUkAAJFWAACQ + ZAAAkHQAAJCFAACPmAAAj60AAI7GAACN4AAAjPAAAIz6AACL/wCgiwAAmpIAAJGVAACGlwAAepkAAGyZ + AABfmQAAUZgAAEOYAAA2mAAAKZgAAB6ZAAATmQAACJoAAACaAAAAmwYAAJsOAACbFwAAmyAAAJwpAACc + NAAAnEAAAJxNAACcXAAAnGwAAJx9AACckAAAmqYAAJq/AACZ2gAAmO0AAJj3AACY/QCdlAAAlZgAAIqb + AAB+nQAAcJ4AAGKfAABUnwAARp8AADigAAAroAAAH6EAABOiAAAIowAAAKQAAAClAAAApQAAAKYFAACm + DQAApxYAAKcfAACoKQAAqTUAAKpCAACqUQAAqmIAAKp0AACphwAAqZ0AAKi1AACozwAAp+cAAKfzAACm + +wCYmwAAjZ8AAIGhAAB0owAAZaQAAFalAABIpgAAOacAACyoAAAfqQAAEqoAAAarAAAArQAAAK4AAACv + AAAAsAAAALEAAACyAgAAswoAALQTAAC1HQAAtygAALk1AAC5RAAAulYAALpoAAC6fAAAupIAALmqAAC6 + xAAAut0AALrsAAC59ACQoQAAhKUAAHenAABoqQAAWaoAAEmsAAA6rQAALK8AAB6wAAARsgAABLQAAAC1 + AAAAtwAAALgAAAC5AAAAuwAAALwAAAC+AAAAvwAAAMEFAADDDgAAxRoAAMgmAADLNQAAzEcAAM1aAADO + bwAAzoQAAM+cAADOtgAAz80AAM/gAADP6gCHqAAAeasAAGutAABbrwAAS7EAADuzAAAstgAAHbgAABC6 + AAACvAAAAL4AAADAAAAAwQAAAMMAAADEAAAAxwAAAMkAAADLAAAAzQAAAM8AAADSAAAA1gkAANsVAADf + JAAA4jYAAONKAADkXwAA5XUAAOaMAADnpAAA57oAAOjMAADo2QB8rgAAbrEAAF6zAABOtgAAPbkAAC28 + AAAevgAADsEAAADEAAAAxgAAAMgAAADKAAAAzAAAAM4AAADQAAAA0wAAANUAAADZAAAA3AAAAN8AAADi + AAAA5gAAAOoEAADvEgAA9CIAAPc2AAD4TQAA+WQAAPp8AAD7kgAA+6YAAPy2AAD8wgD/AAQA/wAAAP8A + AAD/AAkA/wAZAP8AJwD/ADQA/wBBAP8ATQD/AFgA/QBhAPsAaAD6AG8A+AB2APcAewD2AIAA9gCFAPUA + igD0AJAA8gCWAPEAnQDvAKQA7gCuAO0AuwDsAMoA6wDdAOoA7wDpAP8A6AD/AOgA/wDoAP8A6AD/AOQA + /wD/AAAA/wAAAP8AAAD/AAYA/wAUAP8AIgD/ADAA/gA9APoASAD2AFMA9ABcAPIAZADwAGsA7wBxAO0A + dwDsAHwA6wCBAOoAhgDpAIwA5wCRAOUAmADkAKAA4wCpAOIAtQDhAMMA3wDVAN4A6QDcAPkA2wD/ANsA + /wDbAP8A2wD/ANsA/wD/AAAA/wAAAP8AAAD/AAAA+wAPAPgAHQD1ACsA8gA3AO8AQwDsAE4A6QBXAOcA + XwDlAGcA4wBtAOIAcgDgAHgA3wB9AN0AggDbAIcA2gCNANgAkwDWAJsA1QCjANMArwDSALwA0ADNAM4A + 4QDMAPMAywD/AMsA/wDKAP8AygD/AMoA/wD/AAAA/wAAAP8AAAD3AAAA8QAJAO0AGADpACUA5QAyAOIA + PQDgAEgA3QBSANoAWgDYAGIA1QBoANMAbQDRAHMAzwB4AM4AfQDMAIIAywCHAMkAjgDIAJUAxgCeAMQA + qQDCALUAwQDFAL8A2QC9AOwAvAD7ALsA/wC6AP8AuQD/ALgA/wD/AAAA/wAAAPYAAADtAAAA5wACAOEA + EQDcAB8A2AArANQANwDRAEIAzwBMAMwAVQDJAFwAxgBiAMQAaADDAG0AwQByAMAAdwC+AH0AvQCCALsA + iQC5AJAAtwCYALYAowC0AK8AsgC+ALAA0ACuAOQArAD1AKsA/wCqAP8AqgD/AKoA/wD/AAAA8wAAAOoA + AADjAAAA3AAAANUACQDPABcAygAlAMcAMQDEADwAwQBGAL4ATgC7AFYAuQBdALcAYgC1AGgAtABtALIA + cgCxAHcArwB9AK0AgwCrAIsAqgCTAKgAnQCmAKkApAC3AKIAyACgAN0AnwDvAJ4A/ACdAP8AnQD/AJwA + /wD2AAAA6gAAAOAAAADXAAAA0AAAAMoAAQDEAA8AvwAdALsAKgC3ADUAtAA/ALEASACvAFAArABXAKoA + XQCpAGIApwBoAKUAbQCkAHIAogB4AKAAfgCfAIYAnQCOAJsAmACZAKMAlwCxAJUAwgCUANUAkgDpAJEA + 9gCRAP8AkAD/AJAA/wDvAAAA4ggAANYOAADMEAAAxQoAAL8AAAC6AAYAtQAUALAAIQCsAC0AqQA4AKYA + QQCjAEoAoQBRAJ8AVwCdAF0AmwBiAJoAaACYAG0AlgBzAJUAegCTAIEAkQCKAI8AlACNAJ8AjACtAIoA + vQCIANAAhwDkAIYA8wCFAP0AhQD/AIUA/wDnDAAA2hkAAMwgAADDIAAAvB0AALUVAACwCgAAqwAKAKYA + GACiACUAngAwAJsAOgCYAEMAlgBLAJQAUQCSAFcAkABdAI4AYwCNAWgAiwFvAIoBdgCIAX0AhgKGAIUC + kACDApwAgQKqAIACuwB+As4AfQPiAHwE8gB7Bf4AegX/AHoF/wDhGgAA0SYAAMYsAAC8LQAAtCsAAK0l + AACnHQAAohIAAJ0HDgCYCB0AlAopAJALMwCODT0AjA1FAIkOSwCHDlIAhg5YAIQPXgCDD2QAgRBqAIAQ + cgB+EHoAfBCDAHsQjgB5EJsAeBCpAHYQuwB1EM8AcxHlAHIS9QBxEv8AcRL/AHES/wDaJQAAyzAAAMA2 + AAC2OAAArjcAAKcyAACgKwAAmSIAAJMXBgCOFRYAihcjAIcYLgCEGTcAgho/AIAaRwB+Gk0AfBpTAHob + WQB5G2AAdxtmAHYbbgB0G3YAcxuAAHEciwBwHJcAbhymAG0cuABsHMwAahzjAGkd9ABpHP8AaRz/AGgc + /wDULgAAxjgAALs+AACxQQAAqUAAAKE8AACaNgAAky4AAIwlAACGIBAAgiEdAH4iKQB7IzIAeSM7AHck + QgB1JEkAcyRPAHIkVQBwJFwAbyRjAG0kagBsJXMAaiV8AGkliABnJZQAZiWjAGUltQBjJcoAYiXhAGIl + 8wBhJf8AYSX/AGEk/wDPNQAAwj8AALdFAACtSAAApUcAAJ1EAACVPgAAjTgAAIUwAAB+KQoAeikYAHYq + JABzKy4AcSs2AG8rPgBtLEUAayxLAGosUQBoLFgAZyxfAGUsZwBkLHAAYy16AGEthQBgLZIAXy2hAF0t + swBcLccAWy3fAFot8gBaLf8AWiz/AFos/wDLOwAAvkUAALNLAACqTgAAoU4AAJlLAACRRQAAiEAAAIA5 + AAB4MgUAczEUAG8xIABsMSoAajIyAGgyOgBmMkEAZDJHAGIyTgBhMlUAYDJcAF4zZABdM20AXDN3AFo0 + gwBZNJAAWDSfAFc0sQBVNMYAVDTdAFQz8ABUM/4AVDL/AFQy/wDIQQAAu0oAALFQAACnUwAAn1MAAJZR + AACNTAAAhEYAAHxAAABzOQEAbTcQAGk3HABmNyYAYzcvAGE3NgBfOD4AXThEAFw4SwBaOFIAWThZAFg4 + YgBXOWsAVTl1AFQ5gQBTOo4AUjqdAFA6rwBPOcQATjncAE457wBOOP0ATjj/AE43/wDFRQAAuU4AAK5U + AAClVwAAnFgAAJRWAACKUgAAgUwAAHhHAABuQAAAZz0LAGM8GABgPCMAXTwsAFs8MwBZPDoAVzxBAFU9 + SABUPU8AUz1XAFI+XwBRPmkAUD5zAE4/fwBNP4wATD+cAEs/rQBJP8MASD7bAEg+7wBIPf0ASD3/AUg8 + /wHCSgAAtlMAAKxYAACjWwAAmlwAAJFbAACIVwAAflIAAHRNAABqRwAAYkIIAF1CFQBaQh8AV0EoAFVB + MABSQTcAUEE+AE9BRQBOQk0ATUJVAExDXQBLQ2cASkNxAElEfQBIRIsARkSaAEVErABEQ8EAQ0PZAEND + 7gBDQvwBQ0H/AUNB/wG/TgAAs1cAAKlcAACgYAAAmGEAAI9gAACGXQAAe1cAAHFSAABmTQAAXUgEAFdH + EQBURxwAUUYlAE9GLQBNRjUAS0Y8AEpHQwBJR0sASEdTAEdIWwBGSGUAREhvAENIewBCSYkAQUmZAD9I + qwA+SMAAPUjYAD1H7QA9R/wBPkb/AT5F/wG9UgAAsVsAAKdgAACeZAAAlmUAAI1kAACDYgAAeFwAAG1Y + AABjUwAAWE4AAFJMDQBOTBkATEwiAEpMKwBITDMARkw6AEVMQQBETEkAQk1RAEFNWQBATWMAP01uAD1O + egA8TocAO06XADlOqQA4Tb4AN03WADdM7AA4S/sAOEv/AThK/wG6VgAArl8AAKVkAACcaAAAlGoAAItp + AACBZwAAdWIAAGtdAABgWgAAVVUAAExSCQBIURUARlEfAERRKABCUTAAQFI3AD9SPwA+UkYAPFJOADtS + VwA6U2EAOFNsADdTeAA2U4YANFOWADNTqAAyU70AMFLVADFS7AAxUfsAMlD/ADJP/wG3WwAArGMAAKNp + AACabAAAkm4AAIluAAB/bAAAc2gAAGlkAABeYQAAUlwAAEZYBQBBVxEAP1gbAD1YJAA7WCwAOlg0ADhY + PAA3WEQANlhMADRZVQAzWV8AMVlqADBZdgAuWYQALVmUACtZpgAqWLwAKVjUAClX6wAqVvoAK1b/ACtV + /wCzYAAAqWgAAKBuAACYcQAAkHMAAId0AAB9cgAAcW4AAGZrAABaaAAATmQAAEJgAAA6XwwAN14XADVf + IAAzXygAMl8wADBfOAAvX0AALl9JACxfUgArX1wAKV9nAChfdAAmX4IAJF+SACNfpAAhX7oAIF/SACFe + 6gAiXfoAIlz/ACNb/wCwZgAApm4AAJ5zAACVdwAAjXkAAIV5AAB7eAAAb3UAAGJxAABWbgAASmwAAD5p + AAAzZgYALmYRACxmGwAqZiQAKWYsACdmNAAmZjwAJGZFACNmTwAhZ1kAIGdkAB5ncQAcZ38AGmaQABlm + ogAXZrgAFmbRABdl6QAYZPkAGGP/ABli/wCsbAAAo3QAAJt5AACTfQAAi38AAIN/AAB4fgAAa3sAAF14 + AABQdQAARHMAADlxAAAtbwAAJG4KACFuFAAfbh0AHm4mABxvLwAbbzcAGW9AABhvSgAWb1UAFG9hABJv + bgARb30ADm+NAAxunwALbrUACW3NAAps5gALa/cADGr/AA1q/wCocwAAoHoAAJh/AACRgwAAiYUAAH+F + AABygwAAZYEAAFd/AABKfQAAPnsAADJ6AAAneQAAHXgBABV3CwASdxYAEHgfAA54KAANeDEAC3g6AAp4 + RQAIeFAABndcAAR3agACd3gAAHeIAAB2mwAAdq8AAHXHAAB04AAAdPAAAHP7AABz/wCkegAAnYEAAJaG + AACPigAAhYsAAHmKAABsiQAAX4gAAFGGAABDhAAAN4MAACuCAAAgggAAFoEAAAuBBQAEgQ4AAIEYAACB + IQAAgSoAAIE0AACBPwAAgUoAAIFXAACBZQAAgHMAAICDAACAlgAAf6oAAH7CAAB+3AAAfe4AAHz4AAB8 + /wChggAAmogAAJONAACKjwAAfpAAAHKQAABkjwAAV44AAEmNAAA7jAAALosAACOLAAAYiwAADYsAAAOL + AAAAiwkAAIsSAACLGwAAiyQAAIwtAACMNwAAjEMAAItQAACLXgAAi20AAIt+AACKkAAAiaUAAIm9AACI + 2AAAh+wAAIf3AACG/gCdigAAl5AAAI+TAACDlQAAd5YAAGmWAABblQAATZUAAD+UAAAylAAAJZQAABmU + AAAOlQAAA5UAAACVAAAAlgMAAJYLAACWEwAAlhsAAJckAACXLgAAlzoAAJdHAACXVQAAl2UAAJZ3AACW + iQAAlp4AAJW2AACU0AAAlOgAAJP1AACS/QCakgAAkpcAAIeZAAB7mwAAbZwAAF+cAABQnAAAQpwAADSc + AAAnnAAAGp0AAA2eAAACngAAAJ8AAACgAAAAoAAAAKECAAChCQAAohEAAKIaAACjJAAApC8AAKQ8AACl + SwAApVsAAKRtAACkgAAApJUAAKOtAACiyAAAouIAAKHxAACh+wCWmQAAi50AAH6fAABxoQAAYqEAAFOi + AABEowAANaMAACekAAAapQAADaYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgUAAK8OAACw + FwAAsSIAALMuAAC0PgAAtE8AALVhAAC1dQAAtYoAALWiAAC0vAAAtNYAALPqAACz9QCNoAAAgaMAAHSl + AABlpgAAVagAAEapAAA2qgAAKKsAABqtAAAMrgAAALAAAACxAAAAsgAAALMAAAC1AAAAtgAAALcAAAC5 + AAAAugAAALwAAAC+CQAAwBQAAMMgAADGLgAAx0AAAMhTAADJaAAAyX4AAMmVAADJrgAAycgAAMneAADJ + 6wCEpgAAd6gAAGirAABYrAAASK4AADiwAAAosgAAGbQAAAq2AAAAuAAAALoAAAC7AAAAvQAAAL4AAADA + AAAAwgAAAMQAAADGAAAAyAAAAMoAAADNAAAA0AQAANQRAADZHwAA3TAAAN5EAADgWQAA4W8AAOKGAADj + ngAA47YAAOLLAADi3gB5qwAAa64AAFuxAABKswAAOrYAACm4AAAZuwAACr4AAADAAAAAwgAAAMUAAADG + AAAAyAAAAMoAAADMAAAAzgAAANEAAADUAAAA2AAAANsAAADeAAAA4gAAAOYAAADrDAAA8B0AAPIxAAD0 + SAAA9V8AAPd2AAD4jQAA+aIAAPm0AAD5wwD/AAAA/wAAAP8AAAD/AAYA/wAWAP8AJAD/ADEA/wA9AP8A + SQD+AFQA/ABdAPoAZQD5AGwA+AByAPcAeAD2AH0A9ACCAPMAhwDyAIwA8ACSAO8AmQDuAKEA7QCqAOwA + tgDrAMYA6gDaAOgA7QDnAP0A5wD/AOYA/wDmAP8A4gD/AN8A/wD/AAAA/wAAAP8AAAD/AAMA/wARAP8A + HwD+AC0A+gA5APcARAD1AE8A8gBYAPAAYQDvAGgA7QBuAOwAcwDqAHkA6QB+AOcAggDmAIgA5QCNAOQA + lADiAJwA4QClAOAAsADeAL8A3ADRANsA5gDZAPgA2QD/ANgA/wDYAP8A1wD/ANMA/wD/AAAA/wAAAP8A + AAD+AAAA+QAMAPYAGgDyACcA7gAzAOwAPwDpAEoA5wBTAOQAXADjAGMA4QBpAN8AbwDdAHQA2wB5ANoA + fgDYAIMA1gCJANUAjwDTAJcA0gCfANAAqgDOALgAzADJAMoA3gDJAPEAyAD/AMcA/wDFAP8AxAD/AMQA + /wD/AAAA/wAAAPoAAAD0AAAA7gAGAOoAFADkACEA4QAuAN8AOQDdAEQA2QBOANYAVgDTAF4A0QBkAM8A + agDNAG8AzAB0AMoAeQDJAH4AxwCDAMYAigDEAJEAwgCaAMAApAC/ALEAvQDBALsA1AC5AOkAtwD6ALUA + /wC1AP8AtAD/ALQA/wD/AAAA+wAAAPAAAADpAAAA4wAAANwADQDWABsA0gAoAM8AMwDNAD4AygBIAMcA + UADEAFgAwgBeAMAAZAC/AGkAvQBuALwAcwC6AHkAuAB+ALcAhAC1AIwAswCUALEAngCvAKoArgC5AKsA + ywCpAOEAqADzAKYA/wCmAP8ApgD/AKUA/wD6AAAA7wAAAOYAAADeAAAA1gAAAM8ABgDJABQAxQAhAMEA + LQC+ADgAuwBBALkASgC2AFIAtABYALIAXgCxAGQArwBpAK0AbgCsAHMAqgB5AKkAfwCnAIYApQCOAKMA + mAChAKQAnwCyAJ0AwwCbANgAmgDsAJkA+wCYAP8AlwD/AJcA/wDyAAAA5gAAANsAAADRAAAAygAAAMQA + AAC+AAwAuQAaALUAJgCxADEArgA7AKwAQwCpAEsApwBSAKUAWACkAF4AogBjAKAAaACfAG4AnQBzAJsA + egCZAIEAlwCJAJYAkwCUAJ4AkgCsAJAAvACOANAAjQDlAIwA9QCLAP8AiwD/AIoA/wDqAAAA3QUAANAL + AADHCwAAvwUAALkAAAC0AAQArwASAKoAHgCmACoAowA0AKAAPQCdAEUAmwBMAJkAUwCYAFgAlgBeAJQA + YwCSAGkAkQBuAI8AdQCNAHwAjACFAIoAjgCIAJoAhgCnAIQAtwCDAMoAgQDgAIAA8ACAAPwAfwD/AH8A + /wDiCwAA0xcAAMgcAAC+HAAAthgAALARAACqBQAApQAIAKAAFQCcACIAmAAtAJUANgCSAD4AkABGAI4A + TQCMAFMAiwBYAIkAXgCHAGQAhgBqAIQAcACCAHgAgQCBAH8AiwB9AJYAewCkAHoAswB4AMYAdwDcAHYA + 7QB1APgAdQD/AHQA/wDbGQAAzCQAAMEpAAC3KgAArycAAKghAACiGQAAnA0AAJYCDACSABkAjgElAIoD + LwCIBDgAhQVAAIMFRwCCBk0AgAZTAH4HWQB9B18AewdlAHoHbAB4B3QAdgh9AHUIiABzCJQAcQiiAHAI + sgBuCMUAbQjbAGwJ7QBrCvsAawr/AGsJ/wDTJAAAxi4AALszAACxNQAAqTMAAKEuAACaJwAAlB4AAI0U + AQCIDBEAhA4dAIAQKAB+ETIAexE6AHkSQQB4E0gAdhNOAHQTVABzE1oAcRNhAHAUaABuFHEAbRR6AGsU + hQBpFJEAaBSgAGcUsQBlFMUAZBTcAGMV7wBiFf4AYhX/AGIV/wDOLQAAwTYAALY7AACtPQAApDwAAJw4 + AACVMgAAjSsAAIYiAACAGQoAexkYAHgaIwB1Gy0Achw1AHAcPQBvHEMAbR1KAGsdUABqHVYAaB1dAGcd + ZQBlHW0AZB53AGIeggBhHo8AXx6dAF4ergBdHsMAWx7aAFse7gBaHv0AWh7/AFoe/wDKNAAAvT0AALJD + AACpRQAAoEQAAJhAAACQOwAAiDQAAIAtAAB4JAUAcyITAHAjHgBtIygAaiQxAGgkOABmJD8AZSVGAGMl + TABhJVMAYCVaAF4lYQBdJWoAXCZ0AFomfwBZJowAWCabAFYmrABVJsAAVCbYAFMm7ABTJvwAUyb/AFMl + /wDGOgAAukMAAK9IAACmSwAAnUoAAJVIAACMQgAAgzwAAHs1AABzLgAAbCkOAGgqGgBlKiQAYystAGEr + NABfKzsAXStCAFsrSABaK08AWCxWAFcsXgBWLGcAVS1yAFMtfQBSLYoAUS2ZAE8tqgBOLb4ATS3VAEwt + 6wBMLfsATCz/AE0s/wDDPwAAt0gAAKxNAACjUAAAmlAAAJJOAACJSQAAgEMAAHc9AABuNgAAZjEKAGIw + FgBfMCAAXDApAFoxMQBYMTgAVjE+AFQxRQBTMUwAUjFUAFAyXABPMmUATjNvAE0zewBLM4gASjOXAEkz + qABIM70ARjPUAEYz6gBGMvoARjL/AEcx/wDARAAAtEwAAKpSAAChVQAAmFUAAI9TAACGTwAAfEkAAHND + AABqPQAAYTcGAFs2EgBYNh0AVTYmAFM2LQBRNjQATzY7AE42QgBMNkkASzdRAEo3WQBJOGMASDhtAEc4 + eQBFOYYARDmVAEM5pwBCObsAQDjSAEA46QBBOPkAQTf/AEE2/wC9SAAAsVEAAKdWAACeWQAAlloAAI1Y + AACEVAAAek4AAHBJAABmQwAAWz0CAFY7DgBSOxkATzsiAE07KgBLOzEASDo4AEc7PwBHO0cARTxPAEQ8 + VwBDPWEAQj1rAEE9dwBAPoUAPj6UAD0+pQA8ProAOz3RADs96AA7PPkAOzz/ADw7/wC7TQAAr1UAAKVa + AACcXQAAlF4AAItdAACCWQAAd1QAAG1PAABiSgAAV0QAAFBBCwBMQBYASkAfAEdAKABFQC8AQ0A2AEJA + PQBBQUUAQEFNAD9BVQA+Ql8APEJqADtCdgA6Q4MAOEOSADdDpAA2Q7kANULQADVC6AA1QfgANkD/ADZA + /wC4UQAArVkAAKNeAACaYQAAkmIAAIlhAACAXwAAdFkAAGpVAABfUAAAVEsAAEtHBwBGRRMAREUcAEFF + JQBARSwAPkY0AD1GOwA7RkIAOkZLADlHUwA4R10ANkdoADVIdAA0SIEAMkiRADFIowAwSLcALkfPAC9H + 5wAvRvcAMEX/ADBF/wC1VQAAql0AAKFiAACYZgAAkGcAAIdmAAB+ZAAAcl8AAGdbAABdVwAAUlIAAEZN + AwBASw4APUsZADtLIgA5SyoAOEwxADZMOQA1TEAANExIADJNUQAxTVsAME1mAC5NcgAtTYAALE2PACpN + oQApTbYAJ03NAChM5gAoS/cAKUv/ACpK/wCyWgAAqGIAAJ9nAACWagAAjmwAAIVrAAB8aQAAcGUAAGVh + AABbXgAAT1kAAENVAAA6UgoANlIVADRSHgAzUiYAMVIuAC9SNgAuUj0ALVJGACtTTwAqU1kAKFNkACdT + cAAlU34AJFOOACJTnwAhU7QAIFPMACBS5QAhUfYAIlD/ACJQ/wCvXwAApWcAAJ1sAACUbwAAjHEAAINx + AAB6bwAAbmwAAGNoAABXZAAAS2EAAD9dAAAzWgUALlkQACxZGgAqWSIAKVkqACdZMgAmWToAJFlDACNZ + TAAhWlYAIFphAB5abgAdWnwAG1qMABlangAYWrMAFlnLABdZ5AAYWPYAGVf/ABlW/wCsZQAAo2wAAJpx + AACSdQAAincAAIJ3AAB4dQAAbHIAAF5uAABSawAARmgAADplAAAvYgAAJmEKACNhFAAhYR0AH2ElAB5h + LgAcYTYAG2E/ABlhSAAXYVMAFmFeABRhawASYXkAEWGJAA5hnAANYbAAC2DIAAtg4QANX/QADl7/AA9d + /wCoawAAoHIAAJh3AACQewAAiH0AAIB9AAB0ewAAZ3gAAFl1AABNcgAAQW8AADVtAAApawAAH2oDABhp + DQAVaRcAFGkgABJpKAARaTEAD2k6AA1pRAALaU8ACWlbAAhpZwAGaXYABGmFAAJplwAAaKsAAGjDAABn + 3AABZu4AAmb6AANl/wClcgAAnXgAAJV+AACOgQAAh4MAAHyCAABvgAAAYn4AAFR7AABGeQAAOncAAC52 + AAAjdAAAGXMAAA5zBgAIchAABnIZAARyIgACcisAAXI1AAByPwAAckoAAHJWAAByYwAAcnEAAHKBAABx + kwAAcacAAHC+AABv1wAAbusAAG73AABu/QCheQAAmn8AAJOEAACMiAAAgogAAHaHAABphgAAW4QAAE2C + AAA/gAAAM38AACd+AAAcfQAAEX0AAAZ8AgAAfAsAAHwVAAB8HQAAfCYAAHwvAAB8OQAAfEQAAHxRAAB8 + XgAAe20AAHt8AAB7jgAAeqIAAHm6AAB40wAAeOkAAHf2AAB2/QCegQAAl4cAAJGLAACHjQAAfI4AAG+N + AABhjAAAU4sAAEWJAAA3iAAAKocAAB6HAAAThwAACIYAAACGAAAAhgYAAIYOAACGFwAAhx8AAIcoAACH + MgAAhz0AAIdKAACGWAAAhmcAAIV3AACFiQAAhJ0AAIS0AACDzgAAguYAAIH1AACB/QCbiQAAlY8AAIyR + AACBkwAAdJMAAGaTAABYkgAASZEAADuRAAAtkAAAIJAAABWQAAAJkAAAAJAAAACRAAAAkQAAAJEHAACR + DgAAkRcAAJIfAACSKQAAkjQAAJJBAACSTwAAkl8AAJFwAACRggAAkJYAAJCuAACPyAAAjuMAAI3yAACN + +wCYkQAAkJUAAIWXAAB4mAAAapkAAFuZAABNmQAAPpgAADCYAAAimQAAFZkAAAiZAAAAmgAAAJoAAACb + AAAAmwAAAJwAAACcBQAAnQ0AAJ0VAACeHgAAnykAAKA2AACgRQAAoFUAAJ9mAACfegAAno8AAJ6lAACd + wAAAndwAAJzuAACc+ACTmAAAiJsAAHydAABungAAX58AAFCfAABAnwAAMaAAACOhAAAVoQAACKIAAACj + AAAApAAAAKQAAAClAAAApgAAAKcAAACoAAAAqQEAAKoJAACrEgAArB0AAK4pAACvOAAAr0gAALBbAACw + bgAAsIMAALCaAACvtAAArtEAAK3nAACt8wCLngAAf6EAAHGiAABipAAAUqUAAEKmAAAypwAAI6gAABWp + AAAHqgAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALMAAAC0AAAAtQAAALcAAAC5BAAAuw4AAL4aAADB + KAAAwjoAAMNNAADDYgAAxHcAAMSOAADFpwAAxcAAAMTZAADD6QCBpAAAdKYAAGWoAABVqgAARasAADSt + AAAkrwAAFbEAAAWyAAAAtAAAALYAAAC3AAAAuQAAALoAAAC8AAAAvQAAAL8AAADBAAAAwwAAAMUAAADI + AAAAywAAAM8LAADTGQAA2CkAANo9AADbUgAA3GkAAN2AAADemAAA3rEAAN7HAADe2QB2qQAAaKwAAFiu + AABHsQAANrMAACW1AAAVuAAABboAAAC8AAAAvwAAAMEAAADDAAAAxAAAAMYAAADIAAAAygAAAM0AAADQ + AAAA0gAAANUAAADZAAAA3QAAAOEAAADmCAAA6xgAAO4sAADwQgAA8lkAAPNwAAD0iAAA9Z4AAPWyAAD1 + wwD/AAAA/wAAAP8AAAD/AAMA/wATAP8AIAD/AC0A/wA5AP8ARQD9AFAA+wBZAPkAYQD3AGgA9gBuAPQA + dADzAHkA8gB+APAAgwDwAIgA7wCOAO4AlQDtAJ0A7ACmAOoAsgDpAMEA6ADVAOYA6gDlAPwA5QD/AOQA + /wDjAP8A3QD/ANgA/wD/AAAA/wAAAP8AAAD/AAAA/wANAP4AGwD6ACkA+AA1APYAQADzAEsA8ABVAO4A + XQDsAGQA6gBqAOgAbwDnAHQA5gB6AOUAfwDkAIQA4wCKAOEAkADgAJgA3wChAN0ArADbALoA2QDMANgA + 4wDWAPYA1QD/ANMA/wDSAP8AzgD/AMsA/wD/AAAA/wAAAP8AAAD8AAAA9wAJAPIAFgDuACMA6wAwAOkA + OwDmAEYA5ABPAOEAVwDeAF8A3ABlANoAagDZAHAA2AB1ANYAegDUAH8A0wCFANIAiwDQAJMAzgCbAMwA + pgDKALMAyQDEAMcA2gDFAO4AwwD/AMEA/wDAAP8AwAD/AL8A/wD/AAAA/wAAAPgAAADxAAAA6wADAOUA + EQDgAB4A3QAqANsANQDYAEAA0wBJANAAUgDOAFkAzABgAMoAZQDJAGsAyABwAMYAdQDFAHoAxAB/AMIA + hgDAAI0AvgCVALwAnwC6AKwAuQC8ALYAzwCzAOYAsgD5ALEA/wCwAP8AsAD/ALAA/wD/AAAA9QAAAO0A + AADlAAAA3gAAANYACgDRABgAzQAkAMoALwDHADoAxABDAMIATAC/AFMAvQBaALsAYAC6AGUAuABqALcA + bwC2AHQAtAB6ALIAgACxAIcArwCQAK0AmQCrAKUAqAC0AKYAxgCkAN0AowDxAKIA/wChAP8AoAD/AKAA + /wD2AAAA6wAAAOIAAADZAAAA0AAAAMoAAwDEABEAwAAeALwAKQC5ADQAtgA9ALMARgCxAE0ArwBUAK0A + WgCrAF8AqgBkAKkAagCnAG8ApgB0AKQAewCiAIIAoACKAJ4AkwCcAJ8AmgCtAJgAvgCWANMAlADpAJMA + +gCSAP8AkgD/AJIA/wDuAAAA4gAAANUAAADMAAAAxQAAAL4AAAC5AAkAtAAXAK8AIwCsAC0AqQA3AKYA + PwCkAEcAogBOAKAAVACeAFkAnQBfAJsAZACaAGkAmABvAJYAdQCUAHwAkwCFAJEAjgCPAJkAjQCnAIsA + twCJAMsAiADiAIcA9ACGAP8AhQD/AIUA/wDlAAAA1gMAAMsIAADCBgAAugAAALQAAACuAAIAqQAOAKQA + GwCgACYAnQAwAJoAOACYAEAAlQBHAJMATgCSAFQAkABZAI8AXwCNAGQAjABqAIoAcACIAHgAhgCAAIQA + iQCCAJQAgQCiAH8AsQB9AMQAfADbAHsA7gB6APoAeQD/AHkA/wDdCgAAzhQAAMMZAAC5GAAAsRQAAKoM + AAClAQAAnwAGAJoAEwCWAB4AkgApAI8AMgCMADoAigBBAIgASACGAE4AhQBUAIMAWQCCAF8AgABlAH4A + bAB9AHMAewB7AHkAhQB3AJAAdQCeAHQArQByAMAAcQDVAHAA6QBvAPcAbwD/AG4A/wDUGAAAxyEAALwm + AACyJgAAqiMAAKMdAACcFQAAlgkAAJAACgCMABYAiAAhAIQAKwCCADMAfwA7AH0AQgB8AEgAegBOAHkA + VAB3AFoAdQBgAHQAZwByAG8AcAB4AG4AggBtAI0AawCbAGoAqwBoAL0AZwHSAGYC5gBlAvQAZQL+AGQC + /wDOIwAAwSsAALYwAACtMQAApC8AAJwqAACVIwAAjhoAAIgQAACCBgwAfgYZAHoHJAB4CC0AdQk1AHMK + PABxCkMAcApJAG4LTwBtC1UAawtcAGkMYwBoDGsAZgx1AGUMfwBjDIsAYQyaAGAMqgBfDL0AXQzTAFwN + 6ABcDvcAWw3/AFsN/wDJKwAAvDQAALI5AACoOgAAoDkAAJg0AACQLgAAiCcAAIEeAAB6FQQAdRESAHES + HgBuEycAbBQwAGoUNwBoFT4AZhVEAGUVSwBjFlEAYhZYAGAWXwBfFmgAXRdyAFwXfABaF4kAWReXAFcX + qABWF7wAVBfSAFQX6ABTF/kAUxf/AFMX/wDFMgAAuDsAAK5AAACkQgAAnEEAAJM9AACLNwAAgzEAAHsp + AABzIQAAbRsNAGkbGQBmHCMAYxwrAGEdMwBfHToAXh1AAFweRwBbHk0AWR5UAFgeXABWHmUAVR9vAFMf + egBSH4YAUB+VAE8gpgBOH7kATB/QAEwg5wBMH/gATB//AEwf/wDBOQAAtUEAAKtGAAChSAAAmUcAAJBE + AACHPwAAfzkAAHYyAABuKwAAZiQIAGEjFABeIx4AXCQnAFokLwBYJDYAViQ8AFQkQwBTJUoAUSVRAFAl + WQBPJmIATSZsAEwmdwBLJoQASSeTAEgnpABGJ7gARSbOAEUn5gBFJvcARSb/AEUl/wC+PgAAskYAAKhL + AACfTQAAlk0AAI1LAACERQAAe0AAAHI6AABpMwAAYCwEAFspEABXKRoAVSojAFIqKwBQKjIATyo5AE0q + PwBLKkYASitOAEkrVgBILF8ARixqAEUsdQBELYIAQy2RAEEtogBALbYAPy3NAD4t5AA+LPYAPyz/AD8r + /wC7QgAAsEoAAKZPAACdUgAAlFIAAItQAACCTAAAeEYAAG9AAABlOgAAXDMAAFUwDABRLxcATi8gAEwv + KABJLy8ASC81AEYvPABFMEMARDBLAEMxVABBMV0AQDJoAD8ycwA+MoAAPDKPADszoQA6MrQAODLLADgy + 4wA4MvUAOTH/ADkw/wC5RwAArU8AAKNUAACbVgAAklcAAIlVAACAUQAAdUsAAGxGAABiQQAAVzoAAE82 + CABKNRMASDQcAEU0JABDNCsAQTQyAEA1OQA/NUEAPjZJAD02UgA7N1sAOjdmADk3cgA4OH8ANjiOADU4 + nwA0OLMAMjfKADI34gAzN/UAMzb/ADQ1/wC2SwAAq1MAAKFYAACZWgAAkFsAAIdaAAB+VgAAc1EAAGlM + AABfRwAAVEEAAEo7BQBEOhAAQjoZAD86IQA9OSkAOzowADo6NwA5Oj8AODtHADc7UAA1PFkANDxkADM9 + cAAyPX0AMD2MAC89ngAtPbIALD3JACw84QAtPPQALTv/AC46/wCzUAAAqVcAAJ9cAACXXwAAjmAAAIVf + AAB8XAAAcFYAAGZSAABcTQAAUUgAAEZDAQA/QAwAOz8WADk/HwA3PyYANj8uADRANQAzQDwAMkBFADBB + TQAvQVcALkJiAC1CbgArQnwAKkKLAChCnAAnQrAAJkLIACVB4AAmQfMAJ0D/ACg//wCxVAAAp1sAAJ1g + AACVYwAAjGQAAIRkAAB6YQAAblwAAGRYAABaVAAAT1AAAENKAAA5RggANUUTADNFGwAxRiMAL0YrAC5G + MgAsRjoAK0ZCACpHSwAoR1UAJ0dgACVIbAAkSHoAI0iJACFImwAgSK8AHkfGAB5H3wAfRvIAIEX/ACFF + /wCuWQAApGAAAJtlAACTaAAAi2kAAIJpAAB4ZwAAbWMAAGJfAABYWwAATFYAAEBSAAA0TgQALkwOACxM + GAAqTCAAKEwoACdMLwAlTTcAJE1AACJNSQAhTVIAH05eAB5OagAcTngAGk6HABlOmQAXTq0A/+LwAElD + Q19QUk9GSUxFAAkKFk3FABZN3gAXTPIAGEv/ABlL/wCrXgAAomUAAJlqAACRbQAAiW8AAIBuAAB3bQAA + bGkAAGBlAABUYQAASF0AADxaAAAwVgAAJ1QJACNTEwAhUxwAIFQkAB5ULAAdVDQAG1Q8ABlURgAYVFAA + FlRbABVVaAATVXYAEVWFABBUlwANVKsADFTCAAtU2wANU/AADlL9ABBR/wCoZAAAn2oAAJdvAACPcwAA + h3QAAH90AAB1cwAAaW8AAFtrAABPaAAAQ2UAADdhAAArXwAAIVwDABlbDQAXWxcAFlsfABRbJwATWzAA + EVw4AA9cQgANXE0AC1xYAAlcZQAIXHIABlyCAARbkwACW6cAAVu9AAFa1gACWuoABFn5AAVY/wClagAA + nHAAAJV1AACNeQAAhnoAAH17AABxeAAAZHUAAFZyAABKbwAAPWwAADFpAAAmZwAAG2YAABFkBwALZBEA + CWQaAAhkIgAGZCsABGQ0AANkPgABZEkAAGRVAABkYQAAZG8AAGR+AABjjwAAY6MAAGK5AABi0gAAYegA + AGH1AABg/ACicQAAmncAAJJ8AACLfwAAhIEAAHmAAABsfQAAX3sAAFB4AABDdgAANnQAACpyAAAfcAAA + FG8AAApuAwABbgwAAG4VAABuHgAAbiYAAG4vAABtOQAAbUQAAG1QAABtXQAAbWsAAG16AABsjAAAa58A + AGu1AABqzgAAaeYAAGn0AABo/ACeeAAAl34AAJCDAACKhgAAf4YAAHOFAABmgwAAWIEAAEl/AAA7fQAA + L3sAACN6AAAXeQAADHkAAAJ4AAAAeAkAAHgRAAB4GQAAdyEAAHcqAAB3MwAAdz4AAHdLAAB3WAAAdmYA + AHZ2AAB2hwAAdZsAAHSxAABzywAAcuQAAHLzAABx+wCbgAAAlYUAAI+KAACFiwAAeYsAAGyKAABeiQAA + T4cAAEGGAAAzhQAAJoQAABqDAAAOgwAAA4IAAACCAAAAggQAAIILAACCEwAAghoAAIIjAACCLAAAgjcA + AIJEAACBUgAAgWEAAIFxAACAggAAgJYAAH+tAAB+xwAAfeEAAHzyAAB8+wCYiAAAk40AAIqPAAB+kAAA + cZAAAGOQAABUjwAARo4AADeNAAApjAAAHIwAABCMAAAEjAAAAIwAAACMAAAAjAAAAIwEAACMCwAAjRMA + AI0bAACNJAAAjS4AAI07AACNSQAAjVkAAI1qAACMfAAAjJAAAIumAACKwQAAidwAAIjvAACI+gCWkAAA + jZMAAIKVAAB1lgAAZ5YAAFiWAABJlgAAOpUAACyVAAAelQAAEJUAAAOVAAAAlgAAAJYAAACWAAAAlwAA + AJcAAACYAQAAmAgAAJkQAACZGQAAmiMAAJswAACbPwAAm08AAJpgAACacwAAmogAAJmeAACZuAAAl9UA + AJfrAACW9wCRlgAAhpkAAHmbAABrmwAAXJwAAEycAAA9nAAALZ0AAB+dAAARngAAA54AAACfAAAAoAAA + AKAAAAChAAAAogAAAKIAAACjAAAApAAAAKUEAACmDQAApxcAAKkjAACqMQAAqkIAAKtUAACraAAAqn4A + AKmWAACprgAAqckAAKjjAACo8QCInAAAfJ8AAG6gAABfoQAAT6IAAD6jAAAvpAAAH6UAABCmAAACpwAA + AKgAAACpAAAAqgAAAKsAAACsAAAArQAAAK4AAACwAAAAsQAAALIAAAC0AAAAtgkAALkVAAC8IgAAvDQA + AL1HAAC+WwAAv3EAAL+IAAC/oAAAv7sAAL/UAAC+5wB/ogAAcaQAAGKmAABSpwAAQakAADCqAAAgrAAA + Ea0AAAGvAAAAsAAAALIAAACzAAAAtAAAALYAAAC3AAAAuQAAALsAAAC9AAAAvwAAAMEAAADDAAAAxgAA + AMoFAADOEwAA0iMAANQ3AADVTAAA1mMAANh6AADYkwAA2asAANrCAADa1QB0qAAAZaoAAFWsAABErgAA + M7AAACGyAAARtAAAALcAAAC5AAAAuwAAAL0AAAC/AAAAwAAAAMEAAADEAAAAxgAAAMgAAADLAAAAzQAA + ANAAAADTAAAA2AAAAN0AAADiAgAA5xIAAOsmAADsPAAA7lMAAPBrAADxgwAA8ZsAAPKwAADywQD/AAAA + /wAAAP8AAAD/AAAA/wAPAP8AHAD/ACkA/wA2AP4AQQD7AEwA+QBVAPcAXQD1AGQA8wBqAPEAcADwAHUA + 7wB6AO4AfwDtAIQA7QCKAOwAkQDrAJkA6QCiAOgArQDmALwA5QDPAOQA5wDjAPoA4gD/AOIA/wDdAP8A + 1AD/AM8A/wD/AAAA/wAAAP8AAAD/AAAA/wAKAPsAGAD3ACUA9QAxAPMAPQDwAEcA7QBQAOoAWADoAF8A + 5gBmAOUAawDkAHAA4wB1AOIAegDhAIAA3wCFAN4AjADdAJMA2wCdANkApwDYALUA1QDHANQA3wDSAPQA + 0AD/AM4A/wDNAP8AyAD/AMUA/wD/AAAA/wAAAP8AAAD6AAAA9AAFAO4AEwDrAB8A6AAsAOYANwDjAEIA + 3wBLANwAUwDaAFoA2ABhANUAZgDUAGsA0wBwANEAdQDQAHsAzwCAAM0AhwDMAI4AygCXAMgAoQDHAK4A + xQC/AMMA1ADAAOsAvgD+AL0A/wC8AP8AvAD/ALkA/wD/AAAA/QAAAPUAAADuAAAA5gAAAOEADQDdABoA + 2QAmANUAMQDSADsAzgBFAMwATgDJAFUAxwBbAMYAYQDEAGYAwwBrAMIAcADAAHUAvwB7AL0AgQC8AIgA + ugCRALgAmwC2AKcAtAC2ALEAygCvAOMArgD3AK0A/wCsAP8AqwD/AKsA/wD8AAAA8gAAAOkAAADhAAAA + 2QAAANIABwDNABUAyAAgAMUAKwDCADYAvwA/AL0ASAC6AE8AuABVALYAWwC1AGAAswBmALIAawCwAHAA + rwB1AK4AfACsAIMAqgCLAKgAlQClAKAApACvAKIAwQCgANkAngDvAJwA/wCbAP8AmwD/AJsA/wDyAAAA + 5wAAAN0AAADTAAAAywAAAMUAAQC/AA0AugAaALcAJQCzAC8AsQA5AK4AQQCrAEkAqQBPAKgAVQCmAFsA + pQBgAKMAZQCiAGoAoABwAJ8AdgCdAH0AmwCFAJkAjwCXAJoAlQCoAJMAuQCRAM4AkADnAI4A+QCNAP8A + jQD/AI0A/wDpAAAA3AAAANAAAADHAAAAwAAAALkAAACzAAcArgATAKoAHwCmACkAowAyAKEAOwCeAEIA + nABJAJoATwCZAFUAlwBaAJUAXwCUAGUAkwBqAJEAcQCPAHgAjgCAAIsAiQCJAJQAhwCiAIYAsgCEAMYA + ggDeAIEA8QCAAP8AgAD/AH8A/wDgAAAA0QEAAMYEAAC9AgAAtQAAAK4AAACpAAAAowAMAJ8AGACbACIA + lwAsAJQANACSADwAkABDAI4ASQCMAE8AiwBUAIkAWgCIAF8AhgBlAIQAbACDAHMAgQB7AH8AhAB9AI8A + ewCcAHkArAB4AL8AdgDVAHUA6wB0APoAdAD/AHQA/wDWCQAAyRIAAL4VAAC0FQAArBAAAKUIAACfAAAA + mgAEAJQAEACQABsAjAAlAIkALgCGADUAhAA9AIIAQwCBAEkAfwBPAH0AVAB8AFoAegBgAHkAZwB3AG4A + dQB3AHMAgABxAIsAcACYAG4AqABsALoAawDPAGoA5QBpAPQAaQD/AGgA/wDPFgAAwh8AALcjAACtIwAA + pR8AAJ4ZAACXEQAAkQUAAIsABwCGABMAggAdAH8AJwB8AC8AeQA2AHcAPQB2AEMAdABJAHMATwBxAFUA + cABbAG4AYgBsAGoAagBzAGgAfABnAIgAZQCVAGMApABiALYAYQDLAGAA4QBfAPEAXgD7AF4A/wDJIQAA + vCkAALEuAACoLgAAoCwAAJgmAACQIAAAiRcAAIIMAAB8AgoAeAAWAHQAIAByACkAbwEwAG0CNwBrAj4A + agNEAGgDSgBnBFAAZQRXAGMEXgBiBWYAYAVvAF4FeQBdBYUAWwWTAFkFogBYBbUAVwXJAFYG4ABVBvAA + VQb8AFUG/wDEKgAAuDIAAK02AACkNwAAmzYAAJMxAACLKwAAgyQAAHwbAAB0EgEAbgoNAGsKGQBoCyIA + ZQwqAGMMMgBhDTgAYA0/AF4NRQBdDkwAWw5TAFkOWgBYD2MAVhBsAFUQdwBTEIMAUhCSAFAQogBPELUA + TRDLAEwQ4gBMEfMATBH/AEwQ/wDAMQAAtDkAAKk9AACgPwAAmD0AAI86AACHNAAAfi4AAHYmAABuHgAA + ZxYHAGIUEwBfFR0AXBUlAFoWLQBYFjQAVxY7AFUWQQBUF0gAUhdPAFEXVwBPGF8AThhpAEwYdABLGYEA + SRmPAEgZoABGGbMARRnJAEQZ4QBEGfMARBn/AEUY/wC8NwAAsT8AAKZDAACdRQAAlUQAAIxBAACDPAAA + ejYAAHIvAABpKAAAYSACAFocDgBXHBkAVR0hAFIdKQBQHTAATx03AE0ePQBMHkQASh5LAEkeUwBHH1wA + Rh9nAEUgcgBDIH8AQiCNAEAgngA/ILEAPiDHAD0g3wA9IPIAPSD/AD4f/wC5PAAArkQAAKRIAACbSgAA + kkoAAIlHAACAQgAAdz0AAG43AABlMAAAXCkAAFQjCgBQIxUATSMdAEsjJQBJIywARyMzAEUkOgBEJEEA + QyRIAEElUQBAJVoAPyZkAD4mcAA8Jn0AOyeLADknnAA4J68ANyfGADYm3gA2JvEANyb/ADcl/wC3QQAA + q0gAAKJNAACZTwAAkE8AAIdNAAB+SQAAdEMAAGs9AABhNwAAVzEAAE4qBgBJKREARikaAEQpIgBCKSkA + QCkwAD4pNgA9KT4APCpGADsrTgA6K1gAOCxiADcsbgA2LHsANCyKADMsmgAyLK4AMCzEAC8s3QAwLPEA + MSv+ADEr/wC0RgAAqU0AAKBRAACXVAAAjlQAAIVSAAB8TgAAckkAAGhDAABePgAAVDcAAEkxAgBDLg0A + QC4WAD0uHgA7LiYAOS4sADguNAA3LzsANi9DADQwTAAzMFUAMjFgADExbAAvMnkALjKIAC0ymQArMqwA + KjLDACkx3AAqMfAAKzD+ACsw/wCySgAAp1EAAJ5WAACVWAAAjFkAAIRXAAB6UwAAb04AAGVJAABbRAAA + UD4AAEY5AAA+NAkAOTQTADczGwA1MyMAMzMqADI0MQAxNDkALzVBAC41SgAtNlMALDZeACo3agApN3cA + KDeGACY3lwAlN6sAIzfCACI32wAkNu8AJTX9ACU1/wCvTgAApVUAAJxaAACTXAAAi10AAIJcAAB4WQAA + bVMAAGJPAABZSwAATkYAAENAAAA4OwYAMzkQADE5GAAvOSAALTkoACw6LwAqOjYAKTo/ACg7RwAmO1EA + JTxcACQ8aAAiPHYAITyFAB88lgAePKkAHDzAABs82QAdO+4AHjv9AB86/wCtUwAAo1kAAJpeAACRYQAA + iWIAAIBhAAB3XgAAa1kAAGFWAABXUgAATE0AAEFIAAA1QwIALUAMACpAFQAoQB0AJ0AlACVALAAkQDQA + IkE8ACFBRQAfQU8AHkJaABxCZgAbQnQAGUKDABhClAAWQqgAFUK/ABRC2AAVQe0AF0D8ABg//wCqVwAA + oV4AAJhjAACQZgAAh2cAAH9mAAB1ZAAAamAAAGBdAABVWAAASVQAAD1PAAAxSwAAJ0cIACNGEQAhRhoA + H0chAB1HKQAcRzEAGkc5ABlHQgAXSEwAFkhYABRIZAASSHIAEUiBAA9IkgANSKYADEi8AAtI1AAMR+sA + Dkb7AA9F/wCnXQAAnmMAAJZoAACOawAAhmwAAH1sAAB0agAAaWcAAF1jAABRXwAARVoAADhWAAAtUwAA + IlADABtODAAYThUAFk4eABVOJQATTi4AEk42ABBOQAAOT0oADE9VAApPYQAIT28AB09+AAVPjwADT6IA + Ak64AAJO0AADTeYABE32AAVM/wCkYgAAnGkAAJRtAACMcQAAhHIAAHxyAABzcAAAZm0AAFhoAABMZQAA + P2EAADNeAAAoWwAAHVkAABNXBwANVhAAC1YZAApWIQAIVioAB1YzAAVXPAADV0cAAVdSAABXXgAAV2wA + AFd7AABWjAAAVp8AAFW0AABVzAAAVOQAAFTyAABT+wChaQAAmW8AAJJ0AACKdwAAg3gAAHt4AABvdgAA + YXIAAFNvAABGbAAAOmkAAC1mAAAiYwAAF2IAAAxgBAAEXwwAAF8VAABfHgAAXyYAAF8vAABfOQAAX0MA + AF9PAABfWwAAX2kAAF94AABeiQAAXpsAAF2xAABcyQAAXOIAAFvxAABa+gCebwAAl3YAAJB6AACJfQAA + gn8AAHZ9AABpewAAW3gAAE11AABAcgAAM3AAACduAAAbbAAAEGsAAAVqAQAAaQoAAGkSAABpGgAAaSIA + AGkqAABpNAAAaT8AAGhKAABoVwAAaGUAAGh0AABnhQAAZpgAAGWuAABlxwAAZOAAAGPwAABj+gCbdwAA + lH0AAI6BAACIhAAAfYQAAHCCAABigAAAVH4AAEZ8AAA4egAAK3gAAB92AAATdQAAB3QAAAB0AAAAcwYA + AHMNAABzFQAAcxwAAHMlAABzLgAAcjkAAHJFAAByUgAAcmEAAHFwAABxgQAAcJQAAG+qAABuwwAAbd4A + AG3wAABs+gCYfwAAkoQAAIyIAACCiQAAdokAAGmHAABahgAATIQAAD2DAAAvgQAAIoAAABZ/AAAJfgAA + AH4AAAB+AAAAfQEAAH0IAAB9DgAAfRYAAH0eAAB9JwAAfTIAAH0+AAB9TAAAfFsAAHxrAAB8fAAAe48A + AHqlAAB5vwAAeNsAAHfvAAB3+gCWhwAAkYwAAIeNAAB7jgAAbo4AAGCNAABRjAAAQosAADOKAAAliQAA + GIgAAAuIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIBwAAiA4AAIgWAACIHgAAiSgAAIk1AACJQwAAiFMA + AIhkAACHdgAAh4kAAIafAACFuQAAhNUAAIPtAACD+QCUjwAAi5EAAICTAABykwAAZJMAAFWTAABFkwAA + NpIAACeSAAAZkQAAC5EAAACSAAAAkgAAAJIAAACSAAAAkgAAAJMAAACTAAAAlAQAAJQLAACVFAAAlR4A + AJYqAACWOQAAlkkAAJZaAACVbQAAlYEAAJWYAACTsgAAk84AAJLoAACR9gCOlQAAg5cAAHaYAABomQAA + WJkAAEmZAAA5mQAAKZkAABqaAAAMmgAAAJsAAACbAAAAnAAAAJwAAACdAAAAnQAAAJ4AAACfAAAAoAAA + AKAAAACiCAAAoxIAAKQdAAClKwAApjwAAKZPAAClYwAApXgAAKWOAACkqAAApMMAAKPgAACi8QCGmwAA + eZ0AAGueAABcnwAATJ8AADugAAAroQAAG6IAAAuiAAAAowAAAKQAAAClAAAApgAAAKcAAACoAAAAqQAA + AKoAAACrAAAArAAAAK4AAACvAAAAsQQAALQQAAC2HQAAty4AALhBAAC5VQAAuWsAALmDAAC3nQAAuLcA + ALjRAAC55gB8oAAAbqIAAF+kAABPpQAAPqYAAC2nAAAcqQAADKoAAACrAAAArQAAAK4AAACwAAAAsAAA + ALIAAACzAAAAtQAAALcAAAC4AAAAugAAALwAAAC/AAAAwgAAAMUAAADJDQAAzR0AAM4xAADPRwAA0V0A + ANJ1AADSjQAA06YAANS+AADT1ABxpgAAYqgAAFKpAABBqwAAL60AAB6vAAAMsQAAALMAAAC1AAAAtwAA + ALkAAAC7AAAAvAAAAL0AAAC/AAAAwgAAAMQAAADGAAAAyQAAAMwAAADPAAAA0wAAANgAAADdAAAA4wwA + AOcgAADoNgAA6k0AAOtmAADsfgAA7ZYAAO6tAADvwAD/AAAA/wAAAP8AAAD/AAAA/wALAP8AGQD/ACYA + /wAyAP0APgD6AEgA9gBRAPQAWQDxAGAA8ABmAO8AbADuAHEA7QB2AOwAewDrAIAA6gCGAOkAjADoAJQA + 5gCdAOUAqADjALcA4gDJAOEA4gDgAPgA3gD/ANwA/wDWAP8AzgD/AMkA/wD/AAAA/wAAAP8AAAD/AAAA + /QAGAPgAFAD1ACEA8wAtAPEAOQDtAEMA6QBMAOcAVADlAFsA4wBhAOIAZwDgAGwA3wBxAN4AdgDdAHsA + 3ACBANoAhwDYAI8A1gCXANQAogDTALAA0QDBAM8A2QDNAPAAygD/AMkA/wDJAP8AwwD/AL8A/wD/AAAA + /wAAAP4AAAD3AAAA8AABAOsADwDoABwA5QAoAOIAMwDeAD0A2gBHANgATwDVAFYA0wBcANEAYgDQAGcA + zgBsAM0AcQDLAHYAygB8AMgAggDHAIkAxQCSAMQAnADCAKkAwAC5AL0AzgC7AOgAuQD8ALgA/wC4AP8A + tgD/ALIA/wD/AAAA+gAAAPIAAADpAAAA4gAAAN0ACgDYABcA0wAiAM8ALQDNADcAygBBAMcASQDFAFAA + wwBXAMEAXAC/AGIAvgBnALwAbAC7AHEAugB2ALgAfQC3AIQAtQCMALMAlgCwAKIArgCxAKwAxQCrAN4A + qQD1AKcA/wCmAP8ApgD/AKQA/wD4AAAA7gAAAOUAAADbAAAA0wAAAM0ABADHABEAwwAdAMAAJwC9ADEA + ugA7ALcAQwC1AEoAswBRALEAVwCvAFwArgBhAK0AZgCrAGsAqgBxAKgAdwCmAH4ApACGAKIAkACgAJsA + nwCpAJ0AvACbANMAmQDsAJcA/wCXAP8AlgD/AJYA/wDuAAAA4wAAANYAAADOAAAAxgAAAL8AAAC6AAoA + tQAXALEAIQCuACsAqwA0AKkAPQCmAEQApABLAKIAUQChAFYAnwBbAJ4AYACcAGUAmgBrAJkAcQCXAHgA + lgCBAJQAigCSAJUAkACjAI4AtACMAMkAiwDjAIkA+ACIAP8AiAD/AIcA/wDkAAAA1gAAAMsAAADCAAAA + ugAAALQAAACuAAQAqQAQAKQAGwChACUAngAuAJsANgCZAD4AlgBEAJUASwCTAFAAkQBVAJAAWgCPAGAA + jQBmAIwAbACKAHMAiAB7AIYAhACEAJAAggCdAIAArQB/AMEAfQDaAHwA8AB7AP8AegD/AHoA/wDaAAAA + zAAAAMEBAAC4AAAAsAAAAKkAAACjAAAAngAJAJkAFACVAB4AkgAnAI8AMACMADcAigA+AIgARACGAEoA + hQBPAIMAVQCCAFoAgABgAH8AZwB9AG4AewB2AHkAgAB3AIsAdgCXAHQApwByALoAcQDRAHAA6ABvAPkA + bgD/AG4A/wDRBwAAxA8AALkSAACvEQAApwwAAKAEAACaAAAAlAACAI8ADQCKABcAhwAhAIMAKQCBADEA + fgA4AH0APgB7AEQAeQBKAHgATwB2AFUAdQBbAHMAYgBxAGkAbwByAG4AewBsAIYAagCTAGgAogBnALQA + ZQDKAGQA4gBjAPMAYwD/AGMA/wDKFQAAvRwAALIgAACpIAAAoRwAAJkWAACSDQAAiwIAAIUABQCAABAA + fAAaAHkAIwB2ACsAcwAyAHEAOABwAD8AbgBEAG0ASgBrAFAAaQBWAGgAXQBmAGUAZABtAGIAdwBhAIIA + XwCPAF0AnwBcALAAWwDFAFkA3QBZAO4AWAD7AFgA/wDEIAAAuCcAAK0rAACkKwAAmygAAJMjAACLHAAA + hBMAAH0JAAB3AAgAcgATAG8AHABsACQAaQAsAGcAMwBlADkAZAA/AGIARQBgAEsAXwBSAF0AWQBbAGEA + WgBqAFgAdABWAH8AVQCNAFMAnABSAK0AUADCAE8A2QBOAOsATgD3AE4A/wC/KAAAszAAAKkzAACfNAAA + lzIAAI4uAACGKAAAfiAAAHcYAABvDgAAaQYKAGUDFABiBB4AXwQmAF0FLQBbBTQAWQY6AFgGQABWBkYA + VQdNAFMHVQBRCF0AUAhnAE4JcQBNCX0ASwmLAEkJmwBICa0ARgnBAEUJ2ABFCesARQn5AEUJ/wC7MAAA + rzcAAKU7AACcPAAAkzsAAIs3AACCMQAAeioAAHEjAABpGwAAYhMCAFsNDQBYDRgAVg0gAFMOKABRDi4A + UA81AE4POwBMEEIASxBJAEoRUQBIEVoARhFkAEUSbwBDEnsAQhKKAEASmgA/EqwAPRLCADwS2gA8E+4A + PRL7AD0S/wC4NgAArD0AAKJBAACZQgAAkUEAAIg+AAB/OQAAdjMAAG0sAABkJQAAXB0AAFQWCABQFRMA + TRYcAEsWIwBJFioARxYxAEYXOABEFz8AQxdGAEEYTgBAGFcAPhlhAD0ZbAA8GnkAOhqHADgamAA3GqoA + NhrAADQZ2AA1Gu0ANRn8ADYZ/wC1OwAAqkIAAKBGAACXSAAAjkcAAIVEAAB8PwAAczoAAGo0AABgLQAA + VyYAAE4fBABJHA4ARhwYAEMcHwBBHCcAPx0tAD4dNAA8HTsAOx5DADoeSwA4H1QANx9fADYgagA0IHcA + MyCFADEglgAwIKkALiC+AC0g1gAuIOwALyD7AC8f/wCyQAAAp0cAAJ5LAACVTQAAjE0AAINKAAB6RgAA + cEAAAGc7AABdNAAAUy4AAEonAABCIwoAPyIUADwiHAA6IiMAOCIqADYjMQA1IzgANCRAADMkSAAyJVIA + MCVcAC8maAAtJnUALCaEAComlAApJqcAKCa9ACYm1QAnJusAKCX6ACkl/wCwRAAApUsAAJxPAACTUQAA + ilEAAIJPAAB4SwAAbkYAAGRBAABaOwAAUDUAAEYvAAA9KQcAOCgQADUoGAAzJyAAMScmADAoLgAuKTUA + LSk9ACwqRgArKlAAKitaACgrZgAnLHMAJSyCACQskwAiLKUAISy7ACAr0wAgK+oAIiv6ACMq/wCtSAAA + o08AAJpUAACRVgAAiVYAAIBUAAB2UQAAbEsAAGJHAABXQQAATTwAAEM2AAA4MQMAMi4NAC8tFQAtLR0A + Ky0kACkuKwAoLjMAJy87ACYvRAAkME0AIzBYACIxZAAgMXIAHzGAAB0xkQAbMaQAGjG6ABkx0gAaMekA + GzD5ABwv/wCrTQAAoVMAAJhYAACQWgAAh1sAAH5ZAAB1VgAAalEAAF9NAABWSQAAS0QAAEE+AAA2OQAA + LDQJACgzEgAmMxoAJTQiACM0KQAiNDAAIDU5AB81QQAeNksAHDZWABs2YgAZN3AAFzd/ABY3kAAUN6MA + Eze5ABE20QATNugAFDX4ABU0/wCpUQAAn1gAAJZcAACOXwAAhl8AAH1eAABzXAAAaFcAAF5TAABUTwAA + SksAAD5FAAAyQAAAJzsGACE6DgAgOhcAHjofABw6JgAbOi4AGTs2ABg7PwAWPEkAFTxUABM8YAARPG4A + ED19AA09jgAMPaAACjy2AAk8zQAKPOUADDv2AA06/wCmVgAAnV0AAJVhAACMZAAAhGUAAHxkAAByYgAA + Z10AAF1aAABSVgAARlEAADpMAAAuSAAAI0QBABtBCwAYQRMAFkEbABRBIwATQSsAEUEzABBCPAANQkYA + DENSAApDXgAIQ2sABkN6AAVDiwADQ50AAUKyAAFCygACQeEAA0HyAAVA/QCkWwAAm2IAAJNmAACLaQAA + g2oAAHpqAABxaAAAZmQAAFpgAABOXAAAQlcAADVTAAAqUAAAH0wAABVKBgAOSA8ADEkXAAtJIAAJSSgA + B0kxAAZJOgAESkQAAkpPAABKWwAASmkAAEp4AABKiAAASZoAAEmvAABIxwAASN8AAEfvAABH+QChYQAA + mWcAAJFsAACJbwAAgXAAAHlwAABwbgAAY2oAAFZmAABJYgAAPF4AADBbAAAkWAAAGVUAAA9TAwAGUQsA + AlEUAABRHQAAUSUAAFIuAABSNwAAUkEAAFJMAABSWAAAUmYAAFF1AABRhQAAUZgAAFCtAABPxAAAT90A + AE7uAABN+ACeZwAAlm0AAI9yAACIdQAAgHYAAHh2AABscwAAXm8AAFBsAABDaAAANmUAACpiAAAeYAAA + E14AAAhcAQAAWwoAAFsSAABbGgAAWyEAAFoqAABaMwAAWj4AAFpJAABaVQAAWmMAAFpyAABZggAAWZUA + AFiqAABXwgAAVtwAAFbtAABV+ACbbgAAlHQAAI15AACGewAAf30AAHN7AABmeAAAWHUAAEpyAAA8bwAA + L20AACNqAAAXaQAAC2cAAAFmAAAAZQcAAGUOAABkFgAAZB0AAGQlAABkLgAAZDkAAGRFAABjUQAAY18A + AGNuAABifwAAYpEAAGGnAABgvwAAX9oAAF7tAABd+QCYdgAAknsAAIx/AACFggAAeoEAAG2AAABffgAA + UXsAAEJ5AAA0dgAAJ3QAABtzAAAOcQAAA3AAAABvAAAAbwMAAG8KAABuEQAAbhgAAG4gAABuKAAAbjMA + AG4/AABtTAAAbVsAAG1qAABsewAAa44AAGqjAABpvAAAaNgAAGftAABn+QCWfQAAkIMAAIqHAACAhwAA + c4YAAGaFAABXgwAASIEAADp/AAArfgAAHnwAABF7AAAFewAAAHoAAAB5AAAAeQAAAHkEAAB5CgAAeRIA + AHkZAAB5IgAAeSwAAHg4AAB4RgAAeFUAAHdlAAB3dgAAdokAAHWfAAB0uAAAc9QAAHLsAABx+QCUhgAA + j4oAAIWMAAB5jAAAa4wAAF2KAABNiQAAPogAAC+HAAAhhgAAE4UAAAaEAAAAhAAAAIQAAACEAAAAhAAA + AIQAAACEAwAAhAkAAIQRAACEGQAAhCMAAIQwAACEPgAAhE0AAINeAACDcAAAgoMAAIKZAACBsgAAf88A + AH/pAAB++ACSjgAAiZAAAH2RAABwkQAAYZEAAFKQAABCkAAAMo8AACOOAAAVjgAAB44AAACOAAAAjgAA + AI4AAACOAAAAjgAAAI4AAACPAAAAjwAAAI8HAACQEAAAkRkAAJEkAACRMwAAkUMAAJFUAACRZwAAkHwA + AJCRAACPqwAAjscAAI3kAACM9QCMkwAAgZUAAHSWAABllwAAVZcAAEWXAAA1lgAAJZYAABaWAAAHlwAA + AJcAAACYAAAAmAAAAJgAAACZAAAAmQAAAJoAAACbAAAAmwAAAJwAAACdAwAAngwAAKAYAACgJgAAoDcA + AKFJAAChXQAAoHIAAKCIAACgoQAAnr4AAJ7cAACd8ACEmQAAd5sAAGmcAABZnAAASZ0AADidAAAnngAA + F54AAAefAAAAoAAAAKEAAACiAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACrAAAArQAA + AK8KAACxFwAAsygAALM7AAC0TwAAtGYAALN9AACzlgAAsrEAALPNAACz5QB6ngAAbKAAAFyhAABLogAA + OqMAACmlAAAYpgAAB6cAAACoAAAAqgAAAKsAAACsAAAArQAAAK4AAACvAAAAsQAAALMAAAC0AAAAtgAA + ALgAAAC6AAAAvQAAAMAAAADDCAAAxxgAAMgsAADKQQAAy1cAAMxvAADMiAAAyqMAAMq/AADL1gBupAAA + X6UAAE+nAAA+qQAALKoAABqsAAAIrgAAALAAAACyAAAAtAAAALUAAAC3AAAAuAAAALkAAAC8AAAAvgAA + AMAAAADCAAAAxQAAAMcAAADKAAAAzgAAANIAAADYAAAA3gYAAOIaAADkMQAA5UgAAOdhAADoeQAA6ZIA + AOmqAADrvgD/AAAA/wAAAP8AAAD/AAAA/wAHAP8AFQD/ACIA/gAuAPoAOgD2AEQA8wBNAPEAVQDvAFwA + 7gBiAOwAaADrAG0A6gByAOkAdwDoAHwA5wCBAOUAiADkAI8A4gCYAOEAowDgALEA3gDDAN0A2wDbAPQA + 2AD/ANYA/wDRAP8AyQD/AMQA/wD/AAAA/wAAAP8AAAD/AAAA+gACAPYAEQDzAB0A8AApAO0ANADpAD8A + 5gBIAOMAUADhAFcA3wBdAN4AYwDdAGgA2wBtANoAcgDYAHcA1gB9ANQAgwDTAIoA0QCTANAAnQDOAKsA + zAC7AMkA0QDHAOwAxQD/AMUA/wDEAP8AvQD/ALkA/wD/AAAA/wAAAPsAAADzAAAA7QAAAOgACwDkABgA + 4AAkAN0ALgDZADkA1QBCANIASwDQAFIAzgBYAMwAXgDLAGMAyQBoAMgAbQDGAHIAxQB3AMQAfgDCAIUA + wACNAL8AlwC8AKQAuQCzALcAxwC2AOMAtAD6ALMA/wCyAP8ArwD/AKsA/wD/AAAA9wAAAO4AAADlAAAA + 3gAAANgABgDSABMAzgAeAMsAKQDIADMAxQA9AMIARQC/AEwAvQBSALwAWAC6AF0AuQBiALcAZwC2AGwA + tQByALMAeACxAH8ArwCHAK0AkQCrAJ0AqQCsAKcAvgClANgAowDxAKEA/wChAP8AoAD/AJ4A/wD1AAAA + 6gAAAOAAAADWAAAAzgAAAMgAAADCAA0AvgAZALoAIwC4AC0AtQA2ALIAPwCvAEYArQBMAKwAUgCqAFcA + qQBcAKcAYQCmAGcApABsAKIAcgChAHkAnwCBAJ0AiwCbAJYAmQCkAJcAtgCVAM0AkwDoAJIA/QCRAP8A + kQD/AJEA/wDqAAAA3QAAANEAAADJAAAAwQAAALoAAAC0AAcAsAATAKwAHQCoACcApgAwAKMAOAChAEAA + nwBGAJ0ATACbAFEAmQBXAJgAXACXAGEAlQBmAJQAbQCSAHQAkAB8AI4AhQCMAJAAigCeAIgArgCHAMQA + hQDfAIMA9QCCAP8AggD/AIIA/wDfAAAA0QAAAMYAAAC9AAAAtQAAAK4AAACoAAEAowAMAJ8AFwCbACEA + mAAqAJUAMQCTADkAkQBAAI8ARgCNAEsAjABRAIoAVgCJAFsAhwBhAIYAZwCEAG4AggB2AIEAgAB/AIoA + fACYAHsApwB5ALsAdwDUAHYA7QB1AP4AdQD/AHQA/wDUAAAAxwAAALwAAACzAAAAqwAAAKQAAACeAAAA + mQAGAJQAEQCQABsAjAAjAIkAKwCHADMAhAA6AIIAQACBAEUAfwBLAH4AUAB8AFYAewBbAHkAYgB3AGkA + dQBxAHQAewByAIUAcACSAG4AoQBsALQAawDLAGoA5QBpAPcAaAD/AGgA/wDMBQAAvwwAALQQAACrDQAA + owgAAJsAAACVAAAAjwAAAIoACgCFABQAgQAdAH4AJQB7AC0AeQAzAHcAOgB1AEAAcwBFAHIASwBwAFAA + bwBWAG0AXQBrAGQAaQBtAGgAdgBmAIEAZACOAGIAnABgAK8AXwDEAF4A3QBdAPEAXQD/AFwA/wDFEwAA + uBoAAK4dAACkHQAAnBkAAJQSAACNCQAAhgAAAIAAAwB7AA0AdwAWAHMAHwBwACcAbgAtAGwANABqADoA + aABAAGYARQBlAEsAYwBRAGIAWABgAGAAXgBoAFwAcgBaAH0AWQCKAFcAmABVAKoAVAC/AFMA1gBSAOsA + UgD5AFEA/wC/HgAAsyUAAKkoAACfKAAAlyUAAI8gAACHGQAAfxAAAHgGAAByAAYAbQAQAGkAGABmACAA + YwAoAGEALgBfADQAXQA6AFwAQABaAEYAWABNAFcAVABVAFwAUwBkAFEAbgBQAHoATgCHAEwAlgBLAKcA + SgC7AEkA0QBIAOYARwD1AEcA/gC6JwAAry0AAKUxAACbMgAAky8AAIorAACCJQAAeh0AAHIVAABqCwAA + ZAMIAF8AEQBcABoAWQAiAFcAKABVAC8AUwA1AFEAOwBQAEEATgBIAEwAUABLAVgASQFhAEcBawBGAncA + RAKEAEIClABBAqUAQAG5AD4BzwA+AuQAPQLyAD0C/AC2LgAAqzUAAKE4AACYOQAAjzgAAIc0AAB+LgAA + digAAG0gAABlGAAAXRAAAFUICgBSBhMATwYcAE0HIwBLByoASQcwAEgINgBGCD0ARAlEAEMJTABBClQA + PwpeAD4LaQA8C3UAOguDADkLkwA3C6QANgu5ADUKzwA0C+UANAv0ADUL/gCzNAAAqDsAAJ4/AACVQAAA + jT8AAIQ7AAB7NgAAcjAAAGkpAABgIgAAVxsAAE8TAwBJDg0ARg4WAEQPHgBCDyUAQBArAD4QMgA9EDkA + OxFAADoRSAA4ElEANxJbADUTZwA0E3MAMhOCADATkgAvE6QALRO5ACwT0AAsE+cALRP2AC0S/wCwOgAA + pkAAAJxEAACTRQAAikUAAIJCAAB4PQAAbzcAAGYxAABcKgAAUyQAAEodAABCFwkAPhUSADwWGgA6FiEA + OBYoADYWLgA1FzUAMxc9ADIYRQAxGE8ALxlZAC4ZZAAsGnEAKhqAACkakAAnGqIAJhq3ACQazgAkGuUA + JRr2ACYZ/wCuPgAAo0UAAJpJAACRSgAAiUoAAIBHAAB2QwAAbD0AAGM4AABZMgAAUCsAAEYlAAA9HgUA + NxwOADQcFgAyHB0AMBwkAC4cKwAtHTIALB06ACseQwApHkwAKB9XACYgYgAlIG8AIyB+ACIgjgAgIKAA + HyC2AB0gzQAdIOQAHx/2ACAf/wCsQwAAoUkAAJhNAACPTwAAh08AAH5NAAB0SQAAakMAAGA+AABWOQAA + TTMAAEIsAAA5JwEAMSIKAC0hEwArIRoAKCEhACciKAAmIjAAJSM3ACQkQAAjJEoAISVVACAlYAAeJm4A + HCZ8ABsmjAAZJp8AGCa0ABYmzAAWJeMAGCX1ABkk/wCpRwAAn00AAJZRAACOVAAAhVMAAHxSAABzTgAA + aEkAAF5EAABUPwAASjoAAEA1AAA2LwAAKykHACYnDwAkJxcAIiceACEoJQAgKC0AHik1AB0pPgAcKkgA + GipSABkrXgAXK2wAFSx6ABQsiwASLJ0AECuzAA4rygAPK+IAESr0ABIq/wCnSwAAnlIAAJVWAACMWAAA + hFgAAHtXAABxVAAAZk4AAFxKAABTRgAASUEAAD88AAA0NwAAKDEDACEuDAAeLhQAHC4bABouIwAZLioA + Fy8zABYvOwAVMEUAEzBQABExXAAQMWoADjF5AAwxiQAKMZsACDGwAAcxxwAHMN4ACTDxAAsv/gClUAAA + nFYAAJNaAACLXQAAg10AAHpcAABwWQAAZVUAAFtRAABSTQAASEkAADxDAAAwPgAAJTkAABs1CAAXNBEA + FTQYABM1IAASNSgAEDUwAA42OQAMNkMACzdOAAk3WgAHN2gABjd2AAQ3hgACN5gAADetAAA3xAAANtwA + ATbsAAM1+gCjVQAAmlsAAJFfAACJYgAAgWIAAHlhAABvXwAAZFsAAFpYAABQVAAARE8AADdKAAAsRQAA + IUEAABY9BAAPOw0ADDwVAAo8HQAJPCUABzwuAAY9NwAEPUEAAj1MAAA+WAAAPmUAAD50AAA+hAAAPpYA + AD2qAAA9wQAAPNkAADvrAAA79gCgWgAAmGAAAJBkAACIZwAAgGgAAHdnAABuZQAAY2IAAFheAABLWQAA + P1UAADNQAAAnTAAAG0kAABFGAgAHRAoAA0QTAAFEGwAARCMAAEQrAABENQAART4AAEVJAABFVQAARWMA + AEVxAABFggAARJQAAESoAABDvwAAQtgAAELrAABB9gCeYAAAlWYAAI5qAACGbQAAf24AAHdtAABubAAA + YGcAAFNjAABGXwAAOVsAAC1YAAAhVAAAFlEAAAtPAQABTQkAAE0RAABNGAAATSAAAE0oAABNMgAATTwA + AE1HAABNUwAATWAAAE1vAABMfwAATJEAAEumAABKvQAASdYAAEnqAABI9gCbZgAAk2wAAIxwAACFcwAA + fnQAAHZ0AABpcQAAW20AAE1pAABAZQAAM2IAACZfAAAaXAAAD1oAAARYAAAAVwcAAFcOAABWFQAAVh0A + AFYkAABWLgAAVjgAAFVDAABVUAAAVV0AAFVsAABUfAAAVI4AAFOjAABSuwAAUdQAAFDqAABP9wCYbQAA + kXMAAIt3AACEeQAAfXsAAHF4AABjdgAAVXIAAEZvAAA5bAAALGkAAB9nAAATZQAAB2MAAABiAAAAYQQA + AGELAABgEgAAYBgAAF8gAABfKQAAXzQAAF8/AABfTAAAXlkAAF5oAABeeQAAXYsAAFygAABbuQAAWtMA + AFnqAABY+ACWdQAAj3oAAIl+AACDgAAAeH8AAGt9AABcewAATngAAD92AAAxcwAAI3EAABdvAAAKbgAA + AG0AAABrAAAAawAAAGsGAABqDAAAahQAAGobAABpIwAAaS4AAGk6AABpRwAAaFUAAGhkAABodQAAZ4gA + AGadAABltQAAY9EAAGLqAABi+ACTfAAAjoEAAIiFAAB9hQAAcYQAAGOCAABUgAAARX4AADZ8AAAnegAA + GnkAAA14AAAAdwAAAHYAAAB2AAAAdQAAAHUAAAB1BgAAdA0AAHQVAAB0HQAAdCcAAHQzAAB0QAAAc08A + AHNfAABzcAAAcoMAAHGYAABwsQAAbs4AAG3oAABt+ACShAAAjYkAAIOKAAB2igAAaIkAAFmIAABKhgAA + O4UAACuDAAAdggAAD4EAAAGBAAAAgAAAAIAAAACAAAAAgAAAAH8AAAB/AAAAfwUAAH8MAACAFQAAgB4A + AIAqAACAOAAAf0cAAH9YAAB/agAAfn0AAH2TAAB8rAAAe8gAAHrlAAB59wCQjQAAh44AAHuPAABtjwAA + Xo4AAE+OAAA/jQAAL4wAACCLAAARiwAAAooAAACKAAAAigAAAIoAAACKAAAAigAAAIoAAACLAAAAiwAA + AIsCAACMCgAAjBQAAI0fAACNLQAAjT0AAI1PAACMYgAAi3YAAIuMAACLpAAAicEAAIjgAACH9ACKkgAA + fpMAAHGUAABilAAAUpQAAEKUAAAxlAAAIZMAABKTAAACkwAAAJQAAACUAAAAlAAAAJQAAACVAAAAlQAA + AJYAAACWAAAAlwAAAJgAAACYAAAAmQgAAJsTAACbIQAAnDEAAJxDAACcVwAAnGwAAJuDAACbmwAAmrcA + AJnVAACZ7QCBlwAAdJkAAGaZAABWmgAARZoAADSaAAAjmwAAE5sAAAKcAAAAnQAAAJ0AAACeAAAAngAA + AJ8AAACgAAAAoQAAAKIAAACjAAAApAAAAKUAAACmAAAAqAAAAKoEAACsEgAAriIAAK42AACuSgAArmAA + AK54AACukAAArqoAAK3JAACs5AB3nAAAaZ4AAFqfAABIoAAAN6EAACWiAAAUowAAA6QAAAClAAAApgAA + AKgAAACpAAAAqQAAAKoAAACsAAAArQAAAK8AAACwAAAAsgAAALMAAAC1AAAAuAAAALsAAAC+AgAAwhIA + AMMmAADFOwAAxlIAAMZqAADFhAAAxJ8AAMS6AADF1ABsogAAXaMAAEylAAA7pgAAKagAABaqAAAEqwAA + AK0AAACvAAAAsQAAALIAAACzAAAAtAAAALYAAAC4AAAAugAAALwAAAC+AAAAwAAAAMMAAADGAAAAyQAA + AM0AAADSAAAA2AEAAN0VAADeKwAA4EMAAOJbAADkdAAA5I0AAOSnAADiwQD/AAAA/wAAAP8AAAD/AAAA + /wADAP8AEQD9AB4A+wAqAPcANgDzAEAA8ABJAO4AUQDsAFgA6wBeAOkAZADoAGkA5wBtAOYAcgDkAHcA + 4wB9AOEAhADgAIsA3wCUAN0AngDcAKwA2gC+ANcA1QDTAO4A0gD/ANEA/wDMAP8AxAD/AL4A/wD/AAAA + /wAAAP8AAAD8AAAA9wAAAPMADQDwABkA7AAlAOkAMADlADsA4gBEAOAATADdAFMA2wBZANoAXwDYAGQA + 1gBpANQAbQDTAHIA0QB4ANAAfgDOAIYAzQCOAMsAmADJAKUAxgC2AMMAywDCAOYAwAD+AMAA/wC/AP8A + twD/ALIA/wD/AAAA/wAAAPcAAADvAAAA6QAAAOQABwDfABQA2wAgANgAKgDUADUA0AA+AM4ARgDLAE0A + yQBUAMcAWQDGAF4AxABjAMMAaADCAG0AwABzAL8AeQC9AIAAuwCIALkAkgC2AJ4AtACuALIAwQCwANwA + rwD2AK0A/wCsAP8AqQD/AKUA/wD9AAAA8wAAAOkAAADhAAAA2gAAANMAAgDNAA4AyQAaAMYAJQDDAC4A + wAA4AL0AQAC6AEgAuABOALYAVAC1AFkAswBeALIAYwCxAGgArwBtAK0AcwCrAHsAqQCDAKcAjACmAJgA + pACmAKIAuACfANAAnQDtAJwA/wCbAP8AmwD/AJgA/wDxAAAA5gAAANsAAADRAAAAygAAAMMAAAC9AAkA + uQAVALUAHwCyACkArwAyAK0AOgCqAEIAqABIAKYATgClAFMAowBYAKIAXQCgAGIAnwBoAJ0AbgCbAHUA + mgB9AJgAhgCWAJEAkwCfAJEAsACQAMYAjgDkAI0A+wCLAP8AiwD/AIoA/wDlAAAA2AAAAM0AAADEAAAA + vAAAALUAAACvAAMAqgAPAKYAGQCjACMAoAArAJ4ANACbADsAmQBCAJcARwCWAE0AlABSAJMAVwCRAFwA + kABiAI4AaACMAG8AiwB3AIkAgACHAIsAhQCYAIMAqQCBAL0AfwDZAH4A8gB9AP8AfAD/AHwA/wDZAAAA + zAAAAMEAAAC4AAAAsAAAAKkAAACjAAAAngAJAJoAFACWAB0AkwAmAJAALQCNADUAiwA7AIoAQQCIAEcA + hgBMAIUAUQCDAFcAggBcAIAAYgB/AGoAfQByAHsAewB5AIYAdwCSAHUAogBzALUAcgDOAHAA6QBvAP0A + bwD/AG4A/wDPAAAAwgAAALcAAACuAAAApgAAAJ8AAACZAAAAkwADAI4ADQCKABcAhwAfAIQAJwCBAC4A + fwA1AH0AOwB7AEEAegBGAHgASwB3AFEAdQBXAHMAXQByAGQAcABsAG4AdgBsAIEAagCNAGgAnABmAK4A + ZQDGAGMA4QBjAPYAYgD/AGIA/wDHBAAAugoAALAMAACmCgAAngUAAJcAAACQAAAAigAAAIQABwCAABEA + fAAZAHgAIQB1ACgAcwAvAHEANQBvADsAbgBAAGwARgBqAEwAaQBRAGcAWABlAF8AYwBoAGIAcQBgAHwA + XgCIAFwAlwBaAKkAWQC/AFgA2QBXAO8AVgD+AFYA/wDAEgAAtBgAAKkaAACgGgAAmBUAAJAPAACIBgAA + gQAAAHsAAAB2AAoAcQATAG4AGwBrACIAaAApAGYALwBkADUAYgA7AGEAQQBfAEYAXQBMAFwAUwBaAFsA + WABjAFYAbQBUAHgAUgCEAFAAkwBPAKQATgC5AEwA0QBLAOgASwD4AEsA/wC6HQAAryMAAKUmAACbJQAA + kyIAAIodAACCFgAAewwAAHMDAABtAAMAaAAMAGQAFQBgABwAXQAjAFsAKQBZADAAVwA2AFYAOwBUAEEA + UgBIAFAATwBPAFYATQBfAEsAaQBJAHQARwCBAEYAkABEAKEAQwC1AEIAywBBAOMAQADzAEAA/gC2JQAA + qisAAKEvAACXLwAAjy0AAIYoAAB+IgAAdhoAAG0SAABmCAAAXwAGAFoADgBWABYAUwAdAFEAJABPACoA + TQAwAEsANgBJAD0ASABDAEYASgBEAFIAQgBcAEEAZgA/AHEAPQB/ADwAjQA6AJ4AOQCyADgAyAA3AN8A + NgDvADYA+gCyLQAApzMAAJ02AACUNwAAizUAAIMxAAB6KwAAcSUAAGkdAABgFQAAWA0AAFEFBwBNARAA + SQAYAEcAHwBFACUAQwArAEEBMgA/ATgAPgI/ADwCRgA6A08AOQNYADcEYwA1BG8ANAR9ADIEjAAwBJ0A + LwSwAC4ExgAtBN0ALATtACwE+ACvMwAApDkAAJs8AACSPQAAiTwAAIA5AAB3MwAAbi0AAGUnAABcHwAA + UxgAAEsRAABDCgkAQAcSAD0IGQA7CCAAOQgnADcJLQA2CTQANAo7ADMKQwAxC0wALwtWAC4MYQAsDG0A + Kg17ACgNiwAnDZ0AJQyxACQMxwAiDN4AIwzuACQM+gCsOAAAoj4AAJhCAACPQwAAh0IAAH4/AAB0OgAA + azQAAGIuAABYKAAATyEAAEYaAAA+FAMANxAMADQPFAAyDxsAMBAiAC4QKQAtEDAAKxE3ACoRQAAoEkkA + JxNTACUTXwAkFGwAIhR6ACAUigAeFJwAHRSwABsUxwAaFN8AHBTxAB0T/ACqPQAAoEMAAJdGAACOSAAA + hUcAAHxFAAByQAAAaTsAAF81AABWLwAATCkAAEIjAAA5HAAAMRcIACwVEAAqFRcAKBYeACYWJQAlFi0A + JBc0ACIYPQAhGEYAIBlRAB4aXQAcGmoAGxp4ABkaiAAXGpoAFRqvABQaxgATGt4AFRrwABYZ/gCoQQAA + nkcAAJVLAACMTQAAg0wAAHpKAABxRgAAZ0EAAF08AABTNgAASTAAAD8qAAA2JQAALB8EACYcDAAiGxQA + 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 + QpgAADGYAAAgmAAADpgAAACZAAAAmQAAAJoAAACbAAAAmwAAAJsAAACcAAAAnQAAAJ4AAACfAAAAoAAA + AKEAAACiAAAApAAAAKUAAACnDAAAqB0AAKgwAACpRQAAqVsAAKlyAACqigAAqaUAAKjEAACn4gB1mwAA + ZpwAAFedAABGnQAANJ4AACKfAAAQoAAAAKEAAACiAAAAowAAAKQAAAClAAAApQAAAKcAAACoAAAAqQAA + AKoAAACsAAAArQAAAK8AAACxAAAAswAAALYAAAC5AAAAvQwAAL4gAAC/NQAAwE0AAMBlAADAfgAAwJgA + AMC0AAC/0QBpoAAAWqEAAEmjAAA3pAAAJaUAABOnAAAAqAAAAKoAAACsAAAArQAAAK8AAACwAAAAsQAA + ALIAAAC0AAAAtgAAALgAAAC6AAAAvAAAAL8AAADBAAAAxAAAAMgAAADMAAAA0gAAANYPAADZJQAA2z0A + AN1WAADebwAA3ooAANumAADbwQD/AAAA/wAAAP8AAAD/AAAA/wAAAP4ADQD7ABsA+AAmAPQAMgDwADwA + 7QBFAOsATQDpAFQA5wBaAOYAXwDkAGQA4wBpAOEAbgDgAHMA3wB5AN0AfwDcAIcA2gCPANkAmQDWAKcA + 0wC4ANAAzgDOAOoAzQD/AMwA/wDHAP8AvwD/ALkA/wD/AAAA/wAAAP8AAAD6AAAA9QAAAPAACQDsABUA + 6AAhAOUALADhADcA3gBAANsASADZAE8A1gBVANQAWgDSAF8A0QBkAM8AaQDOAG4AzAB0AMsAegDKAIEA + yACKAMYAkwDDAKAAwACwAL4AxQC9AOEAuwD6ALoA/wC4AP8AsAD/AKwA/wD/AAAA/QAAAPMAAADsAAAA + 5gAAAOAAAwDaABAA1gAcANMAJgDPADEAzAA6AMgAQgDGAEkAxABPAMIAVQDBAFoAvwBfAL4AZAC8AGkA + uwBuALkAdQC3AHwAtQCEALMAjQCxAJkArwCoAK0AvACrANUAqADxAKcA/wCnAP8AowD/AKAA/wD5AAAA + 7wAAAOUAAADdAAAA1QAAAM0AAADIAAsAxAAWAMEAIQC+ACoAugA0ALcAPAC1AEMAswBKALEATwCwAFQA + rgBZAK0AXgCrAGMAqQBpAKcAbwCmAHYApAB+AKIAiACgAJMAngChAJwAswCaAMoAmADoAJcA/wCWAP8A + lgD/AJIA/wDtAAAA4QAAANYAAADNAAAAxAAAAL4AAAC4AAUAtAARALAAGwCtACQAqgAtAKcANgClAD0A + owBDAKEASQCfAE4AnQBTAJwAWACbAF4AmQBjAJgAaQCWAHAAlAB4AJIAggCQAI0AjgCaAIwAqwCKAMAA + iADdAIcA+ACGAP8AhQD/AIQA/wDgAAAA0gAAAMgAAAC/AAAAtwAAALAAAACqAAAApQALAKEAFQCeAB8A + mwAnAJgALwCWADYAlAA9AJIAQwCQAEgAjwBNAI0AUgCMAFgAigBdAIkAYwCHAGoAhQByAIMAfACBAIcA + fwCTAH0AowB7ALcAeQDRAHgA7wB3AP8AdwD/AHYA/wDTAAAAxwAAALwAAACzAAAAqwAAAKQAAACeAAAA + mQAFAJQAEACRABkAjQAhAIoAKACIADAAhgA3AIQAPQCCAEIAgQBHAH8ATAB+AFIAfABYAHsAXgB5AGUA + dwBtAHUAdgBzAIEAcQCNAG8AnQBtALAAbADIAGoA5gBpAPsAaQD/AGgA/wDKAAAAvQAAALMAAACqAAAA + oQAAAJoAAACUAAAAjgAAAIkACQCFABMAgQAbAH4AIwB7ACkAeQAwAHcANwB2ADwAdABBAHIARwBxAEwA + bwBSAG4AWABsAGAAagBoAGgAcQBmAHwAZACIAGIAlwBgAKkAXwDAAF0A3QBcAPQAXAD/AFwA/wDCAgAA + tggAAKsJAACiBwAAmgIAAJIAAACLAAAAhQAAAH8AAwB6AA0AdgAVAHMAHQBwACQAbQAqAGsAMABpADYA + aAA8AGYAQQBlAEcAYwBNAGEAUwBfAFsAXQBjAFsAbABZAHcAVwCEAFYAkgBUAKMAUwC5AFEA0wBQAOwA + UAD9AFAA/wC7EAAArxYAAKUYAACcFwAAkxMAAIsMAACEAwAAfQAAAHYAAABxAAcAbAAPAGgAFwBlAB4A + YgAkAGAAKwBeADEAXAA2AFsAPABZAEEAVwBIAFUATgBUAFYAUgBeAFAAaABOAHMATAB/AEoAjgBIAJ8A + RwCzAEYAywBFAOUARAD3AEQA/wC1GwAAqiEAAKAjAACXIwAAjh8AAIYaAAB+EwAAdgkAAG8AAABoAAEA + YwAJAF4AEQBbABgAVwAfAFUAJQBTACsAUQAxAE8ANwBOADwATABDAEoASgBIAFEARgBaAEUAZABDAG8A + QQB8AD8AigA+AJsAPACvADsAxgA6AN8AOgDxADoA/QCxJAAApikAAJ0sAACTLAAAiyoAAIIlAAB6HwAA + cRcAAGkOAABhBgAAWgADAFUACwBRABMATgAZAEsAHwBIACYARwAsAEUAMgBDADgAQQA+AD8ARQA+AE0A + PABWADoAYQA4AGwANwB5ADUAiAAzAJgAMgCsADEAwQAwANoALwDsAC8A+QCuKwAAozEAAJo0AACQNAAA + iDIAAH8uAAB2KAAAbSIAAGQbAABcEwAAVAoAAEwCBQBHAAwARAAUAEEAGgA+ACAAPAAnADsALQA5ADMA + NwA6ADUAQQA0AEoAMgBTADAAXgAvAGoALQB3ACsAhgAqAJYAKACpACcAvwAmANUAJgDpACUA9QCrMQAA + oDcAAJc6AACOOwAAhTkAAHw2AABzMAAAaisAAGEkAABYHQAATxUAAEYOAAA+BwYAOgMOADcBFQA1ARsA + MwIiADECKAAvAi8ALgM2ACwEPgAqBEYAKQVQACcFWwAlBmcAIwZ1ACEGhAAgBpUAHgaoAB0GvgAcBdQA + GwbnABsG8wCoNwAAnjwAAJVAAACMQQAAgz8AAHo8AABxNwAAZzIAAF4sAABVJQAASx8AAEIYAAA6EQAA + MQsIAC4IEAArCBYAKQkdACcJJAAmCSsAJAoyACMLOgAhC0MAHwxOAB0NWQAbDWYAGg10ABgOhAAWDpUA + FA6pABINvwARDdUAEg3oABQN9gCmOwAAnEEAAJNEAACKRgAAgkUAAHlCAABvPgAAZTgAAFwzAABSLQAA + SCcAAD8gAAA1GgAALRQCACUQCgAiDxIAIA8YAB4QHwAdECcAGxEvABoSNwAYEkEAFxNLABUUVwAUFGQA + EhRyABAVggANFZQACxWnAAoVvQAJFNMAChTpAAwT+ACkQAAAmkYAAJFJAACJSgAAgEoAAHdIAABtQwAA + Yz4AAFo5AABQNAAARi4AADwoAAAzIwAAKh0AACAYBgAaFQ4AGBUVABYWHAAVFiQAFBcsABMYNQARGD4A + EBlJAA0aVQAMGmIAChtwAAgbgAAGG5EABBulAAIbugACGtEAAxrlAAUZ9QCiRAAAmEoAAJBNAACHTwAA + f08AAHZNAABsSQAAYkQAAFg/AABOOgAARTYAADswAAAyLAAAKCYAAB0hAwAUHAsAERsSABAcGgAOHSEA + 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 + AJ4AAACfAAAAoAAAAKEAAACiAAAAogAAAKMAAACkAAAApQAAAKcAAACoAAAAqQAAAKsAAACtAAAArwAA + ALEAAAC0AAAAuAYAALkbAAC5MAAAukgAALpgAAC7eQAAu5MAALuuAAC6zABnngAAV58AAEagAAA0ogAA + IaMAAA6kAAAApQAAAKcAAACpAAAAqgAAAKsAAACsAAAArQAAAK8AAACwAAAAsgAAALQAAAC2AAAAuAAA + ALoAAAC9AAAAvwAAAMMAAADHAAAAzAAAANEJAADSIAAA1TcAANdQAADWawAA1oYAANWhAADVvAD/AAAA + /wAAAP8AAAD/AAAA/wAAAPwACQD3ABYA9AAiAPEALgDtADgA6gBBAOcASQDlAFAA4wBWAOIAWwDgAGAA + 3gBlAN0AagDcAG8A2gB1ANkAewDXAIIA1QCLANMAlQDQAKEAzQCyAMsAyADJAOUAyAD+AMcA/wDCAP8A + uAD/ALIA/wD/AAAA/wAAAP0AAAD3AAAA8gAAAOwABQDnABEA5QAdAOEAKADdADMA2gA7ANYAQwDTAEsA + 0ABRAM8AVgDNAFsAzABgAMoAZQDJAGoAyABvAMYAdgDFAH0AwgCFAL8AjwC9AJsAuwCqALkAvwC3ANsA + tQD2ALMA/wCyAP8AqwD/AKcA/wD/AAAA+QAAAPAAAADoAAAA4gAAANsAAADVAAwA0QAYAM4AIgDKACwA + xgA2AMMAPgDBAEUAvwBLAL0AUQC7AFYAugBbALkAXwC3AGUAtQBqALMAcACxAHcArwB/AK4AiQCsAJQA + qgCjAKcAtgClAM8AowDtAKIA/wChAP8AngD/AJoA/wD2AAAA6gAAAOEAAADYAAAAzwAAAMkAAADDAAcA + vwATALsAHQC4ACYAtQAvALIAOACwAD8ArQBFAKwASwCqAFAAqABVAKcAWgClAF8ApABkAKIAawChAHEA + nwB5AJ0AgwCbAI4AmACcAJYArQCUAMQAkwDjAJEA/QCQAP8AjwD/AIwA/wDnAAAA3AAAANEAAADIAAAA + vwAAALkAAACzAAIArgAMAKsAFwCnACAApQApAKIAMQCfADkAnQA/AJsARQCaAEoAmABPAJcAVACVAFkA + lABfAJMAZQCRAGwAjwB0AI0AfQCLAIgAiQCVAIcApQCEALsAggDWAIEA9ACAAP8AgAD/AH8A/wDbAAAA + zQAAAMMAAAC6AAAAsgAAAKsAAAClAAAAoAAHAJwAEQCYABsAlQAiAJMAKwCQADIAjgA4AIwAPgCLAEQA + iQBJAIgATgCGAFMAhQBZAIMAXwCCAGYAgABuAH4AdwB8AIIAegCPAHcAngB2ALIAdADLAHIA6gBxAP8A + cQD/AHAA/wDOAAAAwgAAALcAAACuAAAApwAAAJ8AAACZAAAAlAABAI8ACwCLABUAiAAdAIUAJACCACsA + gAAyAH8AOAB9AD4AewBDAHoASAB4AE0AdwBTAHUAWQBzAGAAcgBoAHAAcQBuAHwAawCJAGkAlwBnAKoA + ZgDCAGQA4QBjAPkAYwD/AGMA/wDFAAAAuAAAAK4AAAClAAAAnQAAAJYAAACPAAAAiQAAAIQABgCAAA8A + fAAXAHkAHgB2ACUAdAAsAHIAMgBwADgAbgA9AG0AQgBrAEgAagBNAGgAVABmAFsAZABjAGIAbABgAHcA + XgCDAFwAkgBaAKQAWAC6AFcA1wBWAPEAVgD/AFUA/wC9AAAAsQUAAKcGAACeBAAAlQAAAI0AAACGAAAA + gAAAAHoAAAB1AAkAcQARAG0AGQBqAB8AaAAmAGUALABkADIAYgA3AGAAPABfAEIAXQBIAFsATwBZAFYA + VwBeAFUAZwBTAHIAUQB/AE8AjQBOAJ4ATACzAEsAzgBKAOkASQD8AEkA/wC2DgAAqxQAAKEVAACYFAAA + jxAAAIcIAAB/AAAAeAAAAHEAAABsAAMAZwALAGMAEwBfABoAXAAgAFoAJgBYACwAVgAxAFQANwBTAD0A + UQBDAE8ASgBNAFEASwBZAEkAYwBHAG4ARQB6AEQAiQBCAJoAQACuAD8AxgA+AOIAPgD2AD4A/wCxGQAA + ph8AAJwhAACTIAAAih0AAIIXAAB6EAAAcgcAAGoAAABjAAAAXgAGAFkADQBVABQAUQAaAE8AIABNACYA + SwAsAEkAMgBHADgARgA+AEQARQBCAE0AQABVAD4AXwA8AGoAOgB3ADkAhQA3AJYANgCpADUAwAA0ANsA + MwDvADMA/gCtIgAAoigAAJkqAACQKgAAhycAAH4iAAB2HAAAbRUAAGUMAABcAwAAVQABAFAACABLAA8A + SAAVAEQAGwBCACEAQAAnAD8ALQA9ADMAOwA5ADkAQAA3AEgANQBRADMAXAAyAGcAMAB0AC4AggAtAJMA + KwCmACoAvAApANQAKQDqACkA+ACqKQAAny8AAJYxAACNMgAAhDAAAHsrAAByJgAAaR8AAGAYAABYEAAA + TwcAAEcAAwBCAAkAPgAQADsAFgA4ABwANgAiADQAKAAyAC4AMQA1AC8APAAtAEUAKwBOACoAWAAoAGQA + JgBxACQAgAAjAJEAIQCjACAAuQAfAM8AHwDmAB8A9ACnMAAAnTUAAJM4AACKOQAAgjcAAHkzAABvLgAA + ZigAAF0hAABUGgAASxMAAEILAAA6BQQANQALADIAEQAvABcALAAdACsAJAApACoAJwAxACUAOQAkAEEA + IgBLACAAVgAeAGIAHABvABsAfgAZAI8AFwCiABYAtgAVAM0AFADjABQA8QCkNQAAmjsAAJE+AACIPgAA + gD0AAHc6AABtNQAAZC8AAFopAABRIwAARxwAAD4WAAA2DgAALQkFACgEDAAlAhIAIwIZACEDHwAfAyYA + HQQtABwENQAaBT4AGAZIABcGUwAVB2AAEwduABEIfQAPCI4ADQihAAsHtgAKB8sACgfhAAkH7wCiOgAA + mD8AAJBDAACHRAAAfkMAAHVAAABsOwAAYjYAAFgwAABPKwAARSUAADweAAAyGAAAKRIAACENBgAbCQ0A + GQkUABcJGwAWCiIAFAopABMLMgARDDsADgxFAAwOUQALDl4ACRBsAAcQfAAFEIwABBCfAAIQtAABD8oA + AA7gAAEN8ACgPgAAl0QAAI5HAACFSAAAfUgAAHRFAABqQQAAYDwAAFY3AABNMgAAQywAADomAAAwIQAA + JxwAAB4WAQAUEQgADg4OAA0QFwAMER4ACxImAAkTLwAIEzkABhRDAAQVTwADFlwAARZqAAAWegAAF4sA + ABaeAAAWsgAAFckAABTfAAAU7gCeQwAAlUgAAIxMAACETQAAfE0AAHNKAABpRwAAX0IAAFU9AABLOQAA + QjQAADkvAAAwKgAAJiUAABwgAAARGgUACRcNAAYXFQAFGB0AAxklAAIZLQAAGjcAABtBAAAcTQAAHFoA + AB1oAAAdeAAAHYkAABycAAAcsQAAG8gAABreAAAZ7gCcRwAAk00AAItQAACDUgAAelIAAHJQAABoTQAA + XkgAAFREAABLQAAAQjsAADk3AAAuMgAAIywAABcmAAAMIQUAAx8MAAAeEwAAHxsAACAjAAAgKwAAITUA + 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 + AKgAAACoAAAAqgAAAKsAAACtAAAArwAAALAAAACyAAAAtAAAALYAAAC4AAAAuwAAAL4AAADCAAAAxwAA + AMsDAADNGgAAzzIAAM9MAADPZwAA0IEAANCbAADQtwAAAAAAAAAAAAAAAAAAAAAAAQMEBQYICQoLDQ4P + ERITFBYXGBobHB0fICEiJCUmKCkqKy0uLzAyMzQ2Nzg5Ozw9PkBBQkRFRkdJSktNTk9QUlNUVVdYWVtc + XV5gYWJjZWZnaWprbG5vcHFzdHV3eHl6fH1+gIGCg4WGh4iKi4yOj5CRk5SVlpiZmpydnp+hoqOkpqeo + qqusra+wsbO0tba4ubq7vb6/wcLDxMbHyMnLzM3P0NHS1NXW19na293e3+Di4+Tm5+jp6+zt7vDx8vT1 + 9vf5+vv8/v//////////////////////////////////////////////////////AAAAAAAAAAAAAAAA + AAAAAAEDBAUGCAkKCw0ODxESExQWFxgaGxwdHyAhIiQlJigpKistLi8wMjM0Njc4OTs8PT5AQUJERUZH + SUpLTU5PUFJTVFVXWFlbXF1eYGFiY2VmZ2lqa2xub3Bxc3R1d3h5enx9foCBgoOFhoeIiouMjo+QkZOU + lZaYmZqcnZ6foaKjpKanqKqrrK2vsLGztLW2uLm6u72+v8HCw8TGx8jJy8zNz9DR0tTV1tfZ2tvd3t/g + 4uPk5ufo6evs7e7w8fL09fb3+fr7/P7///////////////////////////////////////////////// + /////wAAAAAAAAAAAAAAAAAAAAABAwQFBggJCgsNDg8REhMUFhcYGhscHR8gISIkJSYoKSorLS4vMDIz + NDY3ODk7PD0+QEFCREVGR0lKS01OT1BSU1RVV1hZW1xdXmBhYmNlZmdpamtsbm9wcXN0dXd4eXp8fX6A + gYKDhYaHiIqLjI6PkJGTlJWWmJmanJ2en6Gio6Smp6iqq6ytr7Cxs7S1tri5uru9vr/BwsPExsfIycvM + zc/Q0dLU1dbX2drb3d7f4OLj5Obn6Onr7O3u8PHy9PX29/n6+/z+//////////////////////////// + //////////////////////////8AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYn + KCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJj + ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6f + oKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb + 3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/bWZ0MQAAAAADASEAAAEAAAAAAAAAAAAA + AAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAECAwQFBgcICAkKCwwNDg8QERITFBUWFxgYGRobHB0eHyAh + IiMkJSYnKCkqKyssLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUFFSU1RVVldYWVpb + XF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SGh4iJiouMjY6PkJGSk5SVlpeY + mZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLa3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TW + 19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dy8/T19vf4+fr7/P3+/wABAQICAwMEBAUGBgcHCAgJCQoL + CwwMDQ0ODw8QEBEREhMTFBQVFhYXFxgZGRoaGxwcHR4eHyAgISIiIyQkJSYmJygpKSorLC0tLi8wMTIy + MzQ1Njc4OTo7PD0+P0BCQ0RFRkhJSkxNT1BSU1VXWFpcXmBiZGZoam1vcXR2eXx+gYOGiYuOkJKVl5mb + nZ+ho6WnqKqsra+wsrO1tre5uru8vb/AwcLDxMXGx8jJysvMzc3Oz9DR0tLT1NXW1tfY2dna29vc3d3e + 39/g4eHi4+Pk5eXm5ufo6Onp6uvr7Ozt7u7v7/Dw8fLy8/P09PX29vf3+Pj5+fr7+/z8/f3+/v8AAQEC + AgMDBAQFBgYHBwgICQkKCwsMDA0NDg8PEBARERITExQUFRYWFxcYGRkaGhscHB0eHh8gICEiIiMkJCUm + JicoKSkqKywtLS4vMDEyMjM0NTY3ODk6Ozw9Pj9AQkNERUZISUpMTU9QUlNVV1haXF5gYmRmaGptb3F0 + dnl8foGDhomLjpCSlZeZm52foaOlp6iqrK2vsLKztba3ubq7vL2/wMHCw8TFxsfIycrLzM3Nzs/Q0dLS + 09TV1tbX2NnZ2tvb3N3d3t/f4OHh4uPj5OXl5ubn6Ojp6err6+zs7e7u7+/w8PHy8vPz9PT19vb39/j4 + +fn6+/v8/P39/v7///////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /ej8////////////////////////////////////////6dLp//////////////////////////////// + /////////Oj8//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////9eH2//////////////////////////// + ///////////1rpCu9v/////////////////////////////////////hkGmQ4v////////////////// + ///////////////////1rpCu9v//////////////////////////////////////9uH2//////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////vu6TD//////////////// + //////////////////////+/dk9/0P///////////////////////////////////+CaTwBbu/////// + ////////////////////////////8bZ5T0l3yv//////////////////////////////////69LFq5av + 8v//////////////////////////////////////9+f5//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////Yw7Oo//////////// + ////////////////////////7bCBaVRszv//////////////////////////////////rWw2HAA+nPn/ + ///////////////////////////////Xei4AAAAeet3///////////////////////////////+jRAAA + AAAPbNL//////////////////////////////+pzEwAAAAAJbtT///////////////////////////// + ///FZhIAAAAEfOP////////////////////////////////zq2osGSE9kfr///////////////////// + ////////////8qh6bXSLtP////////////////////////////////////XUx87i//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////+PIxv////// + /////////////////////////////9mrgl9AhP//////////////////////////////////tnpJHgAA + Vsr///////////////////////////////+7bjEAAAAANaL//////////////////////////////+SB + NAAAAAAAH4Xy/////////////////////////////7ZNAAAAAAAAEHPh//////////////////////// + /////4gWAAAAAAAACGra////////////////////////////30gAAAAAAAAAAGfY//////////////// + ////////////oz8AAAAAAAAAAGjb/////////////////////////////5wxAAAAAAAAAGzj//////// + //////////////////////mhNQAAAAAAAHPw////////////////////////////////oFIhCgIJIHn/ + ////////////////////////////////7Kx+Z2p2jan////////////////////////////////////6 + 6Ov1//////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////+di8o8X//////////////////////////////////82e + dlM2Hn7////////////////////////////////inWU0CQAAAFHW//////////////////////////// + /+WPSg8AAAAAAC+r/////////////////////////////6FLBAAAAAAAABaM//////////////////// + ////////2GYQAAAAAAAAAAZ18///////////////////////////pTAAAAAAAAAAAABq5/////////// + ////////////////cQAAAAAAAAAAAABj4f/////////////////////////hLQAAAAAAAAAAAABd3f// + //////////////////////+mAAAAAAAAAAAAAABa2/////////////////////////9FAAAAAAAAAAAA + AABY3f///////////////////////++vSQAAAAAAAAAAAABX4f//////////////////////////0WMU + AAAAAAAAAABb6v///////////////////////////+iORBsAAAAAAABf+P////////////////////// + ///////5vIxqW1RUW2eG///////////////////////////////////y29fX3uz///////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////nzrno/////////////////////////////////9uuiWhLMSOZ//////////////////////// + ///////VlV8wCAAAAAB0/////////////////////////////8R1MgAAAAAAAABU3/////////////// + ////////////2HQmAAAAAAAAAAA6v///////////////////////////lDMAAAAAAAAAAAAlpv////// + ///////////////////fWAAAAAAAAAAAAAAUk/////////////////////////+qIgAAAAAAAAAAAAAF + hf////////////////////////9xAAAAAAAAAAAAAAAAe/////////////////////////osAAAAAAAA + AAAAAAAAcv///////////////////////7YAAAAAAAAAAAAAAAAAav///////////////////////1MA + AAAAAAAAAAAAAAAAZP///////////////////////wAAAAAAAAAAAAAAAAAAYf////////////////// + ////rwEAAAAAAAAAAAAAAAAAYf//////////////////////53dmJQAAAAAAAAAAAAAAZP////////// + ///////////////5w35BHwYAAAAAAAAAZP/////////////////////////////QpYRvZV9dYGh1hv// + ////////////////////////////////+/f19fv///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////3z//////////////////// + ///////////////YtJV4XkVc3P/////////////////////////////gom9DHQAAAAAvtP////////// + /////////////////7dsLAAAAAAAAAANkP//////////////////////////t1oNAAAAAAAAAAAAc/// + ///////////////////////eaA0AAAAAAAAAAAAAWu3///////////////////////+bKQAAAAAAAAAA + AAAARdj///////////////////////9bAAAAAAAAAAAAAAAAM8f//////////////////////8YjAAAA + AAAAAAAAAAAAJLj//////////////////////4YAAAAAAAAAAAAAAAAAGK7///////////////////// + /zkAAAAAAAAAAAAAAAAADaP/////////////////////4gAAAAAAAAAAAAAAAAAAAZn///////////// + ////////ngAAAAAAAAAAAAAAAAAAAJD/////////////////////xgAAAAAAAAAAAAAAAAAAAIr///// + ////////////////+QAAAAAAAAAAAAAAAAAAAIX//////////////////////woAAAAAAAAAAAAAAAAA + AIT//////////////////////0YAAAAAAAAAAAAAAAAAAIb//////////////////////6J9bkcrFQQA + AAAAAAAAAoj//////////////////////////+3KrZaHgX18foOMmar///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////N7Cp410rf////// + ////////////////////////yJduSysOAAAAdv///////////////////////////8B4OwcAAAAAAAAA + TuH/////////////////////////qFEFAAAAAAAAAAAALMD///////////////////////+6TgAAAAAA + AAAAAAAAD6P///////////////////////lqAQAAAAAAAAAAAAAAAIr//////////////////////7Mp + AAAAAAAAAAAAAAAAAHX//////////////////////24AAAAAAAAAAAAAAAAAAGP///////////////// + ////9ysAAAAAAAAAAAAAAAAAAFT/////////////////////rwAAAAAAAAAAAAAAAAAAAEj2//////// + ////////////mAAAAAAAAAAAAAAAAAAAADvq////////////////////uAAAAAAAAAAAAAAAAAAAAC/f + ////////////////////3gAAAAAAAAAAAAAAAAAAACXU/////////////////////wAAAAAAAAAAAAAA + AAAAABzM/////////////////////xwAAAAAAAAAAAAAAAAAABbF/////////////////////1EAAAAA + AAAAAAAAAAAAABLA/////////////////////5MAAAAAAAAAAAAAAAAAABLA//////////////////// + /+gAAAAAAAAAAAAAAAAAABK///////////////////////9WPzswJBkRCwgGCAwTHSm7//////////// + //////////////jl08W4tbO0trrBytbs//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////Xayf///////////////////////////////9y1k3VY + PSIGOND//////////////////////////+CbYjIIAAAAAAAADaT/////////////////////////r1sT + AAAAAAAAAAAAAHz///////////////////////+oRAAAAAAAAAAAAAAAAFv///////////////////// + /81OAAAAAAAAAAAAAAAAAD7o/////////////////////3sCAAAAAAAAAAAAAAAAACTP//////////// + ////////7jEAAAAAAAAAAAAAAAAAAA66////////////////////nwAAAAAAAAAAAAAAAAAAAACo//// + ////////////////jwAAAAAAAAAAAAAAAAAAAACZ////////////////////rQAAAAAAAAAAAAAAAAAA + AACM////////////////////0AAAAAAAAAAAAAAAAAAAAAB/////////////////////8wAAAAAAAAAA + AAAAAAAAAABz/////////////////////wwAAAAAAAAAAAAAAAAAAABn/////////////////////zMA + AAAAAAAAAAAAAAAAAABd/////////////////////2EAAAAAAAAAAAAAAAAAAABV//////////////// + /////5UAAAAAAAAAAAAAAAAAAABQ/////////////////////9gAAAAAAAAAAAAAAAAAAABN//////// + //////////////9AAAAAAAAAAAAAAAAAAABM//////////////////////+jAAAAAAAAAAAAAAAAAABK + ////////////////////////T0JGRkRCQUBBQ0dMVV9s//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////+dzApYpuUpj///////////////////////// + ///apHdQLg8AAAAAAGf/////////////////////////y3s3AAAAAAAAAAAAADvk//////////////// + //////+qSwAAAAAAAAAAAAAAABW+/////////////////////71BAAAAAAAAAAAAAAAAAACd//////// + /////////////1kAAAAAAAAAAAAAAAAAAACA////////////////////sQgAAAAAAAAAAAAAAAAAAABn + ////////////////////gAAAAAAAAAAAAAAAAAAAAABR////////////////////nAAAAAAAAAAAAAAA + AAAAAAA+////////////////////wAAAAAAAAAAAAAAAAAAAAAAu9///////////////////4wAAAAAA + AAAAAAAAAAAAAAAg6v///////////////////wIAAAAAAAAAAAAAAAAAAAAT3f////////////////// + /yUAAAAAAAAAAAAAAAAAAAAG0f///////////////////0oAAAAAAAAAAAAAAAAAAAAAxf////////// + /////////3MAAAAAAAAAAAAAAAAAAAAAuf///////////////////6AAAAAAAAAAAAAAAAAAAAAAsP// + /////////////////9YAAAAAAAAAAAAAAAAAAAAAqP////////////////////88AAAAAAAAAAAAAAAA + AAAAov////////////////////+HAAAAAAAAAAAAAAAAAAAAn//////////////////////uIwAAAAAA + AAAAAAAAAAAAm///////////////////////mwAAAAAAAAAAAAAAAAAAl/////////////////////// + /4x6gYOFiIyQlJmfp7C7yv////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////1177//////////////////////////////9izk3VZPiEEACjX//////////// + /////////////7V1QBQAAAAAAAAAAACn///////////////////////EZxgAAAAAAAAAAAAAAAB8//// + /////////////////8BGAAAAAAAAAAAAAAAAAABX////////////////////+EkAAAAAAAAAAAAAAAAA + AAA1+P//////////////////hAAAAAAAAAAAAAAAAAAAAAAX3P//////////////////fAAAAAAAAAAA + AAAAAAAAAAAAwv//////////////////qAAAAAAAAAAAAAAAAAAAAAAArf//////////////////0AAA + AAAAAAAAAAAAAAAAAAAAmv//////////////////9QAAAAAAAAAAAAAAAAAAAAAAiv////////////// + /////xcAAAAAAAAAAAAAAAAAAAAAfP///////////////////zoAAAAAAAAAAAAAAAAAAAAAb/////// + /////////////18AAAAAAAAAAAAAAAAAAAAAYf///////////////////4YAAAAAAAAAAAAAAAAAAAAA + Vf///////////////////7AAAAAAAAAAAAAAAAAAAAAASf///////////////////94GAAAAAAAAAAAA + AAAAAAAAP/////////////////////8+AAAAAAAAAAAAAAAAAAAANv////////////////////+AAAAA + AAAAAAAAAAAAAAAAL//////////////////////MEgAAAAAAAAAAAAAAAAAAKv////////////////// + ////awAAAAAAAAAAAAAAAAAAJP//////////////////////6TUAAAAAAAAAAAAAAAAAHP////////// + /////////////84mAAABChIYHiQrMzxHUuv/////////////////////////5u3z9vn+//////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////bbv6OGZ0eb///////////////////////////PnHJNLQ8AAAAAAABq + ///////////////////////+nVETAAAAAAAAAAAAAAA7/v///////////////////9lfAwAAAAAAAAAA + AAAAAAAS1f//////////////////9ksAAAAAAAAAAAAAAAAAAAAAr///////////////////cgAAAAAA + AAAAAAAAAAAAAAAAjv//////////////////fQAAAAAAAAAAAAAAAAAAAAAAcP////////////////// + sAAAAAAAAAAAAAAAAAAAAAAAVv//////////////////3AAAAAAAAAAAAAAAAAAAAAAAQP////////// + /////////wgAAAAAAAAAAAAAAAAAAAAALf///////////////////ywAAAAAAAAAAAAAAAAAAAAAHP// + /////////////////08AAAAAAAAAAAAAAAAAAAAADvb//////////////////3MAAAAAAAAAAAAAAAAA + AAAAAOn//////////////////5cAAAAAAAAAAAAAAAAAAAAAANz//////////////////78AAAAAAAAA + AAAAAAAAAAAAAM///////////////////+sTAAAAAAAAAAAAAAAAAAAAAML///////////////////9F + AAAAAAAAAAAAAAAAAAAAALf///////////////////+AAAAAAAAAAAAAAAAAAAAAAK3///////////// + ///////CCQAAAAAAAAAAAAAAAAAAAKT/////////////////////VgAAAAAAAAAAAAAAAAAAAJz///// + ////////////////sRAAAAAAAAAAAAAAAAAAAJT//////////////////////3sAAAAAAAAAAAAAAAAA + AIn///////////////////////91AAAAAAAAAAAAAAAAAHf/////////////////////////pkVOW2dz + f4qVoKu2ws3///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /+HD/////////////////////////////+vHp4puUjUXAAAn8f//////////////////////9aZpNgwA + AAAAAAAAAAAAwP////////////////////+SNwAAAAAAAAAAAAAAAAAAkv///////////////////2EA + AAAAAAAAAAAAAAAAAAAAaf//////////////////bwAAAAAAAAAAAAAAAAAAAAAARP////////////// + ////dgAAAAAAAAAAAAAAAAAAAAAAIv//////////////////sQAAAAAAAAAAAAAAAAAAAAAABOb///// + ////////////5AAAAAAAAAAAAAAAAAAAAAAAAM3//////////////////xYAAAAAAAAAAAAAAAAAAAAA + ALf//////////////////z4AAAAAAAAAAAAAAAAAAAAAAKT//////////////////2MAAAAAAAAAAAAA + AAAAAAAAAJT//////////////////4gAAAAAAAAAAAAAAAAAAAAAAIX//////////////////6sAAAAA + AAAAAAAAAAAAAAAAAHj//////////////////9EAAAAAAAAAAAAAAAAAAAAAAGr///////////////// + //okAAAAAAAAAAAAAAAAAAAAAF3///////////////////9PAAAAAAAAAAAAAAAAAAAAAFH///////// + //////////+CAAAAAAAAAAAAAAAAAAAAAEX///////////////////++BgAAAAAAAAAAAAAAAAAAADr/ + ////////////////////SwAAAAAAAAAAAAAAAAAAADD/////////////////////mQAAAAAAAAAAAAAA + AAAAACb/////////////////////9FQAAAAAAAAAAAAAAAAAABv//////////////////////8M1AAAA + AAAAAAAAAAAAAAz////////////////////////DPQAAAAAAAAAAAAAAAAD///////////////////// + ////+nUKAAAAAAUTITA+TFjS////////////////////////////9/////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////+rOsZV91P/////////////////////////aqH5ZOBoAAAAAAAAAev////////////////// + ///phjsAAAAAAAAAAAAAAAAATf///////////////////50lAAAAAAAAAAAAAAAAAAAAJP////////// + ////////igAAAAAAAAAAAAAAAAAAAAAAANv/////////////////ZwAAAAAAAAAAAAAAAAAAAAAAALf/ + ////////////////qwAAAAAAAAAAAAAAAAAAAAAAAJX/////////////////5wAAAAAAAAAAAAAAAAAA + AAAAAHj//////////////////yAAAAAAAAAAAAAAAAAAAAAAAF7//////////////////00AAAAAAAAA + AAAAAAAAAAAAAEj//////////////////3YAAAAAAAAAAAAAAAAAAAAAADT//////////////////5wA + AAAAAAAAAAAAAAAAAAAAACP//////////////////8AAAAAAAAAAAAAAAAAAAAAAABX///////////// + /////+UQAAAAAAAAAAAAAAAAAAAAAAf///////////////////83AAAAAAAAAAAAAAAAAAAAAAD///// + //////////////9gAAAAAAAAAAAAAAAAAAAAAAD4//////////////////+MAAAAAAAAAAAAAAAAAAAA + AADr//////////////////+/BgAAAAAAAAAAAAAAAAAAAADe///////////////////8RAAAAAAAAAAA + AAAAAAAAAADS////////////////////igAAAAAAAAAAAAAAAAAAAADG////////////////////2TsA + AAAAAAAAAAAAAAAAAAC6/////////////////////5YNAAAAAAAAAAAAAAAAAACs//////////////// + //////95AQAAAAAAAAAAAAAAAACa////////////////////////hBYAAAAAAAAAAAAAAAB8//////// + /////////////////8VUAAAACBQiMkVac5G6//////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////82SZEQ/OjY0MS8sKyorLur///// + //////////////Z3GQAAAAAAAAAAAAAAAAAAALv/////////////////zCgAAAAAAAAAAAAAAAAAAAAA + AJL/////////////////TwAAAAAAAAAAAAAAAAAAAAAAAGv/////////////////nwAAAAAAAAAAAAAA + AAAAAAAAAEf/////////////////4wAAAAAAAAAAAAAAAAAAAAAAACb//////////////////yUAAAAA + AAAAAAAAAAAAAAAAAAj//////////////////1gAAAAAAAAAAAAAAAAAAAAAAAD0//////////////// + /4UAAAAAAAAAAAAAAAAAAAAAAADf/////////////////64AAAAAAAAAAAAAAAAAAAAAAADM//////// + /////////9QAAAAAAAAAAAAAAAAAAAAAAAC8//////////////////omAAAAAAAAAAAAAAAAAAAAAACt + //////////////////9LAAAAAAAAAAAAAAAAAAAAAACg//////////////////9yAAAAAAAAAAAAAAAA + AAAAAACS//////////////////+bAAAAAAAAAAAAAAAAAAAAAACF///////////////////GDQAAAAAA + AAAAAAAAAAAAAAB4///////////////////7QwAAAAAAAAAAAAAAAAAAAABr//////////////////// + gAAAAAAAAAAAAAAAAAAAAABe////////////////////xykAAAAAAAAAAAAAAAAAAABR//////////// + /////////3oAAAAAAAAAAAAAAAAAAABC/////////////////////9dOAAAAAAAAAAAAAAAAAAAw//// + //////////////////+8QwAAAAAAAAAAAAAAAAAW////////////////////////zlsAAAAAAAAAAAAA + AAgg//////////////////////////+jY3B9iZemuM3m//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////+rWzcfCv7y7u7u7 + u72/yvH//////////////////7xhRC4eEgkBAAAAAAAAAAAAAEH/////////////////UgAAAAAAAAAA + AAAAAAAAAAAAABz/////////////////igAAAAAAAAAAAAAAAAAAAAAAAAD6////////////////3gAA + AAAAAAAAAAAAAAAAAAAAAADX/////////////////yIAAAAAAAAAAAAAAAAAAAAAAAC3//////////// + /////10AAAAAAAAAAAAAAAAAAAAAAACa/////////////////5EAAAAAAAAAAAAAAAAAAAAAAACC//// + /////////////78AAAAAAAAAAAAAAAAAAAAAAABs/////////////////+gUAAAAAAAAAAAAAAAAAAAA + AABZ//////////////////87AAAAAAAAAAAAAAAAAAAAAABI//////////////////9hAAAAAAAAAAAA + AAAAAAAAAAA6//////////////////+GAAAAAAAAAAAAAAAAAAAAAAAs//////////////////+tAAAA + AAAAAAAAAAAAAAAAAAAf///////////////////XHQAAAAAAAAAAAAAAAAAAAAAR//////////////// + ////SgAAAAAAAAAAAAAAAAAAAAAE////////////////////fwAAAAAAAAAAAAAAAAAAAAAA//////// + ////////////vR4AAAAAAAAAAAAAAAAAAAAA/////////////////////2UAAAAAAAAAAAAAAAAAAAAA + /////////////////////7YuAAAAAAAAAAAAAAAAAAAA+/////////////////////+MFgAAAAAAAAAA + AAAAAAAA5v//////////////////////hRoAAAAAAAAAAAAAAAAAyf///////////////////////6I8 + AAAKFyQzQ1ZrhKLF////////////////////////////3un2//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////vSs56Pg3t1cW5sa2pqamxvdX////////////////// + l1IrDQAAAAAAAAAAAAAAAAAAAACn////////////////zQAAAAAAAAAAAAAAAAAAAAAAAACD//////// + /////////xYAAAAAAAAAAAAAAAAAAAAAAABh/////////////////1wAAAAAAAAAAAAAAAAAAAAAAABC + /////////////////5gAAAAAAAAAAAAAAAAAAAAAAAAm/////////////////8wAAAAAAAAAAAAAAAAA + AAAAAAAN//////////////////omAAAAAAAAAAAAAAAAAAAAAAAA//////////////////9QAAAAAAAA + AAAAAAAAAAAAAAAA//////////////////93AAAAAAAAAAAAAAAAAAAAAAAA//////////////////+c + AAAAAAAAAAAAAAAAAAAAAAAA9//////////////////CCQAAAAAAAAAAAAAAAAAAAAAA6f////////// + ///////oMAAAAAAAAAAAAAAAAAAAAAAA3P//////////////////WQAAAAAAAAAAAAAAAAAAAAAAzv// + ////////////////hQAAAAAAAAAAAAAAAAAAAAAAwP//////////////////vB0AAAAAAAAAAAAAAAAA + AAAAsv//////////////////+VoAAAAAAAAAAAAAAAAAAAAAo////////////////////6EYAAAAAAAA + AAAAAAAAAAAAk/////////////////////JqAAAAAAAAAAAAAAAAAAAAf//////////////////////N + UwAAAAAAAAAAAAAAAAAAY///////////////////////yloAAAAAAAAAAAAIHTZRfv////////////// + /////////+qDX299i5mqvNLq//////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////57+jk4N7b2tjZ29/l7fz///// + /////////////7aNc15PRDs0LysnJSIhICAhIylE/////////////////yEAAAAAAAAAAAAAAAAAAAAA + AAAI/////////////////1AAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////5wAAAAAAAAAAAAA + AAAAAAAAAAAA9v///////////////9oAAAAAAAAAAAAAAAAAAAAAAAAA2/////////////////8zAAAA + AAAAAAAAAAAAAAAAAAAAxP////////////////9iAAAAAAAAAAAAAAAAAAAAAAAAr/////////////// + //+NAAAAAAAAAAAAAAAAAAAAAAAAnf////////////////+zAAAAAAAAAAAAAAAAAAAAAAAAjv////// + ///////////ZIAAAAAAAAAAAAAAAAAAAAAAAgP/////////////////+RQAAAAAAAAAAAAAAAAAAAAAA + cv//////////////////bQAAAAAAAAAAAAAAAAAAAAAAZP//////////////////lAAAAAAAAAAAAAAA + AAAAAAAAV///////////////////wiMAAAAAAAAAAAAAAAAAAAAASf//////////////////91gAAAAA + AAAAAAAAAAAAAAAAOv///////////////////5YNAAAAAAAAAAAAAAAAAAAAKf////////////////// + /9tTAAAAAAAAAAAAAAAAAAAAFv////////////////////+lLwAAAAAAAAAAAAAAAAAAAP////////// + ////////////kScAAAAAAAAAAAAAAAAADv///////////////////////545BBEfLDtKW26Fnr3g//// + ///////////////////////lz97r+v////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////w07+wpp6YlJCNi4mIiIqOlJ2u/////////////////4JWOyYWCQAA + AAAAAAAAAAAAAAAAuf///////////////5cAAAAAAAAAAAAAAAAAAAAAAAAAmP///////////////+IA + AAAAAAAAAAAAAAAAAAAAAAAAfP////////////////87AAAAAAAAAAAAAAAAAAAAAAAAYv////////// + //////9xAAAAAAAAAAAAAAAAAAAAAAAAS/////////////////+gAAAAAAAAAAAAAAAAAAAAAAAAN/// + ///////////////KEQAAAAAAAAAAAAAAAAAAAAAAJf/////////////////xOAAAAAAAAAAAAAAAAAAA + AAAAFf//////////////////XQAAAAAAAAAAAAAAAAAAAAAACP//////////////////gwAAAAAAAAAA + AAAAAAAAAAAAAP//////////////////qQgAAAAAAAAAAAAAAAAAAAAAAP//////////////////0TEA + AAAAAAAAAAAAAAAAAAAAAP///////////////////l4AAAAAAAAAAAAAAAAAAAAAAP////////////// + /////5ULAAAAAAAAAAAAAAAAAAAAAP///////////////////9FIAAAAAAAAAAAAAAAAAAAAAP////// + //////////////+PGAAAAAAAAAAAAAAAAAAAAPf////////////////////jagIAAAAAAAAAAAAAAAAA + ANz/////////////////////0mIEAAAAAAAADiAzS2aFqP///////////////////////+KBa3uJmKe4 + y+H4//////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////338+/s6+np6ezw9v////////////////// + /+uwk39vY1pTTUhFQT48Ozw9QUlVb////////////////+MlCQAAAAAAAAAAAAAAAAAAAAAAGf////// + //////////87AAAAAAAAAAAAAAAAAAAAAAAAAP////////////////97AAAAAAAAAAAAAAAAAAAAAAAA + AP////////////////+xAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////////fJAAAAAAAAAAAAAAA + AAAAAAAAAP//////////////////TwAAAAAAAAAAAAAAAAAAAAAAAP//////////////////dgAAAAAA + AAAAAAAAAAAAAAAAAPf/////////////////mwAAAAAAAAAAAAAAAAAAAAAAAOn///////////////// + wB8AAAAAAAAAAAAAAAAAAAAAANz/////////////////5kUAAAAAAAAAAAAAAAAAAAAAAM7///////// + /////////2wAAAAAAAAAAAAAAAAAAAAAAMD//////////////////5sSAAAAAAAAAAAAAAAAAAAAALD/ + /////////////////9BHAAAAAAAAAAAAAAAAAAAAAJ////////////////////+EDQAAAAAAAAAAAAAA + AAAAAIr////////////////////JUwAAAAAAAAAAAAAAAAAAAHH/////////////////////pz0AAAAA + AAAAAAAADiZBYJv//////////////////////6Q/HCs5SFhpfJCnwuD///////////////////////// + ///g0uLx//////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////6NPFubGqpKCcmpiXmJmcoqu61P////////////////96WkQ0KB4WEAsHAgAAAAAA + AAAEEPr///////////////+DAAAAAAAAAAAAAAAAAAAAAAAAANr////////////////DAAAAAAAAAAAA + AAAAAAAAAAAAAMH////////////////3NAAAAAAAAAAAAAAAAAAAAAAAAKv/////////////////ZAAA + AAAAAAAAAAAAAAAAAAAAAJj/////////////////jgAAAAAAAAAAAAAAAAAAAAAAAIf///////////// + ////tRQAAAAAAAAAAAAAAAAAAAAAAHj/////////////////2TkAAAAAAAAAAAAAAAAAAAAAAGr///// + /////////////l4AAAAAAAAAAAAAAAAAAAAAAFz//////////////////4MAAAAAAAAAAAAAAAAAAAAA + AE7//////////////////6ogAAAAAAAAAAAAAAAAAAAAAD7//////////////////9hOAAAAAAAAAAAA + AAAAAAAAAC3///////////////////+DDAAAAAAAAAAAAAAAAAAAABn///////////////////++SAAA + AAAAAAAAAAAAAAAAAAL/////////////////////jiYAAAAAAAAAAAAAAAARLUz///////////////// + ////6HobAAAAChorPVJphKHA5v///////////////////////+aMfY6drb7R5v3///////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////++fXy8O/u7/L2/v/////////////////////cqZOEeG9o + Yl5aV1VTU1NWXGRwhsT////////////////SKRQEAAAAAAAAAAAAAAAAAAAAAFf///////////////// + PgAAAAAAAAAAAAAAAAAAAAAAAD7/////////////////dQAAAAAAAAAAAAAAAAAAAAAAACf///////// + ////////pAEAAAAAAAAAAAAAAAAAAAAAABT/////////////////ziwAAAAAAAAAAAAAAAAAAAAAAAP/ + ////////////////9FMAAAAAAAAAAAAAAAAAAAAAAAD//////////////////3gAAAAAAAAAAAAAAAAA + AAAAAAD//////////////////5wQAAAAAAAAAAAAAAAAAAAAAAD//////////////////8E1AAAAAAAA + AAAAAAAAAAAAAAD//////////////////+hdAAAAAAAAAAAAAAAAAAAAAAD///////////////////+M + FAAAAAAAAAAAAAAAAAAAAAD////////////////////ASAAAAAAAAAAAAAAAAAAAAAD///////////// + ///////6hBsAAAAAAAAAAAAAAAAADyz/////////////////////zWEEAAAAAAAAECU9V3OSs9z///// + /////////////////7tWPU1dbX6Rpr3X9v/////////////////////////////p3e/+//////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////++HRxr64s6+sqaenp6qvtsDP4v//////////////////fF9QRTs0LyomIh8dGxsdIikzQln///// + ////////////iAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////vREAAAAAAAAAAAAAAAAAAAAA + AAD/////////////////6UIAAAAAAAAAAAAAAAAAAAAAAAD//////////////////20AAAAAAAAAAAAA + AAAAAAAAAAD//////////////////5QHAAAAAAAAAAAAAAAAAAAAAAD6/////////////////7grAAAA + AAAAAAAAAAAAAAAAAADs/////////////////9tPAAAAAAAAAAAAAAAAAAAAAADd//////////////// + //9zAAAAAAAAAAAAAAAAAAAAAADO//////////////////+cJAAAAAAAAAAAAAAAAAAAAAC+//////// + ///////////KUQAAAAAAAAAAAAAAAAAAAACs///////////////////7hRwAAAAAAAAAAAAAAAAAAh+u + ////////////////////wFcAAAAAAAAAAAcfOlZ2l7v//////////////////////6E+Dh4tPk9id4+q + yOr///////////////////////////6qmKu7zeD1//////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////77+fj4+fz/////////////////////////3qqaj4eBe3d0cXBvb3F0 + e4eWq8j/////////////////2DsoHRUOCAMAAAAAAAAAAAAACx/L/////////////////1UAAAAAAAAA + AAAAAAAAAAAAAACo/////////////////4QAAAAAAAAAAAAAAAAAAAAAAACU/////////////////64g + AAAAAAAAAAAAAAAAAAAAAACC/////////////////9RIAAAAAAAAAAAAAAAAAAAAAABy//////////// + //////hsAAAAAAAAAAAAAAAAAAAAAABi//////////////////+QFQAAAAAAAAAAAAAAAAAAAABT//// + //////////////+zOgAAAAAAAAAAAAAAAAAAAABE///////////////////bYgAAAAAAAAAAAAAAAAAA + AAAz////////////////////kCYAAAAAAAAAAAAAAAAABiZH////////////////////wVkAAAAAAAAA + AAAQK0lpjLHW/////////////////////5Y2AAANHi9CWHGNq83x/////////////////////////+OE + ZXmKnK/E2/X/////////////////////////////////9P////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////jk2NHL + x8TBv76+v8PI0d7w/////////////////////5dwZV1XUk5LSEZEREVJUFppfpi7//////////////// + /6INAQAAAAAAAAAAAAAAAAAAAAAd/////////////////8w4AAAAAAAAAAAAAAAAAAAAAAAJ//////// + //////////FiAAAAAAAAAAAAAAAAAAAAAAAA//////////////////+JDQAAAAAAAAAAAAAAAAAAAAAA + //////////////////+tMgAAAAAAAAAAAAAAAAAAAAAA///////////////////QVgAAAAAAAAAAAAAA + AAAAAAAA///////////////////zeg8AAAAAAAAAAAAAAAAAAAAA////////////////////ojgAAAAA + AAAAAAAAAAAAFjlc////////////////////zWQGAAAAAAAAAAAMKUlskbfh//////////////////// + /5c5AAAACxwwR2F9ncDl/////////////////////////9h2Q1doeo6ju9j3//////////////////// + ///////////Zv9Lk9/////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////q6raWgm5iVlJOTlJedprPG2fP///// + //////////////ZnSD86NTEtKigmJSYoLjdGWnWd//////////////////9+AAAAAAAAAAAAAAAAAAAA + AAAA//////////////////+lKAAAAAAAAAAAAAAAAAAAAAAA///////////////////LTwAAAAAAAAAA + AAAAAAAAAAAA///////////////////ucwYAAAAAAAAAAAAAAAAAAAAA/P//////////////////lioA + AAAAAAAAAAAAAAAAAAAA7P//////////////////u1AAAAAAAAAAAAAAAAAMMliA//////////////// + ////4ngYAAAAAAAAAAATM1V7ocny/////////////////////6NFAAAAAxUqQl17ncHo//////////// + /////////////9l4L0JTZnqQq8jo///////////////////////////////Em63A1er///////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////4hEQ + SUNDX1BST0ZJTEUACgr///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////9u3n4+Df3t3f4ebt9v/////////////////////////KjoaAfHl3dXR1dnl/iZapwdn2//// + ///////////////OTiwmIR0aFxQSEA8QExspPlqA3f/////////////////vbgAAAAAAAAAAAAAAAAAA + AAAAj///////////////////kiQAAAAAAAAAAAAAAAAAAAAAfv//////////////////tkkAAAAAAAAA + AAAAAAAAAAUtj///////////////////2GwLAAAAAAAAAAAAAAMrVH6nz////////////////////JEx + AAAAAAAAAAUkRmyUveT//////////////////////7dYAQAABBguR2SEqM72//////////////////// + /////+SFLzhKXXOLpsXn///////////////////////////////AiJeqv9bv//////////////////// + ////////////////9f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////4c3Gwr++vr7Aw8nQ + 2+n6////////////////////////rnBqZmNiYWBhZGdtdoOWrsfi+v//////////////////uEcZFBAN + CgYDAAAAAAENIkFom///////////////////2WoFAAAAAAAAAAAAAAAAADBcg/////////////////// + +YspAAAAAAAAAAAAACJOe6TO+f///////////////////65NAAAAAAAAABk7YImy3P////////////// + /////////9FxGQAADCI6VXWXvOT///////////////////////////aYPjdKX3aQrc3x//////////// + ///////////////////IhYugts7q////////////////////////////////////4uX///////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////8avq6moqaqtsbjAy9rr//////////////////// + /////6JfV1RTVFVXW19mb3yPqMPd7////////////////////7NMCwYDAAAAAAAAFUV0os37//////// + /////////////9BuEgAAAAAADzNZgarU/f///////////////////////+2ONQAFGjJNa42y2P////// + //////////////////////+wVDxRaIKeveD////////////////////////////////XjoOft9Lw//// + ////////////////////////////////3db0//////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////37uzt7/L2+v////////////// + //////////////////+5mpiZnKGmrbS+yuH///////////////////////////+iV0pMUVddaH2WueP/ + //////////////////////////+zVwAaNVBuja/T+v/////////////////////////////Ob0Bfe5m3 + 2Pv////////////////////////////////un4Wnw+H///////////////////////////////////// + 5NHu//////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////wAAAP/bAEMAAQEBAQEBAQEB + AQIBAQECAgEBAQECAgICAgICAgMCAwMDAwIDAwQEBAQEAwUFBQUFBQcHBwcHCAgICAgICAgICP/bAEMB + AQEBAgICBAMDBAcFBAUHCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI + CAgICP/AABQIAVoCTwQBEQACEQEDEQEEEQD/xAAfAAAABgIDAQAAAAAAAAAAAAAHCAYFBAkDCgIBAAv/ + xAC1EAACAQIFAgMEBgYFBQEDBm8BAgMEEQUGIRIABzFBEwhRImEUcYEykQmhI/DBQrEV0Rbh8VIzFyRi + GEM0JYIKGXJTJmOSRDWiVLIaczbC0idFN0bi8oOTo7NkVSjD0yk44/NHSFZlKjk6SUpXWFlaZnR1hIVn + dndohoeUlaSltLXExdTV5OX09ZaXpqe2t8bH1tfm5/b3aWp4eXqIiYqYmZqoqaq4ubrIycrY2dro6er4 + +fr/xAAfAQAABgMBAQEAAAAAAAAAAAAGBQQDBwIIAQkACgv/xAC1EQABAwIDBAcGAwQDBgcHAWkBAgMR + AAQhBRIxBkHwUWEHEyJxgZGhscEIMtEU4SPxQhVSCRYzYtJyJILCkpNDF3ODorJjJTRT4rM1JkRUZEVV + JwqEtBgZGigpKjY3ODk6RkdISUpWV1hZWmVmZ2hpanR1dnd4eXqFhoeIiYqUlZaXmJmao6Slpqeoqaq1 + tre4ubrDxMXGx8jJytPU1dbX2Nna4+Tl5ufo6ery8/T19vf4+fr/3QAEAEr/2gAOBAEAAhEDEQQAAD8A + +f8A89Xq3+Oe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1N + mM43g2XcNqsZzBi9LgWEUKmatxXGaiKlpoUHdnlnZVUfEnnuer1V49YPxZvQv0deeirOsUWf8bgLI2Cd + K6abG23IbEGpgC0gN/Azg89z1eqs3qf/AMKFsKiaal6M+naetUEiHHOpeLpTjTQXosMilJv/AN5A57nq + 9RDM+/jh+ujNrVCZcxzLvTSmlLCJcp4DTVMqKRa3mY21dcj2hRz3PV6ii5r/ABCvW3nXzhj3qczaY6i/ + m0+DYnJhcOvsjwsU6j6hz3PV6gExrrV1kzKWOYurWZse33D/AM5x7FKq9wQf8vO3tPPc9XqQFRieJVkr + T1eIT1U7WDTVEsjuQBYXLEnTnuer1YPmqn/lIk/5Db+nnuer1PuGZyzhgnl/ybNeJYT5Q2xfyyuqqfaA + 26w8p1trrz3PV6hey36svVBk+SOXLXqHzrg7RDbGlLmbGNigeARqgr+XPc9XqM1kj8Wj1+5GeMU3X6rz + JSpbfRZ3w7CMWWQDwMtXStMP+BkB57nq9R1enX/CgH1FYG1PF1K6R5Wz/SoQKifApK/AatwO/v762IE/ + 8uue56vVYl0r/Hp9KGb3pqTqVlLMvSKrl2rUV09NFjmGxE9/0uGn5gqPaKa/w57nq9VpPSL1S+nXr1Ej + 9IOsuAZ7qHUSHCcIr4lxFARu9+jnMdQmnfdGOe56vUPnPc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1e + r3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc + 9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9 + z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV + 6vc9z1er3Pc9Xq9z3PV6vc9z1er3P//Q+f8A89Xq3+Oe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9X + ue56vV7nuer1e57nq9RLvUn+IH6VfSslXR9T+ptNPm+nHudOsngYrjrN4K9PTnbBfwNQ8Y+PPc9XqoK9 + Qv4+XWXNj1uDenPp/Q9KMHa8VPm3OHlY3jbLbR0gZRRwH/VZZvp57nq9VLvVr1A9buu+JnF+sPVPG+oV + XvM8MeZK+eamgY/8U01xDENe0aKOe56vUD/Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z + 3PV6vc9z1er3Pc9Xq9z3PV6vc9z1eqRSVdVQVMFbQ1MlFWUrrPS1dI7RyxyKbqyshBBB7EHnuer1WK9B + PxWvWr0Dejo6HqnL1IytS7EbKXVhWxqAxqfspUystXELaAJMB8Dz3PV6r1PTd+O36fuoz4fgHXvLFZ0N + zHUFad8w0zSYzl2SQ6bmlgjWppwT4PEyr4vbXnuer1XXZLzzkzqNl3D83ZAzVh+c8r4qvmYdmDLFXBW0 + kwHcLLTsy3HiL3Hjz3PV6lTz3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9 + z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV + 6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9 + z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z//R+f8A89Xq + 3+Oe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vUS/1W+vj03+j7C5T1PzitdnSWL5jCOmOVNl + ZjtVuXchaEMq08beEk7Ip8CTpz3PV6tX/wBWP4yXqd9QjYplrp5XHoH0zqy9OmEZLqHON1cBuoFXim1J + BcHVacRL4Hd357nq9VRtRUT1c81VVTvU1NS7T1FTUMzySSOdzMzMSSSTck89z1erDz3PV6vc9z1er3Pc + 9XqFvJPQLrl1J+XPT/o7mfOcVUdtPU5awLE6yFvH/KQQsn589z1eo02VfwsvX5m8x/y702YxhySf7pmq + pwnBgo9pGK1dO35c9z1eofMF/A89eWKIrVuXctZcLC5jxrMdM5HbQ/y9Kofnz3PV6hCovwD/AFhzxM1Z + nLI1DIDtWL+aYrLcW73XDhz3PV6nmT8AL1WrRxTR9TMjSVbm0tF83jQ2DXXecOsee56vUwYj+An6yaZV + NBmrI+JEqzMoxbE4SCOw/SYd489z1eoNsd/BH9fGELI1DkzAMzbLlVwLMuHIXt7P5iaXv8bc9z1eovma + vwyPXnk7zji3pmzDVJBcySZZFFjS2AuSDg9RU3HxHPc9XqKpnHpH1V6ds65+6aY/kkoxjY5rwfEMPW4N + tDVxID9XPc9XqD3nuer1e57nq9Xue56vV7nuer1e57nq9Q5dC/Up1y9NeZVzV0U6j4jkbEWdJMQo6CQS + YfXBDolXR1AeCdfC0iG3hY89z1erZA9In47WQ85yYbkz1YZdj6bY/MUpIep+U456jAZ3NlBq6X9JPSEn + u6GRPE7AOe56vVf1lrM2XM5YFhmaMo49R5ny3jUS1uEY9gFTFV0dTC3Z4poGZGHxB57nq9T5z3PV6vc9 + z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er + 3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9 + Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z + 3PV6vc9z1er3Pc9Xq9z3PV6vc//S+f8A89Xq3+Oe56vV7nuer1e57nq9Xue56vV7nuer1JfOmdso9Ocs + YznXPmZKLKOU8vwtX41mHH6iOmpaeJfF5JSBqdAO5OgBJ57nq9Wsf64/xxMwZlfF+m/o5WXK+XzvocR6 + 1YxBsxSsU+638sppwflkOtppQZT3VYyLn3PV6tePGsbxnMmLYjj+YsWqcexzF5XrsVxnGZ5amqqZ5Ddp + JZZmZ3YnuWJPPc9Xqa+e56vUN3R/02de+v1eMP6N9Jcc6gOH8iauwKhlahhe4FpqyUJTxdxffIOe56vV + bn0Z/AN9R+bxRV/WTqBgPR/Dpir1WE4bvzFi0anUqUpXgpQ3hcVDD6ee56vVaZ0p/Aw9GORhS1OezmHr + FiUNnmXMuJvhtA7D2QYKKZwL+DTN8b89z1eqxTp16SPTD0ljhXp30EypleaC3l4hR4LRSVlwLXNTURyT + E+0l789z1eowyqFAVQFUaBV0A57nq9XfPc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xqw1FNT + 1kEtNVwJVU06mOanqEV0dSLEMrAgg/Hnuer1Fb6kehz0hdWlnOfPTtlXFamp3edidBhcOG1pLak/NYX8 + vNc+3ffnuer1Vw9VvwFfSnm8VNT0xzfmTpFXy7mp6VaiPHsNjY9v0OI7agqPZ8zf489z1eqqzrR+BV6u + Ony1mIdMsTwPrfhFOGlip8EqRg+LMi3OtLirLFusPspUMfAX57nq9VTPUno/1V6OYy2X+qvTvGenuMAs + sdFm7DqqhMu3uYmnRVkX4oSOe56vUHHPc9Xq9z3PV6vc9z1eo4npP9dPqF9HeYI6/pZm16jKVVKKjMXT + PMZkqsCxEX94tAWBhlI7TQlX9pIuD7nq9W3b6JfxLeg3rOw+kwPDKwdPeskMPnYx0qzLOnnylF3SSYbP + ZFrIhYk7QJFGrIBYn3PV6rF+e56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9X + ue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56 + vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n + uer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xuf/0/n/APPV6t/jnuer1e57nq9Xue56 + vV7nuer1FM9XHrO6LejTIT5w6pYz5+M4isiZN6f4M0b4vjVQg+zDGxGyJTbzJnsi+0sQp9z1erTE9ZXr + 165+tPNZxDP2LHAcg4XM82T+leASuuFYcpJCvJopqajbo08gv3ChFO3nuer1Eqggnqp4aamheoqah1gp + 6eBS7u7naqqq3JJJsAOe56vVa56Zfwc/Vt6gEw/Hs04JH0IyFWbZRmDqRFImJTRML7qfCkK1DaajzvKU + +DHnuer1bAPp3/Bo9HXRBaLFM2Zcn67ZxptsjY11LKvh6SDUmLC6crT7fYJvNI/xc9z1eq1TCMGwfL+G + 0mDYBhVNgeD4egp6DCsIgipqaCMdljihVVUfADnuer1OXPc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1 + er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1epL5wyRk3qFgVXljPmVMOzn + lyuG2swPNFFT19JJoRrFUo6310Nrjnuer1U++ov8Dn0tdVlxDGOkFXW9Ac2VG6eKHA9+KYA8pH79BWSh + 41J8IJkUeC+HPc9Xq19fU9+Fz6tvS8mIY3juR/8AOD0+ot8rdQumnm4lSRQqft1UARammFiCWkj2DwY8 + 9z1equvnuer1e57nq9ThhOLYpgOJ4fjWB4lPg+MYVNHiGF4rhc0lPU008TB0kikiKsjqQCGBBB57nq9W + zR+Hh+NGmKS4L0Z9Y+Lx0ta/l4blbrtMFjilbREixpUAVGOgFUoCn/dANZD7nq9WyVT1FPWU8FXSTpVU + tUi1FNU07K8ckbqGVlZSQVINwR357nq9Wbnuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57 + nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9X + ue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56 + vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e5/9T5/wDz1erf457nq9Xue56vV7nuer1V + s/iC/iO9OPRLlU4RSCDO3XTMVOZsodPElOyljcMqV2JNGd0dOGX3UBDynRbDc6+56vVpY9Z+tfU31BdQ + sd6o9W81VGbs44++6orq0gRQQqT5dPTRJZIYIwbJGgCj6STz3PV6rAvR3+Ef6kfVH/K815kom6KdI6zZ + UDOecqaT5+vgOt8Pw5mjklBHaSQxxnurNa3Pc9Xq2h/Sv+HN6XfSTT0ldkLI6Zjz/CFNT1Qz0I8QxkyA + WJp2ZBHSg+yBEuPtFu/Pc9XqPXz3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9 + Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9XqrF + 9WX4T3pa9US4hj9Nl8dHeqFWWn/r/wBPIIoUqZm13V1AClPUXOrMAkp/4s57nq9Wrf6u/wANv1K+j6oq + 8Wzflv8Arl0yVylF1VySktThgUtZRWJbzaNzcaSgKTortz3PV6iA89z1er3Pc9Xqum/DX/FezT6YarB+ + jvXCrq84+n6odaPCsRYyVOJZS3t9unB3NNRgn36fuv2o/FH9z1ercEyvmjLmdsuYJm/KON02Y8sZkpoc + YwHHsHlSelq6WdBJHJG6EgqwPPc9Xqfue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer + 1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57 + nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9X + ue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xuf/9X5/wDz1erf457nq9Xue56vVWN+I9+IxlD0T5KX + AMvinzT19zhSvNkrKMxLwYfAxMX8yxAIQRCrA+XHcNKwsLKGYe56vVqKdPul3qY9enW3Gf6tYdiPVbqb + m6p/necs14m+2lpFmbZ8xXVTgRU8CAbUXQWASNTYLz3PV6tp30R/g9dD/TSuE556rLTdbOstNsq4q/Fa + e+AYPOLNaho5wRK6HtPOC2l1WM89z1eq4fnuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57 + nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9X + ue56vV7nuer1e57nq9Xue56vVGraKjxGkqsPxCkir6CujekraKtjWWGaKRSjo6OCrKwNiCLEc9z1eqhT + 1wfgkdPeqC4x1G9Kr0vS7P8AJ5lfXdNaslMt4rJtLEUxFzQSsewAMJOm2MXbnuer1atHUzpb1D6NZzxf + p71RyhW5IzlgT+ViWA47EYpVB+y6EXWSNwLpIhKsNVJHPc9XqQXPc9Xqtn/DN/EszR6Pc2UnTvqHWVGY + vTlmmqX+c4WxeafLdRO1mxCgUBiUubzwDRx7y++Pe9z1erdDyvmjLudsuYJm/KONU2Y8sZkpYcawHHcI + lWamq6WoQSRyxuhIKspuOe56vU/c9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3 + PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6v + c9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1 + er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z//W+f8A89Xq3+Oe56vURj17+t/JHok6QVGbMSEOPdSczCXC+l2Q + 3ks9fWqo3TzhDuWlp9waVx30QHcw57nq9WtX6UfQT6jfxL+p2OeoTrfmCuy301zLXvieaOp2KxAVuNyB + tppcGp5AE8uMKIxJbyYgNqhipTnuer1bavQn0+9I/TXkLD+m/RvJ1NlHLdEFepNON9XX1AUK1RWVD3kn + ma2rOTbsLKAB7nq9Qzc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1e + r3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6oeI4jQYRQVmKYpVx0GHYdE9ZXVtUw + SOKKNSzMzNoAALnnuer1SkZXVXQ7lcBlI8QRfnuer1cue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9 + Xue56vUVT1W+jXod6xMkPlLq1lsSYrRRyLlLPmEBIcawaZ9d9POQboT9uFwyN4i9iPc9Xq0yvWz6AutH + omzd8nnCjOaOmuMzNDkrqrgsLjD64asIZ1u5pqoKLtC51sSjOoJ57nq9RF+e56vVdt+E1+JRUem3M9D0 + F60Y083QXOFUI8CxyvcuMpYlUvbzbte1FM5HnL2jb9IP393uer1bh0M0NRDFUU8qzwTqs0E8LBkdGG4M + pW4IINwRz3PV6snPc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3 + PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6v + c9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1 + er3Pc9Xq9z//1/n/APPV6t53rp1ryF6d+lWcesHUrFBheVMm0rV1VYgzVU7ERwUsCkjfNPIyxxr7TrYX + PPc9Xqos9P3on6ofiJdZZPW3646CowPpniLxzdHugsxlhafBoXMlIk4OxoaGx3kWD1LMXO1CN/uer1bD + +F4VhmB4bQYNguHQYRg+FQx4dheFYZFHBTU1PCgjjiijiCqiKoAVQAAOe56vVP57nq9Xue56vV7nuer1 + e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57n + q9Xue56vV7nuer1e57nq9VXfrl65pi3W/wBLXohynXb8ydcczYVm3qpFSN+kpsl4FVnFpoG26qa00Lr8 + Y43B0bnuer1Wic9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6kdn/p9knqnk + /HcgdRcs0mcMm5mgbDscy/jcQlp54m+B1VlNmR1IZWAKkEA89z1erTj/ABIvwtc4ekXEq/qf0vSrzr6d + sSnuK+QGbEMsSTOFSnxAoPfhLNtiqbWOivZrF/c9XqqE57nq9W0t+C3+IW+a8Ow30fdZceD5kwSBk6H5 + lxWQ76+hgQu2ESO51lgRS1Pc6xgp3RQfc9Xq2Mue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56 + vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n + uer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1 + e57nq9Xue56vV7nuer1e57nq9Xue56vV7n//0Pn/APPV6twDHeio9X/VnBc/dXsPeT07dHK81XRzpfiK + gQZrx2G8cuYsUib7dJEbxUFO2jgNM3uSKp9z1eo+4AUBVFgNAB2A57nq9XfPc9Xq9z3PV6vc9z1er3Pc + 9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9 + z3PV6vc9z1er3Pc9XqQ/UvqJlXpJ0/zj1NzviAwrKWRcOqsy49XGxK09LEZCEBI3O1tqL4sQPHnuer1a + x/4XWdc1+sb8Trqr6ns6xlpsDwTF8yYZRylpI8NhrJIMCw+jjY6DyaWVlHt2s3cnnuer1bVHPc9Xq9z3 + PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9XqbcZwbCMx4TiWAZgwunxvA8Zglw + zF8HxaGOopaqmmQxyRSxShldGUkFSLEc9z1erT5/FM/C+rvTFieIdcuiWHy4n6f8cqQcZwOPfNUZRq6l + ztjYm7PQuxtFKdUJCOfss3uer1Uz5ezBjeU8ewbNGWsUmwTMOXqqDGsDxjDnMc9LV0somiljYahkZQQe + e56vVvdfh2eszCPWh0BwrOFVJDSdT8oGLK/VjAaeyCLEkjulXEg7QVajzE8Adya7L89z1eo+3Pc9Xq9z + 3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6 + vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z + 1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3P/R+f8A89Xq39wAoCqN + qroqjQADnuer1d89z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc + 9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq1o/x4/V4Yoct+jzJmJEP + P8rnzrFJSv8A7nfzcMw99PEgVLi/hEfHnuer1LP/AIT29OBQdNvUD1YnpisuZsZwvImH1TjQxYRRyV0o + X6Wr1v8AQOe56vVsU89z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er + 3Pc9XqascwPBsz4LiuXMxYXBjeA47TzYTjOD4pEk1NVUtRGYpIpY5AVZGUkEEajnuer1aWH4oX4c+L+j + vPZz909op8U9O2e6pky5WkvNJl+vkBkOGVbtclbAmnlY++oKm7KS3uer1AN+Hh6vcU9HPqMy1nqoqZX6 + cZmKZR6sYPDuYTYRUSD/AEhUB1lpHtNH4mzL2c89z1erfOwvFMOxvDMOxrB62LE8JxeCHFMLxGidZIai + mqIxLHJG63DK6sCCO4PPc9Xqn89z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV + 6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9 + z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er + 3Pc9Xq9z/9L5/wDz1erf457nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57 + nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vUCfqM655U9NvRT + qF1pznKBhGR6CTEIaHeEkrq1yIaSkjJ/fnmdIx7L37A89z1er58XVTqVmvrH1Hzr1TzxXnEs2Z8xGpzJ + jdUb7fNqJCwRAfsxxrZEXwUAeHPc9Xq3VPwgenI6degjo4ZYhHiGezinUbEWUW3/AMzxCQU7H/vmihF/ + hz3PV6rNee56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57 + nq9QfdVeluRutXT3NXS7qRgUWY8mZypXwnGsLqdLo3vLJGw1SWNgHjcaqwBGo57nq9Whz63fSBnT0Ydb + 8Z6ZZjMmK5Yrt+OdN85tHsixfB3kKo5t7oniP6OdB9lhce6yk+56vVsXfgc+rp+q/RnFfTfnHEjUZ36I + RrVZRlqXBlrMq1EgSNBfUmimbyifCN4x4c9z1eq9nnuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n + uer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1 + e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57n + q9Xue56vV7nuer1e57nq9Xuf/9P5/wDz1erf457nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9 + Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue5 + 6vVqc/jp+r4596lYJ6VcmYp5mVOlUiZh6jyUchMdXmOog/Q077TZhRQyG48JJGB1TT3PV6qBqKjqsRrK + TD6GBqmtrpY6OjpotWkllcIij4kkAc9z1er6O/RvItP0w6SdMOnFKoWHImX8IykuwWDHD6CKlZrWGrFC + T9PPc9XqEjnuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xu + e56vV7nuer1Eg9fvo4y560OguM5CqEioOoWXhLmPpRmicAGixZI/8k7d/l6pVEUw8BZ7FkXnuer1aanp + g6w529EHq0ylnXHcMqsExPpvjUuU+qWVJwY53w5pjQYnSOtjd1TcyaEb1U+HPc9Xq398FxnDMxYPhOYM + ErY8SwbHaaDGcIxGlYNFUUtVEs8UiEd1dGBB9h57nq9Tnz3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9 + Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z + 3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6 + vc9z1er3Pc9Xq9z3PV6vc//U+f8A89Xq3+Oe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n + uer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vUU71s+p + 3BPSP6c8+9YMQaKfHqKD+R5AwWpP/JQx+tBipIreKIbyy+yNGPPc9Xq0Acx5hxrNuYMczVmTEZcYzDmS + rqMdxzFa1i81TV1czTzSuT3Z3Yk89z1eozfoP6dDqt6x/TjkeSD5mkxDNWG4piUI/eo8KkOL1P8A0Zpn + 57nq9X0FOe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57 + nq9Xue56vV7nuer1e57nq9Wst+Oj6KUhNB6yOneEbVlamyz1vo6CPTedtNQYqwX26U8x9vlnxY89z1eo + 734J3qNbrL6TYOnGN13zOcOgVWMlSrKwMkmB1KtU4ZIfGyKJIB8Ih7ee56vVcXz3PV6vc9z1er3Pc9Xq + 9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3P + V6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc + 9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc//1fn/APPV6t/jnuer1e57nq9Xue56vV7nuer1e57n + q9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xu + e56vV7nuer1aZ/40Pq+/z+eoU9Hso4p810y6By1GAbqRw0GIZkYiPEKi6EhhAVFOnsKuRo/Pc9Xqpn57 + nq9V1f4EXTo5s9ZOKZ0mgElJ0vytimMxyutwlXiUsOEx2PYMY55SPgDz3PV6tx3nuer1e57nq9Xue56v + V7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vUks+ + 5Hyz1MyVmrp7nPDExnKmdKCqy1mDDKgArNS1kLQyDUGxs11PcGxGo57nq9Wqz6CKbMv4fX4pGY/TJnOs + f+rfUhp+mtHiU42RV8VT/vzwCuANhulKrFpezSsvgee56vVtp89z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq + 9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3P + V6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc + 9z1er3Pc9Xq9z3PV6vc9z1er3P/W+f8A89Xq3+Oe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56 + vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9VfP4l/q2i + 9IvpjzPmfBq5YOpued+Rel1OGAkTEKqI+bWAd9tJFulv237FP2ue56vVohTzz1U81VVTPU1NS7T1FROx + d5Hc7mZma5JJNyTz3PV6sXPc9Xq2n/8AhPb04FB019QPViemKy5nxnC8iYfVONDFg9HJXShfpbEFv9A5 + 7nq9WxTz3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9 + Xq9z3PV6vc9z1er3Pc9Xq9z3PV6qH/xsPT/ia5V6ZetXpxTfL9Q/T5iWHxZkrKVTvkwc4gtRRzuU1Pyl + YVH/ABGVj2HPc9Xqui6VZ/wnqt0y6fdTMDkEmEZ/wXDc4UBQg7Y8Qo46oIbfvLv2keBFue56vUvue56v + V7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nu + er1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e + 57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xuf/X+f8A89Xq3+Oe56vV7nuer1e57nq9Xue5 + 6vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7 + nuer1dEhQWY7VXVmOgAHPc9Xq0ZvxU/V23qu9TuOPl3Evm+lPSnzshdOFha8FSIZf9NxBdBc1Uy+63jE + sfs57nq9VaPPc9Xq9z3PV6t5T8ILpyOnfoH6NmWIR4hns4p1GxFlG3f/ADPEJRTsfj8tFCL/AA57nq9V + mnPc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc + 9Xq9z3PV6vc9z1er3Pc9XqRvUTImXeqGQ849OM3UYr8sZ5wytyrjtIwB301dTtTva4NmAa6nwOvPc9Xq + Ix+GBLj+W/Tni3QfOMxlzj6Yc2Zj6HYwzgAy09FWfzGgmUCx8uSlrYzGT3A57nq9VjPPc9Xq9z3PV6vc + 9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1e + r3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc + 9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3P//Q+f8A89Xq3+Oe56vV7nuer1e57nq9Xue56vV7nuer + 1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1VJ/ + jCer3/Zs9NdXkbKmKCk6q9dVqcnZe+XcCehwcIBidbYaraOQQRnQ75Nw+wee56vVpR89z1er3Pc9Xqk0 + VHVYjWUmH0MLVNbXyx0dHTx/akllcIij4kkDnuer1fR36OZFp+mHSXpj05pVCQZEwDCMpLsFgTh9BFSs + 2ltWKEn6ee56vUJHPc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z + 3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6i6ZUyI+SPUr1UzLh8AiwPrZgWC5lxEJ2/nuWXf + BqiQjwMtHU0a/Hyz8ee56vUYvnuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56v + V7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nu + er1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n/0fn/ + APPV6t/jnuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue5 + 6vV7nuer1e57nq9Xue56vV7nuer1QcUxTDsEwzEcZxetjw3CcIgmxTFMRrHEcNPT08Zlkkdm0VUVSST2 + A57nq9Wgv6/PVViPq+9Sudep4mkXJdA/9UumOFzbgKbAqF2WFirfZeoZmnkvqGe3YDnuer1Et57nq9Xu + e56vUbX0HdOh1W9Y/pxyPJD8xS4hmrDcVxKEfvUeEyHF6n/o1Stz3PV6voJ89z1er3Pc9Xq9z3PV6vc9 + z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er + 3Pc9Xq9z3PV6urC97ajQH6ee56vV3z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3 + Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9X + q9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z/ + 0vn/APPV6t/jnuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9 + Xue56vV7nuer1e57nq9Xue56vV7nuer1Ad6kOicfqL6NZz6MVedsTyBhWe4UwnHceyiKU1zUPmrJNTqa + uORQk6r5cmlypI8ee56vVRVnb/hPLleWmmk6cepWvoKxQTT0edsAp6uJz4BpqCqpiv0iNvo57nq9Vb3X + L8GT1rdHaarxfAsq0PWfL1Jd5K3pbVNUVqoBe5oKxKepY/CJH57nq9VV2K4TiuA4lW4NjmGVGDYvhsjU + mI4VisMlPU08qGzJJFMFZGHiCAee56vVc5+BF06Oa/WTiudZYBJSdL8rYnjCSutwlXiUsOExgHsGMc8t + vgDz3PV6txznuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9X + ue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56 + vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n + uer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1 + e57nq9Xue56vV7nuer1e5//T+f8A89Xq3+Oe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n + uer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vUT31Ueh + b06er/A56PqrkqKPNccJpsE6l5cEdHj9AQLJtqFU+bGv/FUyunwBsR7nq9RXfwzvw98yehjMPqJ/rNj9 + HnCmzvWYNQ5DzVhwMUtRg2HxVMx8+ncsYJvNqdrqGZTtBDEWt7nq9VsnPc9Xq9z3PV6vc9z1er3Pc9Xq + 9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3P + V6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc + 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 + oMLkmkU+0GsnlX714G8y+u3fd4ENhhvybJP+9KI91Hlj9JO6rRlZdX5rA/31IPvr2wcLJn/1W+onqdFP + S5x6tYtW4fU3WfCsNmTDqR1YWKtBhywIwsbWIPIP3t7fN8c8SU3mYOqQdqUnQn1SgJB9RUrbudj+7OVE + KtrNAUOJGpXtVJrkFA8OF75EFSTXfPc9Xq9z/9b5/wDz1erf457nq9Xue56vV7nuer1e57nq9Xue56vV + 7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xz+vxAeop6qetH1IZxWoappZc0V+X8 + OlkN/wDRcFYYNDa3h5dKLfDnuer1ROgXrr9VnpnWmo+knWLEsJy7TG65Mxkx4rgu06lVo8RWaOO/i0QV + vjz3PV6rVOn3/CgzrZhEFNB1M6FZczw0Q2z1uVsQr8AmlPtImTEkB+hRz3PV6jF0X/ChjI9SkEL+l7GW + xGc+VHSUWY6OYM7NtVVJoFYk6fu89z1eq/7p1j+ZM1ZEyhmbN+UzkTM2YMPpcZxrJj1Xzr4XPUxCVqV5 + xFCHeLdtchANwNvbz3PV6lnz3PV6vc9z1er3Pc9Xq9z3PV6vc9z1epifNGWY3eOTMVDHJGSkkb1dOGVg + bEEF9COe56vVx/rXlb/sJMP/APGyn/5r57nq9TxTVVNWQpUUlQlVTyjdFPTOrow9oZSQee56vVn57nq9 + Xue56vV7nuer1e57nq9TbS4zg9dO9LRYrTVlVEC0lNSzxSSKFO03VGJFjoee56vU5c9z1eqBXYrheGCI + 4liVPh4muITXTRxb9tr7fMIva+vPc9Xqk09RT1cEdTSTpVU0w3w1FOyujqfEMpII57nq9Wbnuer1N1Hi + +E4jJLDh+KU9dNBrNFRzxSsgvb3gjEjX289z1epx57nq9Xue56vV7nuer1e57nq9Xue56vU2yYzg8NYu + HTYtTRYg5WNaCSeJZiz2KgIW3XN9NOe56vU5c9z1eqPVVdJQwPVVtVHR00dvMqKp1jRbmwuzkAXPPc9X + qxUOJYdiaPLhtfBiEcZ8uSShljlVWtexMZNjz3PV6pvPc9Xqb2xfClrhhjYnTriTaLh7TRic3Xf/AJPd + u7a9u3Pc9XqcOe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vUyf1ly + 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 + qBgOEZK/nHk/L/N/yrD4qHzvK3ybPM8rdt3G17XPfnuer1Lznuer1VW5b/DVrckevjGvW5k3rXHhdPmS + vrcWx7pXU5b85JocUw/5OtiFeuJptaSQmZX+XO1tCD357nq9VqXPc9Xq9z//0/n/APPV6t/jnuer1e57 + nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV8/n8QHqL/AJ1f + Wh6kM4pUNU0suaK/L+HSyG/+i4KwwaG1vDy6UW+HPc9XqJ7z3PV6tmD8Bz0hh2zJ6ws6YZdYzU5D6OR1 + Sfvf5LEsQTXw/wB5kNv+LRz3PV6tmjnuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9X + ue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56 + vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n + uer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1 + e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e5// + 1Pn/APPV6t/jnuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9 + SA6rZ3pumnTDqL1ErGRabIuB4rm6U1Bsh/l9DLVgE/Epbnuer1fOCxGvqsVxCuxOulM9biM0tfWTubs8 + szmR2J9pJJ57nq9QxenHoVmz1KdbOn3RXJkZGL54r46CoxDYzx0FDGDNV1cgH7kEKPIfbaw1I57nq9X0 + Hel3TfKnR7p1kvpdkegGGZTyJh1NlvA6QW3CGmjCb3I+07m7u3ixJ8ee56vUvee56vV7nuer1e57nq9X + ue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56 + vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n + uer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1 + e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57n + q9Xue56vV7nuer1e57nq9Xue56vV7n//1fn/APPV6t/jnuer1e57nq9Xue56vV7nuer1e57nq9Xue56v + V7nuer1e57nq9Xue56vV7nuer1e57nq9Va/4uPUcdOPQR1ukimMOIZ2iw/pxh1re/wDzfEIoqhdfbSrN + z3PV6tF/nuer1bZf4F3pB/zfdMsZ9VGc8L8vNnVmJsB6dR1kYElHluCe8tQu4XU1s0YIPjHGpGjm/uer + 1X+89z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc + 9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1e + r3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc + 9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9 + z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z//1vn/APPV6t/jnuer1e57 + nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9WvH/AMKEOo38s6S9BOlV + PUlZs3Y9iWdcQp437wYJQpSR719jPiNwfap57nq9VA/oi9MOM+rj1G5C6QUSywZfq5v571AxmmH+8GAU + REtXJu8HcWii/wCPHXw57nq9W/5l7L+DZTwDBMr5cw6LCMv5cpKfAsDwqjXbDTUlJCsEMSDwVEUAc9z1 + ep457nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e5 + 7nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9 + Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue5 + 6vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7 + nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n//1/n/APPV6t/jnuer1e57 + nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Wnd+PL1F/rT6wMvZFgmE + lL0wyph1BURKTeOtxWebFJAfiYZIT9HPc9Xqt+/Bh9IP+YH08L1dzbhfyvU7r5HT5hdauMrPh+XFBkw+ + m98AqZg5qJB47kB1Tnuer1XJ89z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6 + vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z + 1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3 + Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9X + q9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3 + PV6vc//Q+f8A89Xq3+Oe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56v + V7nuer1ageTeh0v4hv4tvWmtxeB8R6T5JzRWY31BrJwTHJg2W50wajor6j/S2pUiAv8A5Pew+zz3PV6t + veCCGmhhpqaFaenp1WCCCBQiIiDaqqq2AAAsAOe56vVl57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer + 1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57 + nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9X + ue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56 + vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7n + uer1e57nq9Xue56vV7nuer1e5//R+f8A89Xq3+Oe56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56 + vV7nuer1e57nq9Xue56vUH/VjO9P0z6X9ReolUV8jI2B4rmx1l+yxw+hkqgv/BFAPr57nq9RH/wvfStU + emf03YbX5voWh6xdaJV6n9VKirW1TDUVqmSloXuTb5WKT3x/xa0h8ee56vVZBz3PV6vc9z1er3Pc9Xq9 + z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV + 6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9 + z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er + 3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9 + Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc9z1er3Pc9Xq9z3PV6vc/9L5/wDz1erf457nq9Xue56vV7nuer1e + 57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9QRdef+dTZw/3h/wAnS/8AMT/8k7/e6D/er/jn + /H8L89z1eoXee56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1 + e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57n + q9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xu + e56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56v + V7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nuer1e57nq9Xue56vV7nu + er1e5//Z + + + + ewBcAHIAdABmADEAXABhAG4AcwBpAGMAcABnADEAMgA1ADIADQAKAHsADQAKAFwAZgBvAG4AdAB0AGIAbAANAAoAewBcAGYAMAAgAFQAaQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBuADsAfQANAAoAewBcAGYAMQAgAEEAcgBpAGEAbAA7AH0ADQAKAH0ADQAKAHsADQAKAFwAYwBvAGwAbwByAHQAYgBsAA0ACgA7AA0ACgBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMAA7AA0ACgBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMgA1ADUAOwANAAoAfQANAAoAXABuAG8AdQBpAGMAbwBtAHAAYQB0AFwAcwBwAGwAeQB0AHcAbgBpAG4AZQBcAGgAdABtAGEAdQB0AHMAcAB7AFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbAB7AFwAKgBcAGIAawBtAGsAcwB0AGEAcgB0ACAAXwBkAHgAXwBmAHIAYQBnAF8AUwB0AGEAcgB0AEYAcgBhAGcAbQBlAG4AdAB9AHsAXAAqAFwAYgBrAG0AawBlAG4AZAAgAF8AZAB4AF8AZgByAGEAZwBfAFMAdABhAHIAdABGAHIAYQBnAG0AZQBuAHQAfQB7AFwAZgAxAFwAZgBzADEAOABcAGMAZgAwACAASwBvAG0AcABhAHMAcwAgAEIAZQBXAG8AIABcAHUAOAAyADIANgBcACcAOQA1ACAASwBhAGkAcwBlAHIAcgBpAG4AZwAgADQAIABcAHUAOAAyADIANgBcACcAOQA1ACAANAA2ADQAOAAzACAAVwBlAHMAZQBsAH0AXABmAHMAMgA0AFwAYwBmADEAXABwAGEAcgB9AA0ACgB9AA0ACgA= + 17, 17 - - Über den Budgetnachweis werden auf Grundlage der Quittierungsbelege im nachstehenden Umfang folgende, im direkten Betreuungskontakt erbrachte Minuten zur Abrechnung beantragt (direkte Fachleistungsminuten = D-FLMin). Die Summe der D-FLMin wird in direkte Fachleistungsstunden (D-FLS) umgerechnet. - \ No newline at end of file diff --git a/ReportImp/KompassBeWoWesel/CustomReportCreator.cs b/ReportImp/KompassBeWoWesel/CustomReportCreator.cs new file mode 100644 index 000000000..8c3ce6612 --- /dev/null +++ b/ReportImp/KompassBeWoWesel/CustomReportCreator.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Report; +using BeWo.Report.ReportObjects; +using DevExpress.XtraReports.Design; +using DevExpress.XtraReports.UI; + +namespace KompassBeWoWesel +{ + public class CustomReportCreator : DefaultReportCreator + { + public override XtraReport CreateSettlementReport(string dcId, long? invoiceBaseOid) + { + return base.CreateSettlementReport(dcId, invoiceBaseOid, true); + } + + + } +} diff --git a/ReportImp/KompassBeWoWesel/KompassBeWoWesel.csproj b/ReportImp/KompassBeWoWesel/KompassBeWoWesel.csproj index 5b102bd43..b1a1ee901 100644 --- a/ReportImp/KompassBeWoWesel/KompassBeWoWesel.csproj +++ b/ReportImp/KompassBeWoWesel/KompassBeWoWesel.csproj @@ -59,6 +59,7 @@ + Component diff --git a/ReportImp/LebenshilfeDorsten/Budgetnachweis.Designer.cs b/ReportImp/LebenshilfeDorsten/Budgetnachweis.Designer.cs index 36507560a..b8feb30a9 100644 --- a/ReportImp/LebenshilfeDorsten/Budgetnachweis.Designer.cs +++ b/ReportImp/LebenshilfeDorsten/Budgetnachweis.Designer.cs @@ -36,7 +36,6 @@ namespace LebenshilfeDorsten this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel15 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLine2 = new DevExpress.XtraReports.UI.XRLine(); this.xrLine1 = new DevExpress.XtraReports.UI.XRLine(); this.xrLabel12 = new DevExpress.XtraReports.UI.XRLabel(); this.xrCheckBox2 = new DevExpress.XtraReports.UI.XRCheckBox(); @@ -66,20 +65,10 @@ namespace LebenshilfeDorsten this.cellHourlyRate3 = new DevExpress.XtraReports.UI.XRTableCell(); this.cellFLS3 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell29 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrLabel17 = new DevExpress.XtraReports.UI.XRLabel(); this.ruleRateFactorNull = new DevExpress.XtraReports.UI.FormattingRule(); this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand(); this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand(); this.GroupHeader1 = new DevExpress.XtraReports.UI.GroupHeaderBand(); - this.ortDatum = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel(); - this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand(); - this.GroupFooter2 = new DevExpress.XtraReports.UI.GroupFooterBand(); - this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLine3 = new DevExpress.XtraReports.UI.XRLine(); - this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); this.xrTable1 = new DevExpress.XtraReports.UI.XRTable(); this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow(); this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell(); @@ -92,9 +81,21 @@ namespace LebenshilfeDorsten this.xrTableRow7 = new DevExpress.XtraReports.UI.XRTableRow(); this.xrTableCell23 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell24 = new DevExpress.XtraReports.UI.XRTableCell(); + this.ortDatum = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel(); + this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand(); + this.GroupFooter2 = new DevExpress.XtraReports.UI.GroupFooterBand(); + this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLine3 = new DevExpress.XtraReports.UI.XRLine(); + this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel(); + this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); + this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLine2 = new DevExpress.XtraReports.UI.XRLine(); + this.xrLabel17 = new DevExpress.XtraReports.UI.XRLabel(); ((System.ComponentModel.ISupportInitialize)(this.tableRechnungspositionen)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); // // Detail @@ -182,26 +183,20 @@ namespace LebenshilfeDorsten this.xrLabel15.Text = "fr [Salutation2] [CustomerName], geb. [CustomerBirthdayString]"; this.xrLabel15.WordWrap = false; // - // xrLine2 - // - this.xrLine2.LocationFloat = new DevExpress.Utils.PointFloat(65.00015F, 274.3801F); - this.xrLine2.Name = "xrLine2"; - this.xrLine2.SizeF = new System.Drawing.SizeF(270F, 9.75F); - // // xrLine1 // - this.xrLine1.LocationFloat = new DevExpress.Utils.PointFloat(65.00015F, 204.38F); + this.xrLine1.LocationFloat = new DevExpress.Utils.PointFloat(60.0001F, 288.755F); this.xrLine1.Name = "xrLine1"; this.xrLine1.SizeF = new System.Drawing.SizeF(292.2076F, 9.749969F); // // xrLabel12 // this.xrLabel12.BackColor = System.Drawing.Color.Transparent; - this.xrLabel12.LocationFloat = new DevExpress.Utils.PointFloat(65.00015F, 67.71317F); + this.xrLabel12.LocationFloat = new DevExpress.Utils.PointFloat(65.00015F, 47.40067F); this.xrLabel12.Multiline = true; this.xrLabel12.Name = "xrLabel12"; this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel12.SizeF = new System.Drawing.SizeF(646.9999F, 90.33334F); + this.xrLabel12.SizeF = new System.Drawing.SizeF(666.271F, 108.5625F); this.xrLabel12.StylePriority.UseBackColor = false; this.xrLabel12.StylePriority.UseFont = false; this.xrLabel12.Text = resources.GetString("xrLabel12.Text"); @@ -404,19 +399,6 @@ namespace LebenshilfeDorsten this.xrTableCell29.Name = "xrTableCell29"; this.xrTableCell29.Weight = 0.663551203509769D; // - // xrLabel17 - // - this.xrLabel17.BackColor = System.Drawing.Color.Transparent; - this.xrLabel17.Font = new System.Drawing.Font("Arial", 10F); - this.xrLabel17.LocationFloat = new DevExpress.Utils.PointFloat(65.00015F, 284.1301F); - this.xrLabel17.Multiline = true; - this.xrLabel17.Name = "xrLabel17"; - this.xrLabel17.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel17.SizeF = new System.Drawing.SizeF(598.0811F, 27.08325F); - this.xrLabel17.StylePriority.UseBackColor = false; - this.xrLabel17.StylePriority.UseFont = false; - this.xrLabel17.Text = "vom LWL gesondert bewilligte Leistungen zur Deckung eines einmaligen Bedarfs"; - // // ruleRateFactorNull // this.ruleRateFactorNull.Condition = "[RateFactorText2] == ?"; @@ -430,7 +412,7 @@ namespace LebenshilfeDorsten // // bottomMarginBand1 // - this.bottomMarginBand1.HeightF = 90.33334F; + this.bottomMarginBand1.HeightF = 50F; this.bottomMarginBand1.Name = "bottomMarginBand1"; // // GroupHeader1 @@ -441,107 +423,10 @@ namespace LebenshilfeDorsten this.xrLabel1, this.xrLabel9}); this.GroupHeader1.Font = new System.Drawing.Font("Arial", 11F); - this.GroupHeader1.HeightF = 347.2498F; + this.GroupHeader1.HeightF = 315.9998F; this.GroupHeader1.Name = "GroupHeader1"; this.GroupHeader1.StylePriority.UseFont = false; // - // ortDatum - // - this.ortDatum.BackColor = System.Drawing.Color.Transparent; - this.ortDatum.LocationFloat = new DevExpress.Utils.PointFloat(389.9999F, 0F); - this.ortDatum.Multiline = true; - this.ortDatum.Name = "ortDatum"; - this.ortDatum.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.ortDatum.SizeF = new System.Drawing.SizeF(329.0833F, 17.79282F); - this.ortDatum.StylePriority.UseBackColor = false; - this.ortDatum.StylePriority.UseFont = false; - this.ortDatum.StylePriority.UseTextAlignment = false; - this.ortDatum.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight; - // - // xrLabel1 - // - this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(50F, 0F); - this.xrLabel1.Multiline = true; - this.xrLabel1.Name = "xrLabel1"; - this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel1.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink; - this.xrLabel1.SizeF = new System.Drawing.SizeF(280F, 108.25F); - this.xrLabel1.StylePriority.UseFont = false; - this.xrLabel1.Text = "Lebenshilfe Dorsten gGmbH\r\nBarbarastrae 70\r\n46282 Dorsten"; - // - // xrLabel9 - // - this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(60.0001F, 200.9583F); - this.xrLabel9.Multiline = true; - this.xrLabel9.Name = "xrLabel9"; - this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel9.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink; - this.xrLabel9.SizeF = new System.Drawing.SizeF(329.9999F, 81.58333F); - this.xrLabel9.StylePriority.UseFont = false; - this.xrLabel9.Text = "Landschaftsverband Westfalen-Lippe\r\n[RecipientDivision]\r\n[RecipientStreet]\r\n48133" + - " Mnster\r\n"; - // - // GroupFooter1 - // - this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.tableRechnungspositionen}); - this.GroupFooter1.Font = new System.Drawing.Font("Arial", 11F); - this.GroupFooter1.HeightF = 96F; - this.GroupFooter1.Name = "GroupFooter1"; - this.GroupFooter1.StylePriority.UseFont = false; - // - // GroupFooter2 - // - this.GroupFooter2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrLabel3, - this.xrLine3, - this.xrLabel2, - this.xrLine2, - this.xrLine1, - this.xrLabel12, - this.xrCheckBox2, - this.xrLabel17, - this.xrCheckBox1}); - this.GroupFooter2.Font = new System.Drawing.Font("Arial", 11F); - this.GroupFooter2.HeightF = 311.2133F; - this.GroupFooter2.Level = 1; - this.GroupFooter2.Name = "GroupFooter2"; - this.GroupFooter2.StylePriority.UseFont = false; - // - // xrLabel2 - // - this.xrLabel2.BackColor = System.Drawing.Color.Transparent; - this.xrLabel2.LocationFloat = new DevExpress.Utils.PointFloat(65.00015F, 214.13F); - this.xrLabel2.Multiline = true; - this.xrLabel2.Name = "xrLabel2"; - this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel2.SizeF = new System.Drawing.SizeF(292.2076F, 41.66667F); - this.xrLabel2.StylePriority.UseBackColor = false; - this.xrLabel2.StylePriority.UseFont = false; - this.xrLabel2.Text = "Antonius von Hebel\r\nGeschftsfhrer"; - // - // xrLabel3 - // - this.xrLabel3.BackColor = System.Drawing.Color.Transparent; - this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(409.7924F, 214.13F); - this.xrLabel3.Multiline = true; - this.xrLabel3.Name = "xrLabel3"; - this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel3.SizeF = new System.Drawing.SizeF(292.2076F, 41.66667F); - this.xrLabel3.StylePriority.UseBackColor = false; - this.xrLabel3.StylePriority.UseFont = false; - this.xrLabel3.Text = "Oliver Gellenbeck\r\nLeiter AUW"; - // - // xrLine3 - // - this.xrLine3.LocationFloat = new DevExpress.Utils.PointFloat(409.7924F, 204.3801F); - this.xrLine3.Name = "xrLine3"; - this.xrLine3.SizeF = new System.Drawing.SizeF(292.2076F, 9.749969F); - // - // bindingSource1 - // - this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.SettlementRO); - // // xrTable1 // this.xrTable1.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) @@ -653,6 +538,135 @@ namespace LebenshilfeDorsten this.xrTableCell24.StylePriority.UseBorders = false; this.xrTableCell24.Weight = 1.038047985270677D; // + // ortDatum + // + this.ortDatum.BackColor = System.Drawing.Color.Transparent; + this.ortDatum.LocationFloat = new DevExpress.Utils.PointFloat(389.9999F, 0F); + this.ortDatum.Multiline = true; + this.ortDatum.Name = "ortDatum"; + this.ortDatum.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.ortDatum.SizeF = new System.Drawing.SizeF(329.0833F, 17.79282F); + this.ortDatum.StylePriority.UseBackColor = false; + this.ortDatum.StylePriority.UseFont = false; + this.ortDatum.StylePriority.UseTextAlignment = false; + this.ortDatum.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight; + // + // xrLabel1 + // + this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(50F, 0F); + this.xrLabel1.Multiline = true; + this.xrLabel1.Name = "xrLabel1"; + this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel1.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink; + this.xrLabel1.SizeF = new System.Drawing.SizeF(280F, 108.25F); + this.xrLabel1.StylePriority.UseFont = false; + this.xrLabel1.Text = "Lebenshilfe Dorsten gGmbH\r\nBarbarastrae 70\r\n46282 Dorsten"; + // + // xrLabel9 + // + this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(60.0001F, 200.9583F); + this.xrLabel9.Multiline = true; + this.xrLabel9.Name = "xrLabel9"; + this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel9.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink; + this.xrLabel9.SizeF = new System.Drawing.SizeF(329.9999F, 81.58333F); + this.xrLabel9.StylePriority.UseFont = false; + this.xrLabel9.Text = "Landschaftsverband Westfalen- Lippe\r\nLWL- Inklusionsamt Soziale Teilhabe\r\n48133 M" + + "nster\r\n"; + // + // GroupFooter1 + // + this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.tableRechnungspositionen}); + this.GroupFooter1.Font = new System.Drawing.Font("Arial", 11F); + this.GroupFooter1.HeightF = 96F; + this.GroupFooter1.Name = "GroupFooter1"; + this.GroupFooter1.StylePriority.UseFont = false; + // + // GroupFooter2 + // + this.GroupFooter2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrLabel4, + this.xrLabel3, + this.xrLine3, + this.xrLabel2, + this.xrLine2, + this.xrLine1, + this.xrLabel12, + this.xrCheckBox2, + this.xrLabel17, + this.xrCheckBox1}); + this.GroupFooter2.Font = new System.Drawing.Font("Arial", 11F); + this.GroupFooter2.HeightF = 388.8175F; + this.GroupFooter2.Level = 1; + this.GroupFooter2.Name = "GroupFooter2"; + this.GroupFooter2.StylePriority.UseFont = false; + // + // xrLabel3 + // + this.xrLabel3.BackColor = System.Drawing.Color.Transparent; + this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(404.7925F, 298.505F); + this.xrLabel3.Multiline = true; + this.xrLabel3.Name = "xrLabel3"; + this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel3.SizeF = new System.Drawing.SizeF(292.2076F, 41.66667F); + this.xrLabel3.StylePriority.UseBackColor = false; + this.xrLabel3.StylePriority.UseFont = false; + this.xrLabel3.Text = "Oliver Gellenbeck\r\nLeiter AUW"; + // + // xrLine3 + // + this.xrLine3.LocationFloat = new DevExpress.Utils.PointFloat(404.7925F, 288.7551F); + this.xrLine3.Name = "xrLine3"; + this.xrLine3.SizeF = new System.Drawing.SizeF(292.2076F, 9.749969F); + // + // xrLabel2 + // + this.xrLabel2.BackColor = System.Drawing.Color.Transparent; + this.xrLabel2.LocationFloat = new DevExpress.Utils.PointFloat(60.0001F, 298.505F); + this.xrLabel2.Multiline = true; + this.xrLabel2.Name = "xrLabel2"; + this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel2.SizeF = new System.Drawing.SizeF(292.2076F, 41.66667F); + this.xrLabel2.StylePriority.UseBackColor = false; + this.xrLabel2.StylePriority.UseFont = false; + this.xrLabel2.Text = "Antonius von Hebel\r\nGeschftsfhrer"; + // + // bindingSource1 + // + this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.SettlementRO); + // + // xrLabel4 + // + this.xrLabel4.Font = new System.Drawing.Font("Arial", 11F, System.Drawing.FontStyle.Bold); + this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(65.00015F, 170.7134F); + this.xrLabel4.Multiline = true; + this.xrLabel4.Name = "xrLabel4"; + this.xrLabel4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel4.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink; + this.xrLabel4.SizeF = new System.Drawing.SizeF(663.5623F, 81.58331F); + this.xrLabel4.StylePriority.UseFont = false; + this.xrLabel4.Text = resources.GetString("xrLabel4.Text"); + // + // xrLine2 + // + this.xrLine2.LocationFloat = new DevExpress.Utils.PointFloat(60.0001F, 351.9843F); + this.xrLine2.Name = "xrLine2"; + this.xrLine2.SizeF = new System.Drawing.SizeF(270F, 9.75F); + // + // xrLabel17 + // + this.xrLabel17.BackColor = System.Drawing.Color.Transparent; + this.xrLabel17.Font = new System.Drawing.Font("Arial", 10F); + this.xrLabel17.LocationFloat = new DevExpress.Utils.PointFloat(60.0001F, 361.7343F); + this.xrLabel17.Multiline = true; + this.xrLabel17.Name = "xrLabel17"; + this.xrLabel17.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel17.SizeF = new System.Drawing.SizeF(598.0811F, 27.08325F); + this.xrLabel17.StylePriority.UseBackColor = false; + this.xrLabel17.StylePriority.UseFont = false; + this.xrLabel17.Text = "vom LWL gesondert bewilligte Leistungen zur Deckung eines einmaligen Bedarfs"; + // // Budgetnachweis // this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { @@ -666,14 +680,14 @@ namespace LebenshilfeDorsten this.ExportOptions.PrintPreview.DefaultFileName = "Spitzabrechnung"; this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { this.ruleRateFactorNull}); - this.Margins = new System.Drawing.Printing.Margins(30, 30, 90, 90); + this.Margins = new System.Drawing.Printing.Margins(30, 30, 90, 50); this.PageHeight = 1169; this.PageWidth = 827; this.PaperKind = System.Drawing.Printing.PaperKind.A4; this.Version = "17.1"; ((System.ComponentModel.ISupportInitialize)(this.tableRechnungspositionen)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); } @@ -693,7 +707,6 @@ namespace LebenshilfeDorsten private DevExpress.XtraReports.UI.XRLabel xrLabel16; private DevExpress.XtraReports.UI.XRLabel xrLabel15; private DevExpress.XtraReports.UI.XRLabel xrLabel12; - private DevExpress.XtraReports.UI.XRLabel xrLabel17; private DevExpress.XtraReports.UI.XRTable tableRechnungspositionen; private DevExpress.XtraReports.UI.XRTableRow xrTableRow2; private DevExpress.XtraReports.UI.XRTableCell xrTableCell2; @@ -722,7 +735,6 @@ namespace LebenshilfeDorsten private DevExpress.XtraReports.UI.XRCheckBox xrCheckBox2; private DevExpress.XtraReports.UI.XRCheckBox xrCheckBox1; private DevExpress.XtraReports.UI.XRLabel xrLabel1; - private DevExpress.XtraReports.UI.XRLine xrLine2; private DevExpress.XtraReports.UI.XRLine xrLine1; private DevExpress.XtraReports.UI.XRLabel ortDatum; private DevExpress.XtraReports.UI.GroupFooterBand GroupFooter1; @@ -742,5 +754,8 @@ namespace LebenshilfeDorsten private DevExpress.XtraReports.UI.XRTableRow xrTableRow7; private DevExpress.XtraReports.UI.XRTableCell xrTableCell23; private DevExpress.XtraReports.UI.XRTableCell xrTableCell24; + private DevExpress.XtraReports.UI.XRLabel xrLabel4; + private DevExpress.XtraReports.UI.XRLine xrLine2; + private DevExpress.XtraReports.UI.XRLabel xrLabel17; } } diff --git a/ReportImp/LebenshilfeDorsten/Budgetnachweis.resx b/ReportImp/LebenshilfeDorsten/Budgetnachweis.resx index b1fb27d43..55b71f949 100644 --- a/ReportImp/LebenshilfeDorsten/Budgetnachweis.resx +++ b/ReportImp/LebenshilfeDorsten/Budgetnachweis.resx @@ -118,7 +118,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Hiermit wird erklärt, dass die Verpflichtungen aus der Leistungs-, Prüfungs- und Vergütungsvereinbarung nach §§ 75 ff. SGB XII eingehalten wurden und alle hier gemachten Angaben anhand der vorgehaltenen Quittungsbelege sowie der Betreuungsdokumentation jederzeit nachgewiesen werden können. + Hiermit wird erklärt, dass die Verpflichtungen aus den Vereinbarungen nach §§75 ff. SGB XII bzw. §§125 ff. SGB IX eingehalten wurden und alle hier gemachten Angaben je Betreuungskontakt anhand der Quittierungsbelege sowie der Betreuungsdokumentation jederzeit nachgewiesen werden können. Diese Unterlagen sind 5 Jahre aufzubewahren und auf Verlangen des Sozialhilfeträgers bzw. des Trägers der Eingliederungshilfe vorzulegen (§2 Abs.1 der Vergütungsvereinbarung). + + + Sollte sich bei der Abrechnung der FLS ein Auszahlungsbetrag zu unseren Gunsten ergeben, bitten wir um Erstattung auf folgendes Konto: + +Kreditinstitut: Sparkasse Münsterland Ost IBAN: DE12 8888 8888 8888 8888 25 17, 17 diff --git a/ReportImp/LebenshilfeFrankfurtOder/Export/DatevExporter.cs b/ReportImp/LebenshilfeFrankfurtOder/Export/DatevExporter.cs index fa1a06160..bee897532 100644 --- a/ReportImp/LebenshilfeFrankfurtOder/Export/DatevExporter.cs +++ b/ReportImp/LebenshilfeFrankfurtOder/Export/DatevExporter.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.Design; using System.Data; using System.IO; using System.Text; @@ -61,16 +62,15 @@ namespace LebenshilfeFrankfurtOder.Export //sb.AppendLine("Betrag;Gegenkonto;Rechnungsnummer;Belegfeld 2;Belegdatum;Konto;Kostenstelle;Buchungstext"); - if (String.IsNullOrEmpty(bereich) || bereich == "Tagesstruktur") + if (String.IsNullOrEmpty(bereich) || bereich == "Ambulant betreutes Wohnen") { - var s = GetTagesstrukturRechnungenString(date, minInsts); + var s = GetAbwRechnungenString(date, minInsts); if (!String.IsNullOrWhiteSpace(s)) { sb.AppendLine(s); } } - if (String.IsNullOrEmpty(bereich) || bereich == "Familien entlastender Dienst") { var s = GetFedRechnungenString(date, minInsts); @@ -80,15 +80,43 @@ namespace LebenshilfeFrankfurtOder.Export } } + if (String.IsNullOrEmpty(bereich) || bereich == "Einzelfallhilfe") + { + var s = GetSbdRechnungenString(date, minInsts); + if (!String.IsNullOrWhiteSpace(s)) + { + sb.AppendLine(s); + } + } + + if (String.IsNullOrEmpty(bereich) || bereich == "Wohnstätte") + { + var s = GetWstRechnungenString(date, minInsts); + if (!String.IsNullOrWhiteSpace(s)) + { + sb.AppendLine(s); + } + } + + if (String.IsNullOrEmpty(bereich) || bereich == "Tagesstruktur") + { + var s = GetTagesstrukturRechnungenString(date, minInsts); + if (!String.IsNullOrWhiteSpace(s)) + { + sb.AppendLine(s); + } + } + + return sb.ToString(); } - public static String GetTagesstrukturRechnungenString(DateTime date, DateTime? minInsts) + public static String GetWstRechnungenString(DateTime date, DateTime? minInsts) { StringBuilder sb = new StringBuilder(); - var sql = GetTagesstrukturRechnungenSql(date, minInsts); + var sql = GetWstRechnungenSql(date, minInsts); //sb.AppendLine("Debitorennummer,Rechnungsnr, Rechnungsdatum (monatsletzter des Auswertedatums),Umsatz,H,Konto,Kostenstelle,Buchungstext,0"); var dt = ExecuteQuery(sql, date); @@ -187,12 +215,122 @@ namespace LebenshilfeFrankfurtOder.Export return sb.ToString(); } + public static String GetTagesstrukturRechnungenString(DateTime date, DateTime? minInsts) + { + + + StringBuilder sb = new StringBuilder(); + var sql = GetTagesstrukturRechnungenSql(date, minInsts); + + //sb.AppendLine("Debitorennummer,Rechnungsnr, Rechnungsdatum (monatsletzter des Auswertedatums),Umsatz,H,Konto,Kostenstelle,Buchungstext,0"); + var dt = ExecuteQuery(sql, date); + + foreach (DataRow row in dt.Rows) + { + if (sb.Length > 0) + { + sb.AppendLine(); + } + String debitor = ""; + long? oid = (long?)row[4]; + if (oid.HasValue) + { + var org = DAOFactory.GenericDAO.LoadByID(oid.Value); + debitor = org.DebitorNumber; + } + sb.Append(debitor); // Gegenkonto + sb.Append(";"); + sb.Append(String.Format("{0}", row[2])); // Rechnungsnummer + sb.Append(";"); + + DateTime lastDate = new DateTime(date.Year, date.Month, 1); + lastDate = lastDate.AddMonths(1).AddDays(-1); + sb.Append(String.Format("{0:dd.MM.yyyy}", lastDate)); + sb.Append(";"); // Datum (Monatsletzter des Auswertedatums) + sb.Append(String.Format("{0:0.00}", row[0])); // Betrag + sb.Append(";"); + sb.Append("H"); // Konto + sb.Append(";"); + sb.Append("8000"); // Konto + sb.Append(";"); + + if (row[5] != null) + { + sb.Append(GetKostenstelle(row[5].ToString())); + } + sb.Append(";"); + + sb.Append("TS - "); + + long? sioid = (long?)row[6]; + + if (sioid.HasValue) + { + String schluessel = ""; + String customers = ""; + + var si = DAOFactory.GenericDAO.LoadByID(sioid.Value); + + foreach (var sip in si.ServiceInvoicePeriodList) + { + if (sip.InvoiceItemList != null) + { + foreach (var ii in sip.InvoiceItemList) + { + if (!String.IsNullOrWhiteSpace(ii.ItemDescription)) + { + schluessel = ii.ItemDescription; + } + + } + } + + if (sip.Customer != null) + { + if (customers.Length > 0) + { + customers += ", "; + } + + customers += string.Format("{0}, {1}", sip.Customer.Person.LastName, sip.Customer.Person.FirstName); + } + + + } + + sb.Append(schluessel); + sb.Append(", "); + sb.Append(customers); + } + sb.Append(";0"); + + + } + + + var s = GetMonatlicheRechnungenString(date, "TagesstrukturVerpflegung", "TS Mittagsverpflegung", "8030", minInsts); + + if (!String.IsNullOrWhiteSpace(s)) + { + sb.AppendLine(); + sb.Append(s); + } + + return sb.ToString(); + } + public static String GetFedRechnungenString(DateTime date, DateTime? minInsts) { //sb.AppendLine("Debitor;Rechnungsnummer;Belegdatum;Umsatz;H;Konto;Kostenstelle;Buchungstext;0"); StringBuilder sb = new StringBuilder(); - var s = GetMonatlicheRechnungenString(date, "RechnungFud", "FED-Betreuung", "8000", minInsts); + var list = new List(); + list.Add("RechnungFud"); + list.Add("RechnungFudPrivat"); + list.Add("RechnungHort"); + list.Add("RechnungHortPrivat"); + + var s = GetMonatlicheRechnungPositionenString(date, list, "FED-Betreuung", "8000", minInsts); if (!String.IsNullOrWhiteSpace(s)) { @@ -202,11 +340,185 @@ namespace LebenshilfeFrankfurtOder.Export return sb.ToString(); } + public static String GetSbdRechnungenString(DateTime date, DateTime? minInsts) + { + //sb.AppendLine("Debitor;Rechnungsnummer;Belegdatum;Umsatz;H;Konto;Kostenstelle;Buchungstext;0"); + StringBuilder sb = new StringBuilder(); + + var s = GetMonatlicheRechnungenString(date, "RechnungEinzelfallhilfe", "Einzelfallhilfe", "8000", minInsts); + + if (!String.IsNullOrWhiteSpace(s)) + { + sb.Append(s); + } + + return sb.ToString(); + } + + public static String GetAbwRechnungenString(DateTime date, DateTime? minInsts) + { + //sb.AppendLine("Debitor;Rechnungsnummer;Belegdatum;Umsatz;H;Konto;Kostenstelle;Buchungstext;0"); + StringBuilder sb = new StringBuilder(); + + var list = new List(); + list.Add("RechnungAbw"); + list.Add("RechnungAbwPrivat"); + + var s = GetMonatlicheRechnungenString(date, list, "abW", "8000", minInsts); + + if (!String.IsNullOrWhiteSpace(s)) + { + sb.Append(s); + } + + return sb.ToString(); + } + + public static String GetMonatlicheRechnungPositionenString(DateTime date, String rechnungId, String buchungstext, String konto, DateTime? minInsts) + { + var list = new List(); + list.Add(rechnungId); + + return GetMonatlicheRechnungPositionenString(date, list, buchungstext, konto, minInsts); + } + + + public static String GetMonatlicheRechnungPositionenString(DateTime date, List rechnungIds, String buchungstext, String konto, DateTime? minInsts) + { + + StringBuilder sb = new StringBuilder(); + var sql = GetMonatlicheRechnungPositionenSql(date, rechnungIds, minInsts); + + /* +sip.Claim, +c.DebitorNumber, + ib.InvoiceDate, + ib.invoicenumber, + c.CostCenter, +c2s.Oid, +ib.InvoiceId + */ + var dt = ExecuteQuery(sql, date); + + //sb.AppendLine("Debitorennummer,Rechnungsnr, Rechnungsdatum (monatsletzter des Auswertedatums),Umsatz,H,Konto,Kostenstelle,Buchungstext,0"); + foreach (DataRow row in dt.Rows) + { + if (sb.Length > 0) + { + sb.AppendLine(); + } + sb.Append(String.Format("{0:0.00}", row[1])); // Gegenkonto + sb.Append(";"); + sb.Append(String.Format("{0}", row[3])); // Rechnungsnummer + sb.Append(";"); + DateTime lastDate = new DateTime(date.Year, date.Month, 1); + lastDate = lastDate.AddMonths(1).AddDays(-1); + sb.Append(String.Format("{0:dd.MM.yyyy}", lastDate)); //Belegdatum + sb.Append(";"); + sb.Append(String.Format("{0:0.00}", row[7])); // Betrag + sb.Append(";"); + sb.Append("H"); + sb.Append(";"); + + String invoiceId = ""; + decimal itemAmount = 0; + String itemDescription = ""; + String notice = ""; + decimal unitCount = 0; + String unitDescription = ""; + + if (row[6] != null) + { + invoiceId = row[6].ToString(); + } + if (row[7] != null) + { + Decimal.TryParse(row[7].ToString(), out itemAmount); + } + if (row[8] != null) + { + itemDescription = row[8].ToString(); + } + if (row[9] != null) + { + notice = row[9].ToString(); + } + if (row[10] != null) + { + Decimal.TryParse(row[10].ToString(), out unitCount); + } + if (row[11] != null) + { + unitDescription = row[11].ToString(); + } + + String kto = GetKontonummer(invoiceId, itemAmount, itemDescription, notice, unitCount, unitDescription); + if (String.IsNullOrEmpty(kto)) + { + kto = konto; + } + sb.Append(kto); // Konto + sb.Append(";"); + + + sb.Append(GetKostenstelleFromInvoiceItem(invoiceId, itemAmount, itemDescription, notice, unitCount, unitDescription)); + sb.Append(";"); + + + + /* +Name, Vorname Rechnungsadressat wenn kein Name, Vorname vorhanden, dann das Feld Firma ausgeben - plus Name, Vorname Kunde - +plus Datum aus Leistung Format mmjj + +wenn Re-Adressat gleich Kunde, dann nur den Name, Vorname des Kunden ausgeben." +Bsp. LK Stade - Mustermann, Max - 11.2019 + + */ + + String bt = GetBuchungstext(invoiceId, itemAmount, itemDescription, notice, unitCount, unitDescription); + + if (String.IsNullOrEmpty(bt)) + { + bt = buchungstext; + } + + var text = ""; + long? c2sOid = (long?)row[5]; + + if (c2sOid.HasValue) + { + var c2s = DAOFactory.GenericDAO.LoadByID(c2sOid.Value); + + var c = c2s.SupportConcept.Customer; + + text = String.Format("{0} - {1}, {2}", bt, c.Person.LastName, c.Person.FirstName); + } + + + + + sb.Append(text); + sb.Append(";0"); + + + } + + return sb.ToString(); + } + public static String GetMonatlicheRechnungenString(DateTime date, String rechnungId, String buchungstext, String konto, DateTime? minInsts) + { + var list = new List(); + list.Add(rechnungId); + + return GetMonatlicheRechnungenString(date, list, buchungstext, konto, minInsts); + } + + public static String GetMonatlicheRechnungenString(DateTime date, List rechnungIds, String buchungstext, String konto, DateTime? minInsts) { StringBuilder sb = new StringBuilder(); - var sql = GetMonatlicheRechnungenSql(date, rechnungId, minInsts); + var sql = GetMonatlicheRechnungenSql(date, rechnungIds, minInsts); /* sip.Claim, @@ -281,22 +593,224 @@ Bsp. LK Stade - Mustermann, Max - 11.2019 return sb.ToString(); } - private static String GetKostenstelle(String invoiceId) + private static String GetKostenstelleFromInvoiceItem(String invoiceId, decimal amount, String itemDescription, String notice, decimal unitCount, String unitDescription) { - if (invoiceId == "RechnungTagesstruktur") + if (!String.IsNullOrEmpty(notice) && notice.Replace(" ", "").Contains("§42")) { - return "2102"; + if (itemDescription.Contains("FED")) + { + return "2215"; + } + + return "2302"; } + + if (!String.IsNullOrEmpty(notice) && notice.Replace(" ", "").Contains("§39")) + { + if (itemDescription.Contains("FED")) + { + return "2215"; + } + + return "2302"; + } + + if (itemDescription.Replace(" ", "").StartsWith("TT-")) + { + return "2302"; + } + + if (itemDescription.Contains("Beförderung")) + { + return "2202"; + } + if (itemDescription.Contains("Betreuung OG")) + { + return "2202"; + } + if (itemDescription.Contains("Haushaltsnahe Dienstleistung")) + { + return "2203"; + } + if (itemDescription.Contains("Hortbetreuung über 6 Stunden")) + { + return "2204"; + } + + if (itemDescription.StartsWith("FED")) + { + if (itemDescription.Contains("Haushaltsnahe Dienstleistung")) + { + return "2203"; + } + if (itemDescription.Contains("HHnD")) + { + return "2203"; + } + if (itemDescription.Contains("Einzelbetreuung")) + { + return "2202"; + } + if (itemDescription.Contains("Ganztagsbetreuung")) + { + return "2202"; + } + } + + + + if (itemDescription.Contains("Mittagsverpflegung")) + { + return "5802"; + } + if (itemDescription.Contains("Mittag")) + { + return "2302"; + } + if (invoiceId == "RechnungTagesstrukturVerpflegung") { return "5802"; } - if (invoiceId == "RechnungFud") + if (invoiceId.Contains("RechnungHortPrivat")) + { + return "2204"; + } + if (invoiceId.Contains("RechnungHort")) + { + return "2204"; + } + + return GetKostenstelle(invoiceId); + } + + private static String GetKontonummer(String invoiceId, decimal amount, String itemDescription, String notice, decimal unitCount, String unitDescription) + { + if (!String.IsNullOrEmpty(notice) && notice.Replace(" ", "").Contains("§42")) + { + return "8000"; + } + if (!String.IsNullOrEmpty(notice) && notice.Replace(" ", "").Contains("§39")) + { + return "8000"; + } + if (itemDescription.Replace(" ", "").StartsWith("TT-")) + { + if (itemDescription.Contains("Erlebniswochenende Unterkunft")) + { + return "1590"; + } + if (itemDescription.Contains("Erlebniswochenende Verpflegung")) + { + return "8030"; + } + if (itemDescription.Contains("Mittag")) + { + return "8030"; + } + if (itemDescription.Contains("Kurskosten")) + { + return "8022"; + } + return "8000"; + } + + if (itemDescription.Contains("Kreativ")) + { + return "8020"; + } + + if (itemDescription.Contains("FED Kurskosten")) + { + return "8020"; + } + if (itemDescription.Contains("FED Schwimmen")) + { + return "8020"; + } + + if (itemDescription.Contains("FED Psychomotorik")) + { + return "8020"; + } + if (itemDescription.Contains("FED Musik")) + { + return "8020"; + } + if (itemDescription.Contains("FED Unterkunft")) + { + return "8083"; + } + if (itemDescription.Contains("FED-TT Ferien Mittag")) + { + return "8030"; + } + + if (unitDescription == "km" && itemDescription == "Fahrtkosten") + { + return "8033"; + } + if (itemDescription.Contains("Mittagsverpflegung")) + { + return "8003"; + } + if (itemDescription.Contains("Mittag")) + { + return "8030"; + } + + + if (invoiceId.Contains("RechnungHortPrivat")) + { + return "8002"; + } + if (invoiceId.Contains("RechnungHort")) + { + return "8000"; + } + return "8000"; + } + + private static String GetBuchungstext(String invoiceId, decimal amount, String itemDescription, String notice, decimal unitCount, String unitDescription) + { + if (invoiceId.Contains("RechnungHort")) + { + return "Alternatives Hortangebot"; + } + return itemDescription; + } + + + private static String GetKostenstelle(String id) + { + + if (id == "RechnungTagesstruktur") + { + return "2102"; + } + if (id == "RechnungTagesstrukturVerpflegung") + { + return "5802"; + } + if (id == "RechnungWst") + { + return "1121"; + } + + if (id == "RechnungEinzelfallhilfe") + { + return "2206"; + } + if (id == "RechnungFud" || id == "RechnungFudPrivat" || id == "RechnungHort" || id == "RechnungHortPrivat") { return "2212"; } - + if (id == "RechnungAbw" || id == "RechnungAbwPrivat") + { + return "1212"; + } return ""; + } private static Dictionary CreateHourlyRateDict(List catOids, DateTime date) @@ -320,7 +834,7 @@ Bsp. LK Stade - Mustermann, Max - 11.2019 return dict; } - private static String GetMonatlicheRechnungenSql(DateTime date, String rechnungId, DateTime? mininsts) + private static String GetMonatlicheRechnungPositionenSql(DateTime date, List rechnungIds, DateTime? mininsts) { String sql = @" @@ -331,6 +845,66 @@ c.DebitorNumber, ib.invoicenumber, c.CostCenter, c2s.Oid, +ib.InvoiceId, +ii.AmountTotal, + ii.ItemDescription, + ii.Notice, + ii.UnitCount, + ii.UnitDescription + from + person p + inner join customer c on c.personoid = p.oid + inner join supportconcept sc on sc.customeroid = c.oid + inner join costbearer2supportconcept c2s on c2s.supportconceptoid = sc.oid + inner join invoicebase ib on ib.costbearer2supportconceptoid = c2s.oid + inner join serviceinvoice si on si.invoicebaseoid = ib.oid + inner join serviceinvoiceperiod sip on sip.serviceinvoiceoid = si.oid + inner join invoiceitem ii on ii.serviceinvoiceperiodoid = sip.oid +WHERE ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodEnd` < ':Monat_End' and ib.IsActive = 1 +%rechnungIdFilter% +%instsFilter% +order by ib.invoicenumber +"; + + string idFilter = ""; + + if (rechnungIds != null && rechnungIds.Count > 0) + { + foreach (var id in rechnungIds) + { + if (idFilter.Length > 0) + { + idFilter += " OR "; + } + + idFilter += String.Format("(ib.InvoiceId = '{0}')", id); + } + + idFilter = String.Format(" AND ({0})", idFilter); + } + sql = sql.Replace("%rechnungIdFilter%", idFilter); + + string instsfilter = ""; + + if (mininsts.HasValue) + { + instsfilter = String.Format("AND ib.Insts >= '{0:yyyy-MM-dd}'", mininsts); + } + sql = sql.Replace("%instsFilter%", instsfilter); + return sql; + } + + private static String GetMonatlicheRechnungenSql(DateTime date, List rechnungIds, DateTime? mininsts) + { + + String sql = @" + select + sip.Claim, +c.DebitorNumber, + ib.InvoiceDate, + ib.invoicenumber, + c.CostCenter, +c2s.Oid, ib.InvoiceId from person p @@ -341,11 +915,28 @@ ib.InvoiceId inner join serviceinvoice si on si.invoicebaseoid = ib.oid inner join serviceinvoiceperiod sip on sip.serviceinvoiceoid = si.oid WHERE ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodEnd` < ':Monat_End' and ib.IsActive = 1 -AND ib.InvoiceId like '%bereich%' +%rechnungIdFilter% %instsFilter% order by ib.invoicenumber "; - sql = sql.Replace("%bereich%", "%" + rechnungId + "%"); + + string idFilter = ""; + + if (rechnungIds != null && rechnungIds.Count > 0) + { + foreach (var id in rechnungIds) + { + if (idFilter.Length > 0) + { + idFilter += " OR "; + } + + idFilter += String.Format("(ib.InvoiceId = '{0}')", id); + } + + idFilter = String.Format(" AND ({0})", idFilter); + } + sql = sql.Replace("%rechnungIdFilter%", idFilter); string instsfilter = ""; @@ -389,6 +980,38 @@ order by ib.invoicenumber return sql; } + private static String GetWstRechnungenSql(DateTime date, DateTime? minInsts) + { + //sb.AppendLine("Betrag;Gegenkonto;Rechnungsnummer;Belegfeld 2;Belegdatum;Konto;Kostenstelle;Buchungstext"); + + //sb.AppendLine("Debitorennummer,Rechnungsnr, Rechnungsdatum (monatsletzter des A),Umsatz,H,Konto,Kostenstelle,Buchungstext,0 ;Gegenkonto;Rechnungsnummer;Belegfeld 2;Belegdatum;Konto;Kostenstelle;Buchungstext"); + String sql = @" + select distinct + (select sum(sip.Claim) from serviceinvoiceperiod sip where sip.serviceinvoiceoid = si.oid), + ib.InvoiceDate, + ib.invoicenumber, + CONCAT(ib.RecipientOrganisation, ' - ', ib.RecipientPersonFirstName, ' ', ib.RecipientPersonLastName), +ib.RecipientOrganisationOid, +ib.InvoiceId, +si.Oid + from invoicebase ib + inner join serviceinvoice si on si.invoicebaseoid = ib.oid +WHERE ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodEnd` < ':Monat_End' and ib.IsActive = 1 +and InvoiceId = 'RechnungWst' +%instsFilter% +order by ib.invoicenumber +"; + + string instsfilter = ""; + + if (minInsts.HasValue) + { + instsfilter = String.Format("AND ib.Insts >= '{0:yyyy-MM-dd}'", minInsts); + } + sql = sql.Replace("%instsFilter%", instsfilter); + return sql; + } + public static DataTable ExecuteQuery(String sql, DateTime dt) { var newsql = sql; diff --git a/ReportImp/LebenshilfeFrankfurtOder/RechnungEinzelfallhilfe.Designer.cs b/ReportImp/LebenshilfeFrankfurtOder/RechnungEinzelfallhilfe.Designer.cs index ef4d72ab8..f3c75cfd0 100644 --- a/ReportImp/LebenshilfeFrankfurtOder/RechnungEinzelfallhilfe.Designer.cs +++ b/ReportImp/LebenshilfeFrankfurtOder/RechnungEinzelfallhilfe.Designer.cs @@ -550,10 +550,11 @@ namespace LebenshilfeFrankfurtOder // this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(499.9998F, 210F); this.xrLabel15.Name = "xrLabel15"; - this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel15.SizeF = new System.Drawing.SizeF(207.2103F, 20F); + this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 0, 0, 0, 100F); + this.xrLabel15.SizeF = new System.Drawing.SizeF(217.0003F, 20F); this.xrLabel15.StylePriority.UseFont = false; - this.xrLabel15.Text = "rabea.preuss@lebenshilfe-ffo.de"; + this.xrLabel15.StylePriority.UsePadding = false; + this.xrLabel15.Text = "mandy.roemer@lebenshilfe-ffo.de"; // // xrLabel14 // @@ -562,7 +563,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel14.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel14.StylePriority.UseFont = false; - this.xrLabel14.Text = "0335 280510 31"; + this.xrLabel14.Text = "0335 280510 19"; // // xrLabel12 // @@ -571,7 +572,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel12.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel12.StylePriority.UseFont = false; - this.xrLabel12.Text = "Rabea Preu"; + this.xrLabel12.Text = "Mandy Rmer"; // // xrLabel13 // @@ -1108,7 +1109,7 @@ namespace LebenshilfeFrankfurtOder this.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { this.ruleRateFactorNull}); - this.Margins = new System.Drawing.Printing.Margins(70, 45, 52, 80); + this.Margins = new System.Drawing.Printing.Margins(70, 30, 52, 80); this.PageHeight = 1169; this.PageWidth = 827; this.PaperKind = System.Drawing.Printing.PaperKind.A4; diff --git a/ReportImp/LebenshilfeFrankfurtOder/RechnungFud.Designer.cs b/ReportImp/LebenshilfeFrankfurtOder/RechnungFud.Designer.cs index d2feb8482..5133c9e83 100644 --- a/ReportImp/LebenshilfeFrankfurtOder/RechnungFud.Designer.cs +++ b/ReportImp/LebenshilfeFrankfurtOder/RechnungFud.Designer.cs @@ -550,10 +550,11 @@ namespace LebenshilfeFrankfurtOder // this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(499.9998F, 210F); this.xrLabel15.Name = "xrLabel15"; - this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel15.SizeF = new System.Drawing.SizeF(207.2103F, 20F); + this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 0, 0, 0, 100F); + this.xrLabel15.SizeF = new System.Drawing.SizeF(222.0001F, 20F); this.xrLabel15.StylePriority.UseFont = false; - this.xrLabel15.Text = "rabea.preuss@lebenshilfe-ffo.de"; + this.xrLabel15.StylePriority.UsePadding = false; + this.xrLabel15.Text = "mandy.roemer@lebenshilfe-ffo.de"; // // xrLabel14 // @@ -562,7 +563,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel14.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel14.StylePriority.UseFont = false; - this.xrLabel14.Text = "0335 280510 31"; + this.xrLabel14.Text = "0335 280510 19"; // // xrLabel12 // @@ -571,7 +572,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel12.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel12.StylePriority.UseFont = false; - this.xrLabel12.Text = "Rabea Preu"; + this.xrLabel12.Text = "Mandy Rmer"; // // xrLabel13 // @@ -1108,7 +1109,7 @@ namespace LebenshilfeFrankfurtOder this.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { this.ruleRateFactorNull}); - this.Margins = new System.Drawing.Printing.Margins(70, 45, 52, 80); + this.Margins = new System.Drawing.Printing.Margins(70, 35, 52, 80); this.PageHeight = 1169; this.PageWidth = 827; this.PaperKind = System.Drawing.Printing.PaperKind.A4; diff --git a/ReportImp/LebenshilfeFrankfurtOder/RechnungHort.Designer.cs b/ReportImp/LebenshilfeFrankfurtOder/RechnungHort.Designer.cs index 72bd80998..494b9b8ae 100644 --- a/ReportImp/LebenshilfeFrankfurtOder/RechnungHort.Designer.cs +++ b/ReportImp/LebenshilfeFrankfurtOder/RechnungHort.Designer.cs @@ -32,6 +32,7 @@ namespace LebenshilfeFrankfurtOder System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RechnungHort)); this.Detail = new DevExpress.XtraReports.UI.DetailBand(); this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand(); + this.xrLabel30 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel11 = new DevExpress.XtraReports.UI.XRLabel(); @@ -147,7 +148,6 @@ namespace LebenshilfeFrankfurtOder this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell(); this.ReportFooter = new DevExpress.XtraReports.UI.ReportFooterBand(); this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel30 = new DevExpress.XtraReports.UI.XRLabel(); ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); @@ -207,6 +207,17 @@ namespace LebenshilfeFrankfurtOder this.ReportHeader.Name = "ReportHeader"; this.ReportHeader.StylePriority.UseFont = false; // + // xrLabel30 + // + this.xrLabel30.CanGrow = false; + this.xrLabel30.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrLabel30.LocationFloat = new DevExpress.Utils.PointFloat(175F, 562.361F); + this.xrLabel30.Name = "xrLabel30"; + this.xrLabel30.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel30.SizeF = new System.Drawing.SizeF(521.499F, 19.99994F); + this.xrLabel30.StylePriority.UseFont = false; + this.xrLabel30.Text = "Ferien: siehe Anwesenheitsliste"; + // // xrLabel7 // this.xrLabel7.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -265,7 +276,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel12.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel12.StylePriority.UseFont = false; - this.xrLabel12.Text = "Rabea Preu"; + this.xrLabel12.Text = "Mandy Rmer"; // // xrLabel14 // @@ -274,16 +285,17 @@ namespace LebenshilfeFrankfurtOder this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel14.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel14.StylePriority.UseFont = false; - this.xrLabel14.Text = "0335 280510 31"; + this.xrLabel14.Text = "0335 280510 19"; // // xrLabel15 // - this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(500F, 214.8611F); + this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(500.0002F, 214.8611F); this.xrLabel15.Name = "xrLabel15"; - this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel15.SizeF = new System.Drawing.SizeF(207.2103F, 20F); + this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 0, 0, 0, 100F); + this.xrLabel15.SizeF = new System.Drawing.SizeF(222.3145F, 19.99998F); this.xrLabel15.StylePriority.UseFont = false; - this.xrLabel15.Text = "rabea.preuss@lebenshilfe-ffo.de"; + this.xrLabel15.StylePriority.UsePadding = false; + this.xrLabel15.Text = "mandy.roemer@lebenshilfe-ffo.de"; // // xrLabel16 // @@ -1432,17 +1444,6 @@ namespace LebenshilfeFrankfurtOder this.xrLabel2.StylePriority.UseFont = false; this.xrLabel2.Text = "Bitte berweisen Sie den Rechnungsbetrag unter Angabe der Kunden-Nr., der Rechnun" + "gs-Nr. und des\r\nVerwendungszwecks auf das unten angegebene Konto."; - // - // xrLabel30 - // - this.xrLabel30.CanGrow = false; - this.xrLabel30.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrLabel30.LocationFloat = new DevExpress.Utils.PointFloat(175F, 562.361F); - this.xrLabel30.Name = "xrLabel30"; - this.xrLabel30.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel30.SizeF = new System.Drawing.SizeF(521.499F, 19.99994F); - this.xrLabel30.StylePriority.UseFont = false; - this.xrLabel30.Text = "Ferien: siehe Anwesenheitsliste"; // // RechnungHort // @@ -1458,7 +1459,7 @@ namespace LebenshilfeFrankfurtOder this.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { this.ruleRateFactorNull}); - this.Margins = new System.Drawing.Printing.Margins(70, 45, 52, 80); + this.Margins = new System.Drawing.Printing.Margins(70, 30, 52, 80); this.PageHeight = 1169; this.PageWidth = 827; this.PaperKind = System.Drawing.Printing.PaperKind.A4; diff --git a/ReportImp/LebenshilfeFrankfurtOder/RechnungHortPrivat.Designer.cs b/ReportImp/LebenshilfeFrankfurtOder/RechnungHortPrivat.Designer.cs index 0950d8bad..c4f5d6bfb 100644 --- a/ReportImp/LebenshilfeFrankfurtOder/RechnungHortPrivat.Designer.cs +++ b/ReportImp/LebenshilfeFrankfurtOder/RechnungHortPrivat.Designer.cs @@ -56,13 +56,6 @@ namespace LebenshilfeFrankfurtOder this.xrLabel26 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel25 = new DevExpress.XtraReports.UI.XRLabel(); this.lblKlienten = new DevExpress.XtraReports.UI.XRLabel(); - this.xrTable3 = new DevExpress.XtraReports.UI.XRTable(); - this.xrTableRow10 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell37 = new DevExpress.XtraReports.UI.XRTableCell(); - this.cellAnzahl5 = new DevExpress.XtraReports.UI.XRTableCell(); - this.cellEinheit5 = new DevExpress.XtraReports.UI.XRTableCell(); - this.cellBetrag5 = new DevExpress.XtraReports.UI.XRTableCell(); - this.cellGesamt5 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrLabel38 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel32 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel33 = new DevExpress.XtraReports.UI.XRLabel(); @@ -83,6 +76,13 @@ namespace LebenshilfeFrankfurtOder this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel(); this.xrPictureBox1 = new DevExpress.XtraReports.UI.XRPictureBox(); this.lblAdresse = new DevExpress.XtraReports.UI.XRLabel(); + this.xrTable3 = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRow10 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell37 = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellAnzahl5 = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellEinheit5 = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellBetrag5 = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellGesamt5 = new DevExpress.XtraReports.UI.XRTableCell(); this.ruleRateFactorNull = new DevExpress.XtraReports.UI.FormattingRule(); this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand(); this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand(); @@ -125,8 +125,8 @@ namespace LebenshilfeFrankfurtOder this.Detail1 = new DevExpress.XtraReports.UI.DetailBand(); this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand(); this.Detail2 = new DevExpress.XtraReports.UI.DetailBand(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); @@ -239,7 +239,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel12.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel12.StylePriority.UseFont = false; - this.xrLabel12.Text = "Rabea Preu"; + this.xrLabel12.Text = "Mandy Rmer"; // // xrLabel14 // @@ -248,16 +248,17 @@ namespace LebenshilfeFrankfurtOder this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel14.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel14.StylePriority.UseFont = false; - this.xrLabel14.Text = "0335 280510 31"; + this.xrLabel14.Text = "0335 280510 19"; // // xrLabel15 // - this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(500F, 214.8611F); + this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(500.0002F, 214.8611F); this.xrLabel15.Name = "xrLabel15"; - this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel15.SizeF = new System.Drawing.SizeF(207.2103F, 20F); + this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 0, 0, 0, 100F); + this.xrLabel15.SizeF = new System.Drawing.SizeF(220.9996F, 19.99998F); this.xrLabel15.StylePriority.UseFont = false; - this.xrLabel15.Text = "rabea.preuss@lebenshilfe-ffo.de"; + this.xrLabel15.StylePriority.UsePadding = false; + this.xrLabel15.Text = "mandy.roemer@lebenshilfe-ffo.de"; // // xrLabel16 // @@ -467,80 +468,6 @@ namespace LebenshilfeFrankfurtOder this.lblKlienten.StylePriority.UseFont = false; this.lblKlienten.Text = "Klienten:"; // - // xrTable3 - // - this.xrTable3.Font = new System.Drawing.Font("Arial", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0.0002543131F, 0F); - this.xrTable3.Name = "xrTable3"; - this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow10}); - this.xrTable3.SizeF = new System.Drawing.SizeF(696.5F, 20F); - this.xrTable3.StylePriority.UseBackColor = false; - this.xrTable3.StylePriority.UseBorderColor = false; - this.xrTable3.StylePriority.UseFont = false; - this.xrTable3.StylePriority.UsePadding = false; - // - // xrTableRow10 - // - this.xrTableRow10.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell37, - this.cellAnzahl5, - this.cellEinheit5, - this.cellBetrag5, - this.cellGesamt5}); - this.xrTableRow10.Name = "xrTableRow10"; - this.xrTableRow10.Weight = 0.10000000000000003D; - // - // xrTableCell37 - // - this.xrTableCell37.Borders = DevExpress.XtraPrinting.BorderSide.Left; - this.xrTableCell37.Name = "xrTableCell37"; - this.xrTableCell37.StylePriority.UseBorders = false; - this.xrTableCell37.StylePriority.UseTextAlignment = false; - this.xrTableCell37.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - this.xrTableCell37.Weight = 0.46153846153846145D; - // - // cellAnzahl5 - // - this.cellAnzahl5.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.cellAnzahl5.Name = "cellAnzahl5"; - this.cellAnzahl5.StylePriority.UseBorders = false; - this.cellAnzahl5.StylePriority.UseTextAlignment = false; - this.cellAnzahl5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.cellAnzahl5.Weight = 0.099999999999999978D; - // - // cellEinheit5 - // - this.cellEinheit5.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.cellEinheit5.Name = "cellEinheit5"; - this.cellEinheit5.StylePriority.UseBorders = false; - this.cellEinheit5.StylePriority.UseTextAlignment = false; - this.cellEinheit5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.cellEinheit5.Weight = 0.1538461538461538D; - // - // cellBetrag5 - // - this.cellBetrag5.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.cellBetrag5.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.AmountPerUnit", "{0:c}")}); - this.cellBetrag5.Name = "cellBetrag5"; - this.cellBetrag5.StylePriority.UseBorders = false; - this.cellBetrag5.StylePriority.UseTextAlignment = false; - this.cellBetrag5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.cellBetrag5.Weight = 0.14615384615384613D; - // - // cellGesamt5 - // - this.cellGesamt5.Borders = DevExpress.XtraPrinting.BorderSide.Right; - this.cellGesamt5.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { - new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.NetAmount", "{0:c}")}); - this.cellGesamt5.Name = "cellGesamt5"; - this.cellGesamt5.StylePriority.UseBorders = false; - this.cellGesamt5.StylePriority.UseTextAlignment = false; - this.cellGesamt5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.cellGesamt5.Weight = 0.20999999999999996D; - // // xrLabel38 // this.xrLabel38.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -773,6 +700,80 @@ namespace LebenshilfeFrankfurtOder this.lblAdresse.StylePriority.UseFont = false; this.lblAdresse.Text = "Anschrift"; // + // xrTable3 + // + this.xrTable3.Font = new System.Drawing.Font("Arial", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0.0002543131F, 0F); + this.xrTable3.Name = "xrTable3"; + this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRow10}); + this.xrTable3.SizeF = new System.Drawing.SizeF(696.5F, 20F); + this.xrTable3.StylePriority.UseBackColor = false; + this.xrTable3.StylePriority.UseBorderColor = false; + this.xrTable3.StylePriority.UseFont = false; + this.xrTable3.StylePriority.UsePadding = false; + // + // xrTableRow10 + // + this.xrTableRow10.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell37, + this.cellAnzahl5, + this.cellEinheit5, + this.cellBetrag5, + this.cellGesamt5}); + this.xrTableRow10.Name = "xrTableRow10"; + this.xrTableRow10.Weight = 0.10000000000000003D; + // + // xrTableCell37 + // + this.xrTableCell37.Borders = DevExpress.XtraPrinting.BorderSide.Left; + this.xrTableCell37.Name = "xrTableCell37"; + this.xrTableCell37.StylePriority.UseBorders = false; + this.xrTableCell37.StylePriority.UseTextAlignment = false; + this.xrTableCell37.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell37.Weight = 0.46153846153846145D; + // + // cellAnzahl5 + // + this.cellAnzahl5.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.cellAnzahl5.Name = "cellAnzahl5"; + this.cellAnzahl5.StylePriority.UseBorders = false; + this.cellAnzahl5.StylePriority.UseTextAlignment = false; + this.cellAnzahl5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.cellAnzahl5.Weight = 0.099999999999999978D; + // + // cellEinheit5 + // + this.cellEinheit5.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.cellEinheit5.Name = "cellEinheit5"; + this.cellEinheit5.StylePriority.UseBorders = false; + this.cellEinheit5.StylePriority.UseTextAlignment = false; + this.cellEinheit5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.cellEinheit5.Weight = 0.1538461538461538D; + // + // cellBetrag5 + // + this.cellBetrag5.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.cellBetrag5.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.AmountPerUnit", "{0:c}")}); + this.cellBetrag5.Name = "cellBetrag5"; + this.cellBetrag5.StylePriority.UseBorders = false; + this.cellBetrag5.StylePriority.UseTextAlignment = false; + this.cellBetrag5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.cellBetrag5.Weight = 0.14615384615384613D; + // + // cellGesamt5 + // + this.cellGesamt5.Borders = DevExpress.XtraPrinting.BorderSide.Right; + this.cellGesamt5.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "ServiceInvoicePeriods.ServiceInvoiceItems.NetAmount", "{0:c}")}); + this.cellGesamt5.Name = "cellGesamt5"; + this.cellGesamt5.StylePriority.UseBorders = false; + this.cellGesamt5.StylePriority.UseTextAlignment = false; + this.cellGesamt5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; + this.cellGesamt5.Weight = 0.20999999999999996D; + // // ruleRateFactorNull // this.ruleRateFactorNull.Condition = "[RateFactorText2] == ?"; @@ -1195,13 +1196,13 @@ namespace LebenshilfeFrankfurtOder this.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { this.ruleRateFactorNull}); - this.Margins = new System.Drawing.Printing.Margins(70, 45, 52, 80); + this.Margins = new System.Drawing.Printing.Margins(70, 36, 52, 80); this.PageHeight = 1169; this.PageWidth = 827; this.PaperKind = System.Drawing.Printing.PaperKind.A4; this.Version = "17.1"; - ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); diff --git a/ReportImp/LebenshilfeFrankfurtOder/RechnungTagesstruktur.Designer.cs b/ReportImp/LebenshilfeFrankfurtOder/RechnungTagesstruktur.Designer.cs index aeb1eb88b..4c28c5933 100644 --- a/ReportImp/LebenshilfeFrankfurtOder/RechnungTagesstruktur.Designer.cs +++ b/ReportImp/LebenshilfeFrankfurtOder/RechnungTagesstruktur.Designer.cs @@ -577,10 +577,11 @@ namespace LebenshilfeFrankfurtOder // this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(499.9998F, 210F); this.xrLabel15.Name = "xrLabel15"; - this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel15.SizeF = new System.Drawing.SizeF(207.2103F, 20F); + this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 0, 0, 0, 100F); + this.xrLabel15.SizeF = new System.Drawing.SizeF(219.0002F, 20F); this.xrLabel15.StylePriority.UseFont = false; - this.xrLabel15.Text = "rabea.preuss@lebenshilfe-ffo.de"; + this.xrLabel15.StylePriority.UsePadding = false; + this.xrLabel15.Text = "mandy.roemer@lebenshilfe-ffo.de"; // // xrLabel14 // @@ -589,7 +590,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel14.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel14.StylePriority.UseFont = false; - this.xrLabel14.Text = "0335 280510 31"; + this.xrLabel14.Text = "0335 280510 19"; // // xrLabel12 // @@ -598,7 +599,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel12.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel12.StylePriority.UseFont = false; - this.xrLabel12.Text = "Rabea Preu"; + this.xrLabel12.Text = "Mandy Rmer"; // // xrLabel13 // @@ -1169,7 +1170,7 @@ namespace LebenshilfeFrankfurtOder this.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { this.ruleRateFactorNull}); - this.Margins = new System.Drawing.Printing.Margins(70, 45, 52, 80); + this.Margins = new System.Drawing.Printing.Margins(70, 38, 52, 80); this.PageHeight = 1169; this.PageWidth = 827; this.PaperKind = System.Drawing.Printing.PaperKind.A4; diff --git a/ReportImp/LebenshilfeFrankfurtOder/RechnungTagesstrukturVerpflegung.Designer.cs b/ReportImp/LebenshilfeFrankfurtOder/RechnungTagesstrukturVerpflegung.Designer.cs index 25244710d..282959f0b 100644 --- a/ReportImp/LebenshilfeFrankfurtOder/RechnungTagesstrukturVerpflegung.Designer.cs +++ b/ReportImp/LebenshilfeFrankfurtOder/RechnungTagesstrukturVerpflegung.Designer.cs @@ -534,9 +534,9 @@ namespace LebenshilfeFrankfurtOder this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(499.9998F, 210F); this.xrLabel15.Name = "xrLabel15"; this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel15.SizeF = new System.Drawing.SizeF(207.2103F, 20F); + this.xrLabel15.SizeF = new System.Drawing.SizeF(222.0001F, 20F); this.xrLabel15.StylePriority.UseFont = false; - this.xrLabel15.Text = "rabea.preuss@lebenshilfe-ffo.de"; + this.xrLabel15.Text = "mandy.roemer@lebenshilfe-ffo.de"; // // xrLabel14 // @@ -545,7 +545,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel14.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel14.StylePriority.UseFont = false; - this.xrLabel14.Text = "0335 280510 31"; + this.xrLabel14.Text = "0335 280510 19"; // // xrLabel12 // @@ -554,7 +554,7 @@ namespace LebenshilfeFrankfurtOder this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel12.SizeF = new System.Drawing.SizeF(207.2103F, 20F); this.xrLabel12.StylePriority.UseFont = false; - this.xrLabel12.Text = "Rabea Preu"; + this.xrLabel12.Text = "Mandy Rmer"; // // xrLabel13 // @@ -1070,7 +1070,7 @@ namespace LebenshilfeFrankfurtOder this.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { this.ruleRateFactorNull}); - this.Margins = new System.Drawing.Printing.Margins(70, 45, 52, 80); + this.Margins = new System.Drawing.Printing.Margins(70, 35, 52, 80); this.PageHeight = 1169; this.PageWidth = 827; this.PaperKind = System.Drawing.Printing.PaperKind.A4; diff --git a/ReportImp/PraxisPusteblume/IfsRechnungBezirk.cs b/ReportImp/PraxisPusteblume/IfsRechnungBezirk.cs index 1d5613fb4..57fb96136 100644 --- a/ReportImp/PraxisPusteblume/IfsRechnungBezirk.cs +++ b/ReportImp/PraxisPusteblume/IfsRechnungBezirk.cs @@ -194,6 +194,16 @@ namespace PraxisPusteblume preisTeam = 11.38m; preisGruppe = 34.05m; } + if (pRO.AccountingPeriodStart >= new DateTime(2021, 6, 1)) + { + preisTeam = 11.63m; + } + + if (DateTime.Now >= new DateTime(2021, 8, 17)) + { + preisInvest = 6.86m; + } + var cat = DAOFactory.SearchDAO.FindServiceCategoryByName("IFS - Psychologie / Heilpdagogik"); if (cat != null) { diff --git a/ReportImp/PraxisPusteblume/IfsSammelRechnung.cs b/ReportImp/PraxisPusteblume/IfsSammelRechnung.cs index 4813df021..8c8a3e630 100644 --- a/ReportImp/PraxisPusteblume/IfsSammelRechnung.cs +++ b/ReportImp/PraxisPusteblume/IfsSammelRechnung.cs @@ -266,6 +266,15 @@ namespace PraxisPusteblume preisTeam = 11.38m; preisGruppe = 34.05m; } + if (pRO.AccountingPeriodStart >= new DateTime(2021, 6, 1)) + { + preisTeam = 11.63m; + } + + if (DateTime.Now >= new DateTime(2021, 8, 17)) + { + preisInvest = 6.86m; + } var cat = DAOFactory.SearchDAO.FindServiceCategoryByName("IFS - Psychologie / Heilpdagogik"); if (cat != null) { diff --git a/ReportImp/PraxisPusteblume/Invoicing/IFSInvoiceCreationBezirk.cs b/ReportImp/PraxisPusteblume/Invoicing/IFSInvoiceCreationBezirk.cs index 18543b8df..fb129d9b3 100644 --- a/ReportImp/PraxisPusteblume/Invoicing/IFSInvoiceCreationBezirk.cs +++ b/ReportImp/PraxisPusteblume/Invoicing/IFSInvoiceCreationBezirk.cs @@ -144,6 +144,10 @@ namespace PraxisPusteblume.Invoicing { betrag = 11.38m; } + if (invoicePeriod.StartDateTime >= new DateTime(2021, 6, 1)) + { + betrag = 11.63m; + } var invoiceItem = new InvoiceItem(); invoiceItem.AmountPerUnit = betrag; invoiceItem.UnitCount = 1; @@ -165,6 +169,10 @@ namespace PraxisPusteblume.Invoicing { decimal betrag = 4.84m; + if (DateTime.Now >= new DateTime(2021, 8, 17)) + { + betrag = 6.86m; + } var invoiceItem = new InvoiceItem(); invoiceItem.AmountPerUnit = betrag; diff --git a/ReportImp/PraxisPusteblume/Invoicing/IFSSammelInvoiceCreation.cs b/ReportImp/PraxisPusteblume/Invoicing/IFSSammelInvoiceCreation.cs index 1764b448e..9e4fe2aa2 100644 --- a/ReportImp/PraxisPusteblume/Invoicing/IFSSammelInvoiceCreation.cs +++ b/ReportImp/PraxisPusteblume/Invoicing/IFSSammelInvoiceCreation.cs @@ -159,6 +159,11 @@ namespace PraxisPusteblume.Invoicing { betrag = 11.38m; } + if (invoicePeriod.StartDateTime >= new DateTime(2021, 6, 1)) + { + betrag = 11.63m; + } + var invoiceItem = new InvoiceItem(); invoiceItem.AmountPerUnit = betrag; invoiceItem.UnitCount = 1; @@ -180,6 +185,10 @@ namespace PraxisPusteblume.Invoicing { decimal betrag = 4.84m; + if (DateTime.Now >= new DateTime(2021, 8, 17)) + { + betrag = 6.86m; + } var invoiceItem = new InvoiceItem(); invoiceItem.AmountPerUnit = betrag; diff --git a/ReportImp/ProfEggersStiftung/Invoicing/CustomInvoiceCreation.cs b/ReportImp/ProfEggersStiftung/Invoicing/CustomInvoiceCreation.cs index 445a3f472..b535bbc98 100644 --- a/ReportImp/ProfEggersStiftung/Invoicing/CustomInvoiceCreation.cs +++ b/ReportImp/ProfEggersStiftung/Invoicing/CustomInvoiceCreation.cs @@ -4,9 +4,12 @@ using System.Linq; using System.Text; using BeWo.Data.Access; using BeWo.Data.Entities; +using BeWo.Service.DCEntityMapper; using BeWo.Service.Invoicing; +using BeWo.Service.Plugins; using BS.Shared.Core; using BS.Shared.DataContracts; +using BS.Shared.Extensions; using BS.Shared.Services; namespace ProfEggersStiftung.Invoicing @@ -14,7 +17,46 @@ namespace ProfEggersStiftung.Invoicing public class CustomInvoiceCreation : InvoiceCreation { + public override void SetInvoiceItems(ServiceInvoice invoice, + ServiceInvoicePeriod serviceInvoicePeriod, + SupportConceptApprovalPeriodDC supportConceptApprovalPeriod, + CostBearer2SupportConcept cb2sc, + DateTimeSpan invoicePeriod, + List serviceRecords) + { + Calculations calc = PluginLoader.FindClass(_SpecificID) ?? Calculations.GetInstance(_SpecificID); + + List serviceRecordsInPeriod = serviceRecords.Where( + i => + { + bool valid = i.Start.Value.InBetween(serviceInvoicePeriod.Start.Value, + serviceInvoicePeriod.End.Value, true); + + return valid; + }).ToList(); + + if (serviceRecordsInPeriod.Count > 0) + { + + + var itemList = CreateInvoiceItems(serviceRecordsInPeriod, invoicePeriod, serviceInvoicePeriod.SupportConceptApprovalPeriod, calc); + serviceInvoicePeriod.InvoiceItemList.AddRange(itemList); + } + + } + + public override InvoiceItem CreateInvoiceItem(ServiceRecordDC iServiceRecord, SupportConceptApprovalPeriod scap, Calculations calc) + { + var ii = base.CreateInvoiceItem(iServiceRecord, scap, calc); + if (!String.IsNullOrEmpty(ii.ItemDescription) && ii.ItemDescription.Contains("Terminabsage")) + { + ii.RateFactor = null; + + ii.AmountTotal = (ii.UnitCount ?? 0) * (ii.AmountPerUnit ?? 0); + } + return ii; + } public override IList CreateSummaryInvoiceItems(IList itemList, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc) diff --git a/ReportImp/SeWo/ServicesOverviewReport.Designer.cs b/ReportImp/SeWo/ServicesOverviewReport.Designer.cs index 18c85030e..1367fbaec 100644 --- a/ReportImp/SeWo/ServicesOverviewReport.Designer.cs +++ b/ReportImp/SeWo/ServicesOverviewReport.Designer.cs @@ -465,7 +465,7 @@ namespace BeWo.SeWo this.xrLabel5.SizeF = new System.Drawing.SizeF(120.0035F, 25F); this.xrLabel5.StylePriority.UseBorders = false; this.xrLabel5.StylePriority.UseFont = false; - this.xrLabel5.Text = "Ort / Datum"; + this.xrLabel5.Text = "Datum"; // // xrTable1 // diff --git a/Service/Plugins/PluginLoader.cs b/Service/Plugins/PluginLoader.cs index 2f23066e9..523200ea3 100644 --- a/Service/Plugins/PluginLoader.cs +++ b/Service/Plugins/PluginLoader.cs @@ -49,7 +49,7 @@ namespace BeWo.Service.Plugins //t = "2499262621"; // HPH Bersenbrück //t = "4950382346"; // Holsinger //t = "5973016645"; // Verein Lebensgestaltung Hanau - //t = "7375324044"; // Diakonie KK Kleve + t = "7375324044"; // Diakonie KK Kleve //t = "1441747891"; // BeWo Mobil Köln //t = "5120047701"; // Trialog //t = "3629696651"; // Soziale Dienste Niederrhein @@ -91,13 +91,13 @@ namespace BeWo.Service.Plugins //t = "5700328131"; // Betreutes Wohnen St. Ludgerus Essen-Werden //t = "1907984777"; // Soziale Dienste Katrin Schmidt //t = "9033246467"; // SKM Menden - //t = "9290510010"; // Soziale Dienste Schilling (ehemals BeWo Schilling) + //t = "9290510010"; // Soziale Dienste Schilling (ehemals BeWo Schilling) //t = "5251218094"; // KOMO e.V. //t = "3529871747"; // Vivat gemeinnützige GmbH //t = "8561513464"; // Caritasverband Wuppertal/Solingen //t = "2727001973"; // SD Julia Schönberg //t = "5653806613"; // Feid und Kollegen - t = "3830114427"; // FiZ Familie im Zentrum Hof + //t = "3830114427"; // FiZ Familie im Zentrum Hof //t = "7138297573"; // Tagwerk betreutes wohnen //t = "1008896531"; // BeWo Auxilio //t = "9383760246"; // Die Kette @@ -179,12 +179,12 @@ namespace BeWo.Service.Plugins //t = "2331203795"; // BeWo für dich //t = "5426234256"; // SKM Leverkusen //t = "4137042939"; // MLG Lebengestalten / Haus Müllestumpe - t = "5260936181"; // LORI + //t = "5260936181"; // LORI //t = "1931553444"; // HIBA //t = "7185338722"; // BeWo Walz & Paiva //t = "3196643272"; // Betreutes Wohnen Lisa Wöll //t = "3432911735"; // Caritas Günzburg - Neu Ulm - t = "2591682148"; // Humanitas + //t = "2591682148"; // Humanitas //t = "9805564204"; // LeWo Aachen //t = "7215356798"; // Triathlon //t = "3664416736"; // LH Mönchengladbach @@ -256,7 +256,7 @@ namespace BeWo.Service.Plugins //t = "1558685648"; // KIMM //t = "3460972350"; // Caritas Kleve I //t = "2623845876"; // Passgenau Hildesheim - //t = "4368361336"; // Kompass BeWo Wesel + t = "4368361336"; // Kompass BeWo Wesel //t = "3257905806"; // Diakonisches Werk Herne //t = "2535794597"; // Mobilo Ambulant //t = "7114701269"; // Die Brücke Hilfe und Halt @@ -271,7 +271,7 @@ namespace BeWo.Service.Plugins //t = "8242644560"; // Bewolonia - Fr. Sultan Schulz //t = "4817284046"; // Verein für Sozialmedizin Stade e.V. //t = "6323001211"; // ASB Faßbacher Hof gGmbH - t = "9389386079"; // VARO Sozialagentur + //t = "9389386079"; // VARO Sozialagentur //t = "7951718431"; // Ambulant Betreutes Wohnen Astrid Pulm //t = "5850903700"; // Alzey Teilhabe //t = "5929601293"; // Lebenshilfe Duisburg Frühförderung (Projekt heißt LebenshilfeDuisburgAtz) @@ -284,7 +284,7 @@ namespace BeWo.Service.Plugins //t = "4820371076"; // Zuhause Wohnen Iris Thimm //t = "1078667960"; // FAM Rhein-Sieg Gbr //t = "9388871209"; // Sozialwerk Aachener Christen e.V. - t = "1566251835"; // Sicherleben Michael Voß + //t = "1566251835"; // Sicherleben Michael Voß return t; #else From 3498680a06cbd8737f5efc3a6aefb71a7ba79c78 Mon Sep 17 00:00:00 2001 From: Alexandra Date: Tue, 17 Aug 2021 15:30:54 +0200 Subject: [PATCH 02/15] =?UTF-8?q?Mit=20=C3=A4nderbarem=20Preis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/View/Detail/PreisView.xaml | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/BeWo/View/Detail/PreisView.xaml b/BeWo/View/Detail/PreisView.xaml index f1a15846b..8b952fd83 100644 --- a/BeWo/View/Detail/PreisView.xaml +++ b/BeWo/View/Detail/PreisView.xaml @@ -12,27 +12,25 @@ - - - - + + - + - - + + - - + + - + From 0b34ccb9fcf2bfeb6f182890191b47c95f78898a Mon Sep 17 00:00:00 2001 From: Alexandra Date: Tue, 17 Aug 2021 15:31:02 +0200 Subject: [PATCH 03/15] =?UTF-8?q?Mit=20=C3=A4nderbarem=20Preis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/View/Detail/PreisView.xaml.cs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/BeWo/View/Detail/PreisView.xaml.cs b/BeWo/View/Detail/PreisView.xaml.cs index 53dd07199..d4141740a 100644 --- a/BeWo/View/Detail/PreisView.xaml.cs +++ b/BeWo/View/Detail/PreisView.xaml.cs @@ -38,7 +38,6 @@ namespace BeWo.View.Detail get { return "Preise"; } } - // TODO internal override DependencyObject ValidationOnSaveRootElement { get { return button_addPreis; } @@ -85,7 +84,8 @@ namespace BeWo.View.Detail private void ReloadViewModel() { - VMFactory.CreatePreisListVMAsync(r => this.Dispatch(delegate { ViewModel = r; })); + //Cache.GetInstance().ClearServiceCategoryDescriptions(); + VMFactory.CreatePreisListVMAsync(r => this.Dispatch(delegate { ViewModel = r; })); } private void Button_addPreis_Click(object sender, RoutedEventArgs e) @@ -96,6 +96,22 @@ namespace BeWo.View.Detail } } + private void PART_Editor_Click(object sender, RoutedEventArgs e) + { + RowData data = DatagridRegions.View.FocusedRowData; + + if (data != null && data.RowHandle != null) + { + var vm = DatagridRegions.GetRow(data.RowHandle.Value) as PreisVM; + + if (vm != null) + { + ViewModel.EditVM = vm; + popup_costrateperiods.IsOpen = true; + } + } + } + private void button_edit_Click(object sender, RoutedEventArgs e) { popup_costrateperiods.IsOpen = false; From 939ed275bf1ac162af74a15a8a9213a7106021f3 Mon Sep 17 00:00:00 2001 From: Alexandra Date: Tue, 17 Aug 2021 15:31:19 +0200 Subject: [PATCH 04/15] =?UTF-8?q?Mit=20=C3=A4nderbarem=20Preis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/ViewModel/PreisVM.cs | 184 +++++++++++++++++++++++++++++++++++--- 1 file changed, 170 insertions(+), 14 deletions(-) diff --git a/BeWo/ViewModel/PreisVM.cs b/BeWo/ViewModel/PreisVM.cs index 8e5f5f2f0..0cbc13e1e 100644 --- a/BeWo/ViewModel/PreisVM.cs +++ b/BeWo/ViewModel/PreisVM.cs @@ -1,10 +1,12 @@ using BS.Shared; +using BS.Shared.Core; using BS.Shared.DataContracts; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; -using System.Text; -using System.Threading.Tasks; +using BeWo.Validation; +using BeWo.ViewModel.ListViewModel; namespace BeWo.ViewModel { @@ -16,6 +18,26 @@ namespace BeWo.ViewModel private SystemEntryID? _PreisSystemEntryID; private string _Name; private decimal? _Betrag; + public static string PropertyName_BillableAmount = "BillableAmount"; + + public static string PropertyName_CostRatePeriods = "CostRatePeriods"; + + public static string PropertyName_CurrentAmount = "CurrentAmount"; + + public static string PropertyName_IsDefault = "IsDefault"; + + public static string PropertyName_DoNotCheckOverlapping = "DoNotCheckOverlapping"; + + private bool _IsDeleteable = true; + + private decimal _BillableAmount; + + private bool _IsDefault; + + private bool _DoNotCheckOverlapping; + + private CostRatePeriodListVM _CostRatePeriods; + public PreisVM(PreisDC preisDC) : base(preisDC, preisDC.PreisOid == null) { } @@ -89,24 +111,158 @@ namespace BeWo.ViewModel } } + public bool IsDeleteable + { + get { return _IsDeleteable; } + } + + public decimal BillableAmount + { + get { return _BillableAmount; } + + set + { + if (AreDifferent(_BillableAmount, value)) + { + _BillableAmount = value; + StoreDirtyInformation(AreDifferent(DataContract.BillableAmount, value), PropertyName_BillableAmount); + FirePropertyChanged(PropertyName_BillableAmount); + } + } + } + + public CostRatePeriodListVM CostRatePeriods + { + get { return _CostRatePeriods; } + + set + { + if (AreDifferent(_CostRatePeriods, value)) + { + _CostRatePeriods = value; + if ( _CostRatePeriods != null && _CostRatePeriods.VMList.Count > 0) + FirePropertyChanged(PropertyName_CostRatePeriods); + } + } + } + + public bool IsDefault + { + get { return this._IsDefault; } + + set + { + if (this.AreDifferent(this._IsDefault, value)) + { + this._IsDefault = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IsDefault, value), PropertyName_IsDefault); + this.FirePropertyChanged(PropertyName_IsDefault); + } + } + } + + public bool DoNotCheckOverlapping + { + get { return this._DoNotCheckOverlapping; } + + set + { + if (this.AreDifferent(this._DoNotCheckOverlapping, value)) + { + this._DoNotCheckOverlapping = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IsDefault, value), PropertyName_DoNotCheckOverlapping); + this.FirePropertyChanged(PropertyName_DoNotCheckOverlapping); + } + } + } + + public CostRatePeriodVM CurrentAmount + { + get { return CostRatePeriods.GetCurrentlyValidRate(CostRatePeriodType.AmountOfMoney); } + } + + public override bool IsDirty + { + get + { + if (_CostRatePeriods == null) + { + return false; + } + + return base.IsDirty || _CostRatePeriods.IsDirty; + } + } + protected override void InitByDataContract(PreisDC bDataContract) { - _PreisOid = bDataContract.PreisOid; - _PreisVersion = bDataContract.PreisVersion; - _PreisSystemEntryID = bDataContract.PreisSystemEntryID; - Name = bDataContract.Name; - Betrag = bDataContract.Betrag; - PreisInsTs = bDataContract.PreisInsTs; + if (!IsNew) + { + _IsDeleteable = !bDataContract.IsSystemEntry; + _BillableAmount = bDataContract.BillableAmount; + _IsDefault = bDataContract.IsDefault; + _DoNotCheckOverlapping = bDataContract.DoNotCheckOverlapping; + _PreisOid = bDataContract.PreisOid; + _PreisVersion = bDataContract.PreisVersion; + _PreisSystemEntryID = bDataContract.PreisSystemEntryID; + Name = bDataContract.Name; + Betrag = bDataContract.Betrag; + PreisInsTs = bDataContract.PreisInsTs; + } + + if (bDataContract.CostRatePeriods == null) + { + bDataContract.CostRatePeriods = new List(); + } + + Utils.GetAllEnumValues().ToList().ForEach( + t => + { + if (t == CostRatePeriodType.AmountOfMoney && !bDataContract.CostRatePeriods.Exists(i => i.CostRateType == t)) + { + bDataContract.CostRatePeriods.Add( + new CostRatePeriodDC + { + CostRateType = t + }); + } + }); + + _CostRatePeriods = new CostRatePeriodListVM(bDataContract.CostRatePeriods); + + _CostRatePeriods.VMList.ListChanged += (s, e) => + { + if (e.ListChangedType != ListChangedType.ItemChanged) + { + FirePropertyChanged(PropertyName_CostRatePeriods); + + } + FirePropertyChanged(PropertyName_CurrentAmount); + }; + } protected override PreisDC MapToDataContract(PreisDC bDataContract, bool doCommit) { - bDataContract.PreisOid = _PreisOid; - bDataContract.PreisVersion = _PreisVersion; - bDataContract.PreisSystemEntryID = _PreisSystemEntryID; - bDataContract.Name = _Name; - bDataContract.Betrag = _Betrag; - bDataContract.PreisInsTs = _PreisInsTs; + bDataContract.IsDefault = _IsDefault; + bDataContract.BillableAmount = _BillableAmount; + bDataContract.DoNotCheckOverlapping = _DoNotCheckOverlapping; + bDataContract.PreisOid = _PreisOid; + bDataContract.PreisVersion = _PreisVersion; + bDataContract.PreisSystemEntryID = _PreisSystemEntryID; + bDataContract.Name = _Name; + bDataContract.Betrag = _Betrag; + bDataContract.PreisInsTs = _PreisInsTs; + + bDataContract.CostRatePeriods = new List(); + + List crpList = _CostRatePeriods.CopyToDCList(doCommit); + foreach (var costRatePeriodDc in crpList) + { + if (costRatePeriodDc.CostRateValue.HasValue && costRatePeriodDc.CostRateValue.Value > 0) + bDataContract.CostRatePeriods.Add(costRatePeriodDc); + } + return bDataContract; } } From 19e82a26957b88fb55e7a18ee3c987261e1dbf3b Mon Sep 17 00:00:00 2001 From: Alexandra Date: Tue, 17 Aug 2021 15:31:37 +0200 Subject: [PATCH 05/15] =?UTF-8?q?Mit=20=C3=A4nderbarem=20Preis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/ViewModel/ListViewModel/PreisListVM.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/BeWo/ViewModel/ListViewModel/PreisListVM.cs b/BeWo/ViewModel/ListViewModel/PreisListVM.cs index a67138657..32456ee1d 100644 --- a/BeWo/ViewModel/ListViewModel/PreisListVM.cs +++ b/BeWo/ViewModel/ListViewModel/PreisListVM.cs @@ -1,7 +1,5 @@ using System.Collections.Generic; -using BS.Shared; -using BS.Shared.Core; using BS.Shared.DataContracts; namespace BeWo.ViewModel.ListViewModel From 862226d5019d9925ca9ce294ec69134020c984a8 Mon Sep 17 00:00:00 2001 From: Alexandra Date: Tue, 17 Aug 2021 15:32:01 +0200 Subject: [PATCH 06/15] =?UTF-8?q?Mit=20=C3=A4nderbarem=20Preis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared/DataContracts/PreisDC.cs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Shared/DataContracts/PreisDC.cs b/Shared/DataContracts/PreisDC.cs index 62a5eee6f..ac649d2af 100644 --- a/Shared/DataContracts/PreisDC.cs +++ b/Shared/DataContracts/PreisDC.cs @@ -10,6 +10,9 @@ namespace BS.Shared.DataContracts { private List _CostRatePeriods; + [DataMember] + public bool IsSystemEntry { get; set; } + [DataMember] public long? PreisOid { get; set; } @@ -63,24 +66,20 @@ namespace BS.Shared.DataContracts return GetType().Name.GetHashCode() ^ PreisOid.GetHashCode(); } + [DataMember] + public bool IsDefault { get; set; } + public bool DoNotCheckOverlapping { get; set; } [DataMember] public List CostRatePeriods { - get - { - return this._CostRatePeriods ?? (this._CostRatePeriods = new List()); - } + get => this._CostRatePeriods ?? (this._CostRatePeriods = new List()); - set - { - this._CostRatePeriods = value; - } + set => this._CostRatePeriods = value; } - [DataMember] public ActivationTypeId ActivationType { get; set; } } From 785aae4d9a1fbe39819471348281048836e91b75 Mon Sep 17 00:00:00 2001 From: Alexandra Date: Tue, 17 Aug 2021 15:32:30 +0200 Subject: [PATCH 07/15] =?UTF-8?q?Mit=20=C3=A4nderbarem=20Preis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Service/DCEntityMapper/PreisDC_Preis.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Service/DCEntityMapper/PreisDC_Preis.cs b/Service/DCEntityMapper/PreisDC_Preis.cs index f59e98518..86049ab3c 100644 --- a/Service/DCEntityMapper/PreisDC_Preis.cs +++ b/Service/DCEntityMapper/PreisDC_Preis.cs @@ -23,6 +23,7 @@ namespace BeWo.Service.DCEntityMapper bDataContract.PreisSystemEntryID = bEntity.SystemEntryID; bDataContract.Name = bEntity.Name; bDataContract.Betrag = bEntity.Betrag; + bDataContract.IsSystemEntry = bEntity.SystemEntryID != null; bDataContract.DoNotCheckOverlapping = bEntity.DoNotCheckOverlapping.HasValue && bEntity.DoNotCheckOverlapping.Value; bDataContract.ActivationType = bEntity.IsActive; bDataContract.CostRatePeriods = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(bEntity.CostRatePeriods); @@ -45,7 +46,7 @@ namespace BeWo.Service.DCEntityMapper MapperFactory.CostRatePeriodDC_CostRatePeriod.MergeWithEntitys(bDataContract.CostRatePeriods, bEntity.CostRatePeriods); foreach (var costRatePeriod in bEntity.CostRatePeriods) { - costRatePeriod.ObjectTid = TableID.ServiceDescription; + costRatePeriod.ObjectTid = TableID.Preis; } return bEntity; From 4f40b22f75e5c54f530f3b7708b2dd93ef8cb922 Mon Sep 17 00:00:00 2001 From: Alexandra Date: Tue, 17 Aug 2021 15:52:30 +0200 Subject: [PATCH 08/15] =?UTF-8?q?Preis=20aufger=C3=A4umt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/View/Detail/PreisView.xaml | 45 ++++++++++++++------- BeWo/View/Detail/PreisView.xaml.cs | 9 ++--- BeWo/ViewModel/PreisVM.cs | 52 ------------------------- Data/Entities/Preis.cs | 50 ++++++++---------------- Service/DCEntityMapper/PreisDC_Preis.cs | 8 ++-- Service/Plugins/PluginLoader.cs | 12 +++--- Shared/DataContracts/PreisDC.cs | 3 -- 7 files changed, 62 insertions(+), 117 deletions(-) diff --git a/BeWo/View/Detail/PreisView.xaml b/BeWo/View/Detail/PreisView.xaml index 8b952fd83..9c39d040a 100644 --- a/BeWo/View/Detail/PreisView.xaml +++ b/BeWo/View/Detail/PreisView.xaml @@ -10,28 +10,48 @@ Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Focusable="True"> - + - - + - + - + + + + + + + + + + - - + + + + + + + + + + + + - - + diff --git a/BeWoPlanerMobil/App_Start/RouteConfig.cs b/BeWoPlanerMobil/App_Start/RouteConfig.cs index 73c275ec0..b2bb599e6 100644 --- a/BeWoPlanerMobil/App_Start/RouteConfig.cs +++ b/BeWoPlanerMobil/App_Start/RouteConfig.cs @@ -8,6 +8,7 @@ namespace BeWoPlanerMobil public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + routes.IgnoreRoute("{resource}.ashx/{*pathInfo}"); routes.MapRoute( name: "Login", diff --git a/BeWoPlanerMobil/App_Start/WebApiConfig.cs b/BeWoPlanerMobil/App_Start/WebApiConfig.cs index 5ce4d8a0a..48da4e20a 100644 --- a/BeWoPlanerMobil/App_Start/WebApiConfig.cs +++ b/BeWoPlanerMobil/App_Start/WebApiConfig.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web.Http; +using System.Web.Http; namespace BeWoPlanerMobil { diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj index be1fa9e67..5e2b5dc99 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj @@ -54,14 +54,27 @@ ..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll + False + + + + + + + + + + + + - - False - ..\Lib\log4net.dll + + + ..\packages\log4net.2.0.12\lib\net45\log4net.dll ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll @@ -161,11 +174,13 @@ + + @@ -211,6 +226,7 @@ + @@ -278,6 +294,261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -286,11 +557,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -378,6 +723,7 @@ + Designer @@ -403,6 +749,8 @@ + + diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user index e244fab95..3f0ec0440 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user @@ -12,13 +12,15 @@ ShowAllFiles 600 MvcControllerEmptyScaffolder - root/Controller + root/Common/MVC/Controller 600 True False False ~/Views/Shared/_Layout.cshtml False + MvcViewScaffolder + root/Common/MVC/View diff --git a/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs b/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs new file mode 100644 index 000000000..9c659a0c5 --- /dev/null +++ b/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Web.Mvc; +using BeWoPlanerMobil.Models; +using BeWoPlanerMobil.Service; +using BeWoPlanerMobil.Views.DevExpressScheduler; +using BS.Shared.DataContracts; +using DevExpress.Web.Mvc; + +namespace BeWoPlanerMobil.Controllers +{ + public class DevExpressSchedulerController : AbstractBaseController + { + private DevExpressSchedulerModel _Model; + public DevExpressSchedulerModel Model + { + get + { + if (!MobileSessionFacade.IsUserLoggedIn()) + { + Logout(); + return null; + } + + if (((DevExpressSchedulerModel)Session["DevExpressSchedulerModel"])?.Employee == null) + { + _Model = new DevExpressSchedulerModel { Employee = MobileSessionFacade.LoggedInEmployee }; + Session["DevExpressSchedulerModel"] = _Model; + } + else + { + _Model = (DevExpressSchedulerModel)Session["DevExpressSchedulerModel"]; + } + + return _Model; + } + } + + [Authorize] + public ActionResult DevExpressScheduler() + { + if (!MobileSessionFacade.IsUserLoggedIn() || Model == null) + { + return RedirectToActionPermanent("Index", "Login"); + } + + var appointments = KalenderService.LoadFilteredAppointments( + true, + Model?.Employee?.EmployeeOid ?? 1, + DateTime.Today.AddDays(-60), + DateTime.Today.AddDays(60), + new List(), + new List(), + new List(), + false, + false, + false, + false, + false); + + Model.Appointments = appointments; + + return View(Model); + } + + [Authorize] + public ActionResult SchedulerPagePartial() + { + return PartialView("SchedulerPagePartial", Model); + } + + [Authorize] + public ActionResult EditAppointment() + { + UpdateAppointment(); + return PartialView("SchedulerPagePartial", Model); + } + + [Authorize] + private void UpdateAppointment() + { + var appointmentsToInsert = SchedulerExtension.GetAppointmentsToInsert(SchedulerHelper.GetSchedulerSettings(), Model.Appointments); + var appointmentsToUpdate = SchedulerExtension.GetAppointmentsToUpdate(SchedulerHelper.GetSchedulerSettings(), Model.Appointments); + var appointmentsToRemove = SchedulerExtension.GetAppointmentsToRemove(SchedulerHelper.GetSchedulerSettings(), Model.Appointments); + } + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index 5de7f0392..3ad59f1eb 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -362,7 +362,7 @@ namespace BeWoPlanerMobil.Controllers foreach (var ziel in ziele.Where(z => z.ValueListEntryOid.HasValue)) { - var treeItem = new GoalTreeItem { Children = new List(), Header = ziel.DisplayName, ParentOid = ziel.ParentOid, ValueListEntryOid = ziel.ValueListEntryOid }; + var treeItem = new GoalTreeItem { Children = new List(), Header = ziel.DisplayName ?? string.Empty, ParentOid = ziel.ParentOid, ValueListEntryOid = ziel.ValueListEntryOid }; goalTreeDic.Add(ziel.ValueListEntryOid.Value, treeItem); @@ -2250,6 +2250,16 @@ namespace BeWoPlanerMobil.Controllers return RedirectToMain(); } + [Authorize] + public ActionResult RedirectToDevExpressScheduler() + { + #if DEBUG + return RedirectToActionPermanent("DevExpressScheduler", "DevExpressScheduler"); + #endif + + return RedirectToMain(); + } + // Gruppenbuchungen [HttpPost] [Authorize] diff --git a/BeWoPlanerMobil/Global.asax.cs b/BeWoPlanerMobil/Global.asax.cs index 0f68f595b..fc871a623 100644 --- a/BeWoPlanerMobil/Global.asax.cs +++ b/BeWoPlanerMobil/Global.asax.cs @@ -5,6 +5,8 @@ using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; +using DevExpress.Web.Mvc; +using log4net.Config; namespace BeWoPlanerMobil @@ -22,9 +24,9 @@ namespace BeWoPlanerMobil FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); - - log4net.Config.XmlConfigurator.Configure(); - } + + XmlConfigurator.Configure(); + } protected void Application_BeginRequest(object sender, EventArgs e) { @@ -36,5 +38,10 @@ namespace BeWoPlanerMobil ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; } + + protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) + { + DevExpressHelper.Theme = "Metropolis"; + } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs b/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs new file mode 100644 index 000000000..d595268eb --- /dev/null +++ b/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs @@ -0,0 +1,17 @@ +using System.Collections; +using DevExpress.Web.ASPxScheduler; + +namespace BeWoPlanerMobil.Models +{ + public class DevExpressSchedulerModel : AbstractModel + { + public IEnumerable Appointments { get; set; } + } + + public class CustomAppointmentTemplateContainer : AppointmentFormTemplateContainer + { + public CustomAppointmentTemplateContainer(ASPxScheduler scheduler) : base(scheduler) { } + + public string CustomInfo => Appointment.CustomFields["AppointmentCustomField"] != null ? Appointment.CustomFields["AppointmentCustomField"].ToString() : ""; + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/ace.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/ace.js new file mode 100644 index 000000000..be2be04b6 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/ace.js @@ -0,0 +1,136 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * 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 Ajax.org B.V. 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 AJAX.ORG B.V. 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 LICENSE BLOCK ***** */ + +/** + * The main class required to set up an Ace instance in the browser. + * + * @class Ace + **/ + +define(function(require, exports, module) { +"use strict"; + +require("./lib/fixoldbrowsers"); + +var dom = require("./lib/dom"); +var event = require("./lib/event"); + +var Range = require("./range").Range; +var Editor = require("./editor").Editor; +var EditSession = require("./edit_session").EditSession; +var UndoManager = require("./undomanager").UndoManager; +var Renderer = require("./virtual_renderer").VirtualRenderer; + +// The following require()s are for inclusion in the built ace file +require("./worker/worker_client"); +require("./keyboard/hash_handler"); +require("./placeholder"); +require("./multi_select"); +require("./mode/folding/fold_mode"); +require("./theme/textmate"); +require("./ext/error_marker"); + +exports.config = require("./config"); + +/** + * Provides access to require in packed noconflict mode + * @param {String} moduleName + * @returns {Object} + **/ +exports.require = require; + +if (typeof define === "function") + exports.define = define; + +/** + * Embeds the Ace editor into the DOM, at the element provided by `el`. + * @param {String | DOMElement} el Either the id of an element, or the element itself + * @param {Object } options Options for the editor + * + **/ +exports.edit = function(el, options) { + if (typeof el == "string") { + var _id = el; + el = document.getElementById(_id); + if (!el) + throw new Error("ace.edit can't find div #" + _id); + } + + if (el && el.env && el.env.editor instanceof Editor) + return el.env.editor; + + var value = ""; + if (el && /input|textarea/i.test(el.tagName)) { + var oldNode = el; + value = oldNode.value; + el = dom.createElement("pre"); + oldNode.parentNode.replaceChild(el, oldNode); + } else if (el) { + value = el.textContent; + el.innerHTML = ""; + } + + var doc = exports.createEditSession(value); + + var editor = new Editor(new Renderer(el), doc, options); + + var env = { + document: doc, + editor: editor, + onResize: editor.resize.bind(editor, null) + }; + if (oldNode) env.textarea = oldNode; + event.addListener(window, "resize", env.onResize); + editor.on("destroy", function() { + event.removeListener(window, "resize", env.onResize); + env.editor.container.env = null; // prevent memory leak on old ie + }); + editor.container.env = editor.env = env; + return editor; +}; + +/** + * Creates a new [[EditSession]], and returns the associated [[Document]]. + * @param {Document | String} text {:textParam} + * @param {TextMode} mode {:modeParam} + * + **/ +exports.createEditSession = function(text, mode) { + var doc = new EditSession(text, mode); + doc.setUndoManager(new UndoManager()); + return doc; +}; +exports.Range = Range; +exports.Editor = Editor; +exports.EditSession = EditSession; +exports.UndoManager = UndoManager; +exports.VirtualRenderer = Renderer; +exports.version = exports.config.version; +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.bowerrc b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.bowerrc new file mode 100644 index 000000000..0eedc4885 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.bowerrc @@ -0,0 +1,6 @@ +{ + "directory": "external", + "scripts": { + "postinstall": "node ./node_modules/cldr-data-downloader/bin/download.js -i external/cldr-data/index.json -o external/cldr-data/" + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.eslintignore b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.eslintignore new file mode 100644 index 000000000..d01d0515f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.eslintignore @@ -0,0 +1,6 @@ +/dist/.build/ +/examples/ +/external/ +/src/build/ +/test/compiler/_compiled/ +/tmp/ diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.eslintrc.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.eslintrc.json new file mode 100644 index 000000000..ea95a6056 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.eslintrc.json @@ -0,0 +1,41 @@ +{ + "root": true, + "extends": "jquery", + "rules": { + "lines-around-comment": ["error", { "ignorePattern": "falls through" }], + "space-in-parens": "off" + }, + "overrides": [ + { + "files": [ + "script/**/*.js" + ], + "extends": "jquery", + "env": { + "node": true + } + }, + { + "files": [ + "dist/**/*.js" + ], + "env": { + "amd": true, + "node": true + }, + "globals": { + "Cldr": "readonly", + "Globalize": "readonly" + }, + "rules": { + "array-bracket-spacing": "off", + "computed-property-spacing": "off", + "max-len": "off", + "no-multiple-empty-lines": "off", + "no-nested-ternary": "off", + "no-unused-vars": "off", + "wrap-iife": "off" + } + } + ] +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.gitattributes b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.gitattributes new file mode 100644 index 000000000..b7ca95b5b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.gitattributes @@ -0,0 +1,5 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# JS files must always use LF for tools to work +*.js eol=lf diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.gitignore b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.gitignore new file mode 100644 index 000000000..f310183a3 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.gitignore @@ -0,0 +1,7 @@ +.sizecache.json +.tmp-globalize-webpack/ +dist/.build/ +external/ +node_modules/ +tmp/ +test/compiler/_compiled/ diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.mailmap b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.mailmap new file mode 100644 index 000000000..e2f31561c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.mailmap @@ -0,0 +1,10 @@ +Andreas Blixt +Boris Moore +Dave Reed +Ed Sanders +Fredrik Blomqvist +John Resig +Jörn Zaefferer +Richard D. Worth +Riku Nieminen +Stephen Walther diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.travis.yml b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.travis.yml new file mode 100644 index 000000000..19a70a1ec --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/.travis.yml @@ -0,0 +1,9 @@ +language: node_js +node_js: +- '12' +before_install: +- npm install -g bower +install: +- npm install +- npm ls || echo # Avoid that `npm ls` aborts +- bower install diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/AUTHORS.txt b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/AUTHORS.txt new file mode 100644 index 000000000..d49161165 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/AUTHORS.txt @@ -0,0 +1,85 @@ +Authors ordered by number of contributions + +Rafael Xavier de Souza +Richard D. Worth +Eric Bréchemier +Jörn Zaefferer +Dave Reed +Nikolaus Graf +Timo Tijhof +Scott González +Nick Schonning +Kyle Florence +Nova Patch +Manraj Singh +Tobie Langel +Nikola Kovacs +Rob Garrison +John Reilly +hmizutanitsi +shivijais +Pavel Karoukin +Karan Sharma +Andrew Lunny +Wes Cravens +Michael Birtwell +Kris Borchers +Yasuhiro Yoshida +Oleg Gulverdashvili +Sean Cady +Andrey Stukalin +Éric Hernández <65465670+OfficialURL@users.noreply.github.com> +Georgi Tsaklev +Daniel Friesen +robaw <38808938+robaw@users.noreply.github.com> +Ashish Shubham +Phillip Wills +FND +Edward Salter +Matt York +Gethin Webster +gingerbbm +z.ky +Jac +Adam Brons +Christian Tellnes +Alex Sexton +Kemal Ahmed +Katie Sievert +Manikandan, Ramalingam Kandaswamy +Zack Birkenbuel +Reza Payami +Artur Eshenbrener +Marat Dyatko +Retsam +Devang Negandhi +manj +Grégoire Castre +Lee Nave +Brahim Arkni +Amanpreet Singh +Oleg Gaidarenko +Isaac Durazo +Ed Sanders +Kevin Kirsche +Tobias Nießen +Arvind Kalyan +Juan Soto +Luke Page +Mateusz Bożyk +Arthur Verschaeve +Riku Nieminen +Anne-Gaelle Colom +Raphael Amorim +Peter Dave Hello +Bao Ngo +Leonardo Balter +Andreas Blixt +Tomasz Peczek +Robert Plummer +Fredrik Blomqvist +Christian Vuerings +David De Sloovere +Boris Moore +John Resig +Stephen Walther diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/CONTRIBUTING.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/CONTRIBUTING.md new file mode 100644 index 000000000..c97f0fa99 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/CONTRIBUTING.md @@ -0,0 +1,5 @@ +Welcome! Thanks for your interest in contributing to Globalize. More information on how to contribute to this and all other jQuery Foundation projects is over at [contribute.jquery.org](http://contribute.jquery.org). Before writing code for this project, be sure to read [Writing Code for jQuery Foundation Projects](http://contribute.jquery.org/code/). + +You may also want to take a look at our [commit & pull request guide](http://contribute.jquery.org/commits-and-pull-requests/) and [style guides](http://contribute.jquery.org/style-guide/) for instructions on how to maintain your fork and submit your code. Before we can merge any pull request, we'll also need you to sign our [contributor license agreement](http://contribute.jquery.org/cla). + +You can find us on [Slack](https://globalizejs.slack.com/). If you're new, [join here](https://join.slack.com/t/globalizejs/shared_invite/enQtMjk4OTUwNzM1Nzk0LTk2YmY0YjY3Yzk4YzU3M2NkMDZjNThlNzcwNTkyNGJhNDhiNjdkMWUyN2Q2MjVmNTk0ZjkyNGQ3MWEyNzNmMWU). If you've never contributed to open source before, we've put together [a short guide with tips, tricks, and ideas on getting started](http://contribute.jquery.org/open-source/). diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/Gruntfile.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/Gruntfile.js new file mode 100644 index 000000000..740c2d719 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/Gruntfile.js @@ -0,0 +1,655 @@ +/* eslint-env node */ +module.exports = function( grunt ) { + + "use strict"; + + var isConnectTestRunning, + rdefineEnd = /\}\);[^}\w]*$/, + pkg = grunt.file.readJSON( "package.json" ); + + function camelCase( input ) { + return input.toLowerCase().replace( /[-/](.)/g, function( _match, group1 ) { + return group1.toUpperCase(); + }); + } + + function mountFolder( connect, path ) { + return connect.static( require( "path" ).resolve( path ) ); + } + + function replaceConsts( content ) { + return content + + // Replace Version + .replace( /@VERSION/g, pkg.version ) + + // Replace Date yyyy-mm-ddThh:mmZ + .replace( /@DATE/g, ( new Date() ).toISOString().replace( /:\d+\.\d+Z$/, "Z" ) ); + } + + grunt.initConfig({ + pkg: pkg, + authors: { + order: "count" + }, + commitplease: { + last: { + options: { + committish: "-n 2" + } + } + }, + connect: { + options: { + port: 9001, + hostname: "localhost" + }, + test: { + options: { + middleware: function( connect ) { + return [ + mountFolder( connect, "." ), + mountFolder( connect, "test" ) + ]; + } + } + }, + keepalive: { + options: { + keepalive: true, + middleware: function( connect ) { + return [ + mountFolder( connect, "." ) + ]; + } + } + } + }, + eslint: { + main: ".", + dist: "dist/" + }, + mochaTest: { + test: { + options: { + reporter: "spec" + }, + src: [ "test/compiler/*.js" ] + } + }, + qunit: { + functional: { + options: { + urls: [ + + // Use es5-shim here due to .bind(), which is not present on phantomjs v1.9. + // But, it should be on v2.x. + "http://localhost:<%= connect.options.port %>/functional-es5-shim.html" + ] + } + }, + unit: { + options: { + urls: [ "http://localhost:<%= connect.options.port %>/unit.html" ] + } + } + }, + requirejs: { + options: { + dir: "dist/.build", + appDir: "src", + baseUrl: ".", + optimize: "none", + paths: { + cldr: "../external/cldrjs/dist/cldr", + "make-plural": "../external/make-plural/make-plural", + messageformat: "../external/messageformat/messageformat", + "zoned-date-time": "../node_modules/zoned-date-time/src/zoned-date-time" + }, + shim: { + "zoned-date-time": { + exports: "ZonedDateTime" + } + }, + skipSemiColonInsertion: true, + skipModuleInsertion: true, + + // Strip all definitions generated by requirejs. + // Convert content as follows: + // a) "Single return" means the module only contains a return statement that is + // converted to a var declaration. + // b) "Module" means the define wrappers are removed, but content is untouched. + // Only for root id's (the ones in src, not in src's subpaths). Note there's no + // conditional code checking for this type. + onBuildWrite: function( id, _path, contents ) { + var messageformat, + name = camelCase( id.replace( /util\/|common\//, "" ) ); + + // MakePlural + if ( ( /make-plural/ ).test( id ) ) { + return contents + + // Remove browserify wrappers. + .replace( /^\(function\(f\){if\(typeof exports==="object"&&type.*/, "" ) + .replace( /\},\{\}\]\},\{\},\[1\]\)\(1\)[\s\S]*?$/, "" ) + + // Remove browserify exports. + .replace( /Object.defineProperty\(exports[\s\S]*?\n}\);/, "" ) + .replace( "exports['default'] = MakePlural;", "" ) + .replace( "module.exports = exports['default'];", "" ) + + // Remove self-tests. + .replace( /var Tests =[\s\S]*?\n}\)\(\);/, "" ) + .replace( "this.tests = new Tests(this);", "" ) + .replace( /this.fn.test =[\s\S]*?bind\(this\);/, "" ) + .replace( "this.tests.add(type, cat, examples);", "" ) + + // Remove load method. + .replace( /load: \{[\s\S]*?\n \}/, "" ) + + // Replace its wrapper into var assignment. + .replace( /\(function \(global\) \{/, [ + "var MakePlural;", + "/* eslint-disable */", + "MakePlural = (function() {" + ].join( "\n" ) ) + .replace( /if \(\(typeof module !== 'undefined'[\s\S]*/, [ + "return MakePlural;", + "}());", + "/* eslint-enable */" + ].join( "\n" ) ) + + // Wrap everything into a var assignment. + .replace( /^/, [ + "var MakePlural;", + "/* eslint-disable */", + "MakePlural = (function() {" + ].join( "\n" ) ) + .replace( /$/, [ + "return MakePlural;", + "}());", + "/* eslint-enable */" + ].join( "\n" ) ); + + // messageformat + } else if ( ( /messageformat/ ).test( id ) ) { + return contents + + // Remove browserify wrappers. + .replace( /^\(function\(f\)\{if\(typeof exports==="object"&&type.*/, "" ) + .replace( "},{}],2:[function(require,module,exports){", "" ) + .replace( /\},\{"\.\/messageformat-parser":1,"make-plural\/plural.*/, "" ) + .replace( /\},\{\}\]\},\{\},\[2\]\)\(2\)[\s\S]*?$/, "" ) + + // Set `MessageFormat.plurals` and remove `make-plural/plurals` + // completely. This is populated by Globalize on demand. + .replace( /var _cp = \[[\s\S]*?$/, "" ) + .replace( + "MessageFormat.plurals = require('make-plural/plurals')", + "MessageFormat.plurals = {}" + ) + + // Set `MessageFormat._parse` + .replace( + "MessageFormat._parse = require('./messageformat-parser').parse;", + "" + ) + .replace( /module\.exports = \(function\(\) \{([\s\S]*?)\n\}\)\(\);/, [ + "MessageFormat._parse = (function() {", + "$1", + "}()).parse;" + ].join( "\n" ) ) + + // Remove unused code. + .replace( /if \(!pluralFunc\) \{\n[\s\S]*?\n \}/, "" ) + .replace( /if \(!locale\) \{\n[\s\S]*? \}\n/, "this.lc = [locale];" ) + .replace( /(MessageFormat\.formatters) = \{[\s\S]*?\n\};/, "$1 = {};" ) + .replace( /MessageFormat\.prototype\.setIntlSupport[\s\S]*?\n\};/, "" ) + + // Wrap everything into a var assignment. + .replace( "module.exports = MessageFormat;", "" ) + .replace( /^/, [ + "var MessageFormat;", + "/* eslint-disable */", + "MessageFormat = (function() {" + ].join( "\n" ) ) + .replace( /$/, [ + "return MessageFormat;", + "}());", + "/* eslint-enable */" + ].join( "\n" ) ); + + // message-runtime + } else if ( ( /message-runtime/ ).test( id ) ) { + messageformat = require( "./external/messageformat/messageformat" ); + delete messageformat.prototype.runtime.fmt; + delete messageformat.prototype.runtime.pluralFuncs; + contents = contents.replace( "Globalize._messageFormat = {};", [ + "/* eslint-disable */", + "Globalize._messageFormat = (function() {", + messageformat.prototype.runtime.toString(), + "return {number: number, plural: plural, select: select};", + "}());", + "/* eslint-enable */" + ].join( "\n" ) ); + + // ZonedDateTime + } else if ( ( /zoned-date-time/ ).test( id ) ) { + contents = contents.replace( + "if (typeof module !== \"undefined\" && module.exports) {\n" + + " module.exports = ZonedDateTime;\n}", + "return ZonedDateTime;" + ); + contents = "var ZonedDateTime = (function() {\n" + contents + "}());"; + } + + // 1, and 2: Remove define() wrap. + // 3: Remove empty define()'s. + contents = contents + .replace( /define\([^{]*?\{/, "" ) /* 1 */ + .replace( rdefineEnd, "" ) /* 2 */ + .replace( /define\(\[[^\]]+\]\)[\W\n]+$/, "" ); /* 3 */ + + // Type b (not as simple as a single return) + if ( [ "expand-pattern/augment-format" ].indexOf( id ) !== -1 ) { + contents = "var " + name + " = (function() {" + contents + "}());"; + + // Type a (single return) + } else if ( ( /\// ).test( id ) ) { + contents = contents + .replace( /\nreturn/, "\nvar " + name + " =" ); + } + + return contents; + } + }, + bundle: { + options: { + modules: [ + { + name: "globalize", + include: [ "core" ], + exclude: [ "cldr", "cldr/event" ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-core.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.currency", + include: [ "currency" ], + exclude: [ + "cldr", + "cldr/event", + "cldr/supplemental", + "./core", + "./number" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-currency.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.date", + include: [ "date" ], + exclude: [ + "cldr", + "cldr/event", + "cldr/supplemental", + "./core", + "./number" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-date.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.message", + include: [ "message" ], + exclude: [ "cldr", "./core" ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-message.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.number", + include: [ "number" ], + exclude: [ + "cldr", + "cldr/event", + "cldr/supplemental", + "./core" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-number.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.plural", + include: [ "plural" ], + exclude: [ + "cldr", + "cldr/event", + "cldr/supplemental", + "./core" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-plural.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.relative-time", + include: [ "relative-time" ], + exclude: [ + "cldr", + "cldr/event", + "cldr/supplemental", + "./core", + "./number", + "./plural" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-relative-time.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.unit", + include: [ "unit" ], + exclude: [ + "cldr", + "./core", + "./number", + "./plural" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-unit.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize-runtime", + include: [ "core-runtime" ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-core-runtime.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.currency-runtime", + include: [ "currency-runtime" ], + exclude: [ + "./core-runtime", + "./number-runtime" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-currency-runtime.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.date-runtime", + include: [ "date-runtime" ], + exclude: [ + "./core-runtime", + "./number-runtime" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-date-runtime.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.message-runtime", + include: [ "message-runtime" ], + exclude: [ "./core-runtime" ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-message-runtime.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.number-runtime", + include: [ "number-runtime" ], + exclude: [ + "./core-runtime" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-number-runtime.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.plural-runtime", + include: [ "plural-runtime" ], + exclude: [ + "./core-runtime" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-plural-runtime.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.relative-time-runtime", + include: [ "relative-time-runtime" ], + exclude: [ + "./core-runtime", + "./number-runtime", + "./plural-runtime" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-relative-time-runtime.js", + endFile: "src/build/outro.js" + } + } + }, + { + name: "globalize.unit-runtime", + include: [ "unit-runtime" ], + exclude: [ + "./core-runtime", + "./number-runtime", + "./plural-runtime" + ], + create: true, + override: { + wrap: { + startFile: "src/build/intro-unit-runtime.js", + endFile: "src/build/outro.js" + } + } + } + ] + } + } + }, + watch: { + files: [ "src/*.js", "test/functional/**/*.js", "test/unit/**/*.js", "test/*.html" ], + tasks: [ "default" ] + }, + copy: { + options: { + processContent: function( content ) { + + // Remove leftover define created during rjs build + content = content.replace( /define\(".*/, "" ); + + // Embed VERSION and DATE + return replaceConsts( content ); + } + }, + coreAndRuntime: { + expand: true, + cwd: "dist/.build/", + src: [ "globalize.js", "globalize-runtime.js" ], + dest: "dist/" + }, + modules: { + expand: true, + cwd: "dist/.build/", + src: [ "globalize*.js", "!globalize.js", "!*runtime*.js" ], + dest: "dist/globalize", + rename: function( dest, src ) { + return require( "path" ).join( dest, src.replace( /globalize\./, "" ) ); + } + }, + runtimeModules: { + expand: true, + cwd: "dist/.build/", + src: [ "globalize.*runtime.js" ], + dest: "dist/globalize-runtime", + rename: function( dest, src ) { + return require( "path" ).join( dest, src.replace( /(globalize\.|-runtime)/g, "" ) ); + } + }, + allInOneNode: { + src: "src/build/node-main.js", + dest: "dist/node-main.js" + } + }, + uglify: { + options: { + banner: replaceConsts( grunt.file.read( "src/build/intro.min.js" ) ) + }, + dist: { + files: { + "tmp/globalize.min.js": [ "dist/globalize.js" ], + "tmp/globalize/currency.min.js": [ "dist/globalize/currency.js" ], + "tmp/globalize/date.min.js": [ "dist/globalize/date.js" ], + "tmp/globalize/number.min.js": [ "dist/globalize/number.js" ], + "tmp/globalize/plural.min.js": [ "dist/globalize/plural.js" ], + "tmp/globalize/message.min.js": [ "dist/globalize/message.js" ], + "tmp/globalize/relative-time.min.js": [ "dist/globalize/relative-time.js" ], + "tmp/globalize/unit.min.js": [ "dist/globalize/unit.js" ], + + "tmp/globalize-runtime.min.js": [ "dist/globalize-runtime.js" ], + "tmp/globalize-runtime/currency.min.js": [ + "dist/globalize-runtime/currency.js" + ], + "tmp/globalize-runtime/date.min.js": [ "dist/globalize-runtime/date.js" ], + "tmp/globalize-runtime/message.min.js": [ "dist/globalize-runtime/message.js" ], + "tmp/globalize-runtime/number.min.js": [ "dist/globalize-runtime/number.js" ], + "tmp/globalize-runtime/plural.min.js": [ "dist/globalize-runtime/plural.js" ], + "tmp/globalize-runtime/relative-time.min.js": [ + "dist/globalize-runtime/relative-time.js" + ], + "tmp/globalize-runtime/unit.min.js": [ "dist/globalize-runtime/unit.js" ] + } + } + }, + + // TODO figure out how to specify exceptions for externals + "compare_size": { + files: [ + "tmp/globalize.min.js", + "tmp/globalize/*min.js", + "tmp/globalize-runtime.min.js", + "tmp/globalize-runtime/*min.js" + ], + options: { + compress: { + gz: function( fileContents ) { + return require( "gzip-js" ).zip( fileContents, {}).length; + } + } + } + }, + clean: { + dist: [ + "dist" + ] + }, + checkDependencies: { + bower: { + options: { + packageManager: "bower" + } + }, + npm: { + options: { + packageManager: "npm" + } + } + } + }); + + require( "matchdep" ).filterDev( "grunt-*" ).forEach( grunt.loadNpmTasks ); + + grunt.registerTask( "test", function() { + var args = [].slice.call( arguments ); + if ( !isConnectTestRunning ) { + grunt.task.run( "checkDependencies" ); + grunt.task.run( "connect:test" ); + isConnectTestRunning = true; + } + grunt.task.run( [ "qunit" ].concat( args ).join( ":" ) ); + }); + + // Default task. + grunt.registerTask( "default", [ + "eslint:main", + + "test:unit", + "clean", + "requirejs", + "copy", + "eslint:dist", + + "test:functional", + "mochaTest", + "uglify", + "compare_size", + "commitplease" + ]); + +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/LICENSE b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/LICENSE new file mode 100644 index 000000000..9b7baf96e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/LICENSE @@ -0,0 +1,20 @@ +Copyright OpenJS Foundation and other contributors, https://openjsf.org + +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. diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/README.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/README.md new file mode 100644 index 000000000..c3a069b43 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/README.md @@ -0,0 +1,818 @@ +# Globalize + +[![Build Status](https://secure.travis-ci.org/globalizejs/globalize.svg?branch=master)](http://travis-ci.org/globalizejs/globalize) +[![devDependency Status](https://david-dm.org/globalizejs/globalize/status.svg)](https://david-dm.org/globalizejs/globalize#info=dependencies) +[![devDependency Status](https://david-dm.org/globalizejs/globalize/dev-status.svg)](https://david-dm.org/globalizejs/globalize#info=devDependencies) + +A JavaScript library for internationalization and localization that leverage the official [Unicode CLDR](http://cldr.unicode.org/) JSON data. The library works both for the browser and as a +Node.js module. + +- [About Globalize](#about-globalize) + - [Why globalization?](#why-globalization) + - [Why Globalize?](#why-globalize) + - [Migrating from Globalize 0.x](#migrating-from-globalize-0x) + - [Where to use it?](#where-to-use-it) + - [Where does the data come from?](#where-does-the-data-come-from) + - [Only load and use what you need](#pick-the-modules-you-need) + - [Browser support](#browser-support) +- [Getting started](#getting-started) + - [Requirements](#requirements) + - [Installation](#installation) + - [Usage](#usage) + - [Performance](#performance) + - [Compilation and the Runtime modules](#compilation-and-the-runtime-modules) + - [Examples](#examples) + - [Community](#community) +- [API](#api) + - [Core](#core-module) + - [Date module](#date-module) + - [Message module](#message-module) + - [Number module](#number-module) + - [Currency module](#currency-module) + - [Plural module](#plural-module) + - [Relative time module](#relative-time-module) + - [Unit module](#unit-module) + - more to come... +- [Error reference](#error-reference) +- [Contributing](#contributing) + - [Roadmap](#roadmap) +- [Development](#development) + - [File structure](#file-structure) + - [Source files](#source-files) + - [Tests](#tests) + - [Build](#build) + + +## About Globalize + +### Why globalization? + +Each language, and the countries that speak that language, have different expectations when it comes to how numbers (including currency and percentages) and dates should appear. Obviously, each language has different names for the days of the week and the months of the year. But they also have different expectations for the structure of dates, such as what order the day, month and year are in. In number formatting, not only does the character used to delineate number groupings and the decimal portion differ, but the placement of those characters differ as well. + +A user using an application should be able to read and write dates and numbers in the format they are accustomed to. This library makes this possible, providing an API to convert user-entered number and date strings - in their own format - into actual numbers and dates, and conversely, to format numbers and dates into that string format. + +Even if the application deals only with the English locale, it may still need globalization to format programming language bytes into human-understandable language and vice-versa in an effective and reasonable way. For example, to display something better than "Edited 1 minutes ago". + +### Why Globalize? + +Globalize provides number formatting and parsing, date and time formatting and parsing, currency formatting, message formatting (ICU message format pattern), and plural support. + +Design Goals. + +- Leverages the Unicode CLDR data and follows its UTS#35 specification. +- Keeps code separate from i18n content. Doesn't host or embed any locale data in the library. Empowers developers to control the loading mechanism of their choice. +- Allows developers to load as much or as little data as they need. Avoids duplicating data if using multiple i18n libraries that leverage CLDR. +- Keeps code modular. Allows developers to load the i18n functionalities they need. +- Runs in browsers and Node.js, consistently across all of them. +- Makes globalization as easy to use as jQuery. + +Globalize is based on the Unicode Consortium's Common Locale Data Repository (CLDR), the largest and most extensive standard repository of locale data available. CLDR is constantly updated and is used by many large applications and operating systems, so you'll always have access to the most accurate and up-to-date locale data. + +Globalize needs CLDR content to function properly, although it doesn't embed, hard-code, or host such content. Instead, Globalize empowers developers to load CLDR data the way they want. Vanilla CLDR in its official JSON format (no pre-processing) is expected to be provided. As a consequence, (a) Globalize avoids bugs caused by outdated i18n content. Developers can use up-to-date CLDR data directly from Unicode as soon as it's released, without having to wait for any pipeline on our side. (b) Developers have full control over which locale coverage they want to provide on their applications. (c) Developers are able to share the same i18n dataset between Globalize and other libraries that leverage CLDR. There's no need for duplicating data. + +Globalize is systematically tested against desktop and mobile browsers and Node.js. So, using it you'll get consistent results across different browsers and across browsers and the server. + +Globalize doesn't use native Ecma-402 yet, which could potentially improve date and number formatting performance. Although Ecma-402 support is improving among modern browsers and even Node.js, the functionality and locale coverage level varies between different environments (see Comparing JavaScript Libraries [slide 25][]). Globalize needs to do more research and testings to use it reliably. + +For alternative libraries and more, check out this [JavaScript globalization overview][]. + +[slide 25]: http://jsi18n.com/jsi18n.pdf +[JavaScript globalization overview]: http://rxaviers.github.io/javascript-globalization/ + +### Migrating from Globalize 0.x + +Are you coming from Globalize 0.x? Read our [migration guide][] to learn what have changed and how to migrate older 0.x code to up-to-date 1.x. + +[migration guide]: doc/migrating-from-0.x.md + +### Where to use it? + +Globalize is designed to work both in the [browser](#browser-support), or in [Node.js](#usage). It supports both [AMD](#usage) and [CommonJS](#usage). + +### Where does the data come from? + +Globalize uses the [Unicode CLDR](http://cldr.unicode.org/), the largest and most extensive standard repository of locale data. + +We do NOT embed any i18n data within our library. However, we make it really easy to use. Read [How to get and load CLDR JSON data](#2-cldr-content) for more information on its usage. + +### Pick the modules you need + +| File | Minified + gzipped size | Runtime minified + gzipped size | Summary | +| -------------------------- | ----------------------: | ------------------------------: | ------------------------------------------------------------ | +| globalize.js | 1.7KB | 1.1KB | [Core library](#core-module) | +| globalize/currency.js | 3.0KB | 0.7KB | [Currency module](#currency-module) provides currency formatting | +| globalize/date.js | 7.7KB | 4.3KB | [Date module](#date-module) provides date formatting and parsing | +| globalize/message.js | 5.3KB | 0.7KB | [Message module](#message-module) provides ICU message format support | +| globalize/number.js | 4.4KB | 2.6KB | [Number module](#number-module) provides number formatting and parsing | +| globalize/plural.js | 2.3KB | 0.4KB | [Plural module](#plural-module) provides pluralization support | +| globalize/relative-time.js | 0.8KB | 0.5KB | [Relative time module](#relative-time-module) provides relative time formatting support | +| globalize/unit.js | 0.9KB | 0.6KB | [Unit module](#unit-module) provides unit formatting support | + +### Browser Support + +Globalize 1.x supports the following browsers: + +- Chrome: (Current - 1) or Current +- Firefox: (Current - 1) or Current +- Safari: 5.1+ +- Opera: 12.1x, (Current - 1) or Current +- IE9+ + +*(Current - 1)* or *Current* denotes that we support the current stable version of the browser and the version that preceded it. For example, if the current version of a browser is 24.x, we support the 24.x and 23.x versions. + +## Getting Started + + npm install globalize cldr-data iana-tz-data + +```js +var Globalize = require( "globalize" ); +Globalize.load( require( "cldr-data" ).entireSupplemental() ); +Globalize.load( require( "cldr-data" ).entireMainFor( "en", "es" ) ); +Globalize.loadTimeZone( require( "iana-tz-data" ) ); + +Globalize("en").formatDate(new Date()); +// > "11/27/2015" + +Globalize("es").formatDate(new Date()); +// > "27/11/2015" +``` + +Note `cldr-data` is an optional module, read [CLDR content](#2-cldr-content) section below for more information on how to get CLDR from different sources. + +The [`iana-tz-data`](https://github.com/rxaviers/iana-tz-data) module is only needed when IANA time zones (via `options.timeZone`) are used with date functions. Read [IANA time zone data](#3-iana-time-zone-data) below for more information. + +Read the [Locales section](#locales) for more information about supported locales. For AMD, bower and other usage examples, see [Examples section](#examples). + +### Installation + +#### Downloading a ZIP or tarball archive + +Click the GitHub [releases tab](https://github.com/globalizejs/globalize/releases) and download the latest available Globalize package. + +#### Using a package manager + +You can use either npm or bower: + +- `npm install globalize` +- `bower install globalize` + +#### Building from source + +1. `git clone https://github.com/globalizejs/globalize.git` +2. [Build the distribution files](#build) + +### Requirements + +#### 1. Dependencies + +If you use module loading like ES6 import, CommonJS, or AMD and fetch your code using package managers like *npm* or *bower*, you don't need to worry about this and can skip reading this section. Otherwise, you need to satisfy Globalize dependencies prior to using it. There is only one external dependency: [cldr.js][], which is a CLDR low level manipulation tool. Additionally, you need to satisfy the cross-dependencies between modules. + +| Module | Dependencies (load in order) | +| -------------------- | ---------------------------------------- | +| Core module | [cldr.js][] | +| Currency module | globalize.js (core), globalize/number.js, and globalize/plural.js (only required for "code" or "name" styles) | +| Date module | globalize.js (core) and globalize/number.js | +| Message module | globalize.js (core) and globalize/plural.js (if using messages that need pluralization support) | +| Number module | globalize.js (core) | +| Plural | globalize.js (core) | +| Relative time module | globalize.js (core), globalize/number.js, and globalize/plural.js | +| Unit module | globalize.js (core), globalize/number.js, and globalize/plural.js | + +As an alternative to deducing this yourself, use this [online tool](http://johnnyreilly.github.io/globalize-so-what-cha-want/). The tool allows you to select the modules you're interested in using and tells you the Globalize files *and* CLDR JSON that you need. + +[cldr.js]: https://github.com/rxaviers/cldrjs + +#### 2. CLDR content + +Globalize is the i18n software (the engine). Unicode CLDR is the i18n content (the fuel). You need to feed Globalize on the appropriate portions of CLDR prior to using it. + +*(a) How do I figure out which CLDR portions are appropriate for my needs?* + +Each Globalize function requires a special set of CLDR portions. Once you know which Globalize functionalities you need, you can deduce its respective CLDR requirements. See table below. + +| Module | Required CLDR JSON files | +| -------------------- | ---------------------------------------- | +| Core module | cldr/supplemental/likelySubtags.json | +| Currency module | cldr/main/`locale`/currencies.json
cldr/supplemental/currencyData.json
+CLDR JSON files from number module
+CLDR JSON files from plural module for name style support | +| Date module | cldr/main/`locale`/ca-gregorian.json
cldr/main/`locale`/timeZoneNames.json
cldr/supplemental/metaZones.json
cldr/supplemental/timeData.json
cldr/supplemental/weekData.json
+CLDR JSON files from number module | +| Number module | cldr/main/`locale`/numbers.json
cldr/supplemental/numberingSystems.json | +| Plural module | cldr/supplemental/plurals.json (for cardinals)
cldr/supplemental/ordinals.json (for ordinals) | +| Relative time module | cldr/main/`locale`/dateFields.json
+CLDR JSON files from number and plural modules | +| Unit module | cldr/main/`locale`/units.json
+CLDR JSON files from number and plural module | + +As an alternative to deducing this yourself, use this [online tool](http://johnnyreilly.github.io/globalize-so-what-cha-want/). The tool allows you to select the modules you're interested in using and tells you the Globalize files *and* CLDR JSON that you need. + +*(b) How am I supposed to get and load CLDR content?* + +Learn [how to get and load CLDR content...](doc/cldr.md) and use +[`Globalize.load()`](#core-module) to load it. + +#### 3. IANA time zone data + +The IANA time zone (tz) database, sometimes called the Olson database, is the standard data used by Unicode CLDR, ECMA-402, Linux, UNIX, Java, ICU, and others. It's used by Globalize to circumvent the JavaScript limitations with respect to manipulating date in time zones other than the user's environment. + +In short, feed Globalize on IANA time zone data if you need to format or parse dates in a specific time zone, independently of the user's environment, e.g., `America/Los_Angeles`. + +It's important to note there's no official IANA time zone data in the JSON format. Therefore, [`iana-tz-data`](https://github.com/rxaviers/iana-tz-data) has been adopted for convenience. + +Learn more on [`Globalize.loadTimeZone()`](#date-module). + +### Usage + +Globalize's consumable-files are located in the `./dist` directory. If you don't find it, it's because you are using a development branch. You should either use a tagged version or [build the distribution files yourself](#build). Read [installation](#installation) above if you need more information on how to download. + +Globalize can be used for a variety of different i18n tasks, eg. formatting or parsing dates, formatting or parsing numbers, formatting messages, etc. You may NOT need Globalize in its entirety. For that reason, we made it modular. So, you can cherry-pick the pieces you need, eg. load `dist/globalize.js` to get Globalize core, load `dist/globalize/date.js` to extend Globalize with Date functionalities, etc. + +An example is worth a thousand words. Check out our [Examples](#examples) section below. + +### Performance + +When formatting or parsing, there's actually a two-step process: (a) the formatter (or parser) *creation* and (b) its *execution*, where creation takes an order of magnitude more time (more expensive) than execution. In the creation phase, Globalize traverses the CLDR tree, processes data (e.g., expands date patterns, parses plural rules, etc), and returns a function that actually executes the formatting or parsing. + +```js +// Formatter creation. +var formatter = Globalize.numberFormatter(); + +// Formatter execution (roughly 10x faster than above). +formatter( Math.PI ); +// > 3.141 +``` + +As a rule of thumb for optimal performance, cache your formatters and parsers. For example: (a) on iterations, generate them outside the loop and reuse while looping; (b) on server applications, generate them in advance and execute when requests arrive. + +### Compilation and the Runtime modules + +Take advantage of compiling your formatters and/or parsers during build time when deploying to production. It's much faster than generating them in real-time and it's also much smaller (i.e., better loading performance). + +Your compiled formatters and parsers allow you to skip a big part of the library and also allow you to skip loading CLDR data, because they have already been created (see [Performance](#performance) above for more information). + +To illustrate, see our [Basic Globalize Compiler example][]. + + +#### Globalize Compiler + +For information about the Globalize Compiler CLI or its JavaScript API, see the [Globalize Compiler documentation][]. + +[Globalize Compiler documentation]: https://github.com/globalizejs/globalize-compiler#README + +### Examples + +The fastest and easiest way to use Globalize is by integrating it into your existing tools. + +- [Application example using webpack and npm](examples/app-npm-webpack/): easy to get started, automated CLDR loading and precompilation for production, but requires npm and webpack knowledge. +- [Application example using globalize-express middleware with any express web app](https://github.com/devangnegandhi/globalize-express/tree/master/example): easy to incorporate globalize as a middleware within your Express web app. (also checkout [globalize-express](https://github.com/devangnegandhi/globalize)) + +If you're using a different tool than the one above, but you're comfortable using JavaScript modules (such as ES6 modules, CommonJS, or AMD) and package managers like npm or bower, you may want to check out the following examples. Note you'll need to compile your code for production yourself. + +- [Basic example using AMD and bower](examples/amd-bower/): feeding Globalize on CLDR is not completely transparent. +- [Basic example using Node.js and npm](examples/node-npm/): feeding Globalize on CLDR is not completely transparent. +- [Basic Globalize Compiler example][]: shows how to use Globalize Compiler CLI. + +[Basic Globalize Compiler example]: examples/globalize-compiler/ + +If you're using none of the tools above, but instead you're using the plain and old script tags only, the following example may interest you. Note Globalize allows you to go low level like this. But, acknowledge that you'll need to handle dependencies and CLDR loading manually yourself. + +- [Basic example using plain JavaScript](examples/plain-javascript/): requires loading CLDR and handling dependencies manually. + +### Community + +You can find us on [Slack](https://globalizejs.slack.com/). If you're new, [join here](https://join.slack.com/t/globalizejs/shared_invite/zt-3tc3js1e-ETn09rNHL_5fclun8jtckQ). + +## API + +### Core module + +#### `Globalize.load( cldrJSONData, ... )` + +This method allows you to load CLDR JSON locale data. `Globalize.load()` is a proxy to `Cldr.load()`. [Read more...](doc/api/core/load.md) + +#### `Globalize.locale( [locale|cldr] )` + +Set default locale, or get it if locale argument is omitted. [Read more...](doc/api/core/locale.md) + +#### `[new] Globalize( locale|cldr )` + +Create a Globalize instance. [Read more...](doc/api/core/constructor.md) + +#### Locales + +A locale is an identifier (id) that refers to a set of user preferences that tend to be shared across significant swaths of the world. In technical terms, it's a String composed of three parts: language, script, and region. For example: + +| locale | description | +| ------------ | ---------------------------------------- | +| *en-Latn-US* | English as spoken in the Unites States in the Latin script. | +| *en-US* | English as spoken in the Unites States (Latin script is deduced given it's the most likely script used in this place). | +| *en* | English (United States region and Latin script are deduced given they are respectively the most likely region and script used in this place). | +| *en-GB* | English as spoken in the United Kingdom (Latin script is deduced given it's the most likely script used in this place). | +| *en-IN* | English as spoken in India (Latin script is deduced). | +| *es* | Spanish (Spain region and Latin script are deduced). | +| *es-MX* | Spanish as spoken in Mexico (Latin script is deduced). | +| *zh* | Chinese (China region and Simplified Han script are deduced). | +| *zh-TW* | Chinese as spoken in Taiwan (Traditional Han script is deduced). | +| *ja* | Japanese (Japan region and Japanese script are deduced). | +| *de* | German (Germany region and Latin script are deduced). | +| *pt* | Portuguese (Brazil region and Latin script are deduced). | +| *pt-PT* | Portuguese as spoken in Portugal (Latin script is deduced). | +| *fr* | French (France region and Latin script are deduced). | +| *ru* | Russian (Russia region and Cyrillic script are deduced). | +| *ar* | Arabic (Egypt region and Arabic script are deduced). | + +The likely deductibility is computed by using CLDR data, which is based on the population and the suppress-script data in BCP47 (among others). The data is heuristically derived, and may change over time. + +Figure out the deduced information by looking at the `cldr.attributes.maxLanguageId` property of a Globalize instance: + +```js +var Globalize = require( "globalize" ); +Globalize.load( require( "cldr-data" ).entireSupplemental() ); +Globalize( "en" ).cldr.attributes.maxLanguageId; +// > "en-Latn-US" +``` + +Globalize supports all the locales available in CLDR, which are around 740. For more information, search for coverage charts at the downloads section of http://cldr.unicode.org/. + +Read more details about locale at [UTS#35 locale][]. + +[UTS#35 locale]: http://www.unicode.org/reports/tr35/#Locale + +### Date module + +#### `Globalize.loadTimeZone( ianaTzData )` + +This method allows you to load IANA time zone data to enable `options.timeZone` feature on date formatters and parsers. + +[Read more...](doc/api/date/load-iana-time-zone.md) + +#### `.dateFormatter( [options] )` + +Return a function that formats a date according to the given `options`. The default formatting is numeric year, month, and day (i.e., `{ skeleton: "yMd" }`. + +```javascript +.dateFormatter()( new Date() ) +// > "11/30/2010" + +.dateFormatter({ skeleton: "GyMMMd" })( new Date() ) +// > "Nov 30, 2010 AD" + +.dateFormatter({ date: "medium" })( new Date() ) +// > "Nov 1, 2010" + +.dateFormatter({ time: "medium" })( new Date() ) +// > "5:55:00 PM" + +.dateFormatter({ datetime: "medium" })( new Date() ) +// > "Nov 1, 2010, 5:55:00 PM" + +.dateFormatter({ datetime: "full", timeZone: "America/New_York" })( new Date() ); +// > "Monday, November 1, 2010 at 3:55:00 AM Eastern Daylight Time" + +.dateFormatter({ datetime: "full", timeZone: "America/Los_Angeles" })( new Date() ); +// > "Monday, November 1, 2010 at 12:55:00 AM Pacific Daylight Time" +``` + +[Read more...](doc/api/date/date-formatter.md) + +#### `.dateToPartsFormatter( [options] )` + +Return a function that formats a date into parts tokens according to the given `options`. The default formatting is numeric year, month, and day (i.e., `{ skeleton: "yMd" }`. + +```javascript +.dateToPartsFormatter()( new Date() ) +// > [ +// { "type": "month", "value": "3" }, +// { "type": "literal", "value": "/" }, +// { "type": "day", "value": "17" }, +// { "type": "literal", "value": "/" }, +// { "type": "year", "value": "2017" } +// ] +``` + +[Read more...](doc/api/date/date-to-parts-formatter.md) + +#### `.dateParser( [options] )` + +Return a function that parses a string representing a date into a JavaScript Date object according to the given `options`. The default parsing assumes numeric year, month, and day (i.e., `{ skeleton: "yMd" }`). + +```javascript +.dateParser()( "11/30/2010" ) +// > new Date( 2010, 10, 30, 0, 0, 0 ) + +.dateParser({ skeleton: "GyMMMd" })( "Nov 30, 2010 AD" ) +// > new Date( 2010, 10, 30, 0, 0, 0 ) + +.dateParser({ date: "medium" })( "Nov 1, 2010" ) +// > new Date( 2010, 10, 30, 0, 0, 0 ) + +.dateParser({ time: "medium" })( "5:55:00 PM" ) +// > new Date( 2015, 3, 22, 17, 55, 0 ) // i.e., today @ 5:55PM + +.dateParser({ datetime: "medium" })( "Nov 1, 2010, 5:55:00 PM" ) +// > new Date( 2010, 10, 30, 17, 55, 0 ) +``` + +[Read more...](doc/api/date/date-parser.md) + +#### `.formatDate( value [, options] )` + +Alias for `.dateFormatter( [options] )( value )`. + +#### `.formatDateToParts( value [, options] )` + +Alias for `.dateToPartsFormatter( [options] )( value )`. + +#### `.parseDate( value [, options] )` + +Alias for `.dateParser( [options] )( value )`. + +### Message module + +#### `Globalize.loadMessages( json )` + +Load messages data. [Read more...](doc/api/message/load-messages.md) + +#### `.messageFormatter( path ) ➡ function( [variables] )` + +Return a function that formats a message (using ICU message format pattern) given its path and a set of variables into a user-readable string. It supports pluralization and gender inflections. + +```javascript +.messageFormatter( "task" )( 1000 ) +// > "You have 1,000 tasks remaining" + +.messageFormatter( "like" )( 3 ) +// > "You and 2 others liked this" +``` + +[Read more...](doc/api/message/message-formatter.md) + +#### `.formatMessage( path [, variables ] )` + +Alias for `.messageFormatter( path )([ variables ])`. + +### Number module + +#### `.numberFormatter( [options] )` + +Return a function that formats a number according to the given options or locale's defaults. + +```javascript +.numberFormatter()( pi ) +// > "3.142" + +.numberFormatter({ maximumFractionDigits: 5 })( pi ) +// > "3.14159" + +.numberFormatter({ round: "floor" })( pi ) +// > "3.141" + +.numberFormatter({ minimumFractionDigits: 2 })( 10000 ) +// > "10,000.00" + +.numberFormatter({ style: "percent" })( 0.5 ) +// > "50%" + +.numberFormatter({ compact: "short", maximumFractionDigits: 0 })( 14305 ) +// > "14K" +``` + +[Read more...](doc/api/number/number-formatter.md) + +#### `.numberToPartsFormatter( [options] )` + +Return a function that formats a number into parts tokens according to the given options or locale's defaults. + +```javascript +.numberToPartsFormatter()( new Date() ) +// > [ +// { "type": "integer", "value": "3" }, +// { "type": "decimal", "value": "." }, +// { "type": "fraction", "value": "142" } +// ] +``` + +[Read more...](doc/api/number/number-to-parts-formatter.md) + +#### `.numberParser( [options] )` + +Return a function that parses a string representing a number according to the given options or locale's defaults. + +```javascript +.numberParser()( "3.14159" ) +// > 3.14159 + +.numberParser()( "10,000.00" ) +// > 10000 + +.numberParser({ style: "percent" })( "50%" ) +// > 0.5 +``` + +[Read more...](doc/api/number/number-parser.md) + +#### `.formatNumber( value [, options] )` + +Alias for `.numberFormatter( [options] )( value )`. + +#### `.formatNumberToParts( value [, options] )` + +Alias for `.numberToPartsFormatter( [options] )( value )`. + +#### `.parseNumber( value [, options] )` + +Alias for `.numberParser( [options] )( value )`. + +### Currency module + +#### `.currencyFormatter( currency [, options] )` + +Return a function that formats a currency according to the given options or locale's defaults. + +```javascript +.currencyFormatter( "USD" )( 1 ) +// > "$1.00" + +.currencyFormatter( "USD", { style: "accounting" })( -1 ) +// > "($1.00)" + +.currencyFormatter( "USD", { style: "name" })( 69900 ) +// > "69,900.00 US dollars" + +.currencyFormatter( "USD", { style: "code" })( 69900 ) +// > "69,900.00 USD" + +.currencyFormatter( "USD", { round: "ceil" })( 1.491 ) +// > "$1.50" +``` + +[Read more...](doc/api/currency/currency-formatter.md) + +#### `.currencyToPartsFormatter( currency [, options] )` + +Return a function that formats a currency into parts tokens according to the given options or locale's defaults. + +```javascript +.currencyToPartsFormatter()( new Date() ) +// > [ +// { "type": "currency", "value": "USD" }, +// { "type": "literal", "value": " " }, +// { "type": "integer", "value": "69" }, +// { "type": "group", "value": "," }, +// { "type": "integer", "value": "900" }, +// { "type": "decimal", "value": "." }, +// { "type": "fraction", "value": "00" } +// ] +``` + +[Read more...](doc/api/currency/currency-to-parts-formatter.md) + +#### `.formatCurrency( value, currency [, options] )` + +Alias for `.currencyFormatter( currency [, options] )( value )`. + +#### `.formatCurrencyToParts( value, currency [, options] )` + +Alias for `.currencyToPartsFormatter( currency [, options] )( value )`. + +### Plural module + +#### `.pluralGenerator( [options] )` + +Return a function that returns the value's corresponding plural group: `zero`, `one`, `two`, `few`, `many`, or `other`. + +The function may be used for cardinals or ordinals. + +```javascript +.pluralGenerator()( 0 ) +// > "other" + +.pluralGenerator()( 1 ) +// > "one" + +.pluralGenerator({ type: "ordinal" })( 1 ) +// > "one" + +.pluralGenerator({ type: "ordinal" })( 2 ) +// > "two" +``` + +[Read more...](doc/api/plural/plural-generator.md) + +#### `.plural( value[, options ] )` + +Alias for `.pluralGenerator( [options] )( value )`. + +### Relative time module + +#### `.relativeTimeFormatter( unit [, options] )` + + Returns a function that formats a relative time according to the given unit, options, and the default/instance locale. + + ```javascript + .relativeTimeFormatter( "day" )( 1 ) + // > "tomorrow" + + .relativeTimeFormatter( "month" )( -1 ) + // > "last month" + + .relativeTimeFormatter( "month" )( 3 ) + // > "in 3 months" + ``` + + [Read more...](doc/api/relative-time/relative-time-formatter.md) + +#### `.formatRelativeTime( value, unit [, options] )` + +Alias for `.relativeTimeFormatter( unit, options )( value )`. + +### Unit module + +#### `.unitFormatter( unit [, options] )` + +Returns a function that formats a unit according to the given unit, options, and the default/instance locale. + +```javascript +.unitFormatter( "second" )( 10 ) +// > "10 seconds" + +.unitFormatter( "second", { form: "short" } )( 10 ) +// > "10 secs" + +.unitFormatter( "second", { form: "narrow" } )( 10 ) +// > "10s" +``` + +[Read more...](doc/api/unit/unit-formatter.md) + +#### `.formatUnit( value, unit [, options] )` + +Alias for `.unitFormatter( unit, options )( value )`. + +## Error reference + +### CLDR Errors + +- **`E_INVALID_CLDR`** + + Thrown when a CLDR item has an invalid or unexpected value. + + [Read more...](doc/error/e-invalid-cldr.md) + +- **`E_MISSING_CLDR`** + + Thrown when any required CLDR item is NOT found. + + [Read more...](doc/error/e-missing-cldr.md) + +### Parameter Errors + +- **`E_INVALID_PAR_TYPE`** + + Thrown when a parameter has an invalid type on any static or instance methods. + + [Read more...](doc/error/e-invalid-par-type.md) + +- **`E_INVALID_PAR_VALUE`** + + Thrown for certain parameters when the type is correct, but the value is + invalid. + + [Read more...](doc/error/e-invalid-par-value.md) + +- **`E_MISSING_PARAMETER`** + + Thrown when a required parameter is missing on any static or instance methods. + + [Read more...](doc/error/e-missing-parameter.md) + +- **`E_PAR_OUT_OF_RANGE`** + + Thrown when a parameter is not within a valid range of values. + + [Read more...](doc/error/e-par-out-of-range.md) + +### Other Errors + +- **`E_DEFAULT_LOCALE_NOT_DEFINED`** + + Thrown when any static method, eg. `Globalize.formatNumber()` is used prior to setting the Global locale with `Globalize.locale( )`. + + [Read more...](doc/error/e-default-locale-not-defined.md) + +- **`E_MISSING_PLURAL_MODULE`** + + Thrown when plural module is needed, but not loaded, eg. to format currencies using the named form. + + [Read more...](doc/error/e-missing-plural-module.md) + +- **`E_UNSUPPORTED`** + + Thrown for unsupported features, eg. to format unsupported date patterns. + + [Read more...](doc/error/e-unsupported.md) + + +## Contributing + +If you are having trouble using Globalize after reading the documentation carefully, please post a question to [StackOverflow with the "javascript-globalize" tag][]. Questions that include a minimal demo are more likely to receive responses. + +In the spirit of open source software development, we always encourage community code contribution. To help you get started and before you jump into writing code, be sure to read [CONTRIBUTING.md](CONTRIBUTING.md). + +[StackOverflow with the "javascript-globalize" tag]: http://stackoverflow.com/tags/javascript-globalize + +For ideas where to start contributing, see the following queries to find what best suites your interest: [quick change][], [new features][], [bug fixes][], [documentation improvements][], [date module][], [currency module][], [message module][], [number module][], [plural module][], [relative time module][]. Last but not least, feel free to [get in touch](http://irc.jquery.org/). + +[bug fixes]: https://github.com/globalizejs/globalize/labels/bug +[documentation improvements]: https://github.com/globalizejs/globalize/labels/docs +[new features]: https://github.com/globalizejs/globalize/labels/new%20feature +[quick change]: https://github.com/globalizejs/globalize/labels/quick%20change + +[currency module]: https://github.com/globalizejs/globalize/labels/currency%20module +[date module]: https://github.com/globalizejs/globalize/labels/date%20module +[message module]: https://github.com/globalizejs/globalize/labels/message%20module +[number module]: https://github.com/globalizejs/globalize/labels/number%20module +[plural module]: https://github.com/globalizejs/globalize/labels/plural%20module +[relative time module]: https://github.com/globalizejs/globalize/labels/relative%20time%20module + +### Roadmap + +Our roadmap is the collection of all open issues and pull requests where you can find: + +- [Ongoing work][] lists our current sprint. Here you find where we're actively working on at this very moment. Priority is determined by the community needs and volunteering. If there is anything you want to be done, share your thoughts with us on any existing or new issue and especially volunteer to do it. +- [Everything else][] is potential next work that you could help us to accomplish now. Releases are published following semver rules as often as possible. + +[Ongoing work]: https://github.com/globalizejs/globalize/labels/Current%20Sprint +[Everything else]: https://github.com/globalizejs/globalize/issues?utf8=%E2%9C%93&q=is%3Aopen+-label%3A%22Current+Sprint%22+ + +## Development + +### File structure +``` +├── bower.json (metadata file) +├── CONTRIBUTING.md (doc file) +├── dist/ (consumable files, the built files) +├── external/ (external dependencies, eg. cldr.js, QUnit, RequireJS) +├── Gruntfile.js (Grunt tasks) +├── LICENSE (license file) +├── package.json (metadata file) +├── README.md (doc file) +├── src/ (source code) +│ ├── build/ (build helpers, eg. intro, and outro) +│ ├── common/ (common function helpers across modules) +│ ├── core.js (core module) +│ ├── date/ (date source code) +│ ├── date.js (date module) +│ ├── message.js (message module) +│ ├── number.js (number module) +│ ├── number/ (number source code) +│ ├── plural.js (plural module) +│ ├── plural/ (plural source code) +│ ├── relative-time.js (relative time module) +│ ├── relative-time/ (relative time source code) +│ ├── unit.js (unit module) +│ ├── unit/ (unit source code) +│ └── util/ (basic JavaScript helpers polyfills, eg array.map) +└── test/ (unit and functional test files) + ├── fixtures/ (CLDR fixture data) + ├── functional/ (functional tests) + ├── functional.html + ├── functional.js + ├── unit/ (unit tests) + ├── unit.html + └── unit.js +``` + +### Source files + +The source files are as granular as possible. When combined to generate the build file, all the excessive/overhead wrappers are cut off. It's following the same build model of jQuery and Modernizr. + +Core, and all modules' public APIs are located in the `src/` directory, ie. `core.js`, `date.js`, `message.js`, `number.js`, and `plural.js`. + +### Install development external dependencies + +Install Grunt and external dependencies. First, install the [grunt-cli](http://gruntjs.com/getting-started#installing-the-cli) and [bower](http://bower.io/) packages if you haven't before. These should be installed globally (like this: `npm install -g grunt-cli bower`). Then: + +```bash +npm install && bower install +``` + +### Tests + +Tests can be run either in the browser or using Node.js (via Grunt) after having installed the external development dependencies (for more details, see above). + +#### Unit tests + +To run the unit tests, run `grunt test:unit`, or run `grunt connect:keepalive` and open `http://localhost:9001/test/unit.html` in a browser. It tests the very specific functionality of each function (sometimes internal/private). + +The goal of the unit tests is to make it easy to spot bugs, easy to debug. + +#### Functional tests + +To run the functional tests, create the dist files by running `grunt`. Then, run `grunt test:functional`, or open `http://localhost:9001/test/functional.html` in a browser. Note that `grunt` will automatically run unit and functional tests for you to ensure the built files are safe. + +The goal of the functional tests is to ensure that everything works as expected when it is combined. + +### Build + +Build the distribution files after having installed the external development dependencies (for more details, see above). + +```bash +grunt +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/bower.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/bower.json new file mode 100644 index 000000000..b4fe6e50c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/bower.json @@ -0,0 +1,22 @@ +{ + "name": "globalize", + "license": "MIT", + "ignore": [ + "**/.*", + "test", + "CONTRIBUTING.md", + "bower.json" + ], + "dependencies": { + "cldrjs": "^0.5.4" + }, + "devDependencies": { + "cldr-data": ">=25", + "es5-shim": "3.4.0", + "make-plural": "eemeli/make-plural.js#3.0.0", + "messageformat": "SlexAxton/messageformat.js#v0.3.0-1", + "requirejs": "2.1.20", + "requirejs-plugins": "1.0.2", + "requirejs-text": "2.0.10" + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/browserstack.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/browserstack.json new file mode 100644 index 000000000..cbffa87f1 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/browserstack.json @@ -0,0 +1,17 @@ +{ + "test_framework": "qunit", + "test_path": [ "test/unit.html", "test/functional.html" ], + "browsers": [ + "chrome_previous", + "chrome_latest", + "firefox_previous", + "firefox_latest", + "ie_9", + "ie_10", + "ie_11", + "opera_previous", + "opera_latest", + "safari_previous", + "safari_latest" + ] +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/core/constructor.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/core/constructor.md new file mode 100644 index 000000000..cbc9147ff --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/core/constructor.md @@ -0,0 +1,28 @@ +## [new] Globalize( locale|cldr ) + +Create a Globalize instance. + +### Parameters + +#### locale|cldr + +Locale string or [Cldr instance](https://github.com/rxaviers/cldrjs) of the instance. + +### Example + +Prior to creating any Globalize instance, you must load `cldr/supplemental/likelySubtags.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +```javascript +var en = new Globalize( "en" ); + +// You can optionally omit the `new` operator. +var pt = Globalize( "pt" ); + +en.formatNumber( 3.1415 ); +// > 3.142 + +pt.formatNumber( 3.1415 ); +// > 3,142 +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/core/load.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/core/load.md new file mode 100644 index 000000000..7bd87c88f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/core/load.md @@ -0,0 +1,96 @@ +## Globalize.load( cldrJSONData, ... ) + +This method allows you to load CLDR JSON locale data. `Globalize.load()` is a proxy to `Cldr.load()`. + +This method can be called as many times as needed. All passed JSON objects are deeply merged internally. + +For more information, see https://github.com/rxaviers/cldrjs#readme. + +### Parameters + +#### cldrJSONData + +A JSON object with CLDR data. See [Getting Started](#../../../README.md#2-cldr-content) for more information. + +### Example + +```javascript +Globalize.load({ + "main": { + "en": { + "identity": { + "version": { + "_cldrVersion": "25", + "_number": "$Revision: 91 $" + }, + "generation": { + "_date": "$Date: 2014-03-13 22:27:12 -0500 (Thu, 13 Mar 2014) $" + }, + "language": "en" + }, + "dates": { + "calendars": { + "gregorian": { + "months": { + "format": { + "abbreviated": { + "1": "Jan", + "2": "Feb", + "3": "Mar", + "4": "Apr", + "5": "May", + "6": "Jun", + "7": "Jul", + "8": "Aug", + "9": "Sep", + "10": "Oct", + "11": "Nov", + "12": "Dec" + } + } + }, + "dayPeriods": { + "format": { + "wide": { + "am": "AM", + "am-alt-variant": "am", + "noon": "noon", + "pm": "PM", + "pm-alt-variant": "pm" + } + } + }, + "dateFormats": { + "medium": "MMM d, y" + }, + "timeFormats": { + "medium": "h:mm:ss a", + }, + "dateTimeFormats": { + "medium": "{1}, {0}" + } + } + } + }, + "numbers": { + "defaultNumberingSystem": "latn", + "symbols-numberSystem-latn": { + "group": "," + }, + "decimalFormats-numberSystem-latn": { + "standard": "#,##0.###" + } + } + } + }, + "supplemental": { + "version": { + "_cldrVersion": "25", + "_number": "$Revision: 91 $" + }, + "likelySubtags": { + "en": "en-Latn-US", + } + } +}); +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/core/locale.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/core/locale.md new file mode 100644 index 000000000..8deb1b2d7 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/core/locale.md @@ -0,0 +1,43 @@ +## Globalize.locale( [locale|cldr] ) + +Set default locale, or get it if locale argument is omitted. + +Return the default [Cldr instance](https://github.com/rxaviers/cldrjs). + +An application that supports globalization and/or localization will need to have a way to determine the user's preference. Attempting to automatically determine the appropriate locale is useful, but it is good practice to always offer the user a choice, by whatever means. + +Whatever your mechanism, it is likely that you will have to correlate the user's preferences with the list of locale data supported in the app. This method allows you to select the best match given the locale data that you have included and to set the Globalize locale to the one which the user prefers. + +LanguageMatching TBD (CLDR's spec http://www.unicode.org/reports/tr35/#LanguageMatching). + +### Parameters + +#### locale|cldr + +- The locale string, e.g., `"en"`, `"pt-BR"`, or `"zh-Hant-TW"`. Or, +- The [Cldr instance](https://github.com/rxaviers/cldrjs), e.g., new `Cldr( "en" )`. + +### Example + +Prior to using this function, you must load `cldr/supplemental/likelySubtags.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +```javascript +// Set "pt" as our default locale. +Globalize.locale( "pt" ); + +// Get default locale. +Globalize.locale(); +// > { +// attributes: { +// "languageId": "pt", +// "maxLanguageId": "pt_Latn_BR", +// "language": "pt", +// "script": "Latn", +// "territory": "BR", +// "region": "BR" +// }, +// some more stuff... +// } +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/currency/currency-formatter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/currency/currency-formatter.md new file mode 100644 index 000000000..41ea0c0f0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/currency/currency-formatter.md @@ -0,0 +1,196 @@ +## .currencyFormatter( currency [, options] ) ➜ function( value ) + +Return a function that formats a `currency` according to the given `options` or locale's defaults. + +The returned function is invoked with one argument: the Number `value` to be formatted. + +### Parameters + +#### currency + +3-letter currency code as defined by ISO 4217, eg. `"USD"`. + +#### options.style + +Optional. String `"symbol"` (default), `"accounting"`, `"code"` or `"name"`. See [`.numberFormatter( [options] )`](../number/number-formatter.md) for more options. + +#### value + +Number to be formatted, eg. `9.99`. + +### Example + +#### Static Formatter + +Prior to using any currency methods, you must load `cldr/main/{locale}/currencies.json`, `cldr/supplemental/currencyData.json`, and the CLDR content required by the number module. If using plural messages, you also must load the CLDR content required by the plural module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +#### Using the default options + +You can use the static method `Globalize.currencyFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.currencyFormatter( "USD" ); + +formatter( 9.99 ); +// > "$9.99" +``` + +#### Instance Formatter + +You can use the instance method `.currencyFormatter()`, which uses the instance locale. + +```javascript +var deFormatter = Globalize( "de" ).currencyFormatter( "EUR" ), + zhFormatter = Globalize( "zh" ).currencyFormatter( "EUR" ); + +deFormatter( 9.99 ); +// > "9,99 €" + +zhFormatter( 9.99 ); +// > "€ 9.99" + +``` + +For comparison, follow the formatting output of different symbols in different locales. + +| 3-letter currency code | en (English) | de (German) | zh (Chinese) | +| ---------------------------------- | ------------ | ----------- | ------------ | +| `.currencyFormatter( "USD" )( 1 )` | `$1.00` | `1,00 $` | `US$ 1.00` | +| `.currencyFormatter( "EUR" )( 1 )` | `€1.00` | `1,00 €` | `€ 1.00` | +| `.currencyFormatter( "CNY" )( 1 )` | `CN¥1.00` | `1,00 CN¥` | `¥ 1.00` | +| `.currencyFormatter( "JPY" )( 1 )` | `¥1` | `1 ¥` | `JP¥ 1` | +| `.currencyFormatter( "GBP" )( 1 )` | `£1.00` | `1,00 £` | `£ 1.00` | +| `.currencyFormatter( "BRL" )( 1 )` | `R$1.00` | `1,00 R$` | `R$ 1.00` | + +#### Using alternative `options.symbolForm` + +Using the narrow symbol form, the same symbols may be used for multiple currencies. Thus the symbol may be ambiguous, and should only be used where the context is clear. + +```js +Globalize( "en" ).currencyFormatter( "HKD" )( 1 ); +// > "HK$1.00" + +Globalize( "en" ).currencyFormatter( "HKD", { symbolForm: "narrow" } )( 1 ); +// > "$1.00" +``` + +#### Configuring style + +For the accounting variation of the symbol format, use `style: "accounting"`. + +```javascript +var formatter = Globalize( "en" ).currencyFormatter( "USD", { + style: "accounting" +}); + +formatter( -1 ); +// > "($1.00)" +``` + +For plural messages, use `style: "name"`. + +```javascript +var formatter = Globalize( "en" ).currencyFormatter( "USD", { + style: "name" +}); + +formatter( 0 ); +// > "0.00 US dollars" + +formatter( 1 ); +// > "1.00 US dollar" +``` + +For comparison, follow the formatting output of different symbols in different locales using the plural messages `Globalize( locale ).currencyFormatter( currency, { style: "name" } )( 1 )`. + +| 3-letter currency code | en (English) | de (German) | zh (Chinese) | +| ---------------------- | ----------------------------- | -------------------------------- | ------------ | +| `USD` | `1.00 US dollar` | `1,00 US-Dollar` | `1.00美元` | +| `EUR` | `1.00 euro` | `1,00 Euro` | `1.00欧元` | +| `CNY` | `1.00 Chinese yuan` | `1,00 Chinesischer Yuan` | `1.00人民币` | +| `JPY` | `1 Japanese yen` | `1 Japanischer Yen` | `1日元` | +| `GBP` | `1.00 British pound sterling` | `1,00 Britisches Pfund Sterling` | `1.00英镑` | +| `BRL` | `1.00 Brazilian real` | `1,00 Brasilianischer Real` | `1.00巴西雷亚尔` | + +For the international currency code, use `style: "code"`. + +```javascript +var formatter = Globalize( "en" ).currencyFormatter( "USD", { + style: "code" +}); + +formatter( 9.99 ); +// > "9.99 USD" +``` + +#### Configuring inherited number options + +Override the number of digits, grouping separators, rounding function or any other [`.numberFormatter()` options](../number/number-formatter.md). + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.currencyFormatter( "USD", { + minimumFractionDigits: 0, + style: "name" +}); + +formatter( 1 ); +// > "1 US dollar" + +formatter = Globalize.currencyFormatter( "USD", { + round: "ceil" +}); + +formatter( 1.491 ); +// > "$1.50" +``` + +#### Formatting Compact Currencies + +```js +var shortFormatter = Globalize( "en" ).currencyFormatter( "USD", { + compact: "short" +}); + +var longFormatter = Globalize( "en" ).currencyFormatter( "USD", { + compact: "long" +}); + +shortFormatter( 12830000000 ); +// > "$13B" + +longFormatter( 12830000000 ); +// > "$13 billion" +``` + +The minimumSignificantDigits and maximumSignificantDigits options are specially useful to control the number of digits to display. + +```js +Globalize( "en" ).formatCurrency( 12830000000, "USD", { + compact: "short", + minimumSignificantDigits: 3, + maximumSignificantDigits: 3 +}); +// > "$12.8B" +``` + +#### Performance Suggestion + +For improved performance on iterations, first create the formatter. Then, reuse it on each loop. + +```javascript +var formatter = Globalize( "en" ).currencyFormatter( "USD" ); + +renderInvoice({ + prices: prices.map(function( price ) { + return formatter( price ); + }) +}); +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/currency/currency-to-parts-formatter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/currency/currency-to-parts-formatter.md new file mode 100644 index 000000000..0dcbb4d02 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/currency/currency-to-parts-formatter.md @@ -0,0 +1,117 @@ +## .currencyToPartsFormatter( currency [, options] ) ➜ function( value ) + +Return a function that formats a `currency` into parts tokens according to the given `options` or locale's defaults. + +The returned function is invoked with one argument: the Number `value` to be formatted. + +### Parameters + +#### currency + +3-letter currency code as defined by ISO 4217, eg. `"USD"`. + +#### options + +Please, see [.currencyFormatter() options](./currency-formatter.md#parameters). + +#### value + +Number to be formatted, eg. `9.99`. + +### Returns + +An Array of objects containing the formatted currency in parts. The returned structure looks like this: + +```js +[ + { type: "day", value: "17" }, + { type: "weekday", value: "Monday" } +] +``` + +Possible types are the following: + +- `currency` + + The currency string, such as the symbols `"$"` and `"€"` or the name `"Dollar"`, `"Euro"` depending on which style is used. + +Please, see [.numberToPartsFormatter()](../number/number-to-parts-formatter.md#returns) for details about the inherited number parts such as `decimal`, `fraction`, `group`, `infinity`, `integer`, `literal`, `minusSign`, `nan`, `plusSign`, `percentSign`, and `compact`. + +### Example + +Prior to using any currency methods, you must load `cldr/main/{locale}/currencies.json`, `cldr/supplemental/currencyData.json`, and the CLDR content required by the number module. If using plural messages, you also must load the CLDR content required by the plural module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +#### Static Formatter + +#### Using the default options + +You can use the static method `Globalize.currencyToPartsFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.currencyToPartsFormatter( "USD" ); + +formatter( 9.99 ); +// > [ +// { "type": "currency", "value": "$" }, +// { "type": "integer", "value": "9" }, +// { "type": "decimal", "value": "." }, +// { "type": "fraction", "value": "99" } +// ] +``` + +#### Instance Formatter + +You can use the instance method `.currencyFormatter()`, which uses the instance locale. + +```javascript +var deFormatter = Globalize( "de" ).currencyToPartsFormatter( "EUR" ), + zhFormatter = Globalize( "zh" ).currencyToPartsFormatter( "EUR" ); + +deFormatter( 9.99 ); +// > [ +// { "type": "integer", "value": "9" }, +// { "type": "decimal", "value": "," }, +// { "type": "fraction", "value": "99" }, +// { "type": "literal", "value": " " }, +// { "type": "currency", "value": "€" } +// ] + +zhFormatter( 9.99 ); +// > [ +// { "type": "currency", "value": "€" }, +// { "type": "integer", "value": "9" }, +// { "type": "decimal", "value": "." }, +// { "type": "fraction", "value": "99" } +// ] +``` + +The information is available separately and it can be formatted and concatenated again in a customized way. For example by using [`Array.prototype.map()`][], [arrow functions][], a [switch statement][], [template literals][], and [`Array.prototype.reduce()`][]. + +[`Array.prototype.map()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map +[arrow functions]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions +[switch statement]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch +[template literals]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals +[`Array.prototype.reduce()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce + +#### More Examples + +Please, see [.currencyFormatter() example](./currency-formatter.md#example) for additional examples such as using alternative `symbolForm`, configuring `style` (symbol, accounting, and name styles), and the inherited number options (e.g., compact numbers). + +#### Performance Suggestion + +For improved performance on iterations, first create the formatter. Then, reuse it on each loop. + +```javascript +var formatter = Globalize( "en" ).currencyToPartsFormatter( "USD" ); + +renderInvoice({ + prices: prices.map(function( price ) { + return formatter( price ); + }) +}); +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/date-formatter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/date-formatter.md new file mode 100644 index 000000000..a74cc07a0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/date-formatter.md @@ -0,0 +1,203 @@ +## .dateFormatter( [options] ) ➜ function( value ) + +Return a function that formats a date according to the given `options`. The default formatting is numeric year, month, and day (i.e., `{ skeleton: "yMd" }`. + +The returned function is invoked with one argument: the Date instance `value` to be formatted. + +### Parameters + +#### options.skeleton + +String value indicating a skeleton (see description above), eg. `{ skeleton: "GyMMMd" }`. + +Skeleton provides a more flexible formatting mechanism than the predefined list `full`, `long`, `medium`, or `short` represented by date, time, or datetime. Instead, they are an open-ended list of patterns containing only date field information, and in a canonical order. For a complete list of skeleton patterns [check the unicode CLDR documentation](http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). + +For example: + +| locale | `"GyMMMd"` skeleton | +| ------ | ------------------------- | +| *en* | `"Apr 9, 2014 AD"` | +| *zh* | `"公元2014年4月9日"` | +| *es* | `"9 abr. de 2014 d. C."` | +| *ar* | `"٩ أبريل، ٢٠١٤ م"` | +| *pt* | `"9 de abr de 2014 d.C."` | + +#### options.date + +One of the following String values: `full`, `long`, `medium`, or `short`, eg., `{ date: "full" }`. + +#### options.time + +One of the following String values: `full`, `long`, `medium`, or `short`, eg., `{ time: "full" }`. + +#### options.datetime + +One of the following String values: `full`, `long`, `medium`, or `short`, eg., `{ datetime: "full" }`. + +#### options.raw + +String value indicating a machine [raw pattern (anything in the "Sym." column)](http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table) eg. `{ raw: "dd/mm" }`. Note this is NOT recommended for i18n in general. Use `skeleton` instead. + +#### options.timeZone + +String based on the time zone names of the [IANA time zone database](https://www.iana.org/time-zones), such as `"Asia/Shanghai"`, `"Asia/Kolkata"`, `"America/New_York"`. + +#### value + +Date instance to be formatted, eg. `new Date()`; + +### Example + +Prior to using any date methods, you must load `cldr/main/{locale}/ca-gregorian.json`, `cldr/main/{locale}/timeZoneNames.json`, `cldr/supplemental/metaZones.json`, `cldr/supplemental/timeData.json`, `cldr/supplemental/weekData.json`, and the CLDR content required by the number module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.dateFormatter(); + +formatter( new Date( 2010, 10, 30, 17, 55 ) ); +// > "11/30/2010" +``` + +You can use the instance method `.dateFormatter()`, which uses the instance locale. + +```javascript +var enFormatter = Globalize( "en" ).dateFormatter(), + deFormatter = Globalize( "de" ).dateFormatter(); + +enFormatter( new Date( 2010, 10, 30, 17, 55 ) ); +// > "11/30/2010" + +deFormatter( new Date( 2010, 10, 30, 17, 55 ) ); +// > "30.11.2010" +``` + +#### Using short, medium, long, and full presets + +Use convenient presets for `date`, `time`, or `datetime`. Their possible values are: `short`, `medium`, `long`, and `full`. + +| `presetValue` | `Globalize( "en" ).dateFormatter( presetValue )( new Date( 2010, 10, 1, 17, 55 ) )` | +| ------------------------ | ---------------------------------------- | +| `{ date: "short" }` | `"11/1/10"` | +| `{ date: "medium" }` | `"Nov 1, 2010"` | +| `{ date: "long" }` | `"November 1, 2010"` | +| `{ date: "full" }` | `"Monday, November 1, 2010"` | +| `{ time: "short" }` | `"5:55 PM"` | +| `{ time: "medium" }` | `"5:55:00 PM"` | +| `{ time: "long" }` | `"5:55:00 PM PST"` | +| `{ time: "full" }` | `"5:55:00 PM Pacific Standard Time"` | +| `{ datetime: "short" }` | `"11/1/10, 5:55 PM"` | +| `{ datetime: "medium" }` | `"Nov 1, 2010, 5:55:00 PM"` | +| `{ datetime: "long" }` | `"November 1, 2010 at 5:55:00 PM PST"` | +| `{ datetime: "full" }` | `"Monday, November 1, 2010 at 5:55:00 PM Pacific Standard Time"` | + +For comparison, follow the same formatter `{ datetime: "short" }` on different locales. + +| locale | `Globalize( locale ).dateFormatter({ datetime: "short" })( new Date( 2010, 10, 1, 17, 55 ) )` | +| ---------------- | ---------------------------------------- | +| *en* | `"11/1/10, 5:55 PM"` | +| *en_GB* | `"01/11/2010 17:55"` | +| *zh* | `"10/11/1 下午5:55"` | +| *zh-u-nu-native* | `"一〇/一一/一 下午五:五五"` | +| *es* | `"1/11/10 17:55"` | +| *de* | `"01.11.10 17:55"` | +| *pt* | `"01/11/10 17:55"` | +| *ar* | `"١‏/١١‏/٢٠١٠ ٥،٥٥ م"` | + +#### Using open-ended skeletons + +Use open-ended skeletons for more flexibility (see its description [above](#parameters)). See some examples below. + +| `skeleton` | `Globalize( "en" ).dateFormatter( skeleton )( new Date( 2010, 10, 1, 17, 55 ) )` | +| ---------------------------- | ---------------------------------------- | +| `{ skeleton: "E" }` | `"Tue"` | +| `{ skeleton: "EHm" }` | `"Tue 17:55"` | +| `{ skeleton: "EHms" }` | `"Tue 17:55:00"` | +| `{ skeleton: "Ed" }` | `"30 Tue"` | +| `{ skeleton: "Ehm" }` | `"Tue 5:55 PM"` | +| `{ skeleton: "Ehms" }` | `"Tue 5:55:00 PM"` | +| `{ skeleton: "Gy" }` | `"2010 AD"` | +| `{ skeleton: "GyMMM" }` | `"Nov 2010 AD"` | +| `{ skeleton: "GyMMMEd" }` | `"Tue, Nov 30, 2010 AD"` | +| `{ skeleton: "GyMMMd" }` | `"Nov 30, 2010 AD"` | +| `{ skeleton: "H" }` | `"17"` | +| `{ skeleton: "Hm" }` | `"17:55"` | +| `{ skeleton: "Hms" }` | `"17:55:00"` | +| `{ skeleton: "M" }` | `"11"` | +| `{ skeleton: "MEd" }` | `"Tue, 11/30"` | +| `{ skeleton: "MMM" }` | `"Nov"` | +| `{ skeleton: "MMMEd" }` | `"Tue, Nov 30"` | +| `{ skeleton: "MMMd" }` | `"Nov 30"` | +| `{ skeleton: "Md" }` | `"11/30"` | +| `{ skeleton: "d" }` | `"30"` | +| `{ skeleton: "h" }` | `"5 PM"` | +| `{ skeleton: "hm" }` | `"5:55 PM"` | +| `{ skeleton: "hms" }` | `"5:55:00 PM"` | +| `{ skeleton: "ms" }` | `"55:00"` | +| `{ skeleton: "y" }` | `"2010"` | +| `{ skeleton: "yM" }` | `"11/2010"` | +| `{ skeleton: "yMEd" }` | `"Tue, 11/30/2010"` | +| `{ skeleton: "yMMM" }` | `"Nov 2010"` | +| `{ skeleton: "yMMMEd" }` | `"Tue, Nov 30, 2010"` | +| `{ skeleton: "yMMMd" }` | `"Nov 30, 2010"` | +| `{ skeleton: "yMd" }` | `"11/30/2010"` | +| `{ skeleton: "yQQQ" }` | `"Q4 2010"` | +| `{ skeleton: "yQQQQ" }` | `"4th quarter 2010"` | +| `{ skeleton: "GyMMMEdhms" }` | `"Tue, Nov 30, 2010 AD, 5:55:00 PM"` | +| `{ skeleton: "Ehms" }` | `"Tue 5:55:00 PM"` | +| `{ skeleton: "yQQQHm" }` | `"Q4 2010, 17:55"` | +| `{ skeleton: "MMMEdhm" }` | `"Tue, Nov 30, 5:55 PM"` | +| `{ skeleton: "yMMMdhm" }` | `"Nov 30, 2010, 5:55 PM"` | + + +```javascript +var globalize = Globalize( "en" ), + date = new Date( 2010, 10, 30, 17, 55 ), + monthDayFormatter = globalize.dateFormatter({ skeleton: "MMMd" }), + hourMinuteSecondFormatter = globalize.dateFormatter({ skeleton: "Hms" }); + +monthDayFormatter( date ); +// > "Nov 30" + +hourMinuteSecondFormatter( date ); +// > "17:55:00" +``` + +#### Using time zones + +Using specific timeZones, i.e., using `options.timezone`. Note that prior to using it, you must load IANA time zone data. + +```js +Globalize.loadTimeZone( require( "iana-tz-data" ) ); +``` + +```js +Globalize.locale( "en" ); + +Globalize.dateFormatter({ datetime: "medium", timeZone: "America/Los_Angeles" })( new Date() ); +// > "Nov 1, 2010, 12:55:00 PM" + +Globalize.dateFormatter({ datetime: "medium", timeZone: "America/Sao_Paulo" })( new Date() ) +// > "Nov 1, 2010, 5:55:00 PM" + +Globalize.dateFormatter({ datetime: "full", timeZone: "Europe/Berlin" })( new Date() ) +// > "Monday, November 1, 2010 at 8:55:00 PM Central European Standard Time" +``` + +#### Note on performance + +For improved performance on iterations, first create the formatter. Then, reuse it on each loop. + +```javascript +// In an application, this array could have a few hundred entries +var dates = [ new Date( 2010, 10, 30, 17, 55 ), new Date( 2015, 3, 18, 4, 25 ) ]; +var formatter = Globalize( "en" ).dateFormatter({ time: "short" }); + +var formattedDates = dates.map(function( date ) { + return formatter( date ); +}); +// > Array [ "5:55 PM", "4:25 AM" ] +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/date-parser.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/date-parser.md new file mode 100644 index 000000000..5800069e9 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/date-parser.md @@ -0,0 +1,60 @@ +## .dateParser( [options] ) ➜ function( value ) + +Return a function that parses a string representing a date into a JavaScript Date object according to the given `options`. The default parsing assumes numeric year, month, and day (i.e., `{ skeleton: "yMd" }`). + +The returned function is invoked with one argument: the String `value` to be parsed. + +### Parameters + +#### options + +See [.dateFormatter() options](./date-formatter.md#parameters). + +#### value + +String with date to be parsed, eg. `"11/1/10, 5:55 PM"`. + +### Example + +Prior to using any date methods, you must load `cldr/main/{locale}/ca-gregorian.json`, `cldr/main/{locale}/timeZoneNames.json`, `cldr/supplemental/timeData.json`, `cldr/supplemental/weekData.json`, and the CLDR content required by the number module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.dateParser()`, which uses the default locale. + +```javascript +var parser; + +Globalize.locale( "en" ); +parser = Globalize.dateParser(); + +parser( "1/2/2013" ); +// > Wed Jan 02 2013 00:00:00 + +Globalize.locale( "es" ); +parser = Globalize.dateParser(); + +parser( "1/2/2013" ); +// > Fri Feb 01 2013 00:00:00 +``` + +You can use the instance method `.dateParser()`, which uses the instance locale. + +```javascript +var esParser = Globalize( "es" ).dateParser({ date: short }); + +esParser( "1/2/13" ); +// > Fri Feb 01 2013 00:00:00 +``` + +For improved performance on iterations, first create the parser. Then, reuse it +on each loop. + +```javascript +var formattedDates = [ new Date( a ), new Date( b ), ... ]; +var parser = Globalize( "en" ).dateParser({ time: "short" }); + +dates = formattedDates.map(function( formattedDate ) { + return parser( formattedDate ); +}); +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/date-to-parts-formatter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/date-to-parts-formatter.md new file mode 100644 index 000000000..e43938ce6 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/date-to-parts-formatter.md @@ -0,0 +1,176 @@ +## .dateToPartsFormatter( [options] ) ➜ function( value ) + +Return a function that formats a date into parts tokens according to the given `options`. The default formatting is numeric year, month, and day (i.e., `{ skeleton: "yMd" }`. + +The returned function is invoked with one argument: the Date instance `value` to be formatted. + +### Parameters + +#### options + +Please, see [.dateFormatter() options](./date-formatter.md#parameters). + +#### value + +Date instance to be formatted, eg. `new Date()`; + +### Returns + +An Array of objects containing the formatted date in parts. The returned structure looks like this: + +```js +[ + { type: "day", value: "17" }, + { type: "weekday", value: "Monday" } +] +``` + +Possible types are the following: + +- `day` + + The string used for the day, e.g., `"17"`, `"١٦"`. + +- `dayperiod` + + The string used for the day period, e.g., `"AM"`, `"PM"`. + +- `era` + + The string used for the era, e.g., `"AD"`, `"d. C."`. + +- `hour` + + The string used for the hour, e.g., `"3"`, `"03"`. + +- `literal` + + The string used for separating date and time values, e.g., `"/"`, `", "`, + `"o'clock"`, `" de "`. + +- `minute` + + The string used for the minute, e.g., `"00"`. + +- `month` + + The string used for the month, e.g., `"12"`. + +- `second` + + The string used for the second, e.g., `"07"` or `"42"`. + +- `zone` + + The string used for the name of the time zone, e.g., `"EST".` + +- `weekday` + + The string used for the weekday, e.g., `"M"`, `"Monday"`, `"Montag".` + +- `year` + + The string used for the year, e.g., `"2012"`, `"96".` + + +### Example + +Prior to using any date methods, you must load `cldr/main/{locale}/ca-gregorian.json`, `cldr/main/{locale}/timeZoneNames.json`, `cldr/supplemental/timeData.json`, `cldr/supplemental/weekData.json`, and the CLDR content required by the number module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.dateToPartsFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.dateToPartsFormatter(); + +formatter( new Date( 2010, 10, 30 ) ); +// > [ +// { "type": "month", "value": "11" }, +// { "type": "literal", "value": "/" }, +// { "type": "day", "value": "30" }, +// { "type": "literal", "value": "/" }, +// { "type": "year", "value": "2010" } +// ] +``` + +You can use the instance method `.dateToPartsFormatter()`, which uses the instance locale. + +```javascript +var enFormatter = Globalize( "en" ).dateToPartsFormatter(), + deFormatter = Globalize( "de" ).dateToPartsFormatter(); + +enFormatter( new Date( 2010, 10, 30 ) ); +// > [ +// { "type": "month", "value": "11" }, +// { "type": "literal", "value": "/" }, +// { "type": "day", "value": "30" }, +// { "type": "literal", "value": "/" }, +// { "type": "year", "value": "2010" } +// ] + +deFormatter( new Date( 2010, 10, 30 ) ); +// > [ +// { type: 'day', value: '30' }, +// { type: 'literal', value: '.' }, +// { type: 'month', value: '11' }, +// { type: 'literal', value: '.' }, +// { type: 'year', value: '2010' } +// ] +``` + +The information is available separately and it can be formatted and concatenated again in a customized way. For example by using [`Array.prototype.map()`][], [arrow functions][], a [switch statement][], [template literals][], and [`Array.prototype.reduce()`][]. + +[`Array.prototype.map()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map +[arrow functions]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions +[switch statement]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch +[template literals]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals +[`Array.prototype.reduce()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.dateToPartsFormatter({datetime: "short"}); + +formatter( new Date( 2010, 10, 30, 17, 55 ) ).map(({type, value}) => { + switch ( type ) { + case "year": return `${value}`; + default: return value; + } +}).join( "" ); +// > "11/30/10, 5:55 PM" +``` + +Please, see [.dateFormatter() example](./date-formatter.md#example) for additional examples such as using `date`, `time`, `datetime`, and `skeleton` options. + +For improved performance on iterations, first create the formatter. Then, reuse it on each loop. + +```javascript +// In an application, this array could have a few hundred entries +var dates = [ new Date( 2010, 10, 30, 17, 55 ), new Date( 2015, 3, 18, 4, 25 ) ]; +var formatter = Globalize( "en" ).dateToPartsFormatter({ time: "short" }); + +var formattedDates = dates.map(function( date ) { + return formatter( date ); +}); +// > [ +// [ +// { "type": "hour", "value": "5" }, +// { "type": "literal", "value": ":" }, +// { "type": "minute", "value": "55" }, +// { "type": "literal", "value": " " }, +// { "type": "dayperiod", "value": "PM" } +// ], +// [ +// { "type": "hour", "value": "4" }, +// { "type": "literal", "value": ":" }, +// { "type": "minute", "value": "25" }, +// { "type": "literal", "value": " " }, +// { "type": "dayperiod", "value": "AM" } +// ] +// ] +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/load-iana-time-zone.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/load-iana-time-zone.md new file mode 100644 index 000000000..fe7a5b8c9 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/date/load-iana-time-zone.md @@ -0,0 +1,29 @@ +## Globalize.loadTimeZone( ianaTzData ) + +This method allows you to load IANA time zone data to enable `options.timeZone` feature on date formatters and parsers. + +### Parameters + +#### ianaTzData + +A JSON object with zdumped IANA timezone data. Get the data via [`iana-tz-data`](https://github.com/rxaviers/iana-tz-data). + +### Example + +```javascript +Globalize.loadTimeZone({ + "zoneData": { + ... + "America": { + ... + "New_York": { + abbrs: [], + untils: [], + offsets: [], + isdsts: [] + } + ... + } + } +}); +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/message/load-messages.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/message/load-messages.md new file mode 100644 index 000000000..7ee0b842b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/message/load-messages.md @@ -0,0 +1,105 @@ +## .loadMessages( json ) + +Load messages data. + +The first level of keys must be locales. For example: + +``` +{ + en: { + hello: "Hello" + }, + pt: { + hello: "Olá" + } +} +``` + +ICU MessageFormat pattern is supported: variable replacement, gender and plural inflections. For more information see [`.messageFormatter( path ) ➡ function([ variables ])`](./message-formatter.md). + +The provided messages are stored along side other cldr data, under the "globalize-messages" key. This allows Globalize to reuse the traversal methods provided by cldrjs. You can inspect this data using `cldrjs.get("globalize-messages")`. + +### Parameters + +#### json + +JSON object of messages data. Keys can use any character, except `/`, `{` and `}`. Values (i.e., the message content itself) can contain any character. + +### Example + +```javascript +Globalize.loadMessages({ + pt: { + greetings: { + hello: "Olá", + bye: "Tchau" + } + } +}); + +Globalize( "pt" ).formatMessage( "greetings/hello" ); +// > Olá +``` + +#### Multiline strings + +Use Arrays as a convenience for multiline strings. The lines will be joined by a space. + +```javascript +Globalize.loadMessages({ + en: { + longText: [ + "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eligendi non", + "quis exercitationem culpa nesciunt nihil aut nostrum explicabo", + "reprehenderit optio amet ab temporibus asperiores quasi cupiditate.", + "Voluptatum ducimus voluptates voluptas?" + ] + } +}); + +Globalize( "en" ).formatMessage( "longText" ); +// > "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eligendi non quis exercitationem culpa nesciunt nihil aut nostrum explicabo reprehenderit optio amet ab temporibus asperiores quasi cupiditate. Voluptatum ducimus voluptates voluptas?" +``` + +#### Messages inheritance + +It's possible to inherit messages, for example: + +```javascript +Globalize.loadMessages({ + root: { + amen: "Amen" + }, + de: {}, + en: {}, + "en-GB": {}, + fr: {}, + pt: { + amen: "Amém" + }, + "pt-PT": {} +}); + +Globalize( "de" ).formatMessage( "amen" ); +// > "Amen" + +Globalize( "en" ).formatMessage( "amen" ); +// > "Amen" + +Globalize( "en-GB" ).formatMessage( "amen" ); +// > "Amen" + +Globalize( "fr" ).formatMessage( "amen" ); +// > "Amen" + +Globalize( "pt-PT" ).formatMessage( "amen" ); +// > "Amém" +``` + +Note that `de`, `en`, `en-GB`, `fr`, and `pt-PT` are empty. `.formatMessage()` inherits `pt-PT` messages from `pt` (`pt-PT` ➡ `pt`), and it inherits the other messages from root, eg. `en-GB` ➡ `en-001` ➡ `en` ➡ `root`. Yes, `root` is the last bundle of the parent lookup. + +Attention: On browsers, message inheritance only works if the optional dependency `cldr/unresolved` is loaded. + +```html + +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/message/message-formatter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/message/message-formatter.md new file mode 100644 index 000000000..e501a24c0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/message/message-formatter.md @@ -0,0 +1,208 @@ +## .messageFormatter( path ) ➡ function([ variables ]) + +Return a function that formats a message (using ICU message format pattern) given its path and a set of variables into a user-readable string. It supports pluralization and gender inflections. + +Use [`Globalize.loadMessages( json )`](./load-messages.md) to load +messages data. + +### Parameters + +#### path + +String or Array containing the path of the message content, eg., `"greetings/bye"`, or `[ "greetings", "bye" ]`. + +#### variables + +Optional. Variables can be Objects, where each property can be referenced by name inside a message; or Arrays, where each entry of the Array can be used inside a message, using numeric indices. When passing one or more arguments of other types, they're converted to an Array and used as such. + +### Example + +You can use the static method `Globalize.messageFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.loadMessages({ + pt: { + greetings: { + bye: "Tchau" + } + } +}); + +Globalize.locale( "pt" ); +formatter = Globalize.messageFormatter( "greetings/bye" ); + +formatter(); +// > "Tchau" +``` + +You can use the instance method `.messageFormatter()`, which uses the instance locale. + +```javascript +var pt = new Globalize( "pt" ), + formatter = pt.messageFormatter( "greetings/bye" ); + +formatter(); +// > "Tchau" +``` + +#### Simple Variable Replacement + +```javascript +var formatter; + +Globalize.loadMessages({ + en: { + hello: "Hello, {0} {1} {2}", + hey: "Hey, {first} {middle} {last}" + } +}); + +formatter = Globalize( "en" ).messageFormatter( "hello" ); + +// Numbered variables using Array. +formatter([ "Wolfgang", "Amadeus", "Mozart" ]); +// > "Hello, Wolfgang Amadeus Mozart" + +// Numbered variables using function arguments. +formatter( "Wolfgang", "Amadeus", "Mozart" ); +// > "Hello, Wolfgang Amadeus Mozart" + +// Named variables using Object key-value pairs. +formatter = Globalize( "en" ).messageFormatter( "hey" ); +formatter({ + first: "Wolfgang", + middle: "Amadeus", + last: "Mozart" +}); +// > "Hey, Wolfgang Amadeus Mozart" +``` + +#### Gender inflections + +`select` can be used to format any message variations that works like a switch. + +```javascript +var formatter; + +// Note you can define multiple lines message using an Array of Strings. +Globalize.loadMessages({ + en: { + party: [ + "{hostGender, select,", + " female {{host} invites {guest} to her party}", + " male {{host} invites {guest} to his party}", + " other {{host} invites {guest} to their party}", + "}" + ] + } +}); + +formatter = Globalize( "en" ).messageFormatter( "party" ); + +formatter({ + guest: "Mozart", + host: "Beethoven", + hostGender: "male" +}); +// > "Beethoven invites Mozart to his party" +``` + +#### Plural inflections + +It uses the plural forms `zero`, `one`, `two`, `few`, `many`, or `other` (required). Note English only uses `one` and `other`. So, including `zero` will never get called, even when the number is 0. For more information see [`.pluralGenerator()`](../plural/plural-generator.md). + +```javascript +var numberFormatter, taskFormatter, + en = new Globalize( "en" ); + +// Note you can define multiple lines message using an Array of Strings. +Globalize.loadMessages({ + en: { + task: [ + "You have {count, plural,", + " one {one task}", + " other {{formattedCount} tasks}", + "} remaining" + ] + } +}); + +numberFormatter = en.numberFormatter(); +taskFormatter = en.messageFormatter( "task" ); + +taskFormatter({ + count: 1000, + formattedCount: numberFormatter( 1000 ) +}); +// > "You have 1,000 tasks remaining" +``` + +Literal numeric keys can be used in `plural` to match single, specific numbers. + +```javascript +var taskFormatter, + en = new Globalize( "en" ); + +// Note you can define multiple lines message using an Array of Strings. +Globalize.loadMessages({ + en: { + task: [ + "You have {count, plural,", + " =0 {no tasks}", + " one {one task}", + " other {{formattedCount} tasks}", + "} remaining" + ] + } +}); + +taskFormatter = Globalize( "en" ).messageFormatter( "task" ); + +taskFormatter({ + count: 0, + formattedCount: en.numberFormatter( 0 ) +}); +// > "You have no tasks remaining" +``` + +You may find useful having the plural forms calculated with an offset applied. +Use `#` to output the resulting number. Note literal numeric keys do NOT use the +offset value. + +```javascript +var likeFormatter, + en = new Globalize( "en" ); + +Globalize.loadMessages({ + en: { + likeIncludingMe: [ + "{0, plural, offset:1", + " =0 {Be the first to like this}", + " =1 {You liked this}", + " one {You and someone else liked this}", + " other {You and # others liked this}", + "}" + ] + } +}); + +likeFormatter = Globalize( "en" ).messageFormatter( "likeIncludingMe" ); + +likeFormatter( 0 ); +// > "Be the first to like this" + +likeFormatter( 1 ); +// > "You liked this" + +likeFormatter( 2 ); +// > "You and someone else liked this" + +likeFormatter( 3 ); +// > "You and 2 others liked this" +``` + +Read on [SlexAxton/messageFormatter.js][] for more information on regard of ICU MessageFormat. + +[SlexAxton/messageFormatter.js]: https://github.com/SlexAxton/messageformat.js/#no-frills diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/number/number-formatter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/number/number-formatter.md new file mode 100644 index 000000000..dc51802d2 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/number/number-formatter.md @@ -0,0 +1,202 @@ +## .numberFormatter( [options] ) ➜ function( value ) + +Return a function that formats a number according to the given options. + +The returned function is invoked with one argument: the Number `value` to be formatted. + +### Parameters + +#### options.style + +Optional. String `decimal` (default), or `percent`. + +#### options.minimumIntegerDigits + +Optional. Non-negative integer Number value indicating the minimum integer digits to be used. Numbers will be padded with leading zeroes if necessary. + +#### options.minimumFractionDigits, options.maximumFractionDigits + +Optional. Non-negative integer Number values indicating the minimum and maximum fraction digits to be used. Numbers will be rounded or padded with trailing zeroes if necessary. Either one or both of these properties must be present. If they are, they will override minimum and maximum fraction digits derived from the CLDR patterns. + +#### options.minimumSignificantDigits, options.maximumSignificantDigits + +Optional. Positive integer Number values indicating the minimum and maximum fraction digits to be shown. Either none or both of these properties are present. If they are, they override minimum and maximum integer and fraction digits. The formatter uses however many integer and fraction digits are required to display the specified number of significant digits. + +#### options.round + +Optional. String with rounding method `ceil`, `floor`, `round` (default), or `truncate`. + +#### options.useGrouping + +Optional. Boolean (default is true) value indicating whether a grouping separator should be used. + +#### options.compact + +Optional. String `short` or `long` indicating which compact number format should be used to represent the number. + +### Examples + +#### Static Formatter + +Prior to using any number methods, you must load `cldr/main/{locale}/numbers.json` and `cldr/supplemental/numberingSystems.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.numberFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.numberFormatter(); + +formatter( 3.141592 ); +// > "3.142" +``` + +#### Instance Formatter + +You can use the instance method `.numberFormatter()`, which uses the instance +locale. + +```javascript +var arFormatter = Globalize( "ar" ).numberFormatter(), + esFormatter = Globalize( "es" ).numberFormatter(), + zhFormatter = Globalize( "zh-u-nu-native" ).numberFormatter(); + +arFormatter( 3.141592 ); +// > "٣٫١٤٢" + +esFormatter( 3.141592 ); +// > "3,142" + +zhFormatter( 3.141592 ); +// > "三.一四二" +``` + +#### Configuring decimal places + +The number of decimal places can be decreased or increased using `minimumFractionDigits` and `maximumFractionDigits`. + +```javascript +Globalize.numberFormatter({ maximumFractionDigits: 2 })( 3.141592 ); +// > "3.14" + +Globalize.numberFormatter({ minimumFractionDigits: 2 })( 1.5 ); +// > "1.50" +``` + +#### Configuring significant digits + +The number of significant (non-zero) digits can be decreased or increased using `minimumSignificantDigits` and `maximumSignificantDigits`. + +```javascript +var formatter = Globalize.numberFormatter({ + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +formatter( 3.141592 ); +// > "3.14" + +formatter = Globalize.numberFormatter({ + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +formatter( 12345 ); +// > "12,300" + +formatter = Globalize.numberFormatter({ + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +formatter( 0.00012345 ); +// > "0.000123" +``` + +#### Formatting Percentages + +Numbers can be formatted as percentages. + +```javascript +var enFormatter = Globalize( "en" ).numberFormatter({ + style: "percent", + minimumFractionDigits: 1, + maximumFractionDigits: 1 +}); + +var frFormatter = Globalize( "fr" ).numberFormatter({ + style: "percent", + minimumFractionDigits: 2, + maximumFractionDigits: 2 +}); + +enFormatter( 0.0016 ); +// > "0.2%" + +enFormatter( 0.0014 ); +// > "0.1%" + +frFormatter( 0.0005 ); +// > "0,05 %" +``` + +#### Formatting Compact Numbers + +Long numbers can be represented in a compact format, with `short` using abbreviated units and `long` using the full unit name. + +```javascript +var shortFormatter = Globalize( "en" ).numberFormatter({ + compact: "short" +}); + +var longFormatter = Globalize( "en" ).numberFormatter({ + compact: "long" +}); + +shortFormatter( 27588910 ); +// > "28M" + +longFormatter( 27588910 ); +// > "28 million" +``` + +The minimumSignificantDigits and maximumSignificantDigits options are specially useful to control the number of digits to display. + +```js +Globalize( "en" ).formatNumber( 27588910, { + compact: "short", + minimumSignificantDigits: 3, + maximumSignificantDigits: 3 +}); +// > "27.6M" +``` + +#### Configuring Rounding + +Numbers with a decreased amount of decimal places can be rounded up, rounded down, rounded arithmetically, or truncated by setting the `round` option to `ceil`, `floor`, `round` (default), or `truncate`. + +```javascript +var formatter = Globalize.numberFormatter({ + maximumFractionDigits: 2, + round: "ceil" +}); + +formatter( 3.141592 ); +// > "3.15" +``` + +#### Performance Suggestions + +For improved performance on iterations, the formatter should be created before the loop. Then, it can be reused in each iteration. + +```javascript +var numbers = [ 1, 1, 2, 3, ... ]; +var formatter = Globalize( "en" ).numberFormatter(); + +formattedNumbers = numbers.map(function( number ) { + return formatter( number ); +}); +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/number/number-parser.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/number/number-parser.md new file mode 100644 index 000000000..fb4651f0a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/number/number-parser.md @@ -0,0 +1,130 @@ +## .numberParser( [options] ) ➜ function( value ) + +Return a function that parses a String representing a number according to the given options. If value is invalid, `NaN` is returned. + +The returned function is invoked with one argument: the String representing a number `value` to be parsed. + +### Parameters + +#### options + +See [.numberFormatter() options](./number-formatter.md#parameters). + +#### value + +String with number to be parsed, eg. `"3.14"`. + +### Example + +Prior to using any number methods, you must load `cldr/main/{locale}/numbers.json` and `cldr/supplemental/numberingSystems.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.numberParser()`, which uses the default locale. + +```javascript +var parser; + +Globalize.locale( "en" ); +parser = Globalize.numberParser(); + +parser( "3.14" ); +// > 3.14 +``` + +You can use the instance method `.numberParser()`, which uses the instance locale. + +```javascript +var enParser = Globalize( "en" ).numberParser(), + esParser = Globalize( "es" ).numberParser(); + +enParser( "3.14" ); +// > 3.14 + +esParser( "3,14" ); +// > 3.14 +``` + +Some more examples. + +```javascript +var enParser = Globalize( "en" ).numberParser(); + +enParser( "12,735" ); +// > 12735 + +enParser( "12,735.00" ); +// > 12735 + +Globalize( "en" ).numberParser({ style: "percent" })( "100%" ); +// > 1 + +enParser( "∞" ); +// > Infinity + +enParser( "-3" ); +// > -3 + +enParser( "-∞" ); +// > -Infinity + +enParser( "invalid-stuff" ); +// > NaN + +enParser( "invalid-stuff-that-includes-number-123" ); +// > NaN + +enParser( "invalid-stuff-123-that-includes-number" ); +// > NaN + +enParser( "123-invalid-stuff-that-includes-number" ); +// > NaN + +// Invalid decimal separator. (note `.` is used as decimal separator for English) +enParser( "3,14" ); +// > NaN + +// Invalid grouping separator position. +enParser( "127,35.00" ); +// > NaN +``` + +Loose matching examples. + +```js +var svParser = Globalize( "sv" ).numberParser(); + +// Swedish uses NO-BREAK-SPACE U+00A0 as grouping separator. +svParser( "1\xA0000,50" ); +// > 1000.5 + +// The parser is lenient and accepts various space characters like regular space +// SPACE U+0020. Technically, it accepts any character of the Unicode general +// category [:Zs:]. +svParser( "1 000,50" ); +// > 1000.5 + +var fiParser = Globalize( "fi" ).numberParser(); + +// Finish uses MINUS SIGN U+2212 for the minus sign. +fiParser( "\u22123" ); +// > -3 + +// The parser is lenient and accepts various hyphen characters like regular +// HYPHEN-MINUS U+002D. Technically, it accepts any character of the Unicode +// general category [:Dash:]. +fiParser( "-3" ); +// > -3 +``` + +For improved performance on iterations, first create the parser. Then, reuse it +on each loop. + +```javascript +var formattedNumbers = [ "1", "1", "2", "3", ... ]; +var parser = Globalize( "en" ).numberParser(); + +numbers = formattedNumbers.map(function( formattedNumber ) { + return parser( formattedNumber ); +}); +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/number/number-to-parts-formatter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/number/number-to-parts-formatter.md new file mode 100644 index 000000000..c2b656271 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/number/number-to-parts-formatter.md @@ -0,0 +1,140 @@ +## .numberToPartsFormatter( [options] ) ➜ function( value ) + +Return a function that formats a number into parts tokens according to the given options. + +The returned function is invoked with one argument: the Number `value` to be formatted. + +### Parameters + +#### options + +Please, see [.numberFormatter() options](./number-formatter.md#parameters). + +### Returns + +An Array of objects containing the formatted number in parts. The returned structure looks like this: + +- `decimal` + + The decimal separator string, e.g., `"."`. + +- `fraction` + + The fraction number. + +- `group` + + The group separator string, e.g., `","`. + +- `infinity` + + The Infinity string, e.g., `"∞"`. + +- `integer` + + The integer number. + +- `literal` + + Any literal strings or whitespace in the formatted number. + +- `minusSign` + + The minus sign string, e.g., `"-"`. + +- `nan` + + The NaN string, e.g., `"NaN"`. + +- `plusSign` + + The plus sign string, e.g., `"+"`. + +- `percentSign` + + The percent sign string, e.g., `"%"`. + +- `compact` + + The compact string, e.g., `"thousand"`. + +### Examples + +Prior to using any number methods, you must load `cldr/main/{locale}/numbers.json` and `cldr/supplemental/numberingSystems.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +#### Static Formatter + +You can use the static method `Globalize.numberToPartsFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.numberToPartsFormatter(); + +formatter( 3.141592 ); +// > [ +// { "type": "integer", "value": "3" }, +// { "type": "decimal", "value": "." }, +// { "type": "fraction", "value": "142" } +// ] +``` + +#### Instance Formatter + +You can use the instance method `.numberFormatter()`, which uses the instance +locale. + +```javascript +var arFormatter = Globalize( "ar" ).numberToPartsFormatter(), + esFormatter = Globalize( "es" ).numberToPartsFormatter(), + zhFormatter = Globalize( "zh-u-nu-native" ).numberToPartsFormatter(); + +arFormatter( 3.141592 ); +// > [ +// { "type": "integer", "value": "٣" }, +// { "type": "decimal", "value": "٫" }, +// { "type": "fraction", "value": "١٤٢" } +// ] + +esFormatter( 3.141592 ); +// > [ +// { "type": "integer", "value": "3" }, +// { "type": "decimal", "value": "," }, +// { "type": "fraction", "value": "142" } +// ] + +zhFormatter( 3.141592 ); +// > [ +// { "type": "integer", "value": "三" }, +// { "type": "decimal", "value": "." }, +// { "type": "fraction", "value": "一四二" } +// ] +``` + +The information is available separately and it can be formatted and concatenated again in a customized way. For example by using [`Array.prototype.map()`][], [arrow functions][], a [switch statement][], [template literals][], and [`Array.prototype.reduce()`][]. + +[`Array.prototype.map()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map +[arrow functions]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions +[switch statement]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch +[template literals]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals +[`Array.prototype.reduce()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce + +#### More Examples + +Please, see [.numberFormatter() example](./number-formatter.md#example) for additional examples such as configuring decimal places, significant digits, percentages, and compact numbers. + +#### Performance Suggestions + +For improved performance on iterations, the formatter should be created before the loop. Then, it can be reused in each iteration. + +```javascript +var numbers = [ 1, 1, 2, 3, ... ]; +var formatter = Globalize( "en" ).numberFormatter(); + +formattedNumbers = numbers.map(function( number ) { + return formatter( number ); +}); +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/plural/plural-generator.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/plural/plural-generator.md new file mode 100644 index 000000000..d9cea88ef --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/plural/plural-generator.md @@ -0,0 +1,84 @@ +## .pluralGenerator( [options] ) ➜ function( value ) + +It supports the creation of internationalized messages with plural inflection by returning a function that returns the value's plural group: `zero`, `one`, `two`, `few`, `many`, or `other`. + +The returned function is invoked with one argument: the Number `value` for which to return the plural group. + +### Parameters + +#### options.type + +Optional. String `cardinal` (default), or `ordinal`. + +#### value + +A Number for which to return the plural group. + +### Example + +Prior to using any plural method, you must load either `supplemental/plurals.json` for cardinals or `supplemental/ordinals.json` for ordinals. + +Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.pluralGenerator()`, which uses the default locale. + +```javascript +var plural; + +Globalize.locale( "en" ); + +// Cardinals +plural = Globalize.pluralGenerator(); + +plural( 0 ); +// > "other" + +plural( 1 ); +// > "one" + +plural( 2 ); +// > "other" + +// Ordinals +plural = Globalize.pluralGenerator({ type: "ordinal" }); + +plural( 0 ); +// > "other" + +plural( 1 ); +// > "one" + +plural( 2 ); +// > "two" +``` + +You can use the instance method `.pluralGenerator()`, which uses the instance locale. + +```javascript +var plural = Globalize( "zh" ).pluralGenerator(); + +plural( 1 ); +// > "other" +``` + +For comparison (cardinals): + +| | en (English) | ru (Russian) | ar (Arabic) | +| ------------- | ------------ | ------------ | ----------- | +| `plural( 0 )` | `other` | `many` | `zero` | +| `plural( 1 )` | `one` | `one` | `one` | +| `plural( 2 )` | `other` | `few` | `two` | +| `plural( 3 )` | `other` | `few` | `few` | +| `plural( 5 )` | `other` | `many` | `few` | + +For comparison (ordinals): + +| | en (English) | ru (Russian) | ar (Arabic) | +| ---------------------------------- | ------------ | ------------ | ----------- | +| `plural( 0, { type: "ordinal" } )` | `other` | `other` | `other` | +| `plural( 1, { type: "ordinal" } )` | `one` | `other` | `other` | +| `plural( 2, { type: "ordinal" } )` | `two` | `other` | `other` | +| `plural( 3, { type: "ordinal" } )` | `few` | `other` | `other` | +| `plural( 5, { type: "ordinal" } )` | `other` | `other` | `other` | diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/relative-time/relative-time-formatter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/relative-time/relative-time-formatter.md new file mode 100644 index 000000000..a04e345d5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/relative-time/relative-time-formatter.md @@ -0,0 +1,60 @@ +## .relativeTimeFormatter( unit [, options] ) ➜ function( value ) + +Returns a function that formats a relative time according to the given unit, options, and the default/instance locale. + +The returned function is invoked with one argument: the number `value` to be formatted. + +### Parameters + +#### unit + +String value indicating the unit to be formatted. eg. "day", "week", "month", etc. + +#### options.form + +String, e.g., `"short"` or `"narrow"`, or falsy for default long form. + +#### value + +The number to be formatted. + + +### Example + +Prior to using any relative time methods, you must load `cldr/main/{locale}/dateFields.json` and the CLDR content required by the number and plural modules. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.relativeTimeFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.relativeTimeFormatter( "month" ); + +formatter( 1 ); +// > "next month" + +formatter( 3 ); +// > "in 3 months" + +formatter( -1 ); +// > "last month" + +formatter( -3 ); +// > "3 months ago" +``` + +You can use the instance method `.relativeTimeFormatter()`, which uses the instance locale. + +```javascript +var globalize = new Globalize( "en" ), + formatter = globalize.relativeTimeFormatter( "week" ); + +formatter( 1 ); +// > "next week" +``` + + + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/unit/unit-formatter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/unit/unit-formatter.md new file mode 100644 index 000000000..0ab88f203 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/api/unit/unit-formatter.md @@ -0,0 +1,72 @@ +## .unitFormatter( unit [, options] ) ➜ function( value ) + +Returns a function that formats a unit according to the given unit, options, and the default/instance locale. + +The returned function is invoked with one argument: the number `value` to be formatted. + +### Parameters + +#### unit + +String value indicating the unit to be formatted. eg. "day", "week", "month", etc. Could also be a compound unit, eg. "mile-per-hour" or "mile/hour" + +#### options.form + +Optional. String, e.g., `"long"` (default), `"short"` or `"narrow"`. + +#### options.numberFormatter + +Optional. A number formatter function. Defaults to `Globalize.numberFormatter()` for the current locale using the default options. + +#### value + +The number to be formatted. + +### Example + +Prior to using any unit methods, you must load `cldr/main/{locale}/units.json` and the CLDR content required by the plural module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.unitFormatter()`, which uses the default locale. + +```javascript +var customNumberFormatter, formatter; + +Globalize.locale( "en" ); +formatter = Globalize.unitFormatter( "month", { form: "long" } ); + +formatter( 1 ); +// > "1 month" + +formatter( 3 ); +// > "3 months" + +formatter( 3000 ); +// > "3,000 months" +``` + +You can pass a custom number formatter to format the number of units. + +```javascript +var customNumberFormatter, formatter; + +Globalize.locale( "en" ); +customNumberFormatter = Globalize.numberFormatter({ useGrouping = false }) +formatter = Globalize.unitFormatter( "mile-per-hour", { + form: "narrow", numberFormatter: customNumberFormatter +} ); + +formatter(5000) +// > "5000mph" +``` + +You can use the instance method `.unitFormatter()`, which uses the instance locale. + +```javascript +var globalize = new Globalize( "en" ), + formatter = globalize.unitFormatter( "mile-per-hour", { form: "narrow" } ); + +formatter( 10 ); +// > "10mph" +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/blog-post/2017-07-xx-1.3.0-announcement.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/blog-post/2017-07-xx-1.3.0-announcement.md new file mode 100644 index 000000000..004e5b96e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/blog-post/2017-07-xx-1.3.0-announcement.md @@ -0,0 +1,177 @@ +# Globalize 1.3.0 announcement + +On July 3rd, we released Globalize 1.3.0. It is a special release, because it includes some very useful feature enhancements to support advanced date, time, timezone manipulation, and other long due fixes. We wanted to share more details on these improvements. + +## IANA/Olson Time Zone Support + +> This change was contributed by Kandaswamy Manikandan @rajavelmani (PayPal) and Rafael Xavier @rxaviers in #687 and #701. + +In previous versions, Globalize had some partial time zone support for a user's runtime time zone. However specific CLDR patterns (`z`, `v`, and `V`) that display strings such as `PDT`, `Pacific Daylight Time`, `Pacific Time`, and `Los Angeles Time` could not be displayed. The challenge [we had](https://github.com/globalizejs/globalize/pull/202) to determine how costly a solution would be to provide full IANA/Olson time zone support due to the additional manipulation code and data (i.e., IANA database). Therefore, in the past, we encouraged users that needed to manipulate date in arbitrary time zones to use a separate library, like *moment-timezone*. Nevertheless, this solution never closed the gap between internationalization (i18n) implementations leveraging CLDR and having full maneuverability of time zones. + +With the latest release 1.3.0, Globalize fully supports time zone. Simply put, by using Globalize 1.3.0, you now have full IANA support with the strength of CLDR for i18n! + +```js +Globalize.locale("en"); +let date = new Date(); + +Globalize.formatDate(date, {datetime: "short", timeZone: "America/Los_Angeles"}); +// > '3/19/17, 3:19 PM' +Globalize.formatDate(date, {datetime: "short", timeZone: "America/New_York"}); +// > '3/19/17, 6:19 PM' +Globalize.formatDate(date, {datetime: "short", timeZone: "America/Sao_Paulo"}); +// > '3/19/17, 7:19 PM' +Globalize.formatDate(date, {datetime: "short", timeZone: "Europe/Berlin"}); +// > '3/19/17, 11:19 PM' + +Globalize.formatDate(date, {datetime: "full", timeZone: "America/Los_Angeles"}); +// > 'Sunday, March 19, 2017 at 3:19:22 PM Pacific Daylight Time' +Globalize.formatDate(date, {datetime: "full", timeZone: "America/New_York"}); +// > 'Sunday, March 19, 2017 at 6:19:22 PM Eastern Daylight Time' +Globalize.formatDate(date, {datetime: "full", timeZone: "America/Sao_Paulo"}); +// > 'Sunday, March 19, 2017 at 7:19:22 PM Brasilia Standard Time' +Globalize.formatDate(date, {datetime: "full", timeZone: "Europe/Berlin"}); +// > 'Sunday, March 19, 2017 at 11:19:22 PM Central European Standard Time' + +Globalize("pt").formatDate(date, {datetime: "full", timeZone: "America/Sao_Paulo"}); +// > 'domingo, 19 de março de 2017 19:19:22 Horário Padrão de Brasília' +Globalize("de").formatDate(date, {datetime: "full", timeZone: "Europe/Berlin"}); +// > 'Sonntag, 19. März 2017 um 23:19:22 Mitteleuropäische Normalzeit' +Globalize("zh").formatDate(date, {datetime: "full", timeZone: "Asia/Shanghai"}); +// > '2017年3月20日星期一 中国标准时间 上午6:19:22' +Globalize("ar").formatDate(date, {datetime: "full", timeZone: "Africa/Cairo"}); +// > 'الاثنين، ٢٠ مارس، ٢٠١٧ ١٢:١٩:٢٢ ص توقيت شرق أوروبا الرسمي' +``` + +We have solved this in a low footprint, high performance implementation using [zoned-date-time](https://github.com/rxaviers/zoned-date-time) under the hoods, which is a 0.6KB library for the time zone manipulations. We have leveraged the Globalize Compiler for precompling the IANA data base for production. For example, let's say you are serving content in English (e.g. locale en-US) for America/Los_Angeles time using the following formatter: + +```js +var dateWithTimeZoneFormatter = Globalize.dateFormatter({ + datetime: "full", + timeZone: "America/Los_Angeles" +}); +``` + +The final size (for production) of this code will be: + +| filename | minified+gzipped size | +| ---------------------------------------- | --------------------- | +| i18n/en.js (includes CLDR and IANA data) | 1.7KB | +| core, number, and date globalize runtime lib + zoned-date-time | 7.0KB | + +See globalize [compiler example](https://github.com/globalizejs/globalize/tree/master/examples/globalize-compiler) or [app-npm-webpack example](https://github.com/globalizejs/globalize/tree/master/examples/app-npm-webpack) for details. + +## Format Date To Parts + +> This change was contributed by Reza Payami @rpayami (PayPal) and Rafael Xavier @rxaviers in #697 and #700. + +Modern user interfaces often need to manipulate the date format output, which is impossible via the existing format function that returns an opaque string. Making any attempt to do this can break internationalization support. [Ecma-402](https://github.com/tc39/ecma402/) has recently added [`Intl.DateTimeFormat.prototype.formatToParts`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts) to fulfill that purpose, which at the time of this post, is at stage 4 and is implemented by latest Firefox and Chrome. + +In Globalize, we introduced [`.dateToPartsFormatter`](https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-to-parts-formatter.md) and [`.formatDateToParts`](https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-to-parts-formatter.md). + +```js +Globalize.locale( "en" ); +Globalize.formatDateToParts(new Date(2010, 10, 30)); +// > [ +// { "type": "month", "value": "11" }, +// { "type": "literal", "value": "/" }, +// { "type": "day", "value": "30" }, +// { "type": "literal", "value": "/" }, +// { "type": "year", "value": "2010" } +// ] +``` + +The data is available separately and it can be formatted and concatenated again in a customized way. For example by using [`Array.prototype.map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map), [arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), a [switch statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch), [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals), and [`Array.prototype.reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce). + +```js +let formatter; + +Globalize.locale( "en" ); +formatter = Globalize.dateToPartsFormatter({datetime: "short"}); + +formatter( new Date( 2010, 10, 30, 17, 55 ) ).map(({type, value}) => { + switch ( type ) { + case "year": return `${value}`; + default: return value; + } +}).join( "" ); +// > "11/30/10, 5:55 PM" +``` + +See [React Date Input](https://github.com/rxaviers/react-date-input) as a demo of a UI component for React optimized for i18n and a11y. + +| Localized and smart date input | Feb 28 in `en`, `es`, `pt`, `de`, `zh`, `ko`, and `ar` | +| ---------------------------------------- | ---------------------------------------- | +| ![en](https://media.giphy.com/media/xUA7aZAUNINGP2jI4M/giphy.gif) | ![en-es-pt-de-zh-ko-ar](https://media.giphy.com/media/3og0ILQu0KxLRewJnW/giphy.gif) | + +## Dynamically Augmented Date Skeletons + +> This change was contributed by Marat Dyatko @vectart and Artur Eshenbrener @Strate in #462 and #604. + +The style used to display a date format often varies depending on the application. CLDR offers data for certain presets like short (e.g., short date `"7/1/17"`), medium (e.g., medium date `"Jul 1, 2017"`), long (e.g., long date `"July 1, 2017"`), and full (e.g., full date `"Saturday, July 1, 2017"`). Although, we may want something different such as `"Jul 1"`. For that CLDR offers data for individual [date fields](http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table) and their combinations, which are used by Globalize to synthesize an open-ended list of custom formats (called skeletons). But, what's interesting is that it would be prohibitively large if CLDR provided data for every single possible combination. So, there's an algorithm specified by [UTS#35](http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems) to deduce missing data from the requested format. + +For the `"Jul 1"` example, we should use `{skeleton: "MMMd"}`. Internally, Globalize finds a direct match in CLDR for the requested skeleton. This works fine in previous Globalize versions. + +For that next example, let's assume we want `"July 1"`, i.e., `{skeleton: "MMMMd"}`. Internally, Globalize doesn't find a direct match in CLDR. For this skeleton, Globalize needs to use the data for `MMMd`, which maps to `"MMM d"` in the English case, and then it needs to replace `MMM` with `MMMM` dynamically generating `"MMMM d"`. This doesn't work in previous versions of Globalize, but it works now on latest v1.3.0. + +If we wanted `"07/01"` instead, we should use `{skeleton: "MMdd"}`. Internally, Globalize doesn't find a direct match in CLDR for this skeleton and, therefore, it fais in globalize v1.2.3. Globalize needs to use the data for `Md`, which in the case of English maps to `"M/d"`, and then replace `M` wtih `MM` and `d` with `dd` dynamically generating `"MM/dd"`. + +To make a long story short, the algorithm in globalize v1.3.0 has been significantly improved and it allows using virtually any skeletons. + +```js +// A skeleton not directly found in CLDR and that needs to be deduced by globalize. +// In English, globalize needs to use the data for GyMMMEd, and adjust MMM with MMMM, +// and E with EEEE. Then, it needs to find the data for hms and glue them together +// using the appropriate format. +// On globalize v1.2.3, an error is thrown saying this skeleton wasn't found. +let skeleton = "GyMMMMEEEEdhms"; +Globalize("en").formatDate(new Date(), {skeleton}); +// > 'Saturday, July 1, 2017 AD at 4:58:27 PM' +Globalize("pt").formatDate(new Date(), {skeleton}); +// > 'sábado, 1 de julho de 2017 d.C. 5:01:20 PM' +Globalize("de").formatDate(new Date(), {skeleton}); +// > 'Samstag, 1. Juli 2017 n. Chr. um 5:01:33 nachm.' +Globalize("zh").formatDate(new Date(), {skeleton}); +// > '公元2017年七月月1日星期六 下午5:01:35' +Globalize("ko").formatDate(new Date(), {skeleton}); +// > 'AD 2017년 7월 1일 토요일 오후 5:01:38' +Globalize("ar").formatDate(new Date(), {skeleton}); +// > 'السبت، ١ يوليو، ٢٠١٧ م ٥:٠١:٤٠ م' +Globalize("ar-MA").formatDate(new Date(), {skeleton}); +// > 'السبت، 1 يوليوز، 2017 م 5:04:29 م' +Globalize("it").formatDate(new Date(), {skeleton}); +// > 'sabato 1 luglio 2017 d.C. 5:01:52 PM' +``` + +Read our [getting started](https://github.com/globalizejs/globalize/#getting-started) and play with it yourself. + +## Other Enhancements and Bug Fixes + +🎉 Enhancements + +- Date: Show timezone offset optional minutes for O pattern (e.g., GMT-6:30 note the :30) [#339](https://github.com/globalizejs/globalize/pull/339) (via PR [#729](https://github.com/globalizejs/globalize/pull/729)) (Rafael Xavier) +- Date: Show timezone offset optional minutes and seconds for x and X patterns (e.g., -06:30 note the :30) [#339](https://github.com/globalizejs/globalize/pull/339) (via PR [#729](https://github.com/globalizejs/globalize/pull/729)) (Rafael Xavier) +- Date: Assert options.skeleton (PR [#726](https://github.com/globalizejs/globalize/pull/726)) (Rafael Xavier) +- Date parser: Make runtime phase lighter [#735](https://github.com/globalizejs/globalize/pull/735) (Rafael Xavier) +- Date parser: Loose Matching PR [#730](https://github.com/globalizejs/globalize/pull/730) (Rafael Xavier) + - Allows, among others, parsing arabic dates as user types them (i.e., without control characters) +- Number formatter: Amend integer and fraction formatter for small numbers like 1e-7 [#750](https://github.com/globalizejs/globalize/pull/750) (Rafael Xavier) +- Number parser: Lenient about trailing decimal separator [#744](https://github.com/globalizejs/globalize/pull/744) (Rafael Xavier) +- Runtime: Use strict [#676](https://github.com/globalizejs/globalize/pull/676) (Zack Birkenbuel) + +🐛 Fixes + +- Date parser: invalid output by mixing numbering systems [#696](https://github.com/globalizejs/globalize/pull/696) (via PR [#733](https://github.com/globalizejs/globalize/pull/733)) (Rafael Xavier) +- Date parser: fails on Turkish full datetime with Monday or Saturday [#690](https://github.com/globalizejs/globalize/pull/690) (via PR [#732](https://github.com/globalizejs/globalize/pull/732)) (Rafael Xavier) + +⚙️ Others + +- Compiler tests! [#721](https://github.com/globalizejs/globalize/pull/721) (via PR [#727](https://github.com/globalizejs/globalize/pull/727)) (Nikola Kovacs) +- Documentation style refactor [#737](https://github.com/globalizejs/globalize/pull/737) (Rafael Xavier) + +## Last but not least + +Special thanks to other PayPal internationalization team members including Daniel Bruhn, Lucas Welti, Alolita Sharma, Mike McKenna for testing and helping integrate Globalize for PayPal products. + +Special thanks to James Bellenger and Nicolas Gallagher for the React and Webpack integration enhancements for Twitter products, which certainly deserves its own blog post. + +Many thanks to all of you who participated in this release by testing, reporting bugs, or submitting patches, including Jörn Zaefferer, Frédéric Miserey, Nova Patch, and whole Globalize team. diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/cldr.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/cldr.md new file mode 100644 index 000000000..e7fe767ef --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/cldr.md @@ -0,0 +1,114 @@ +# Unicode CLDR usage + +## How do I get CLDR data? + +*By downloading the JSON packages individually...* + +Unicode CLDR is available as JSON at https://github.com/unicode-cldr/ (after this [json-packaging proposal][] took place). Please, read https://github.com/unicode-cldr/cldr-json for more information about package organization. + +[json-packaging proposal]: http://cldr.unicode.org/development/development-process/design-proposals/json-packaging + +*By using a package manager...* + +`cldr-data` can be used for convenience. It always downloads from the correct source. + +Use bower `bower install cldr-data` ([detailed instructions][]) or npm `npm install cldr-data`. For more information, see: + +- https://github.com/rxaviers/cldr-data-npm +- https://github.com/rxaviers/cldr-data-bower + +[detailed instructions]: https://github.com/rxaviers/cldr-data-bower + +## How do I load CLDR data into Globalize? + +The short answer is by using `Globalize.load()` and passing the JSON data as the first argument. Below, follow several examples on how this could be accomplished. + +Example of embedding CLDR JSON data: + +```html + +``` + +Example of loading it dynamically: + +```html + + +``` + +Example using AMD (also see our [functional tests](../../test/functional.js)): +```javascript +define([ + "globalize", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "globalize/date" +], function( Globalize, enCaGregorian, likelySubtags, timeData, weekData ) { + + Globalize.load( + enCaGregorian, + likelySubtags, + timeData, + weekData + ); + + // Your code goes here. + +}); +``` + +Example using Node.js: + +```javascript +var Globalize = require( "globalize" ); + +Globalize.load( + require( "cldr-data/main/en/ca-gregorian" ), + require( "cldr-data/supplemental/likelySubtags" ), + require( "cldr-data/supplemental/timeData" ), + require( "cldr-data/supplemental/weekData" ) +); +``` diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-default-locale-not-defined.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-default-locale-not-defined.md new file mode 100644 index 000000000..84e6d8156 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-default-locale-not-defined.md @@ -0,0 +1,9 @@ +## E_DEFAULT_LOCALE_NOT_DEFINED + +Thrown when any static method, eg. `Globalize.formatNumber()` is used prior to setting the Global locale with `Globalize.locale( )`. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_DEFAULT_LOCALE_NOT_DEFINED` | diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-invalid-cldr.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-invalid-cldr.md new file mode 100644 index 000000000..8a954cc79 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-invalid-cldr.md @@ -0,0 +1,14 @@ +## E_INVALID_CLDR + +Thrown when a CLDR item has an invalid or unexpected value. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_INVALID_CLDR` | +| description | Reason why the data was considered invalid | + +- description "Missing rules to deduce plural form of \`{value}\`" + + Thrown when the plural form (also known as plural group) is not found for the given value. This error is very unlikely to occur and is related to incomplete or invalid CLDR `supplemental/plurals-type-cardinal/{language}` data. diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-invalid-par-type.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-invalid-par-type.md new file mode 100644 index 000000000..893cf1bf0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-invalid-par-type.md @@ -0,0 +1,12 @@ +## E_INVALID_PAR_TYPE + +Thrown when a parameter has an invalid type on any static or instance methods. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_INVALID_PAR_TYPE` | +| name | Name of the invalid parameter | +| value | Invalid value | +| expected | Expected type | diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-invalid-par-value.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-invalid-par-value.md new file mode 100644 index 000000000..d9e32ba3e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-invalid-par-value.md @@ -0,0 +1,11 @@ +## E_INVALID_PAR_VALUE + +Thrown for certain parameters when the type is correct, but the value is invalid. Currently, the only parameter with such validation is the date format (for either format and parse). Format allows [certain variants](../api/date/date-formatter.md#parameters), if it's none of them, error is thrown. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_INVALID_PAR_VALUE` | +| name | Name of the invalid parameter | +| value | Invalid value | diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-missing-cldr.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-missing-cldr.md new file mode 100644 index 000000000..fc77dbf9d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-missing-cldr.md @@ -0,0 +1,11 @@ +## E_MISSING_CLDR + +Thrown when any required CLDR item is NOT found. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_MISSING_CLDR` | +| path | Missing CLDR item path | + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-missing-parameter.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-missing-parameter.md new file mode 100644 index 000000000..f0efac2cd --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-missing-parameter.md @@ -0,0 +1,10 @@ +## E_MISSING_PARAMETER + +Thrown when a required parameter is missing on any static or instance methods. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_MISSING_PARAMETER` | +| name | Name of the missing parameter | diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-missing-plural-module.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-missing-plural-module.md new file mode 100644 index 000000000..e80610c5f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-missing-plural-module.md @@ -0,0 +1,9 @@ +## E_MISSING_PLURAL_MODULE + +Thrown when plural module is needed, but not loaded, eg. formatting currencies using plural messages. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_MISSING_PLURAL_MODULE` | diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-par-missing-key.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-par-missing-key.md new file mode 100644 index 000000000..974aa5b10 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-par-missing-key.md @@ -0,0 +1,11 @@ +## E_PAR_MISSING_KEY + +Thrown when a parameter misses a required key. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_PAR_MISSING_KEY` | +| key | Name of the missing parameter's key | +| name | Name of the missing parameter | diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-par-out-of-range.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-par-out-of-range.md new file mode 100644 index 000000000..44c0c91fc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-par-out-of-range.md @@ -0,0 +1,13 @@ +## E_PAR_OUT_OF_RANGE + +Thrown when a parameter is not within a valid range of values. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_PAR_OUT_OF_RANGE` | +| name | Name of the invalid parameter | +| value | Invalid value | +| minimum | Minimum value of the valid range | +| maximum | Maximum value of the valid range | diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-unsupported.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-unsupported.md new file mode 100644 index 000000000..33546c165 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/error/e-unsupported.md @@ -0,0 +1,10 @@ +## E_UNSUPPORTED + +Thrown for unsupported features, eg. to format unsupported date patterns. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_UNSUPPORTED` | +| feature | Description of the unsupported feature | diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/migrating-from-0.x.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/migrating-from-0.x.md new file mode 100644 index 000000000..6187beb3a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/doc/migrating-from-0.x.md @@ -0,0 +1,64 @@ +# Migrating from Globalize 0.x + +Globalize 0.x came with a bundled locale for US English, and optional files for various other locales. Globalize 1.x uses CLDR for the locale data, and it doesn't bundle any locale data. Check out the documentation for loading CLDR data in 1.x to learn more about that. If you were only using the bundle locale, you only need to load CLDR data for US English. If you were loading other locales, make sure you load those from CLDR as well. + +On the API side, things have also changed, to simplify usage, remove ambiguity and add features. The rest of this document provides a brief function-by-function list. + +If you still need help with migration, let us know. We may extend this guide later as necessary. + +## Globalize.addCultureInfo() + +This method is replaced by `Globalize.loadMessages( json )`. If you were using it for anything except message translations, you may also need to use `Globalize.load`. + +## Globalize.cultures + +This property is gone. You can use Cldrjs to traverse CLDR directly. + +## Globalize.culture( [locale] ) + +This method is replaced by the `Globalize.locale( [locale|cldr] )` method. Call it without arguments to retrieve the default locale, call it with a string argument to set the default locale. + +## Globalize.findClosestCulture + +This method is gone, there is no replacement. If you still need this method, create an issue with your usecase. + +## Globalize.format + +Replaced by three separate methods: + +* `.formatNumber( value [, options] )` +* `.formatCurrency( value, currency [, options] )` +* `.formatDate( value, pattern )` + +See their respective documentation for usage details. Note that the number and date formats are now based on CLDR, using the options and patterns standardized by Unicode. We don't currently have documentation for migrating these formats. + +## Globalize.localize + +Replaced by `.formatMessage( path [, variables ] )`. The new API is quite different and provides much more than just value-lookup. See their respective documentation for usage details. + +## Globalize.parseInt/parseFloat + +Replaced by `.parseNumber( value [, options] )`. So where you might have previously executed: + +```js +Globalize( "en" ).parseFloat( "123,456.789" ) +// > 123456.789 +``` + +You could now execute: + +```js +Globalize( "en" ).parseNumber( "123,456.789" ) +// > 123456.789 +``` + +`parseNumber` is an alias for [`.numberParser( [options] )( value )`](api/number/number-parser.md). So you could also do this: + +```js +Globalize( "en" ).numberParser()( "123,456.789" ) +// > 123456.789 +``` + +## Globalize.parseDate + +This method still exists, and the signature is almost the same: `.parseDate( value, pattern )`. Note that `pattern` indicates just a single "format", where Globalize 0.x supported multiple of those "formats". diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/.bowerrc b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/.bowerrc new file mode 100644 index 000000000..adf6a3662 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/.bowerrc @@ -0,0 +1,7 @@ +{ + "directory": "bower_components", + "scripts": { + "preinstall": "npm install cldr-data-downloader", + "postinstall": "node ./node_modules/cldr-data-downloader/bin/download.js -i bower_components/cldr-data/index.json -o bower_components/cldr-data/" + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/.gitignore b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/.gitignore new file mode 100644 index 000000000..fbe05fc93 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/.gitignore @@ -0,0 +1 @@ +bower_components/ diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/README.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/README.md new file mode 100644 index 000000000..0ea1e5d5c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/README.md @@ -0,0 +1,65 @@ +# Hello World (AMD + bower) + +We assume you know what [AMD](https://github.com/amdjs/amdjs-api/wiki/AMD) and +[bower](http://bower.io/) is. + +The demo is composed of the following files: + +``` +. +├── index.html +└── main.js +``` + +Before running it, execute the requirements below. + + +## Requirements + +**1. Install Globalize** + +Let's use bower to download Globalize. For more information on regard of +installation, please read [Getting Started](../../README.md#installation). + +``` +bower install +``` + +Note bower will also fetch some other dependencies of this demo, eg. require.js +and its json plugin. + +You'll get this: + +``` +. +├── bower_components/ +│ ├── globalize/ +│ │ └── dist/ +│ │ ├── globalize +│ │ │ ├── date.js +│ │ │ └── ... +│ │ └── globalize.js +│ └── ... +├── index.html +└── main.js +``` + +**2. Install Dependencies** + +No action needed, because bower has already handled that for us. + +**3. CLDR content** + +No action needed, because bower has already handled that for us. Note `.bowerrc` +has postinstall hook that populates bower's cldr-data skeleton. For more +information, see [bower's cldr-data](https://github.com/rxaviers/cldr-data-bower). + + +## Running the demo + +Once you've completed the requirements above: + +1. Start a server by running `python -m SimpleHTTPServer` or other alternative servers such as [http-server](https://github.com/nodeapps/http-server), [nginx](http://nginx.org/en/docs/), [apache](http://httpd.apache.org/docs/trunk/). +1. Point your browser at `http://localhost:8000/`. +1. Understand the demo by reading the source code (both index.html and main.js). +We have comments there for you. diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/bower.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/bower.json new file mode 100644 index 000000000..f7e6a3c0c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/bower.json @@ -0,0 +1,13 @@ +{ + "name": "globalize-hello-world-amd-bower", + "dependencies": { + "cldr-data": "*", + "globalize": "^1.3.0", + "iana-tz-data": "*" + }, + "devDependencies": { + "requirejs": "2.1.14", + "requirejs-plugins": "1.0.2" , + "requirejs-text": "2.0.12" + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/index.html b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/index.html new file mode 100644 index 000000000..753c99c95 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/index.html @@ -0,0 +1,46 @@ + + + + + Globalize Hello World (AMD + bower) + + +

Globalize Hello World (AMD + bower)

+ +
+

Requirements

+
    +
  • Run `bower install` (you must have bower installed first).
  • +
  • Start a server, e.g., by running `python -m SimpleHTTPServer`.
  • +
  • Point your browser at `http://localhost:8000/`.
  • +
  • Please, read README.md for more information on any of the above.
  • +
+
+ + + + + + + + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/main.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/main.js new file mode 100644 index 000000000..3b72d7fa5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/main.js @@ -0,0 +1,141 @@ +/** + * 1. Configure require.js paths. + */ +require.config({ + paths: { + // Globalize dependencies paths. + cldr: "./bower_components/cldrjs/dist/cldr", + + // Unicode CLDR JSON data. + "cldr-data": "./bower_components/cldr-data", + + // IANA time zone data. + "iana-tz-data": "../bower_components/iana-tz-data/iana-tz-data", + + // require.js plugin we'll use to fetch CLDR JSON content. + json: "./bower_components/requirejs-plugins/src/json", + + // text is json's dependency. + text: "./bower_components/requirejs-text/text", + + // Globalize. + globalize: "./bower_components/globalize/dist/globalize" + } +}); + + +/** + * 2. Require dependencies and run your code. + */ +require([ + "globalize", + + // CLDR content. + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/dateFields.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/en/units.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/metaZones.json", + "json!cldr-data/supplemental/plurals.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "json!messages/en.json", + "json!iana-tz-data.json", + + // Extend Globalize with Date and Number modules. + "globalize/currency", + "globalize/date", + "globalize/message", + "globalize/number", + "globalize/plural", + "globalize/relative-time", + "globalize/unit" +], function( Globalize, enGregorian, enCurrencies, enDateFields, enNumbers, + enTimeZoneNames, enUnits, currencyData, likelySubtags, metaZones, + pluralsData, timeData, weekData, messages, ianaTzData ) { + + var en, like, number; + + // At this point, we have Globalize loaded. But, before we can use it, we need to feed it on the appropriate I18n content (Unicode CLDR). Read Requirements on Getting Started on the root's README.md for more information. + Globalize.load( + currencyData, + enCurrencies, + enDateFields, + enGregorian, + enNumbers, + enTimeZoneNames, + enUnits, + likelySubtags, + metaZones, + pluralsData, + timeData, + weekData + ); + Globalize.loadMessages( messages ); + Globalize.loadTimeZone( ianaTzData ); + + // Instantiate "en". + en = Globalize( "en" ); + + // Use Globalize to format dates. + document.getElementById( "date" ).textContent = en.formatDate( new Date(), { + datetime: "medium" + }); + + // Use Globalize to format dates on specific time zone. + document.getElementById( "zonedDate" ).textContent = en.formatDate( new Date(), { + datetime: "full", + timeZone: "America/Sao_Paulo" + }); + + // Use Globalize to format dates to parts. + document.getElementById( "dateToParts" ).innerHTML = en.formatDateToParts( new Date(), { + datetime: "medium" + }).map( function( part ) { + switch ( part.type ) { + case "month": return "" + part.value + ""; + default: return part.value; + } + }).reduce( function( memo, value ) { + return memo + value; + }); + + // Use Globalize to format numbers. + number = en.numberFormatter(); + document.getElementById( "number" ).textContent = number( 12345.6789 ); + document.getElementById( "number-compact" ).textContent = en.formatNumber( 12345.6789, { + compact: "short", + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }); + + // Use Globalize to format currencies. + document.getElementById( "currency" ).textContent = en.formatCurrency( 69900, "USD" ); + + // Use Globalize to get the plural form of a numeric value. + document.getElementById( "plural-number" ).textContent = number( 12345.6789 ); + document.getElementById( "plural-form" ).textContent = en.plural( 12345.6789 ); + + // Use Globalize to format a message with plural inflection. + like = en.messageFormatter( "like" ); + document.getElementById( "message-0" ).textContent = like( 0 ); + document.getElementById( "message-1" ).textContent = like( 1 ); + document.getElementById( "message-2" ).textContent = like( 2 ); + document.getElementById( "message-3" ).textContent = like( 3 ); + + // Use Globalize to format a relative time. + document.getElementById( "relative-time" ).textContent = en.formatRelativeTime( -35, "second" ); + + // Use Globalize to format a unit. + document.getElementById( "unit" ).textContent = en.formatUnit( 60, "mile/hour", { + form: "short" + }); + + document.getElementById( "requirements" ).style.display = "none"; + document.getElementById( "demo" ).style.display = "block"; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/messages/en.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/messages/en.json new file mode 100644 index 000000000..cd37baee8 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/messages/en.json @@ -0,0 +1,12 @@ +{ + "en": { + "like": [ + "{0, plural, offset:1", + " =0 {Be the first to like this}", + " =1 {You liked this}", + " one {You and someone else liked this}", + " other {You and # others liked this}", + "}" + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/package.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/package.json new file mode 100644 index 000000000..d5d3f391b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/amd-bower/package.json @@ -0,0 +1,14 @@ +{ + "name": "globalize-hello-world-amd-bower", + "private": true, + "comment": [ + "You don't need this file. The only reasone this example does have a", + "package.json is to fool npm, so cldr-data-downloader doesn't get", + "installed on Globalize's root.", + "", + "It's analogous to `chroot .` for npm. [:P]" + ], + "dependencies": { + "cldr-data-downloader": "^0.3.4" + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/.gitignore b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/.gitignore new file mode 100644 index 000000000..1b4210d4e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/.gitignore @@ -0,0 +1,3 @@ +dist/ +node_modules +.tmp-globalize-webpack diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/README.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/README.md new file mode 100644 index 000000000..ead9d4307 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/README.md @@ -0,0 +1,74 @@ +# Globalize App example using webpack + +This example demonstrates how to integrate Globalize with Webpack in your +Application. If you already have an existing Application using Webpack stack, +this example should as well provide you guidance on how to integrate Globalize. +It focuses on the [Globalize Webpack Plugin][], which automates data loading +(CLDR and app messages) during development and automates Globalize compilation +and the usage of Globalize runtime modules for production. It assumes knowledge +of Globalize, npm, and Webpack usage basics. + +## Requirements + +**1. Install app development dependencies** + +This example uses `npm` to download the app development dependencies (i.e., +Globalize, CLDR data, Cldrjs, Webpack, [Globalize Webpack Plugin][], and +others). + +``` +npm install +``` + +## Running the example + +### Development mode + +``` +npm start +``` + +1. Start a server by running `npm start`, which uses webpack's live reload HMR +(Hot Module Replacement). See `package.json` to understand the actual shell +command that is used. +1. Point your browser at `http://localhost:8080`. Note that your browser will +automatically reload on any changes made to the application code (`app/*.js` +files). Also note that for faster page reload, formatters are created +dynamically and automatically by the [Globalize Webpack Plugin][]. +1. Note you can specify the development locale of your choice by setting the +`developmentLocale` property of the Globalize Webpack Plugin on the Webpack +config file. +1. Note that CLDR data and your messages data are automatically loaded by the +[Globalize Webpack Plugin][]. +1. Understand the demo by reading the source code. We have comments there for +you. + +### Production mode + +``` +npm run build +``` + +1. Generate the compiled bundles by running `npm run build`, which will be +created at `./dist`. Note the production bundles are split into three chunks: +(a) vendor, which holds third-party libraries, which in this case means +Globalize Runtime modules, (b) i18n precompiled data, which means the minimum +yet sufficient set of precompiled i18n data that your application needs (one +file for each supported locale), and (c) app, which means your application code. +Also note that all the production code is already minified using UglifyJS. See +`package.json` to understand the actual shell command that is used. +1. Note that your formatters are already precompiled. This is +obvious, but worth emphasizing. It means your formatters are prebuilt, so no client +CPU clock is wasted to generate them and no CLDR or messages data needs to be +dynamically loaded. It means fast to load code (small code) and fast to run +code. +1. Point your browser at `./dist/index.html` to run the application using the +generated production files. Edit this file to display the application using a +different locale (source code has instructions). +1. Understand the demo by reading the source code. We have comments there for +you. + +For more information about the plugin, see the [Globalize Webpack Plugin][] +documentation. + +[Globalize Webpack Plugin]: https://github.com/rxaviers/globalize-webpack-plugin diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/app/index.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/app/index.js new file mode 100644 index 000000000..2c3bb1b34 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/app/index.js @@ -0,0 +1,89 @@ +var Globalize = require( "globalize" ); +var startTime = new Date(); + +// Standalone table. +var numberFormatter = Globalize.numberFormatter({ maximumFractionDigits: 2 }); +document.getElementById( "number" ).textContent = numberFormatter( 12345.6789 ); + +var numberCompactFormatter = Globalize.numberFormatter({ + compact: "short", + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); +document.getElementById( "number-compact" ).textContent = numberCompactFormatter( 12345.6789 ); + +var currencyFormatter = Globalize.currencyFormatter( "USD" ); +document.getElementById( "currency" ).textContent = currencyFormatter( 69900 ); + +var dateFormatter = Globalize.dateFormatter({ datetime: "medium" }); +document.getElementById( "date" ).textContent = dateFormatter( new Date() ); + +var dateWithTimeZoneFormatter = Globalize.dateFormatter({ + datetime: "full", + timeZone: "America/Sao_Paulo" +}); +document.getElementById( "date-time-zone" ).textContent = dateWithTimeZoneFormatter( new Date() ); + +var _dateToPartsFormatter = Globalize.dateToPartsFormatter({ datetime: "medium" }); +var dateToPartsFormatter = function( value ) { + return _dateToPartsFormatter( value, { + datetime: "medium" + }).map(function( part ) { + switch(part.type) { + case "month": return "" + part.value + ""; + default: return part.value; + } + }).reduce(function( memo, value ) { + return memo + value; + }); +}; +document.getElementById( "date-to-parts" ).innerHTML = dateToPartsFormatter( new Date() ); + +var relativeTimeFormatter = Globalize.relativeTimeFormatter( "second" ); +document.getElementById( "relative-time" ).textContent = relativeTimeFormatter( 0 ); + +var unitFormatter = Globalize.unitFormatter( "mile/hour", { form: "short" } ); +document.getElementById( "unit" ).textContent = unitFormatter( 60 ); + +// Messages. +document.getElementById( "intro-1" ).textContent = Globalize.formatMessage( "intro-1" ); +document.getElementById( "number-label" ).textContent = Globalize.formatMessage( "number-label" ); +document.getElementById( "number-compact-label" ).textContent = Globalize.formatMessage( "number-compact-label" ); +document.getElementById( "currency-label" ).textContent = Globalize.formatMessage( "currency-label" ); +document.getElementById( "date-label" ).textContent = Globalize.formatMessage( "date-label" ); +document.getElementById( "date-time-zone-label" ).textContent = Globalize.formatMessage( "date-time-zone-label" ); +document.getElementById( "date-to-parts-label" ).textContent = Globalize.formatMessage( "date-to-parts-label" ); +document.getElementById( "relative-time-label" ).textContent = Globalize.formatMessage( "relative-time-label" ); +document.getElementById( "unit-label" ).textContent = Globalize.formatMessage( "unit-label" ); +document.getElementById( "message-1" ).textContent = Globalize.formatMessage( "message-1", { + currency: currencyFormatter( 69900 ), + date: dateFormatter( new Date() ), + number: numberFormatter( 12345.6789 ), + relativeTime: relativeTimeFormatter( 0 ), + unit: unitFormatter( 60 ) +}); + +document.getElementById( "message-2" ).textContent = Globalize.formatMessage( "message-2", { + count: 3 +}); + +// Display demo. +document.getElementById( "requirements" ).style.display = "none"; +document.getElementById( "demo" ).style.display = "block"; + +// Refresh elapsed time +setInterval(function() { + var elapsedTime = +( ( startTime - new Date() ) / 1000 ).toFixed( 0 ); + document.getElementById( "date" ).textContent = dateFormatter( new Date() ); + document.getElementById( "date-time-zone" ).textContent = dateWithTimeZoneFormatter( new Date() ); + document.getElementById( "date-to-parts" ).innerHTML = dateToPartsFormatter( new Date() ); + document.getElementById( "relative-time" ).textContent = relativeTimeFormatter( elapsedTime ); + document.getElementById( "message-1" ).textContent = Globalize.formatMessage( "message-1", { + currency: currencyFormatter( 69900 ), + date: dateFormatter( new Date() ), + number: numberFormatter( 12345.6789 ), + relativeTime: relativeTimeFormatter( elapsedTime ), + unit: unitFormatter( 60 ) + }); + +}, 1000); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/index-template.html b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/index-template.html new file mode 100644 index 000000000..48966fd8e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/index-template.html @@ -0,0 +1,71 @@ + + + + + + Globalize App example using Webpack + + + +

Globalize App example using Webpack

+ +
+

Requirements

+
    +
  • Read README.md for instructions on how to run the demo. +
  • +
+
+ + + + + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/ar.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/ar.json new file mode 100644 index 000000000..cb4142b99 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/ar.json @@ -0,0 +1,25 @@ +{ + "ar": { + "intro-1": "‫استخدم Globalize لتدويل تطبيقك.‬", + "number-label": "رقم", + "number-compact-label": "الرقم (شكل مدمج)", + "currency-label": "عملة", + "date-label": "تاريخ", + "date-time-zone-label": "التاريخ (في منطقة زمنية محددة ل إيانا، على سبيل المثال، America/Sao_Paulo)", + "date-to-parts-label": "التاريخ (لاحظ الشهر القوي، تمت إضافة الترميز باستخدام formatDateToParts)", + "relative-time-label": "الوقت النسبي", + "unit-label": "وحدة القياس", + "message-1": "مثال علي رسالة باستخدام رقم مختلط \"{number}\", عملة \"{currency}\", تاريخ \"{date}\", وقت نسبي \"{relativeTime}\", و وحدة قياس \"{unit}\" .", + "message-2": [ + "مثال على رسالة بدعم صيغة الجمع:", + "{count, plural,", + " zero {لا يوجد لديك اي مهام متبقية}", + " one {لديك مهمة واحدة متبقية}", + " two {لديك اثنين من المهام المتبقية}", + " few {لديك # من المهام المتبقية}", + " many {لديك # من المهام المتبقية}", + " other {لديك # من المهام المتبقية}", + "}." + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/de.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/de.json new file mode 100644 index 000000000..00b8326a0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/de.json @@ -0,0 +1,21 @@ +{ + "de": { + "intro-1": "Verwenden Sie Globalize um Ihre Anwendung zu internationalisieren.", + "number-label": "Zahl", + "number-compact-label": "Zahl (kompakte Form)", + "currency-label": "Währung", + "date-label": "Datum", + "date-time-zone-label": "Datum (in einer bestimmten IANA-Zeitzone, z. B. America/Sao_Paulo)", + "date-to-parts-label": "Datum (beachten Sie den hervorgehobenen Monat, das Markup wurde mit dateToPartsFormatter hinzugefügt)", + "relative-time-label": "Relative Zeit", + "unit-label": "Einheit", + "message-1": "Ein Beispiel mit Zahl \"{number}\", Währung \"{currency}\", Datum \"{date}\", relative Zeit \"{relativeTime}\", und Einheit \"{unit}\".", + "message-2": [ + "Ein Beispieltext mit Unterstützung von Plural Formen: ", + "{count, plural,", + " one {Sie haben noch eine Aufgabe}", + " other {Sie haben noch # verbliebende Aufgaben}", + "}." + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/en.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/en.json new file mode 100644 index 000000000..290c91d46 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/en.json @@ -0,0 +1,21 @@ +{ + "en": { + "intro-1": "Use Globalize to internationalize your application.", + "number-label": "Number", + "number-compact-label": "Number (compact form)", + "currency-label": "Currency", + "date-label": "Date", + "date-time-zone-label": "Date (in a specific IANA time zone, e.g., America/Sao_Paulo)", + "date-to-parts-label": "Date (note the highlighted month, the markup was added using formatDateToParts)", + "relative-time-label": "Relative Time", + "unit-label": "Unit", + "message-1": "An example of a message using mixed number \"{number}\", currency \"{currency}\", date \"{date}\", relative time \"{relativeTime}\", and unit \"{unit}\".", + "message-2": [ + "An example of a message with pluralization support:", + "{count, plural,", + " one {You have one remaining task}", + " other {You have # remaining tasks}", + "}." + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/es.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/es.json new file mode 100644 index 000000000..6cc794275 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/es.json @@ -0,0 +1,21 @@ +{ + "es": { + "intro-1": "Usa Globalize para internacionalizar tu aplicación.", + "number-label": "Número", + "number-compact-label": "Número (forma compacta)", + "currency-label": "Moneda", + "date-label": "Fecha", + "date-time-zone-label": "Fecha (en una zona horaria IANA específica, por ejemplo, America/Sao_Paulo)", + "date-to-parts-label": "Fecha (note el mes destacado en negro, el marcador de html se agregó utilizando dateToPartsFormatter)", + "relative-time-label": "Tiempo Relativo", + "unit-label": "Unidad", + "message-1": "Un ejemplo de mensaje usando números mixtos \"{number}\", monedas \"{currency}\", fechas \"{date}\", tiempo relativo \"{relativeTime}\", y unidades \"{unit}\".", + "message-2": [ + "Un ejemplo de mensaje con soporte de pluralización:", + "{count, plural,", + " one {Tienes una tarea restante}", + " other {Tienes # tareas restantes}", + "}." + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/pt.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/pt.json new file mode 100644 index 000000000..b58f8cf50 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/pt.json @@ -0,0 +1,21 @@ +{ + "pt": { + "intro-1": "Use o Globalize para internacionalizar sua aplicação.", + "number-label": "Número", + "number-compact-label": "Número (forma compacta)", + "currency-label": "Moeda", + "date-label": "Data", + "date-time-zone-label": "Data (em um fuso horário IANA específico, por exemplo, America/Sao_Paulo)", + "date-to-parts-label": "Data (note o mês em negrito, a marcação HTML foi adicionada usando formatDateToParts)", + "relative-time-label": "Tempo relativo", + "unit-label": "Unit", + "message-1": "Um exemplo de mensagem com mistura de número \"{number}\", moeda \"{currency}\", data \"{date}\", tempo relativo \"{relativeTime}\", e unidade \"{unit}\".", + "message-2": [ + "Um exemplo de message com suporte a pluralização:", + "{count, plural,", + " one {Você tem uma tarefa restante}", + " other {Você tem # tarefas restantes}", + "}." + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/ru.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/ru.json new file mode 100644 index 000000000..bedfa2de5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/ru.json @@ -0,0 +1,23 @@ +{ + "ru": { + "intro-1": "Используйте Globalize для интернационализиции вашего приложения.", + "number-label": "Число", + "number-compact-label": "Число (компактная форма)", + "currency-label": "Валюта", + "date-label": "Дата", + "date-time-zone-label": "Дата (в определенном часовом поясе IANA, например, America/Sao_Paulo)", + "date-to-parts-label": "Дата (обратите внимание на сильный месяц, разметка была добавлена с помощью formatDateToParts)", + "relative-time-label": "Относительное время", + "unit-label": "Единица измерения", + "message-1": "Пример сообщения с числом \"{number}\", валютой \"{currency}\", датой \"{date}\", относительным временем \"{relativeTime}\" и единицей измерения \"{unit}\".", + "message-2": [ + "Пример сообщения с поддержкой множественного числа:", + "{count, plural,", + " one {У вас осталась одна задача}", + " many {У вас осталось # задач}", + " few {У вас осталось # задачи}", + " other {У вас осталось # задачи}", + "}." + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/zh.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/zh.json new file mode 100644 index 000000000..6f89ef30a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/messages/zh.json @@ -0,0 +1,20 @@ +{ + "zh": { + "intro-1": "使用Globalize的国际化应用程序", + "number-label": "号码", + "number-compact-label": "编号(紧凑形式)", + "currency-label": "币", + "date-label": "迄今", + "date-time-zone-label": "日期(在特定的IANA时区,例如America / Sao_Paulo)", + "date-to-parts-label": "日期(注意强烈的月份,使用formatDateToParts添加标记)", + "relative-time-label": "相对时间", + "unit-label": "单元", + "message-1": "使用混合数\"{number}\",货币\"{currency}\",日期\"{date}\",相对时间\"{relativeTime}\"和单元\"{unit}\"的消息的例子。", + "message-2": [ + "与多元化支持消息的例子:", + "{count, plural,", + " other {你有#剩下的任务}", + "}." + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/package.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/package.json new file mode 100644 index 000000000..47326c016 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/package.json @@ -0,0 +1,17 @@ +{ + "private": true, + "devDependencies": { + "cldr-data": ">=25", + "globalize": "^1.3.0", + "globalize-webpack-plugin": "^2.1.0", + "html-webpack-plugin": "^2.30.1", + "iana-tz-data": "^2017.1.0", + "webpack": "^3.11.0", + "webpack-dev-server": "^2.11.1" + }, + "scripts": { + "start": "webpack-dev-server --config webpack-config.js --hot --progress --colors --inline", + "build": "NODE_ENV=production webpack --config webpack-config.js" + }, + "cldr-data-urls-filter": "(core|dates|numbers|units)" +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/webpack-config.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/webpack-config.js new file mode 100644 index 000000000..0cd8fece5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/app-npm-webpack/webpack-config.js @@ -0,0 +1,63 @@ +var webpack = require( "webpack" ); +var path = require("path"); +var CommonsChunkPlugin = require( "webpack/lib/optimize/CommonsChunkPlugin" ); +var HtmlWebpackPlugin = require( "html-webpack-plugin" ); +var GlobalizePlugin = require( "globalize-webpack-plugin" ); + +var production = process.env.NODE_ENV === "production"; +var globalizeCompiledDataRegex = new RegExp( /^(globalize\-compiled\-data)\-\S+$/ ); + +function subLocaleNames( name ) { + return name.replace( globalizeCompiledDataRegex, "$1" ); +} + +module.exports = { + entry: { + main: "./app/index.js", + }, + output: { + path: path.join( __dirname, production ? "./dist" : "./tmp" ), + publicPath: production ? "" : "http://localhost:8080/", + chunkFilename: "[name].[chunkhash].js", + filename: production ? "[name].[chunkhash].js" : "app.js" + }, + resolve: { + extensions: [ "*", ".js" ] + }, + plugins: [ + new HtmlWebpackPlugin({ + template: "./index-template.html", + // filter to a single compiled globalize language + // change 'en' to language of choice or remove inject all languages + // NOTE: last language will be set language + chunks: [ "vendor", "globalize-compiled-data-en", "main" ], + chunksSortMode: function ( c1, c2 ) { + var orderedChunks = [ "vendor", "globalize-compiled-data", "main" ]; + var o1 = orderedChunks.indexOf( subLocaleNames( c1.names[ 0 ])); + var o2 = orderedChunks.indexOf( subLocaleNames( c2.names[ 0 ])); + return o1 - o2; + }, + }), + new GlobalizePlugin({ + production: production, + developmentLocale: "en", + supportedLocales: [ "ar", "de", "en", "es", "pt", "ru", "zh" ], + messages: "messages/[locale].json", + output: "i18n/[locale].[chunkhash].js" + }) + ].concat( production ? [ + new CommonsChunkPlugin({ + name: "vendor", + minChunks: function(module) { + return ( + module.context && module.context.indexOf("node_modules") !== -1 + ); + } + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + } + }) + ] : [] ) +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/.gitignore b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/.gitignore new file mode 100644 index 000000000..9537a1c27 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/.gitignore @@ -0,0 +1 @@ +compiled-formatters.js diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/README.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/README.md new file mode 100644 index 000000000..65c3918c0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/README.md @@ -0,0 +1,45 @@ +# Basic Globalize Compiler example + +This example focuses on the Globalize Compiler and the Globalize runtime +modules. It assumes knowledge of Globalize usage basics. + +## Requirements + +**1. Install Globalize dependencies and Globalize Compiler** + +This example uses `npm` to download Globalize dependencies (i.e., CLDR data and +the Cldrjs library) and the [Globalize Compiler][]. + +``` +npm install +``` + +[Globalize Compiler]: https://github.com/globalizejs/globalize-compiler + +## Running the example + +### Development mode + +1. Start a server by running `python -m SimpleHTTPServer` or other alternative +servers such as [http-server][], [nginx][], [apache][]. +1. Point your browser at `http://localhost:8000/development.html`. Note that the +formatters are created dynamically. Therefore, Cldrjs and CLDR data are +required. +1. Understand the demo by reading the source code. We have comments there for +you. + +[http-server]: https://github.com/nodeapps/http-server +[nginx]: http://nginx.org/en/docs/ +[apache]: http://httpd.apache.org/docs/trunk/ + +### Production mode + +1. Compile the application formatters by running `npm run build`. See +`package.json` to understand the actual shell command that is used. For more +information about the compiler, see the [Globalize Compiler documentation][]. +1. Point your browser at `./production.html`. Note that we don't need Cldrjs nor +CLDR data in production here. +1. Understand the demo by reading the source code. We have comments there for +you. + +[Globalize Compiler documentation]: https://github.com/globalizejs/globalize-compiler#README diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/app.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/app.js new file mode 100644 index 000000000..895855581 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/app.js @@ -0,0 +1,58 @@ +var like, number; + +// Use Globalize to format dates. +document.getElementById( "date" ).textContent = Globalize.formatDate( new Date(), { + datetime: "medium" +}); + +// Use Globalize to format dates on specific time zone. +document.getElementById( "zonedDate" ).textContent = Globalize.formatDate( new Date(), { + datetime: "full", + timeZone: "America/Sao_Paulo" +}); + +// Use Globalize to format dates to parts. +document.getElementById( "dateToParts" ).innerHTML = Globalize.formatDateToParts( new Date(), { + datetime: "medium" +}).map(function( part ) { + switch(part.type) { + case "month": return "" + part.value + ""; + default: return part.value; + } +}).reduce(function( memo, value ) { + return memo + value; +}); + +// Use Globalize to format numbers. +number = Globalize.numberFormatter(); +document.getElementById( "number" ).textContent = number( 12345.6789 ); +document.getElementById( "number-compact" ).textContent = Globalize.formatNumber( 12345.6789, { + compact: "short", + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +// Use Globalize to format currencies. +document.getElementById( "currency" ).textContent = Globalize.formatCurrency( 69900, "USD" ); + +// Use Globalize to get the plural form of a numeric value. +document.getElementById( "plural-number" ).textContent = number( 12345.6789 ); +document.getElementById( "plural-form" ).textContent = Globalize.plural( 12345.6789 ); + +// Use Globalize to format a message with plural inflection. +like = Globalize.messageFormatter( "like" ); +document.getElementById( "message-0" ).textContent = like( 0 ); +document.getElementById( "message-1" ).textContent = like( 1 ); +document.getElementById( "message-2" ).textContent = like( 2 ); +document.getElementById( "message-3" ).textContent = like( 3 ); + +// Use Globalize to format a relative time. +document.getElementById( "relative-time" ).textContent = Globalize.formatRelativeTime( -35, "second" ); + +// Use Globalize to format a unit. +document.getElementById( "unit" ).textContent = Globalize.formatUnit( 60, "mile/hour", { + form: "short" +}); + +document.getElementById( "requirements" ).style.display = "none"; +document.getElementById( "demo" ).style.display = "block"; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/development.html b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/development.html new file mode 100644 index 000000000..e93906473 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/development.html @@ -0,0 +1,121 @@ + + + + + Basic Globalize Compiler example (development mode) + + +

Basic Globalize Compiler example (development mode)

+ +
+

Requirements

+
    +
  • Read README.md for instructions.
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/messages.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/messages.json new file mode 100644 index 000000000..4a5f1f488 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/messages.json @@ -0,0 +1,12 @@ +{ + "en": { + "like": [ + "{0, plural, offset:1", + " =0 {Be the first to like this}", + " =1 {You liked this}", + " one {You and someone else liked this}", + " other {You and # others liked this}", + "}" + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/package.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/package.json new file mode 100644 index 000000000..5cf05b475 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/package.json @@ -0,0 +1,15 @@ +{ + "name": "basic-globalize-compiler", + "private": true, + "scripts": { + "build": "globalize-compiler -l en -m messages.json -o compiled-formatters.js app.js" + }, + "devDependencies": { + "cldr-data": ">=25", + "globalize": "^1.5.0", + "globalize-compiler": "^1.1.1", + "iana-tz-data": "^2017.1.0", + "jquery": "latest" + }, + "cldr-data-urls-filter": "(core|dates|numbers|units)" +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/production.html b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/production.html new file mode 100644 index 000000000..5b8a7defd --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/globalize-compiler/production.html @@ -0,0 +1,75 @@ + + + + + Basic Globalize Compiler example (production mode) + + +

Basic Globalize Compiler example (production mode)

+ +
+

Requirements

+
    +
  • You need to build the `compiled-formatters.js`. Read README.md for instructions. +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/README.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/README.md new file mode 100644 index 000000000..6b39f7db4 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/README.md @@ -0,0 +1,57 @@ +# Hello World (Node.js + npm) + +We assume you know what [Node.js](http://nodejs.org/) and +[npm](https://www.npmjs.org/) is. + +The demo contains one single file: + +``` +. +└── main.js +``` + +Before running it, execute the requirements below. + + +## Requirements + +**1. Install Globalize** + +Let's use npm to download Globalize. For more information on regard of +installation, please read [Getting Started](../../README.md#installation). + +``` +npm install +``` + +Then, you'll get this: + +``` +. +├── node_modules/ +│ ├── globalize/ +│ │ └── dist/ +│ │ ├── globalize +│ │ │ ├── date.js +│ │ │ └── ... +│ │ └── globalize.js +│ └── ... +└── main.js +``` + +**2. Dependencies** + +No action needed, because npm has already handled that for us. + +**3. CLDR content** + +No action needed, because npm has already handled that for us. For more +information, see [npm's cldr-data](https://github.com/rxaviers/cldr-data-npm). + + +## Running the demo + +Once you've completed the requirements above: + +1. Run `node main.js`. +1. Understand the demo by reading the source code. We have comments there for you. diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/main.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/main.js new file mode 100644 index 000000000..9a79fe89f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/main.js @@ -0,0 +1,65 @@ +var like; +var Globalize = require( "globalize" ); + +// Before we can use Globalize, we need to feed it on the appropriate I18n content (Unicode CLDR). Read Requirements on Getting Started on the root's README.md for more information. +Globalize.load( + require( "cldr-data/main/en/ca-gregorian" ), + require( "cldr-data/main/en/currencies" ), + require( "cldr-data/main/en/dateFields" ), + require( "cldr-data/main/en/numbers" ), + require( "cldr-data/main/en/timeZoneNames" ), + require( "cldr-data/main/en/units" ), + require( "cldr-data/supplemental/currencyData" ), + require( "cldr-data/supplemental/likelySubtags" ), + require( "cldr-data/supplemental/metaZones" ), + require( "cldr-data/supplemental/plurals" ), + require( "cldr-data/supplemental/timeData" ), + require( "cldr-data/supplemental/weekData" ) +); +Globalize.loadMessages( require( "./messages/en" ) ); + +Globalize.loadTimeZone( require( "iana-tz-data" ) ); + +// Set "en" as our default locale. +Globalize.locale( "en" ); + +// Use Globalize to format dates. +console.log( Globalize.formatDate( new Date(), { datetime: "medium" } ) ); + +// Use Globalize to format dates in specific time zones. +console.log( Globalize.formatDate( new Date(), { + datetime: "full", + timeZone: "America/Sao_Paulo" +})); + +// Use Globalize to format dates to parts. +console.log( Globalize.formatDateToParts( new Date(), { datetime: "medium" } ) ); + +// Use Globalize to format numbers. +console.log( Globalize.formatNumber( 12345.6789 ) ); + +// Use Globalize to format numbers (compact form). +console.log( Globalize.formatNumber( 12345.6789, { + compact: "short", + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +})); + +// Use Globalize to format currencies. +console.log( Globalize.formatCurrency( 69900, "USD" ) ); + +// Use Globalize to get the plural form of a numeric value. +console.log( Globalize.plural( 12345.6789 ) ); + +// Use Globalize to format a message with plural inflection. +like = Globalize.messageFormatter( "like" ); +console.log( like( 0 ) ); +console.log( like( 1 ) ); +console.log( like( 2 ) ); +console.log( like( 3 ) ); + +// Use Globalize to format relative time. +console.log( Globalize.formatRelativeTime( -35, "second" ) ); + +// Use Globalize to format unit. +console.log( Globalize.formatUnit( 60, "mile/hour", { form: "short" } ) ); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/messages/en.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/messages/en.json new file mode 100644 index 000000000..cd37baee8 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/messages/en.json @@ -0,0 +1,12 @@ +{ + "en": { + "like": [ + "{0, plural, offset:1", + " =0 {Be the first to like this}", + " =1 {You liked this}", + " one {You and someone else liked this}", + " other {You and # others liked this}", + "}" + ] + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/package.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/package.json new file mode 100644 index 000000000..7d91ffd99 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/node-npm/package.json @@ -0,0 +1,10 @@ +{ + "name": "globalize-hello-world-node-npm", + "private": true, + "dependencies": { + "cldr-data": "latest", + "globalize": "^1.3.0", + "iana-tz-data": ">=2017.0.0" + }, + "cldr-data-urls-filter": "(core|dates|numbers|units)" +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/plain-javascript/.gitignore b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/plain-javascript/.gitignore new file mode 100644 index 000000000..39f8b6658 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/plain-javascript/.gitignore @@ -0,0 +1,2 @@ +cldrjs/ +globalize/ diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/plain-javascript/README.md b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/plain-javascript/README.md new file mode 100644 index 000000000..f9eaa0562 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/plain-javascript/README.md @@ -0,0 +1,81 @@ +# Hello World (plain javascript) + +The demo contains one single file: + +``` +. +└── index.html +``` + +Before running it, execute the requirements below. + + +## Requirements + +**1. Dependencies** + +The demo requires Globalize and its dependencies. Globalize's dependencies are listed on [Getting +Started](../../README.md#dependencies), and the only one is +[cldrjs](https://github.com/rxaviers/cldrjs). You are free to fetch it the way you want. But, as an +exercise of this demo, we'll download it ourselves. So: + +1. Click at [Globalize releases tab](https://github.com/globalizejs/globalize/releases). +1. Download the latest package. +1. Unzip it. +1. Rename the extracted directory `globalize` and move it alongside `index.html` and `README.md`. +1. Click at [cldrjs releases tab](https://github.com/rxaviers/cldrjs/releases). +1. Download the latest package. +1. Unzip it. +1. Rename the extracted directory `cldrjs` and move it alongside `index.html` and `README.md`. + +Then, you'll get this: + +``` +. +├── cldrjs +│ └── dist +│ ├── cldr.js +│ ├── ... +│ └── cldr +│ ├── event.js +│ ├── supplemental.js +│ └── ... +├── globalize +│ └── dist +│ ├── globalize.js +│ ├── ... +│ └── globalize +│ ├── currency.js +│ ├── date.js +│ └── ... +├── index.html +└── README.md +``` + +For more information read [cldrjs' usage and +installation](https://github.com/rxaviers/cldrjs#usage-and-installation) docs. + +**2. CLDR content** + +Another typical Globalize requirement is to fetch CLDR content yourself. But, on +this demo we made the things a little easier for you: we've embedded static JSON +into the demo. So, you don't need to actually fetch it anywhere. For more +information about fetching Unicode CLDR JSON data, see [How do I get CLDR +data?](../../doc/cldr.md). + +No action needed here. + +**3. Globalize `dist` files** + +*This step only applies if you are building the source files. If you have downloaded a ZIP or a TAR.GZ or are using a package manager (such as bower or npm) to install then you can ignore this step.* + +[Install the development external dependencies](../../README.md#install-development-external-dependencies) and [build the distribution files](../../README.md#build). + +## Running the demo + +Once you've completed the requirements above: + +1. Point your browser at `./index.html`. +1. Open your JavaScript console to see the demo output. +1. Understand the demo by reading the source code. We have comments there for +you. diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/plain-javascript/index.html b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/plain-javascript/index.html new file mode 100644 index 000000000..bcd4703a2 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/examples/plain-javascript/index.html @@ -0,0 +1,445 @@ + + + + + Globalize Hello World (plain javascript) + + +

Globalize Hello World (plain javascript)

+ +
+

Requirements

+
    +
  • You need to download `cldrjs` and `globalize` dependencies yourself. Read README.md for instructions. +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/package-lock.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/package-lock.json new file mode 100644 index 000000000..2a2b976af --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/package-lock.json @@ -0,0 +1,5686 @@ +{ + "name": "globalize", + "version": "1.6.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", + "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.0.3.tgz", + "integrity": "sha1-krHbDU89tHsFMN9uFa6X21FNwvg=", + "dev": true, + "requires": { + "mime": "~1.2.11", + "negotiator": "0.4.6" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==", + "dev": true + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "basic-auth-connect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", + "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI=", + "dev": true + }, + "batch": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.0.tgz", + "integrity": "sha1-/S4Fp6XWlrTbkxQBPihdj/NVfsM=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "body-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.3.1.tgz", + "integrity": "sha1-GnRRP8eJfXDbVlieDQPwoT8b+pQ=", + "dev": true, + "requires": { + "bytes": "1.0.0", + "qs": "0.6.6", + "raw-body": "1.1.6", + "type-is": "1.2.1" + }, + "dependencies": { + "qs": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", + "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", + "dev": true + } + } + }, + "bower-config": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/bower-config/-/bower-config-1.4.3.tgz", + "integrity": "sha512-MVyyUk3d1S7d2cl6YISViwJBc2VXCkxF5AUFykvN0PQj5FsUiMNSgAYTso18oRFfyZ6XEtjrgg9MAaufHbOwNw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.3", + "minimist": "^0.2.1", + "mout": "^1.0.0", + "osenv": "^0.1.3", + "untildify": "^2.1.0", + "wordwrap": "^0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.1.tgz", + "integrity": "sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==", + "dev": true + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "~0.2.0" + } + }, + "buffer-crc32": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz", + "integrity": "sha1-vj5TgvwCttYySVasGvmKqYsIU0w=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "check-dependencies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/check-dependencies/-/check-dependencies-1.1.0.tgz", + "integrity": "sha512-GDrbGzzJ6Gc6tQh87HBMGhrJ4UWIlR9MKJwgvlrJyj/gWvTYYb2jQetKbajt/EYK5Y8/4g7gH2LEvq8GdUWTag==", + "dev": true, + "requires": { + "bower-config": "^1.4.0", + "chalk": "^2.1.0", + "findup-sync": "^2.0.0", + "lodash.camelcase": "^4.3.0", + "minimist": "^1.2.0", + "semver": "^5.4.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cldr-data-downloader": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/cldr-data-downloader/-/cldr-data-downloader-0.3.5.tgz", + "integrity": "sha512-uyIMa1K98DAp/PE7dYpq2COIrkWn681Atjng1GgEzeJzYb1jANtugtp9wre6+voE+qzVC8jtWv6E/xZ1GTJdlw==", + "dev": true, + "requires": { + "adm-zip": "0.4.11", + "mkdirp": "0.5.0", + "nopt": "3.0.x", + "progress": "1.1.8", + "q": "1.0.1", + "request": "~2.87.0", + "request-progress": "0.3.1" + } + }, + "cldrjs": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz", + "integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA==" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "commitplease": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/commitplease/-/commitplease-2.2.0.tgz", + "integrity": "sha1-4i6/LBfK7bT+XHLeYPdxKDy1xHc=", + "dev": true, + "requires": { + "chalk": "0.4.0", + "mout": "0.8.0", + "semver": "2.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + }, + "mout": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/mout/-/mout-0.8.0.tgz", + "integrity": "sha1-uxn31l7ZgNOSLRHcGezvnoZVgUc=", + "dev": true + }, + "semver": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.2.1.tgz", + "integrity": "sha1-eUEYKz/8xYC/8cF5QqzfeVHA0hM=", + "dev": true + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-1.1.0.tgz", + "integrity": "sha1-Ek2Ke7oYoFpBCi8lutQTsblK/2c=", + "dev": true + }, + "compression": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.0.7.tgz", + "integrity": "sha1-/Ev/Jh3043oTAAby2yqZo0iW9Vo=", + "dev": true, + "requires": { + "accepts": "1.0.3", + "bytes": "1.0.0", + "compressible": "1.1.0", + "on-headers": "0.0.0", + "vary": "0.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "connect": { + "version": "2.19.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-2.19.6.tgz", + "integrity": "sha1-1HP9eUnFW0I6ZPhCDb0Gnbd82dI=", + "dev": true, + "requires": { + "basic-auth-connect": "1.0.0", + "body-parser": "1.3.1", + "bytes": "1.0.0", + "compression": "1.0.7", + "connect-timeout": "1.1.0", + "cookie": "0.1.2", + "cookie-parser": "1.1.0", + "cookie-signature": "1.0.3", + "csurf": "1.2.1", + "debug": "1.0.2", + "errorhandler": "1.0.2", + "escape-html": "1.0.1", + "express-session": "1.2.1", + "fresh": "0.2.2", + "method-override": "2.0.2", + "morgan": "1.1.1", + "multiparty": "3.2.8", + "on-headers": "0.0.0", + "parseurl": "1.0.1", + "pause": "0.0.1", + "qs": "0.6.6", + "response-time": "2.0.0", + "serve-favicon": "2.0.1", + "serve-index": "1.1.1", + "serve-static": "1.2.3", + "type-is": "1.2.1", + "vhost": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.2.tgz", + "integrity": "sha1-OElZHBDM5khHbDx8Li40FttZY8Q=", + "dev": true, + "requires": { + "ms": "0.6.2" + } + }, + "ms": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", + "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=", + "dev": true + }, + "qs": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", + "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", + "dev": true + } + } + }, + "connect-livereload": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.4.1.tgz", + "integrity": "sha1-D4oagWvJuv+uRjfM6pF0Yv41kXo=", + "dev": true + }, + "connect-timeout": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.1.0.tgz", + "integrity": "sha1-/IBhX8els4Y70DGa8kkdLX/cXwU=", + "dev": true, + "requires": { + "debug": "0.8.1" + }, + "dependencies": { + "debug": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", + "integrity": "sha1-IP9NJvXkIstoobrLu2EDmtjBwTA=", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz", + "integrity": "sha1-cv7D0k5Io0Mgc9kMEmQgBQYQBLE=", + "dev": true + }, + "cookie-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.1.0.tgz", + "integrity": "sha1-L4JlqjtVczqF7vIH8OJTDD6M9wU=", + "dev": true, + "requires": { + "cookie": "0.1.2", + "cookie-signature": "1.0.3" + } + }, + "cookie-signature": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz", + "integrity": "sha1-kc2ZfMUftkFZVzjGnNoCAyj1D/k=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "crc32": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz", + "integrity": "sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "csrf-tokens": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/csrf-tokens/-/csrf-tokens-1.0.4.tgz", + "integrity": "sha1-SWclaLJwM0hkTqyvYc29wFS6VvI=", + "dev": true, + "requires": { + "rndm": "1", + "scmp": "~0.0.3", + "uid2": "~0.0.2" + } + }, + "csurf": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.2.1.tgz", + "integrity": "sha1-OSj6I3WS7Vgkp8Ih2Fgb81ap2nY=", + "dev": true, + "requires": { + "csrf-tokens": "~1.0.2" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "deflate-js": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/deflate-js/-/deflate-js-0.2.3.tgz", + "integrity": "sha1-+Fq7WOvFFRowYUdHPVfD5PfkQms=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.0.3.tgz", + "integrity": "sha1-bJjECJq+y1p7hcGsRJqmA9Oz2r4=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "errorhandler": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.0.2.tgz", + "integrity": "sha1-WH1Hu7vEjP/hMsOs2nIVyQJVgQg=", + "dev": true + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "escape-html": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz", + "integrity": "sha1-GBoobq05ejmpKFfPsdQwUuNWv/A=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + } + } + }, + "eslint-config-jquery": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-jquery/-/eslint-config-jquery-3.0.0.tgz", + "integrity": "sha512-VDdRAIlNq1EM5P7J4JGQSCnZEIvIlNGGTUTCPT2wQNZ2GT69rsAwSIqZVcoiyZbwY7TaaMwLOxwSjqm+DEUjbA==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express-session": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.2.1.tgz", + "integrity": "sha1-J0GhZh6zpKF6fbCkgEn78FV05GU=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.1", + "cookie": "0.1.2", + "cookie-signature": "1.0.3", + "debug": "0.8.1", + "on-headers": "0.0.0", + "uid2": "0.0.3", + "utils-merge": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", + "integrity": "sha1-IP9NJvXkIstoobrLu2EDmtjBwTA=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-sync-cmp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", + "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", + "dev": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "~5.0.0" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "finished": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/finished/-/finished-1.2.2.tgz", + "integrity": "sha1-QWCOr639ZWg7RqEiC8Sx7D2u3Ng=", + "dev": true, + "requires": { + "ee-first": "1.0.3" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.2.tgz", + "integrity": "sha1-lzHc9WeMf660T7kDxPct9VGH+nc=", + "dev": true + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-tools": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/git-tools/-/git-tools-0.1.1.tgz", + "integrity": "sha1-z521gDHxEEFB7OVqLtUD0xXiXkg=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globalize-compiler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/globalize-compiler/-/globalize-compiler-1.1.1.tgz", + "integrity": "sha512-oZIwVp3L/waDidle7Qrw4FiCCmOLAqvdM9P7W8nEO4OfXO//l/abBiA+RL2+mYZPOpTAlRDVS2FLfFVWxHovWA==", + "dev": true, + "requires": { + "escodegen": "^1.6.1", + "esprima": "^2.3.0", + "nopt": "^3.0.3" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globalyzer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.4.tgz", + "integrity": "sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA==", + "dev": true + }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "globule": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "grunt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.2.0.tgz", + "integrity": "sha512-uGMrucC+isjLBEcEyQjaSj41ehhePr07uCykQFJR0ciKs9kDsLdr1L976+v5aFsLB+l0n7JoWpovs941xbI9MA==", + "dev": true, + "requires": { + "dateformat": "~3.0.3", + "eventemitter2": "~0.4.13", + "exit": "~0.1.2", + "findup-sync": "~0.3.0", + "glob": "~7.1.6", + "grunt-cli": "~1.3.2", + "grunt-known-options": "~1.1.0", + "grunt-legacy-log": "~2.0.0", + "grunt-legacy-util": "~1.1.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.14.0", + "minimatch": "~3.0.4", + "mkdirp": "~1.0.4", + "nopt": "~3.0.6", + "path-is-absolute": "~2.0.0", + "rimraf": "~3.0.2" + }, + "dependencies": { + "grunt-cli": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz", + "integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==", + "dev": true, + "requires": { + "grunt-known-options": "~1.1.0", + "interpret": "~1.1.0", + "liftoff": "~2.5.0", + "nopt": "~4.0.1", + "v8flags": "~3.1.1" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "path-is-absolute": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-2.0.0.tgz", + "integrity": "sha512-ajROpjq1SLxJZsgSVCcVIt+ZebVH+PwJtPnVESjfg6JKwJGwAgHRC3zIcjvI0LnecjIHCJhtfNZ/Y/RregqyXg==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "grunt-check-dependencies": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-check-dependencies/-/grunt-check-dependencies-1.0.0.tgz", + "integrity": "sha1-UYiVh8V+gn3enN9pt1CuCy+IHFA=", + "dev": true, + "requires": { + "check-dependencies": "^1.0.1", + "lodash.clonedeep": "^4.5.0" + } + }, + "grunt-commitplease": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/grunt-commitplease/-/grunt-commitplease-0.0.6.tgz", + "integrity": "sha1-cwYOhh1CqzaldXUUzojkZ2rI190=", + "dev": true, + "requires": { + "commitplease": "2.2.0", + "git-tools": "0.1.1" + } + }, + "grunt-compare-size": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/grunt-compare-size/-/grunt-compare-size-0.4.2.tgz", + "integrity": "sha1-0qvx082dOaFiA+EdI7cYtXV571E=", + "dev": true, + "requires": { + "lodash": "^4.11.1" + } + }, + "grunt-contrib-clean": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz", + "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=", + "dev": true, + "requires": { + "async": "^1.5.2", + "rimraf": "^2.5.1" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "grunt-contrib-connect": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-0.8.0.tgz", + "integrity": "sha1-H3AEPjpHOuj7eorL+SnOEE6vQyM=", + "dev": true, + "requires": { + "async": "~0.9.0", + "connect": "~2.19.5", + "connect-livereload": "~0.4.0", + "open": "0.0.5", + "portscanner": "~0.2.3" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + } + } + }, + "grunt-contrib-copy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", + "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "file-sync-cmp": "^0.1.0" + } + }, + "grunt-contrib-qunit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-2.0.0.tgz", + "integrity": "sha1-VKUbSyyE/uYsO34AFFySjR7Ct+w=", + "dev": true, + "requires": { + "grunt-lib-phantomjs": "^1.0.0" + } + }, + "grunt-contrib-requirejs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-requirejs/-/grunt-contrib-requirejs-1.0.0.tgz", + "integrity": "sha1-7BZwyvwycTkC7lNWlFRxWy48utU=", + "dev": true, + "requires": { + "requirejs": "^2.1.0" + } + }, + "grunt-contrib-uglify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.0.1.tgz", + "integrity": "sha1-/etfk4pMgEL46Grkb2NVTo6VEcs=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "maxmin": "^1.1.0", + "uglify-js": "~3.0.4", + "uri-path": "^1.0.0" + } + }, + "grunt-contrib-watch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", + "integrity": "sha1-hKGnodar0m7VaEE0lscxM+mQAY8=", + "dev": true, + "requires": { + "async": "^1.5.0", + "gaze": "^1.0.0", + "lodash": "^3.10.1", + "tiny-lr": "^0.2.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "grunt-eslint": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-23.0.0.tgz", + "integrity": "sha512-QqHSAiGF08EVD7YlD4OSRWuLRaDvpsRdTptwy9WaxUXE+03mCLVA/lEaR6SHWehF7oUwIqCEjaNONeeeWlB4LQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "eslint": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "grunt-git-authors": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/grunt-git-authors/-/grunt-git-authors-3.2.0.tgz", + "integrity": "sha1-D/WrbTxu/+CrIV1jNDRcD2v+FnI=", + "dev": true, + "requires": { + "spawnback": "~1.0.0" + } + }, + "grunt-known-options": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", + "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", + "dev": true + }, + "grunt-legacy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "dev": true, + "requires": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.5" + } + }, + "grunt-legacy-log-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "dev": true, + "requires": { + "chalk": "~2.4.1", + "lodash": "~4.17.10" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "grunt-legacy-util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", + "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", + "dev": true, + "requires": { + "async": "~1.5.2", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.10", + "underscore.string": "~3.3.4", + "which": "~1.3.0" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "grunt-lib-phantomjs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-1.1.0.tgz", + "integrity": "sha1-np7c3Z/S3UDgwYHJQ3HVcqpe6tI=", + "dev": true, + "requires": { + "eventemitter2": "^0.4.9", + "phantomjs-prebuilt": "^2.1.3", + "rimraf": "^2.5.2", + "semver": "^5.1.0", + "temporary": "^0.0.8" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "grunt-mocha-test": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/grunt-mocha-test/-/grunt-mocha-test-0.13.3.tgz", + "integrity": "sha512-zQGEsi3d+ViPPi7/4jcj78afKKAKiAA5n61pknQYi25Ugik+aNOuRmiOkmb8mN2CeG8YxT+YdT1H1Q7B/eNkoQ==", + "dev": true, + "requires": { + "hooker": "^0.2.3", + "mkdirp": "^0.5.0" + } + }, + "gzip-js": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/gzip-js/-/gzip-js-0.3.2.tgz", + "integrity": "sha1-IxF+/usozzhSSN7/Df+tiUg22Ws=", + "dev": true, + "requires": { + "crc32": ">= 0.2.2", + "deflate-js": ">= 0.2.2" + } + }, + "gzip-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", + "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", + "dev": true, + "requires": { + "browserify-zlib": "^0.1.4", + "concat-stream": "^1.4.1" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "requires": { + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "http-errors": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "statuses": "1" + } + }, + "http-parser-js": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", + "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iana-tz-data": { + "version": "2019.1.0", + "resolved": "https://registry.npmjs.org/iana-tz-data/-/iana-tz-data-2019.1.0.tgz", + "integrity": "sha512-T7+26Skkyxqjp4mg20/O065j9J5qP39nWVQj/2ArxQ0gSPkL+T9lwerRmiOAzFRNsNXepX45QqchqTVENwNvig==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-core-module": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", + "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-reporters": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/js-reporters/-/js-reporters-1.2.3.tgz", + "integrity": "sha512-2YzWkHbbRu6LueEs5ZP3P1LqbECvAeUJYrjw3H4y1ofW06hqCS0AbzBtLwbr+Hke51bt9CUepJ/Fj1hlCRIF6A==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "liftoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + } + } + }, + "livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._basecreate": "^3.0.0", + "lodash._isiterateecall": "^3.0.0" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "matchdep": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-1.0.1.tgz", + "integrity": "sha1-pXozgESR+64girqPaDgEN6vC3KU=", + "dev": true, + "requires": { + "findup-sync": "~0.3.0", + "micromatch": "^2.3.7", + "resolve": "~1.1.6", + "stack-trace": "0.0.9" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "stack-trace": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=", + "dev": true + } + } + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "maxmin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", + "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^1.0.0", + "pretty-bytes": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } + } + }, + "method-override": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.0.2.tgz", + "integrity": "sha1-AFMSeMeXiWQL8n6X4mo6Wh98ynM=", + "dev": true, + "requires": { + "methods": "1.0.1", + "parseurl": "1.0.1", + "vary": "0.1.0" + } + }, + "methods": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.0.1.tgz", + "integrity": "sha1-dbyRlD3/19oDfPPusO1zoAN80Us=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.8", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "he": "1.1.1", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "morgan": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.1.1.tgz", + "integrity": "sha1-zeRdLoB+vMQ5dFhG6oA5LmkJgUY=", + "dev": true, + "requires": { + "bytes": "1.0.0" + } + }, + "mout": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/mout/-/mout-1.2.2.tgz", + "integrity": "sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multiparty": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-3.2.8.tgz", + "integrity": "sha1-veITAdrSlChuFVsrYHEMauBK5k8=", + "dev": true, + "requires": { + "readable-stream": "~1.1.9", + "stream-counter": "~0.2.0" + } + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.6.tgz", + "integrity": "sha1-9F+vn6gz7TylElDqmn3fxCZ6RLM=", + "dev": true + }, + "node-watch": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.0.tgz", + "integrity": "sha512-OOBiglke5SlRQT5WYfwXTmYqTfXjcTNBHpalyHLtLxDpQYVpVRkJqabcch1kmwJsjV/J4OZuzEafeb4soqtFZA==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + }, + "dependencies": { + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + } + } + }, + "on-headers": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-0.0.0.tgz", + "integrity": "sha1-7igX+DRDJXhc2cLfKyQrvBfK9MQ=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "open": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", + "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", + "dev": true + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", + "integrity": "sha1-0lofmeJQbcsn1nBLg9yooxLk7cw=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.0.1.tgz", + "integrity": "sha1-Llfc5u/dN8NRhwEDCUTCK/OIt7Q=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" + }, + "dependencies": { + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "portscanner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-0.2.3.tgz", + "integrity": "sha1-QNityS4BsgWrAgqhbw44asXtGXg=", + "dev": true, + "requires": { + "async": "0.1.15" + }, + "dependencies": { + "async": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.15.tgz", + "integrity": "sha1-IYDqyizypspSgNQcBYW+ybPkm9M=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.1.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.0.1.tgz", + "integrity": "sha1-EYcq7t7okmgRCxCnGESP+xARKhQ=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "qunit": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.12.0.tgz", + "integrity": "sha512-Lu3tbKziVzXTfseoEtTiiSAbSPB6SGU4Emc2uo8n+fbsXuRCLzfqPwJfAVJwKu9NdukX1V/L0qWf2UvmPX+QeA==", + "dev": true, + "requires": { + "commander": "6.2.0", + "js-reporters": "1.2.3", + "node-watch": "0.7.0", + "tiny-glob": "0.2.6" + }, + "dependencies": { + "commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "dev": true + } + } + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "range-parser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", + "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=", + "dev": true + }, + "raw-body": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.6.tgz", + "integrity": "sha1-mOnfmn4t+ZSTG3zbSyprlpSnTwI=", + "dev": true, + "requires": { + "bytes": "1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "request-progress": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", + "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "dev": true, + "requires": { + "throttleit": "~0.0.2" + } + }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "response-time": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.0.0.tgz", + "integrity": "sha1-Zcs5/VDeL0/9vdKF8YVZZr1vyzY=", + "dev": true, + "requires": { + "on-headers": "0.0.0" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rndm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", + "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w=", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scmp": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/scmp/-/scmp-0.0.3.tgz", + "integrity": "sha1-NkjfLXKUZB5/eGc//CloHZutkHM=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/send/-/send-0.4.3.tgz", + "integrity": "sha1-lieyO3cH+/Y3ODHKxXkzMLWUtkA=", + "dev": true, + "requires": { + "debug": "1.0.2", + "escape-html": "1.0.1", + "finished": "1.2.2", + "fresh": "0.2.2", + "mime": "1.2.11", + "range-parser": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.2.tgz", + "integrity": "sha1-OElZHBDM5khHbDx8Li40FttZY8Q=", + "dev": true, + "requires": { + "ms": "0.6.2" + } + }, + "ms": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", + "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=", + "dev": true + } + } + }, + "serve-favicon": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.0.1.tgz", + "integrity": "sha1-SCaXXZ8XPKOkFY6WmBYfdd7Hr+w=", + "dev": true, + "requires": { + "fresh": "0.2.2" + } + }, + "serve-index": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.1.1.tgz", + "integrity": "sha1-6trdj9B0E63RejAcZX9S/AXxnS8=", + "dev": true, + "requires": { + "accepts": "1.0.3", + "batch": "0.5.0" + } + }, + "serve-static": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.2.3.tgz", + "integrity": "sha1-k87Lw0Dweey4WJKB0dwxwmwM0Vg=", + "dev": true, + "requires": { + "escape-html": "1.0.1", + "parseurl": "1.0.1", + "send": "0.4.3" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spawnback": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/spawnback/-/spawnback-1.0.1.tgz", + "integrity": "sha512-340ZqtqJzWAZtHwaCC2gx4mdQOnkUWAWNDp7y0bCEatdjmgQ4j7b0qQ7qO5WIJWx/luNrKcrYzpKbH3NTR030A==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-counter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz", + "integrity": "sha1-3tJmVWMZyLDiIoErnPOyb6fZR94=", + "dev": true, + "requires": { + "readable-stream": "~1.1.8" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "temporary": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", + "integrity": "sha1-oYqYHSi6jKNgJ/s8MFOMPst0CsA=", + "dev": true, + "requires": { + "package": ">= 1.0.0 < 1.2.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "tiny-glob": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.6.tgz", + "integrity": "sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw==", + "dev": true, + "requires": { + "globalyzer": "^0.1.0", + "globrex": "^0.1.1" + } + }, + "tiny-lr": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", + "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", + "dev": true, + "requires": { + "body-parser": "~1.14.0", + "debug": "~2.2.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.2.0", + "parseurl": "~1.3.0", + "qs": "~5.1.0" + }, + "dependencies": { + "body-parser": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", + "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", + "dev": true, + "requires": { + "bytes": "2.2.0", + "content-type": "~1.0.1", + "debug": "~2.2.0", + "depd": "~1.1.0", + "http-errors": "~1.3.1", + "iconv-lite": "0.4.13", + "on-finished": "~2.3.0", + "qs": "5.2.0", + "raw-body": "~2.1.5", + "type-is": "~1.6.10" + }, + "dependencies": { + "qs": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", + "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", + "dev": true + } + } + }, + "bytes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", + "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "qs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", + "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=", + "dev": true + }, + "raw-body": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + } + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + } + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "type-is": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.2.1.tgz", + "integrity": "sha1-c9RICApPHdGKyx7v/2KWjFtdVKI=", + "dev": true, + "requires": { + "mime-types": "1.0.0" + }, + "dependencies": { + "mime-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.0.tgz", + "integrity": "sha1-antKavLn2S+Xr+A/BHx4AejwAdI=", + "dev": true + } + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "3.0.28", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz", + "integrity": "sha512-0h/qGay016GG2lVav3Kz174F3T2Vjlz2v6HCt+WDQpoXfco0hWwF5gHK9yh88mUYvIC+N7Z8NT8WpjSp1yoqGA==", + "dev": true, + "requires": { + "commander": "~2.11.0", + "source-map": "~0.5.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "uid2": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", + "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=", + "dev": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "dev": true, + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "uri-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "v8flags": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", + "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vary/-/vary-0.1.0.tgz", + "integrity": "sha1-3wlFiZ6TwMxb0YzIMh2dIedPYXY=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vhost": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vhost/-/vhost-1.0.0.tgz", + "integrity": "sha1-ZUUT8omk+Jiqt0W71jPkAYDJxMA=", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + }, + "dependencies": { + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + } + } + }, + "zoned-date-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/zoned-date-time/-/zoned-date-time-1.1.0.tgz", + "integrity": "sha512-MhjAUwM1ABOmE9J5SzjNnoXQL83NDaZbRYsZtVTTIjKxXeGJ70GZNEC/NJAyhYiyFiteu24N8Q6gaGhOI/A51A==", + "dev": true + } + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/package.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/package.json new file mode 100644 index 000000000..e131d20bc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/package.json @@ -0,0 +1,109 @@ +{ + "name": "globalize", + "version": "1.7.0", + "description": "A JavaScript library for internationalization and localization that leverages the official Unicode CLDR JSON data.", + "keywords": [ + "utility", + "globalization", + "internationalization", + "multilingualization", + "localization", + "g11n", + "i18n", + "m17n", + "L10n", + "localize", + "format", + "parse", + "translate", + "strings", + "numbers", + "dates", + "times", + "calendars", + "plural", + "plurals", + "pluralize", + "cultures", + "languages", + "locales", + "Unicode", + "CLDR", + "JSON" + ], + "homepage": "https://github.com/globalizejs/globalize", + "author": { + "name": "OpenJS Foundation and other contributors", + "url": "https://github.com/globalizejs/globalize/blob/master/AUTHORS.txt" + }, + "maintainers": [ + { + "name": "Jörn Zaefferer", + "email": "joern.zaefferer@gmail.com", + "url": "http://bassistance.de" + }, + { + "name": "Rafael Xavier de Souza", + "email": "rxaviers@gmail.com", + "url": "http://rafael.xavier.blog.br" + } + ], + "main": "./dist/node-main.js", + "files": [ + "CONTRIBUTING.md", + "dist/", + "!dist/.build", + "doc/", + "examples/", + "!examples/**/.tmp-globalize-webpack", + "!examples/**/bower_components", + "!examples/**/node_modules", + "!examples/plain-javascript/cldrjs", + "!examples/plain-javascript/globalize", + "README.md" + ], + "repository": { + "type": "git", + "url": "git://github.com/globalizejs/globalize.git" + }, + "bugs": { + "url": "https://github.com/globalizejs/globalize/issues" + }, + "dependencies": { + "cldrjs": "^0.5.4" + }, + "devDependencies": { + "cldr-data-downloader": "^0.3.1", + "eslint-config-jquery": "3.0.0", + "glob": "^7.1.2", + "globalize-compiler": "^1.1.1", + "grunt": "1.2.0", + "grunt-check-dependencies": "1.0.0", + "grunt-commitplease": "0.0.6", + "grunt-compare-size": "0.4.2", + "grunt-contrib-clean": "1.1.0", + "grunt-contrib-connect": "0.8.0", + "grunt-contrib-copy": "1.0.0", + "grunt-contrib-qunit": "2.0.0", + "grunt-contrib-requirejs": "1.0.0", + "grunt-contrib-uglify": "3.0.1", + "grunt-contrib-watch": "1.0.0", + "grunt-eslint": "23.0.0", + "grunt-git-authors": "^3.2.0", + "grunt-mocha-test": "^0.13.2", + "gzip-js": "0.3.2", + "iana-tz-data": ">=2017.0.0", + "matchdep": "1.0.1", + "mocha": "^3.4.2", + "qunit": "2.12.0", + "semver": "^5.3.0", + "zoned-date-time": "1.1.0" + }, + "commitplease": { + "nohook": true + }, + "license": "MIT", + "scripts": { + "test": "grunt" + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/script/lib/version_inc.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/script/lib/version_inc.js new file mode 100644 index 000000000..1e424207e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/script/lib/version_inc.js @@ -0,0 +1,7 @@ +var packageJson = require( "../../package.json" ); +var semver = require( "semver" ); + +// Note argv[0] is supposed to be `node`, argv[1] to be this file. +var next = process.argv[ 2 ]; +var prereleaseIdentifier = process.argv[ 3 ]; +console.log( semver.inc( packageJson.version, next, prereleaseIdentifier ) ); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/script/lib/version_update.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/script/lib/version_update.js new file mode 100644 index 000000000..0e608f17e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/script/lib/version_update.js @@ -0,0 +1,11 @@ +var fs = require( "fs" ); +var packageJson = require( "../../package.json" ); +var path = require( "path" ); + +// Note argv[0] is supposed to be `node`, argv[1] to be this file. +packageJson.version = process.argv[ 2 ]; + +fs.writeFileSync( + path.join( __dirname, "../../package.json" ), + JSON.stringify( packageJson, null, 2 ) + "\n" +); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/script/release.sh b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/script/release.sh new file mode 100644 index 000000000..b4b1fc97d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/script/release.sh @@ -0,0 +1,182 @@ +#! /bin/bash + +SCRIPT_ROOT=`dirname $0` + +function abort { + echo Quiting... + exit 1 +} + +function process_args { + while [[ $# -gt 0 ]]; do + key="$1" + case $key in + major|minor|patch|premajor|preminor|prepatch|prerelease) + NEXT=$key + ;; + --prerelease-identifier=*) + PRERELEASE_IDENTIFIER="${key#*=}" + ;; + -h|--help) + HELP=true + ;; + *) + UNKNOWN="$1" + ;; + esac + shift + done + if [ :$NEXT = : -a :$HELP = : ]; then + echo 'You must choose a version bump type.' + HELP=true + fi + if [ ! -z "$UNKNOWN" ]; then + echo 'Illegal option: '$UNKNOWN + HELP=true + fi + if [ :$HELP = :true ]; then + echo 'Usage:' + echo ' version major | minor | patch | premajor | preminor | prepatch | prerelease' + echo ' [--prerelease-identifier=]' + echo '' + echo ' major, minor, patch, premajor, preminor, prepatch, prerelease' + echo ' Type of bump, see semver for more details' + echo '' + echo ' --prerelease-identifier=' + echo ' String argument that will append the value of the string as a prerelease' + echo ' identifier, e.g., beta. The default is alpha.' + echo '' + echo ' -h, --help' + echo ' Show this help.' + exit 1 + fi + VERSION=$(node $SCRIPT_ROOT/lib/version_inc.js $NEXT $PRERELEASE_IDENTIFIER) + TARGET_BRANCH=b$VERSION + PRERELEASE_IDENTIFIER=alpha +} + +function assertions { + if ! git diff-index --quiet HEAD; then + echo Current branch "isn't" clean. Use '`git status` for more details.' + abort + fi + + if git rev-parse --verify --quiet refs/tags/$VERSION > /dev/null; then + echo 'Target tag `'$VERSION'` already exists.' + abort + fi + + assert_git_origin + + if git ls-remote --exit-code origin refs/tags/$VERSION > /dev/null; then + echo 'Target tag `'$VERSION'` already exists in *origin*.' + abort + fi + + if npm show globalize versions | grep "'"$VERSION"'" >/dev/null; then + echo 'Target npm version `'$VERSION'` already exists.' + abort + fi + + if [ ! -z `git branch --list $TARGET_BRANCH` ]; then + echo 'Target branch `'$TARGET_BRANCH'` already exists.' + abort + fi + + CURRENT_BRANCH=`git name-rev --name-only HEAD` + if [ :$CURRENT_BRANCH != :master ]; then + echo 'Current branch `'$CURRENT_BRANCH'`' "isn't" '`master`.' + abort + fi + + echo Preparing release for '`'$VERSION'`' + echo -n Proceed? "[Y|n] " + read input + test :$input = :N -o :$input = :n && exit 1 + + h1 Test + grunt +} + +function assert_git_origin { + # Abort unless origin points to git@github.com:globalizejs/globalize.git. + if [ :`git config remote.origin.url` != :git@github.com:globalizejs/globalize.git ]; then + echo 'remote.origin.url should be `git@github.com:globalizejs/globalize.git`.' + abort + fi + + echo 'Fetching origin ('`git config remote.origin.url`')' + if ! git fetch origin; then + echo "Couldn't"' fetch origin.' + abort + fi +} + +function h1 { + echo + echo '## '$* +} + +function error { + echo 'ERROR: '$* + exit 2 +} + +function update_authors { + h1 Update AUTHORS file + grunt update-authors > /dev/null + if [ -z "$(git diff)" ]; then + echo No updates for AUTHORS file needed... + else + git commit -a -m 'AUTHORS: Update' > /dev/null && + git show --stat + fi +} + +function update_version { + h1 Update package.json '`versions`' attribute + node $SCRIPT_ROOT/lib/version_update.js $VERSION && + git commit -a -m $VERSION && + git show +} + +function build { + h1 Include distribution files + + # Yeap, again. Now including the new version in the dist files. + grunt > /dev/null || error Build failed + + git add dist/* > /dev/null && + git commit -a -m "Build: Include distribution files" > /dev/null && + git show --stat || + error Failed including distribution files +} + +function tag { + h1 'Tag `'$VERSION'` (detached)' + git tag -a -m $VERSION $VERSION > /dev/null +} + +function checkout_back_to_master { + git checkout master > /dev/null +} + +function final_message { + h1 Done + echo + echo Now you need to: + echo git push --tags origin + echo npm publish + echo git checkout master + echo git push origin master + echo git branch -D $TARGET_BRANCH +} + +process_args "$@" && + assertions && + update_authors && + update_version && + git checkout -b $TARGET_BRANCH && + build && + tag && + final_message diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/.dist-jshintrc b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/.dist-jshintrc new file mode 100644 index 000000000..c9da5455b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/.dist-jshintrc @@ -0,0 +1,22 @@ +{ + "boss": true, + "curly": true, + "eqeqeq": true, + "eqnull": true, + "expr": true, + "immed": true, + "noarg": true, + "onevar": false, + "smarttabs": true, + "trailing": true, + "undef": true, + "unused": true, + + "globals": { + "Cldr": false, + "define": false, + "Globalize": false, + "module": false, + "require": false + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/.eslintrc.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/.eslintrc.json new file mode 100644 index 000000000..0b69c6c11 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "root": true, + "extends": "../.eslintrc.json", + "env": { + "amd": true + }, + "rules": { + "no-nested-ternary": "off" + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-core-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-core-runtime.js new file mode 100644 index 000000000..eca09d482 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-core-runtime.js @@ -0,0 +1,36 @@ +/** + * Globalize Runtime v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize Runtime v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define( factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory(); + } else { + + // Globalize + root.Globalize = factory(); + } +}( this, function() { + +"use strict"; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-core.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-core.js new file mode 100644 index 000000000..37b818134 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-core.js @@ -0,0 +1,35 @@ +/** + * Globalize v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "cldr/event" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ) ); + } else { + + // Global + root.Globalize = factory( root.Cldr ); + } +}( this, function( Cldr ) { diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-currency-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-currency-runtime.js new file mode 100644 index 000000000..2c846d674 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-currency-runtime.js @@ -0,0 +1,49 @@ +/** + * Globalize Runtime v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize Runtime v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime", + "./number" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( + require( "../globalize-runtime" ), + require( "./number" ) + ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + +"use strict"; + +var formatMessageToParts = Globalize._formatMessageToParts, + partsJoin = Globalize._partsJoin, + partsPush = Globalize._partsPush, + runtimeKey = Globalize._runtimeKey, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-currency.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-currency.js new file mode 100644 index 000000000..271e84518 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-currency.js @@ -0,0 +1,50 @@ +/*! + * Globalize v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "./number", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var alwaysArray = Globalize._alwaysArray, + createError = Globalize._createError, + formatMessageToParts = Globalize._formatMessageToParts, + numberNumberingSystem = Globalize._numberNumberingSystem, + numberPattern = Globalize._numberPattern, + partsJoin = Globalize._partsJoin, + partsPush = Globalize._partsPush, + runtimeBind = Globalize._runtimeBind, + stringPad = Globalize._stringPad, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-date-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-date-runtime.js new file mode 100644 index 000000000..b7c23736a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-date-runtime.js @@ -0,0 +1,54 @@ +/** + * Globalize Runtime v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize Runtime v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime", + "./number" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( + require( "../globalize-runtime" ), + require( "./number" ) + ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + +"use strict"; + +var createErrorUnsupportedFeature = Globalize._createErrorUnsupportedFeature, + looseMatching = Globalize._looseMatching, + partsJoin = Globalize._partsJoin, + partsPush = Globalize._partsPush, + regexpEscape = Globalize._regexpEscape, + removeLiteralQuotes = Globalize._removeLiteralQuotes, + runtimeKey = Globalize._runtimeKey, + stringPad = Globalize._stringPad, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypeString = Globalize._validateParameterTypeString; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-date.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-date.js new file mode 100644 index 000000000..e08196deb --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-date.js @@ -0,0 +1,59 @@ +/** + * Globalize v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "./number", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Extend global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var createError = Globalize._createError, + createErrorUnsupportedFeature = Globalize._createErrorUnsupportedFeature, + formatMessage = Globalize._formatMessage, + isPlainObject = Globalize._isPlainObject, + looseMatching = Globalize._looseMatching, + numberNumberingSystemDigitsMap = Globalize._numberNumberingSystemDigitsMap, + numberSymbol = Globalize._numberSymbol, + partsJoin = Globalize._partsJoin, + partsPush = Globalize._partsPush, + regexpEscape = Globalize._regexpEscape, + removeLiteralQuotes = Globalize._removeLiteralQuotes, + runtimeBind = Globalize._runtimeBind, + stringPad = Globalize._stringPad, + validate = Globalize._validate, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject, + validateParameterTypeString = Globalize._validateParameterTypeString; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-message-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-message-runtime.js new file mode 100644 index 000000000..268d80e9e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-message-runtime.js @@ -0,0 +1,41 @@ +/** + * Globalize Runtime v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize Runtime v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "../globalize-runtime" ) ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + +"use strict"; + +var runtimeKey = Globalize._runtimeKey, + validateParameterType = Globalize._validateParameterType; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-message.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-message.js new file mode 100644 index 000000000..5c18f786b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-message.js @@ -0,0 +1,46 @@ +/** + * Globalize v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "cldr/event" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Extend global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var alwaysArray = Globalize._alwaysArray, + createError = Globalize._createError, + isPlainObject = Globalize._isPlainObject, + runtimeBind = Globalize._runtimeBind, + validateDefaultLocale = Globalize._validateDefaultLocale, + validate = Globalize._validate, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-number-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-number-runtime.js new file mode 100644 index 000000000..23e61edbd --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-number-runtime.js @@ -0,0 +1,48 @@ +/** + * Globalize Runtime v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize Runtime v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "../globalize-runtime" ) ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + +"use strict"; + +var createError = Globalize._createError, + partsJoin = Globalize._partsJoin, + partsPush = Globalize._partsPush, + regexpEscape = Globalize._regexpEscape, + runtimeKey = Globalize._runtimeKey, + stringPad = Globalize._stringPad, + validateParameterType = Globalize._validateParameterType, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeString = Globalize._validateParameterTypeString; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-number.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-number.js new file mode 100644 index 000000000..704aef3a3 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-number.js @@ -0,0 +1,50 @@ +/** + * Globalize v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var createError = Globalize._createError, + partsJoin = Globalize._partsJoin, + partsPush = Globalize._partsPush, + regexpEscape = Globalize._regexpEscape, + runtimeBind = Globalize._runtimeBind, + stringPad = Globalize._stringPad, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterRange = Globalize._validateParameterRange, + validateParameterType = Globalize._validateParameterType, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-plural-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-plural-runtime.js new file mode 100644 index 000000000..bfafbed1e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-plural-runtime.js @@ -0,0 +1,42 @@ +/** + * Globalize Runtime v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize Runtime v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "../globalize-runtime" ) ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + +"use strict"; + +var runtimeKey = Globalize._runtimeKey, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-plural.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-plural.js new file mode 100644 index 000000000..66fddbc36 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-plural.js @@ -0,0 +1,44 @@ +/** + * Globalize v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var runtimeBind = Globalize._runtimeBind, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-relative-time-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-relative-time-runtime.js new file mode 100644 index 000000000..31d7055dc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-relative-time-runtime.js @@ -0,0 +1,49 @@ +/** + * Globalize Runtime v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize Runtime v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime", + "./number", + "./plural" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( + require( "../globalize-runtime" ), + require( "./number" ), + require( "./plural" ) + ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + +"use strict"; + +var formatMessage = Globalize._formatMessage, + runtimeKey = Globalize._runtimeKey, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-relative-time.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-relative-time.js new file mode 100644 index 000000000..fe1f5eb04 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-relative-time.js @@ -0,0 +1,47 @@ +/** + * Globalize v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "./number", + "./plural", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Extend global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var formatMessage = Globalize._formatMessage, + runtimeBind = Globalize._runtimeBind, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeString = Globalize._validateParameterTypeString, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-unit-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-unit-runtime.js new file mode 100644 index 000000000..31d7055dc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-unit-runtime.js @@ -0,0 +1,49 @@ +/** + * Globalize Runtime v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize Runtime v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime", + "./number", + "./plural" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( + require( "../globalize-runtime" ), + require( "./number" ), + require( "./plural" ) + ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + +"use strict"; + +var formatMessage = Globalize._formatMessage, + runtimeKey = Globalize._runtimeKey, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-unit.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-unit.js new file mode 100644 index 000000000..8a0fd06fb --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro-unit.js @@ -0,0 +1,44 @@ +/** + * Globalize v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +/*! + * Globalize v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "./number", + "./plural" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Extend global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var formatMessage = Globalize._formatMessage, + runtimeBind = Globalize._runtimeBind, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber, + validateParameterTypeString = Globalize._validateParameterTypeString; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro.min.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro.min.js new file mode 100644 index 000000000..d5d29a8b8 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/intro.min.js @@ -0,0 +1,4 @@ +/*! + * Globalize v@VERSION @DATE Released under the MIT license + * http://git.io/TrdQbw + */ diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/node-main.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/node-main.js new file mode 100644 index 000000000..fcb1b4872 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/node-main.js @@ -0,0 +1,27 @@ +/*! + * Globalize v@VERSION + * + * https://github.com/globalizejs/globalize + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ + +// Core +module.exports = require( "./globalize" ); + +// Extent core with the following modules +require( "./globalize/message" ); +require( "./globalize/number" ); +require( "./globalize/plural" ); + +// Load after globalize/number +require( "./globalize/currency" ); +require( "./globalize/date" ); + +// Load after globalize/number and globalize/plural +require( "./globalize/relative-time" ); +require( "./globalize/unit" ); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/outro.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/outro.js new file mode 100644 index 000000000..be4600a5c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/build/outro.js @@ -0,0 +1 @@ +})); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error.js new file mode 100644 index 000000000..aa1623600 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error.js @@ -0,0 +1,18 @@ +define([ + "./format-message", + "../util/object/extend" +], function( formatMessage, objectExtend ) { + +return function( code, message, attributes ) { + var error; + + message = code + ( message ? ": " + formatMessage( message, attributes ) : "" ); + error = new Error( message ); + error.code = code; + + objectExtend( error, attributes ); + + return error; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error/invalid-parameter-value.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error/invalid-parameter-value.js new file mode 100644 index 000000000..b014c29fe --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error/invalid-parameter-value.js @@ -0,0 +1,12 @@ +define([ + "../create-error" +], function( createError ) { + +return function( name, value ) { + return createError( "E_INVALID_PAR_VALUE", "Invalid `{name}` value ({value}).", { + name: name, + value: value + }); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error/plural-module-presence.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error/plural-module-presence.js new file mode 100644 index 000000000..d7a93965a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error/plural-module-presence.js @@ -0,0 +1,9 @@ +define([ + "../create-error" +], function( createError ) { + +return function() { + return createError( "E_MISSING_PLURAL_MODULE", "Plural module not loaded." ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error/unsupported-feature.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error/unsupported-feature.js new file mode 100644 index 000000000..27de1edab --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/create-error/unsupported-feature.js @@ -0,0 +1,11 @@ +define([ + "../create-error" +], function( createError ) { + +return function( feature ) { + return createError( "E_UNSUPPORTED", "Unsupported {feature}.", { + feature: feature + }); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/format-message-to-parts.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/format-message-to-parts.js new file mode 100644 index 000000000..380e20130 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/format-message-to-parts.js @@ -0,0 +1,44 @@ +define([ + "./parts/push" +], function( partsPush ) { + +/** + * formatMessage( message, data ) + * + * @message [String] A message with optional {vars} to be replaced. + * + * @data [Array or JSON] Object with replacing-variables content. + * + * Return the formatted message. For example: + * + * - formatMessage( "{0} second", [ 1 ] ); + * > [{type: "variable", value: "1", name: "0"}, {type: "literal", value: " second"}] + * + * - formatMessage( "{0}/{1}", ["m", "s"] ); + * > [ + * { type: "variable", value: "m", name: "0" }, + * { type: "literal", value: " /" }, + * { type: "variable", value: "s", name: "1" } + * ] + */ +return function( message, data ) { + + var lastOffset = 0, + parts = []; + + // Create parts. + message.replace( /{[0-9a-zA-Z-_. ]+}/g, function( nameIncludingBrackets, offset ) { + var name = nameIncludingBrackets.slice( 1, -1 ); + partsPush( parts, "literal", message.slice( lastOffset, offset )); + partsPush( parts, "variable", data[ name ] ); + parts[ parts.length - 1 ].name = name; + lastOffset += offset + nameIncludingBrackets.length; + }); + + // Skip empty ones such as `{ type: 'literal', value: '' }`. + return parts.filter(function( part ) { + return part.value !== ""; + }); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/format-message.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/format-message.js new file mode 100644 index 000000000..a3e825c12 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/format-message.js @@ -0,0 +1,34 @@ +define([ + "../util/to-string" +], function( toString ) { + +/** + * formatMessage( message, data ) + * + * @message [String] A message with optional {vars} to be replaced. + * + * @data [Array or JSON] Object with replacing-variables content. + * + * Return the formatted message. For example: + * + * - formatMessage( "{0} second", [ 1 ] ); // 1 second + * + * - formatMessage( "{0}/{1}", ["m", "s"] ); // m/s + * + * - formatMessage( "{name} <{email}>", { + * name: "Foo", + * email: "bar@baz.qux" + * }); // Foo + */ +return function( message, data ) { + + // Replace {attribute}'s + message = message.replace( /{[0-9a-zA-Z-_. ]+}/g, function( name ) { + name = name.replace( /^{([^}]*)}$/, "$1" ); + return toString( data[ name ] ); + }); + + return message; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/parts/join.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/parts/join.js new file mode 100644 index 000000000..1080b4aac --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/parts/join.js @@ -0,0 +1,12 @@ +define(function() { + +/** + * Returns joined parts values. + */ +return function( parts ) { + return parts.map( function( part ) { + return part.value; + }).join( "" ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/parts/push.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/parts/push.js new file mode 100644 index 000000000..d1f30dfb5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/parts/push.js @@ -0,0 +1,17 @@ +define(function() { + +/** + * Pushes part to parts array, concat two consecutive parts of the same type. + */ +return function( parts, type, value ) { + + // Concat two consecutive parts of same type + if ( parts.length && parts[ parts.length - 1 ].type === type ) { + parts[ parts.length - 1 ].value += value; + return; + } + + parts.push( { type: type, value: value } ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-bind.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-bind.js new file mode 100644 index 000000000..72468f1ed --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-bind.js @@ -0,0 +1,30 @@ +define([ + "./runtime-key", + "./runtime-stringify", + "../util/function-name" +], function( runtimeKey, runtimeStringify, functionName ) { + +return function( args, cldr, fn, runtimeArgs ) { + + var argsStr = runtimeStringify( args ), + fnName = functionName( fn ), + locale = cldr.locale; + + // If name of the function is not available, this is most likely due to uglification, + // which most likely means we are in production, and runtimeBind here is not necessary. + if ( !fnName ) { + return fn; + } + + fn.runtimeKey = runtimeKey( fnName, locale, null, argsStr ); + + fn.generatorString = function() { + return "Globalize(\"" + locale + "\")." + fnName + "(" + argsStr.slice( 1, -1 ) + ")"; + }; + + fn.runtimeArgs = runtimeArgs; + + return fn; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-cache-data-bind.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-cache-data-bind.js new file mode 100644 index 000000000..75dde1187 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-cache-data-bind.js @@ -0,0 +1,12 @@ +define(function() { + +return function( key, data ) { + var fn = function() { + return data; + }; + fn.dataCacheKey = key; + return fn; +}; + +}); + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-key.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-key.js new file mode 100644 index 000000000..904092ffc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-key.js @@ -0,0 +1,13 @@ +define([ + "./runtime-stringify", + "../util/string/hash" +], function( runtimeStringify, stringHash ) { + +return function( fnName, locale, args, argsStr ) { + var hash; + argsStr = argsStr || runtimeStringify( args ); + hash = stringHash( fnName + locale + argsStr ); + return hash > 0 ? "a" + hash : "b" + Math.abs( hash ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-stringify.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-stringify.js new file mode 100644 index 000000000..8ddc39866 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/runtime-stringify.js @@ -0,0 +1,12 @@ +define([], function( ) { + +return function( args ) { + return JSON.stringify( args, function( _key, value ) { + if ( value && value.runtimeKey ) { + return value.runtimeKey; + } + return value; + } ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate.js new file mode 100644 index 000000000..ace034241 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate.js @@ -0,0 +1,11 @@ +define([ + "./create-error" +], function( createError ) { + +return function( code, message, check, attributes ) { + if ( !check ) { + throw createError( code, message, attributes ); + } +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/cldr.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/cldr.js new file mode 100644 index 000000000..0a2feb358 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/cldr.js @@ -0,0 +1,19 @@ +define([ + "../validate", + "../../util/always-array" +], function( validate, alwaysArray ) { + +return function( path, value, options ) { + var skipBoolean; + options = options || {}; + + skipBoolean = alwaysArray( options.skip ).some(function( pathRe ) { + return pathRe.test( path ); + }); + + validate( "E_MISSING_CLDR", "Missing required CLDR content `{path}`.", value || skipBoolean, { + path: path + }); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/default-locale.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/default-locale.js new file mode 100644 index 000000000..7e2379f77 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/default-locale.js @@ -0,0 +1,10 @@ +define([ + "../validate" +], function( validate ) { + +return function( value ) { + validate( "E_DEFAULT_LOCALE_NOT_DEFINED", "Default locale has not been defined.", + value !== undefined, {} ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/message-bundle.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/message-bundle.js new file mode 100644 index 000000000..1c7ea3a03 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/message-bundle.js @@ -0,0 +1,16 @@ +define([ + "../validate" +], function( validate ) { + +return function( cldr ) { + validate( + "E_MISSING_MESSAGE_BUNDLE", + "Missing message bundle for locale `{locale}`.", + cldr.attributes.bundle && cldr.get( "globalize-messages/{bundle}" ) !== undefined, + { + locale: cldr.locale + } + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/message-presence.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/message-presence.js new file mode 100644 index 000000000..5f7fd9395 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/message-presence.js @@ -0,0 +1,11 @@ +define([ + "../validate" +], function( validate ) { + +return function( path, value ) { + path = path.join( "/" ); + validate( "E_MISSING_MESSAGE", "Missing required message content `{path}`.", + value !== undefined, { path: path } ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/message-type.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/message-type.js new file mode 100644 index 000000000..185d2b4cf --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/message-type.js @@ -0,0 +1,18 @@ +define([ + "../validate" +], function( validate ) { + +return function( path, value ) { + path = path.join( "/" ); + validate( + "E_INVALID_MESSAGE", + "Invalid message content `{path}`. {expected} expected.", + typeof value === "string", + { + expected: "a string", + path: path + } + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-presence.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-presence.js new file mode 100644 index 000000000..81bc2ccd7 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-presence.js @@ -0,0 +1,10 @@ +define([ + "../validate" +], function( validate ) { + +return function( value, name ) { + validate( "E_MISSING_PARAMETER", "Missing required parameter `{name}`.", + value !== undefined, { name: name }); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-range.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-range.js new file mode 100644 index 000000000..df5478221 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-range.js @@ -0,0 +1,30 @@ +define([ + "../validate" +], function( validate ) { + +/** + * range( value, name, minimum, maximum ) + * + * @value [Number]. + * + * @name [String] name of variable. + * + * @minimum [Number]. The lowest valid value, inclusive. + * + * @maximum [Number]. The greatest valid value, inclusive. + */ +return function( value, name, minimum, maximum ) { + validate( + "E_PAR_OUT_OF_RANGE", + "Parameter `{name}` has value `{value}` out of range [{minimum}, {maximum}].", + value === undefined || value >= minimum && value <= maximum, + { + maximum: maximum, + minimum: minimum, + name: name, + value: value + } + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type.js new file mode 100644 index 000000000..6a45d1700 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type.js @@ -0,0 +1,18 @@ +define([ + "../validate" +], function( validate ) { + +return function( value, name, check, expected ) { + validate( + "E_INVALID_PAR_TYPE", + "Invalid `{name}` parameter ({value}). {expected} expected.", + check, + { + expected: expected, + name: name, + value: value + } + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/array.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/array.js new file mode 100644 index 000000000..9ee77a8b7 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/array.js @@ -0,0 +1,9 @@ +define([ + "../parameter-type" +], function( validateParameterType ) { + +return function( value, name ) { + validateParameterType( value, name, value === undefined || Array.isArray( value ), "Array" ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/currency.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/currency.js new file mode 100644 index 000000000..7497d3908 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/currency.js @@ -0,0 +1,14 @@ +define([ + "../parameter-type" +], function( validateParameterType ) { + +return function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "string" && ( /^[A-Za-z]{3}$/ ).test( value ), + "3-letter currency code string as defined by ISO 4217" + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/date.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/date.js new file mode 100644 index 000000000..d29a1e0c5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/date.js @@ -0,0 +1,9 @@ +define([ + "../parameter-type" +], function( validateParameterType ) { + +return function( value, name ) { + validateParameterType( value, name, value === undefined || value instanceof Date, "Date" ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/locale.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/locale.js new file mode 100644 index 000000000..f1bb61ba6 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/locale.js @@ -0,0 +1,15 @@ +define([ + "cldr", + "../parameter-type" +], function( Cldr, validateParameterType ) { + +return function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "string" || value instanceof Cldr, + "String or Cldr instance" + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/message-variables.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/message-variables.js new file mode 100644 index 000000000..a0f0d5d09 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/message-variables.js @@ -0,0 +1,15 @@ +define([ + "../parameter-type", + "../../../util/is-plain-object" +], function( validateParameterType, isPlainObject ) { + +return function( value, name ) { + validateParameterType( + value, + name, + value === undefined || isPlainObject( value ) || Array.isArray( value ), + "Array or Plain Object" + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/number.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/number.js new file mode 100644 index 000000000..c7dfb0037 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/number.js @@ -0,0 +1,14 @@ +define([ + "../parameter-type" +], function( validateParameterType ) { + +return function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "number", + "Number" + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/plain-object.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/plain-object.js new file mode 100644 index 000000000..6a5781075 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/plain-object.js @@ -0,0 +1,15 @@ +define([ + "../parameter-type", + "../../../util/is-plain-object" +], function( validateParameterType, isPlainObject ) { + +return function( value, name ) { + validateParameterType( + value, + name, + value === undefined || isPlainObject( value ), + "Plain Object" + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/plural-type.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/plural-type.js new file mode 100644 index 000000000..8991f1907 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/plural-type.js @@ -0,0 +1,14 @@ +define([ + "../parameter-type" +], function( validateParameterType ) { + +return function( value, name ) { + validateParameterType( + value, + name, + value === undefined || value === "cardinal" || value === "ordinal", + "String \"cardinal\" or \"ordinal\"" + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/string.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/string.js new file mode 100644 index 000000000..c53512e01 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/parameter-type/string.js @@ -0,0 +1,14 @@ +define([ + "../parameter-type" +], function( validateParameterType ) { + +return function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "string", + "a string" + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/skeleton.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/skeleton.js new file mode 100644 index 000000000..53c0b9049 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/skeleton.js @@ -0,0 +1,50 @@ +define([ + "../create-error", + "./skeleton/fields-pos-map" +], function( createError, validateSkeletonFieldsPosMap ) { + +/** + * validateSkeleton( skeleton ) + * + * skeleton: Assume `j` has already been converted into a localized hour field. + */ +return function validateSkeleton( skeleton ) { + var last, + + // Using easier to read variable. + fieldsPosMap = validateSkeletonFieldsPosMap; + + // "The fields are from the Date Field Symbol Table in Date Format Patterns" + // Ref: http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems + // I.e., check for invalid characters. + skeleton.replace( /[^GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx]/, function( field ) { + throw createError( + "E_INVALID_OPTIONS", "Invalid field `{invalidField}` of skeleton `{value}`", + { + invalidField: field, + type: "skeleton", + value: skeleton + } + ); + }); + + // "The canonical order is from top to bottom in that table; that is, yM not My". + // http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems + // I.e., check for invalid order. + skeleton.split( "" ).every(function( field ) { + if ( fieldsPosMap[ field ] < last ) { + throw createError( + "E_INVALID_OPTIONS", "Invalid order `{invalidField}` of skeleton `{value}`", + { + invalidField: field, + type: "skeleton", + value: skeleton + } + ); + } + last = fieldsPosMap[ field ]; + return true; + }); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/skeleton/fields-pos-map.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/skeleton/fields-pos-map.js new file mode 100644 index 000000000..65f380530 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/common/validate/skeleton/fields-pos-map.js @@ -0,0 +1,16 @@ +define(function() { + +/** + * Create a map between the skeleton fields and their positions, e.g., + * { + * G: 0 + * y: 1 + * ... + * } + */ +return "GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx".split( "" ).reduce(function( memo, item, i ) { + memo[ item ] = i; + return memo; +}, {}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/core-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/core-runtime.js new file mode 100644 index 000000000..c1ae4717b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/core-runtime.js @@ -0,0 +1,51 @@ +define([ + "./common/create-error", + "./common/format-message", + "./common/format-message-to-parts", + "./common/parts/join", + "./common/parts/push", + "./common/runtime-key", + "./common/validate/parameter-presence", + "./common/validate/parameter-type", + "./common/validate/parameter-type/string", + "./util/regexp/escape", + "./util/string/pad" +], function( createError, formatMessage, formatMessageToParts, partsJoin, partsPush, runtimeKey, + validateParameterPresence, validateParameterType, validateParameterTypeString, regexpEscape, + stringPad ) { + +function Globalize( locale ) { + if ( !( this instanceof Globalize ) ) { + return new Globalize( locale ); + } + + validateParameterPresence( locale, "locale" ); + validateParameterTypeString( locale, "locale" ); + + this._locale = locale; +} + +Globalize.locale = function( locale ) { + validateParameterTypeString( locale, "locale" ); + + if ( arguments.length ) { + this._locale = locale; + } + return this._locale; +}; + +Globalize._createError = createError; +Globalize._formatMessage = formatMessage; +Globalize._formatMessageToParts = formatMessageToParts; +Globalize._partsJoin = partsJoin; +Globalize._partsPush = partsPush; +Globalize._regexpEscape = regexpEscape; +Globalize._runtimeKey = runtimeKey; +Globalize._stringPad = stringPad; +Globalize._validateParameterPresence = validateParameterPresence; +Globalize._validateParameterTypeString = validateParameterTypeString; +Globalize._validateParameterType = validateParameterType; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/core.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/core.js new file mode 100644 index 000000000..cb5a4fc0b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/core.js @@ -0,0 +1,117 @@ +define([ + "cldr", + "./common/create-error", + "./common/format-message", + "./common/format-message-to-parts", + "./common/parts/join", + "./common/parts/push", + "./common/runtime-bind", + "./common/validate", + "./common/validate/cldr", + "./common/validate/default-locale", + "./common/validate/parameter-presence", + "./common/validate/parameter-range", + "./common/validate/parameter-type", + "./common/validate/parameter-type/locale", + "./common/validate/parameter-type/plain-object", + "./util/always-array", + "./util/always-cldr", + "./util/is-plain-object", + "./util/object/extend", + "./util/regexp/escape", + "./util/string/pad", + + "cldr/event" +], function( Cldr, createError, formatMessage, formatMessageToParts, partsJoin, partsPush, + runtimeBind, validate, validateCldr, validateDefaultLocale, validateParameterPresence, + validateParameterRange, validateParameterType, validateParameterTypeLocale, + validateParameterTypePlainObject, alwaysArray, alwaysCldr, isPlainObject, objectExtend, + regexpEscape, stringPad ) { + +function validateLikelySubtags( cldr ) { + cldr.once( "get", validateCldr ); + cldr.get( "supplemental/likelySubtags" ); +} + +/** + * [new] Globalize( locale|cldr ) + * + * @locale [String] + * + * @cldr [Cldr instance] + * + * Create a Globalize instance. + */ +function Globalize( locale ) { + if ( !( this instanceof Globalize ) ) { + return new Globalize( locale ); + } + + validateParameterPresence( locale, "locale" ); + validateParameterTypeLocale( locale, "locale" ); + + this.cldr = alwaysCldr( locale ); + + validateLikelySubtags( this.cldr ); +} + +/** + * Globalize.load( json, ... ) + * + * @json [JSON] + * + * Load resolved or unresolved cldr data. + * Somewhat equivalent to previous Globalize.addCultureInfo(...). + */ +Globalize.load = function() { + + // validations are delegated to Cldr.load(). + Cldr.load.apply( Cldr, arguments ); +}; + +/** + * Globalize.locale( [locale|cldr] ) + * + * @locale [String] + * + * @cldr [Cldr instance] + * + * Set default Cldr instance if locale or cldr argument is passed. + * + * Return the default Cldr instance. + */ +Globalize.locale = function( locale ) { + validateParameterTypeLocale( locale, "locale" ); + + if ( arguments.length ) { + this.cldr = alwaysCldr( locale ); + validateLikelySubtags( this.cldr ); + } + return this.cldr; +}; + +/** + * Optimization to avoid duplicating some internal functions across modules. + */ +Globalize._alwaysArray = alwaysArray; +Globalize._createError = createError; +Globalize._formatMessage = formatMessage; +Globalize._formatMessageToParts = formatMessageToParts; +Globalize._isPlainObject = isPlainObject; +Globalize._objectExtend = objectExtend; +Globalize._partsJoin = partsJoin; +Globalize._partsPush = partsPush; +Globalize._regexpEscape = regexpEscape; +Globalize._runtimeBind = runtimeBind; +Globalize._stringPad = stringPad; +Globalize._validate = validate; +Globalize._validateCldr = validateCldr; +Globalize._validateDefaultLocale = validateDefaultLocale; +Globalize._validateParameterPresence = validateParameterPresence; +Globalize._validateParameterRange = validateParameterRange; +Globalize._validateParameterTypePlainObject = validateParameterTypePlainObject; +Globalize._validateParameterType = validateParameterType; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency-runtime.js new file mode 100644 index 000000000..4bbb85958 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency-runtime.js @@ -0,0 +1,50 @@ +define([ + "./common/runtime-key", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/number", + "./core-runtime", + "./currency/formatter-fn", + "./currency/name-format", + "./currency/to-parts-formatter-fn", + + "./number-runtime" +], function( runtimeKey, validateParameterPresence, validateParameterTypeNumber, Globalize, + currencyFormatterFn, currencyNameFormat, currencyToPartsFormatterFn ) { + +Globalize._currencyFormatterFn = currencyFormatterFn; +Globalize._currencyNameFormat = currencyNameFormat; +Globalize._currencyToPartsFormatterFn = currencyToPartsFormatterFn; + +Globalize.currencyFormatter = +Globalize.prototype.currencyFormatter = function( currency, options ) { + options = options || {}; + return Globalize[ runtimeKey( "currencyFormatter", this._locale, [ currency, options ] ) ]; +}; + +Globalize.currencyToPartsFormatter = +Globalize.prototype.currencyToPartsFormatter = function( currency, options ) { + options = options || {}; + return Globalize[ + runtimeKey( "currencyToPartsFormatter", this._locale, [ currency, options ] ) + ]; +}; + +Globalize.formatCurrency = +Globalize.prototype.formatCurrency = function( value, currency, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.currencyFormatter( currency, options )( value ); +}; + +Globalize.formatCurrencyToParts = +Globalize.prototype.formatCurrencyToParts = function( value, currency, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.currencyToPartsFormatter( currency, options )( value ); +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency.js new file mode 100644 index 000000000..66c67511d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency.js @@ -0,0 +1,221 @@ +define([ + "./core", + "./common/create-error/plural-module-presence", + "./common/runtime-bind", + "./common/validate/cldr", + "./common/validate/default-locale", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/currency", + "./common/validate/parameter-type/number", + "./common/validate/parameter-type/plain-object", + "./currency/formatter-fn", + "./currency/name-properties", + "./currency/symbol-properties", + "./currency/to-parts-formatter-fn", + "./util/object/omit", + "./number", + + "cldr/event", + "cldr/supplemental" + +], function( Globalize, createErrorPluralModulePresence, runtimeBind, validateCldr, + validateDefaultLocale, validateParameterPresence, validateParameterTypeCurrency, + validateParameterTypeNumber, validateParameterTypePlainObject, currencyFormatterFn, + currencyNameProperties, currencySymbolProperties, currencyToPartsFormatterFn, objectOmit ) { + +function validateRequiredCldr( path, value ) { + validateCldr( path, value, { + skip: [ + /numbers\/currencies\/[^/]+\/symbol-alt-/, + /supplemental\/currencyData\/fractions\/[A-Za-z]{3}$/ + ] + }); +} + +/** + * .currencyFormatter( currency [, options] ) + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object]: + * - style: [String] "symbol" (default), "accounting", "code" or "name". + * - see also number/format options. + * + * Return a function that formats a currency according to the given options and default/instance + * locale. + */ +Globalize.currencyFormatter = +Globalize.prototype.currencyFormatter = function( currency, options ) { + var args, currencyToPartsFormatter, returnFn; + + validateParameterPresence( currency, "currency" ); + validateParameterTypeCurrency( currency, "currency" ); + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + args = [ currency, options ]; + + currencyToPartsFormatter = this.currencyToPartsFormatter( currency, options ); + returnFn = currencyFormatterFn( currencyToPartsFormatter ); + runtimeBind( args, this.cldr, returnFn, [ currencyToPartsFormatter ] ); + + return returnFn; +}; + +/** + * .currencyToPartsFormatter( currency [, options] ) + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object]: + * - style: [String] "symbol" (default), "accounting", "code" or "name". + * - see also number/format options. + * + * Return a currency formatter function (of the form below) according to the given options and the + * default/instance locale. + * + * fn( value ) + * + * @value [Number] + * + * Return a function that formats a currency to parts according to the given options + * and the default/instance locale. + */ +Globalize.currencyToPartsFormatter = +Globalize.prototype.currencyToPartsFormatter = function( currency, options ) { + var args, cldr, numberToPartsFormatter, pluralGenerator, properties, returnFn, style; + + validateParameterPresence( currency, "currency" ); + validateParameterTypeCurrency( currency, "currency" ); + + validateParameterTypePlainObject( options, "options" ); + + cldr = this.cldr; + options = options || {}; + + args = [ currency, options ]; + style = options.style || "symbol"; + + validateDefaultLocale( cldr ); + + // Get properties given style ("symbol" default, "code" or "name"). + cldr.on( "get", validateRequiredCldr ); + try { + properties = ({ + accounting: currencySymbolProperties, + code: currencySymbolProperties, + name: currencyNameProperties, + symbol: currencySymbolProperties + }[ style ] )( currency, cldr, options ); + } finally { + cldr.off( "get", validateRequiredCldr ); + } + + // options = options minus style, plus raw pattern. + options = objectOmit( options, "style" ); + options.raw = properties.pattern; + + // Return formatter when style is "symbol", "accounting", or "code". + if ( style === "symbol" || style === "accounting" || style === "code" ) { + numberToPartsFormatter = this.numberToPartsFormatter( options ); + + returnFn = currencyToPartsFormatterFn( numberToPartsFormatter, properties.symbol ); + + runtimeBind( args, cldr, returnFn, [ numberToPartsFormatter, properties.symbol ] ); + + // Return formatter when style is "name". + } else { + numberToPartsFormatter = this.numberToPartsFormatter( options ); + + // Is plural module present? Yes, use its generator. Nope, use an error generator. + pluralGenerator = this.plural !== undefined ? + this.pluralGenerator() : + createErrorPluralModulePresence; + + returnFn = currencyToPartsFormatterFn( + numberToPartsFormatter, + pluralGenerator, + properties + ); + + runtimeBind( args, cldr, returnFn, [ + numberToPartsFormatter, + pluralGenerator, + properties + ]); + } + + return returnFn; +}; + +/** + * .currencyParser( currency [, options] ) + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object] see currencyFormatter. + * + * Return the currency parser according to the given options and the default/instance locale. + */ +Globalize.currencyParser = +Globalize.prototype.currencyParser = function( /* currency, options */ ) { + + // TODO implement parser. + +}; + +/** + * .formatCurrency( value, currency [, options] ) + * + * @value [Number] number to be formatted. + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object] see currencyFormatter. + * + * Format a currency according to the given options and the default/instance locale. + */ +Globalize.formatCurrency = +Globalize.prototype.formatCurrency = function( value, currency, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + return this.currencyFormatter( currency, options )( value ); +}; + +/** + * .formatCurrencyToParts( value, currency [, options] ) + * + * @value [Number] number to be formatted. + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object] see currencyFormatter. + * + * Format a currency to parts according to the given options and the default/instance locale. + */ +Globalize.formatCurrencyToParts = +Globalize.prototype.formatCurrencyToParts = function( value, currency, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + return this.currencyToPartsFormatter( currency, options )( value ); +}; + +/** + * .parseCurrency( value, currency [, options] ) + * + * @value [String] + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object]: See currencyFormatter. + * + * Return the parsed currency or NaN when value is invalid. + */ +Globalize.parseCurrency = +Globalize.prototype.parseCurrency = function( /* value, currency, options */ ) { +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/formatter-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/formatter-fn.js new file mode 100644 index 000000000..5f2d6c856 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/formatter-fn.js @@ -0,0 +1,11 @@ +define([ + "../common/parts/join" +], function( partsJoin ) { + +return function( currencyToPartsFormatter ) { + return function currencyFormatter( value ) { + return partsJoin( currencyToPartsFormatter( value )); + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/name-format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/name-format.js new file mode 100644 index 000000000..859e8b885 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/name-format.js @@ -0,0 +1,39 @@ +define([ + "../common/format-message-to-parts", + "../common/parts/push" +], function( formatMessageToParts, partsPush ) { + +/** + * nameFormat( formattedNumber, pluralForm, properties ) + * + * Return the appropriate name form currency format. + */ +return function( formattedNumber, pluralForm, properties ) { + var displayName, unitPattern, + parts = [], + displayNames = properties.displayNames || {}, + unitPatterns = properties.unitPatterns; + + displayName = displayNames[ "displayName-count-" + pluralForm ] || + displayNames[ "displayName-count-other" ] || + displayNames.displayName || + properties.currency; + unitPattern = unitPatterns[ "unitPattern-count-" + pluralForm ] || + unitPatterns[ "unitPattern-count-other" ]; + + formatMessageToParts( unitPattern, [ formattedNumber, displayName ]).forEach(function( part ) { + if ( part.type === "variable" && part.name === "0" ) { + part.value.forEach(function( part ) { + partsPush( parts, part.type, part.value ); + }); + } else if ( part.type === "variable" && part.name === "1" ) { + partsPush( parts, "currency", part.value ); + } else { + partsPush( parts, "literal", part.value ); + } + }); + + return parts; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/name-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/name-properties.js new file mode 100644 index 000000000..47452d0d9 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/name-properties.js @@ -0,0 +1,30 @@ +define([ + "./supplemental-override", + "./unit-patterns", + "../util/object/filter", + "../number/pattern" +], function( currencySupplementalOverride, currencyUnitPatterns, objectFilter, numberPattern ) { + +/** + * nameProperties( currency, cldr ) + * + * Return number pattern with the appropriate currency code in as literal. + */ +return function( currency, cldr ) { + var pattern = numberPattern( "decimal", cldr ); + + // The number of decimal places and the rounding for each currency is not locale-specific. Those + // values overridden by Supplemental Currency Data. + pattern = currencySupplementalOverride( currency, pattern, cldr ); + + return { + displayNames: objectFilter( cldr.main([ + "numbers/currencies", + currency + ]), /^displayName/ ), + pattern: pattern, + unitPatterns: currencyUnitPatterns( cldr ) + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/supplemental-override.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/supplemental-override.js new file mode 100644 index 000000000..73fbaf5f3 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/supplemental-override.js @@ -0,0 +1,25 @@ +define([ + "../util/string/pad" +], function( stringPad ) { + +/** + * supplementalOverride( currency, pattern, cldr ) + * + * Return pattern with fraction digits overriden by supplemental currency data. + */ +return function( currency, pattern, cldr ) { + var digits, + fraction = "", + fractionData = cldr.supplemental([ "currencyData/fractions", currency ]) || + cldr.supplemental( "currencyData/fractions/DEFAULT" ); + + digits = +fractionData._digits; + + if ( digits ) { + fraction = "." + stringPad( "0", digits ).slice( 0, -1 ) + fractionData._rounding; + } + + return pattern.replace( /\.(#+|0*[0-9]|0+[0-9]?)/g, fraction ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/symbol-format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/symbol-format.js new file mode 100644 index 000000000..cd13d5766 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/symbol-format.js @@ -0,0 +1,17 @@ +define(function() { + +/** + * symbolFormat( parts, symbol ) + * + * Return the appropriate symbol/account form format. + */ +return function( parts, symbol ) { + parts.forEach(function( part ) { + if ( part.type === "currency" ) { + part.value = symbol; + } + }); + return parts; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/symbol-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/symbol-properties.js new file mode 100644 index 000000000..4f3f699dc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/symbol-properties.js @@ -0,0 +1,91 @@ +define([ + "./supplemental-override", + "../number/numbering-system", + "../util/regexp/not-s", + "../util/regexp/not-s-and-z" +], function( currencySupplementalOverride, numberNumberingSystem, regexpNotS, regexpNotSAndZ ) { + +/** + * symbolProperties( currency, cldr ) + * + * Return pattern replacing `¤` with the appropriate currency symbol literal. + */ +return function( currency, cldr, options ) { + var currencySpacing, pattern, symbol, symbolEntries, + regexp = { + "[:digit:]": /\d/, + "[:^S:]": regexpNotS, + "[[:^S:]&[:^Z:]]": regexpNotSAndZ + }; + + if ( options.style === "code" ) { + symbol = currency; + } else { + symbolEntries = [ "symbol" ]; + + // If options.symbolForm === "narrow" was passed, prepend it. + if ( options.symbolForm === "narrow" ) { + symbolEntries.unshift( "symbol-alt-narrow" ); + } + + symbolEntries.some(function( symbolEntry ) { + return symbol = cldr.main([ + "numbers/currencies", + currency, + symbolEntry + ]); + }); + } + + currencySpacing = [ "beforeCurrency", "afterCurrency" ].map(function( position ) { + return cldr.main([ + "numbers", + "currencyFormats-numberSystem-" + numberNumberingSystem( cldr ), + "currencySpacing", + position + ]); + }); + + pattern = cldr.main([ + "numbers", + "currencyFormats-numberSystem-" + numberNumberingSystem( cldr ), + options.style === "accounting" ? "accounting" : "standard" + ]); + + pattern = + + // The number of decimal places and the rounding for each currency is not locale-specific. + // Those values are overridden by Supplemental Currency Data. + currencySupplementalOverride( currency, pattern, cldr ) + + // Replace "¤" (\u00A4) with the appropriate symbol literal. + .split( ";" ).map(function( pattern ) { + + return pattern.split( "\u00A4" ).map(function( part, i ) { + var currencyMatch = regexp[ currencySpacing[ i ].currencyMatch ], + surroundingMatch = regexp[ currencySpacing[ i ].surroundingMatch ], + insertBetween = ""; + + // For currencyMatch and surroundingMatch definitions, read [1]. + // When i === 0, beforeCurrency is being handled. Otherwise, afterCurrency. + // 1: http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies + currencyMatch = currencyMatch.test( symbol.charAt( i ? symbol.length - 1 : 0 ) ); + surroundingMatch = surroundingMatch.test( + part.charAt( i ? 0 : part.length - 1 ).replace( /[#@,.]/g, "0" ) + ); + + if ( currencyMatch && part && surroundingMatch ) { + insertBetween = currencySpacing[ i ].insertBetween; + } + + return ( i ? insertBetween : "" ) + part + ( i ? "" : insertBetween ); + }).join( "\u00A4" ); + }).join( ";" ); + + return { + pattern: pattern, + symbol: symbol + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/to-parts-formatter-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/to-parts-formatter-fn.js new file mode 100644 index 000000000..f1072085f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/to-parts-formatter-fn.js @@ -0,0 +1,36 @@ +define([ + "../common/validate/parameter-presence", + "../common/validate/parameter-type/number", + "./name-format", + "./symbol-format" +], function( validateParameterPresence, validateParameterTypeNumber, currencyNameFormat, + currencySymbolFormat ) { + +return function( numberToPartsFormatter, pluralGenerator, properties ) { + var fn; + + // Return formatter when style is "name". + if ( pluralGenerator && properties ) { + fn = function currencyToPartsFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + return currencyNameFormat( + numberToPartsFormatter( value ), + pluralGenerator( value ), + properties + ); + }; + + // Return formatter when style is "symbol", "accounting", or "code". + } else { + fn = function currencyToPartsFormatter( value ) { + + // 1: Reusing pluralGenerator argument, but in this case it is actually `symbol` + return currencySymbolFormat( numberToPartsFormatter( value ), pluralGenerator /* 1 */ ); + }; + } + + return fn; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/unit-patterns.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/unit-patterns.js new file mode 100644 index 000000000..3a908612a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/currency/unit-patterns.js @@ -0,0 +1,13 @@ +define([ + "../util/object/filter", + "../number/numbering-system" +], function( objectFilter, numberNumberingSystem ) { + +return function( cldr ) { + return objectFilter( cldr.main([ + "numbers", + "currencyFormats-numberSystem-" + numberNumberingSystem( cldr ) + ]), /^unitPattern/ ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date-runtime.js new file mode 100644 index 000000000..4c7ce98fe --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date-runtime.js @@ -0,0 +1,88 @@ +define([ + "./common/runtime-key", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/date", + "./common/validate/parameter-type/string", + "./core-runtime", + "./date/format", + "./date/formatter-fn", + "./date/parse", + "./date/parser-fn", + "./date/tokenizer", + "./date/to-parts-formatter-fn", + + "./number-runtime" +], function( runtimeKey, validateParameterPresence, validateParameterTypeDate, + validateParameterTypeString, Globalize, dateFormat, dateFormatterFn, dateParse, dateParserFn, + dateToPartsFormatterFn, dateTokenizer ) { + +Globalize._dateFormat = dateFormat; +Globalize._dateFormatterFn = dateFormatterFn; +Globalize._dateParser = dateParse; +Globalize._dateParserFn = dateParserFn; +Globalize._dateTokenizer = dateTokenizer; +Globalize._dateToPartsFormatterFn = dateToPartsFormatterFn; +Globalize._validateParameterTypeDate = validateParameterTypeDate; + +function optionsHasStyle( options ) { + return options.skeleton !== undefined || + options.date !== undefined || + options.time !== undefined || + options.datetime !== undefined || + options.raw !== undefined; +} + +Globalize.dateFormatter = +Globalize.prototype.dateFormatter = function( options ) { + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + return Globalize[ runtimeKey( "dateFormatter", this._locale, [ options ] ) ]; +}; + +Globalize.dateToPartsFormatter = +Globalize.prototype.dateToPartsFormatter = function( options ) { + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + return Globalize[ runtimeKey( "dateToPartsFormatter", this._locale, [ options ] ) ]; +}; + +Globalize.dateParser = +Globalize.prototype.dateParser = function( options ) { + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + return Globalize[ runtimeKey( "dateParser", this._locale, [ options ] ) ]; +}; + +Globalize.formatDate = +Globalize.prototype.formatDate = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return this.dateFormatter( options )( value ); +}; + +Globalize.formatDateToParts = +Globalize.prototype.formatDateToParts = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return this.dateToPartsFormatter( options )( value ); +}; + +Globalize.parseDate = +Globalize.prototype.parseDate = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return this.dateParser( options )( value ); +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date.js new file mode 100644 index 000000000..4453a914f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date.js @@ -0,0 +1,323 @@ +define([ + "cldr", + "./common/runtime-bind", + "./common/validate", + "./common/validate/cldr", + "./common/validate/default-locale", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/date", + "./common/validate/parameter-type/plain-object", + "./common/validate/parameter-type/string", + "./core", + "./date/expand-pattern", + "./date/format-properties", + "./date/formatter-fn", + "./date/parse-properties", + "./date/parser-fn", + "./date/tokenizer-properties", + "./date/to-parts-formatter-fn", + + "cldr/event", + "cldr/supplemental", + "./number" +], function( Cldr, runtimeBind, validate, validateCldr, validateDefaultLocale, + validateParameterPresence, validateParameterTypeDate, validateParameterTypePlainObject, + validateParameterTypeString, Globalize, dateExpandPattern, dateFormatProperties, + dateFormatterFn, dateParseProperties, dateParserFn, dateTokenizerProperties, + dateToPartsFormatterFn ) { + +function optionsHasStyle( options ) { + return options.skeleton !== undefined || + options.date !== undefined || + options.time !== undefined || + options.datetime !== undefined || + options.raw !== undefined; +} + +function validateRequiredCldr( path, value ) { + validateCldr( path, value, { + skip: [ + /dates\/calendars\/gregorian\/dateTimeFormats\/availableFormats/, + /dates\/calendars\/gregorian\/days\/.*\/short/, + /dates\/timeZoneNames\/zone/, + /dates\/timeZoneNames\/metazone/, + /globalize-iana/, + /supplemental\/metaZones/, + /supplemental\/timeData\/(?!001)/, + /supplemental\/weekData\/(?!001)/ + ] + }); +} + +function validateOptionsPreset( options ) { + validateOptionsPresetEach( "date", options ); + validateOptionsPresetEach( "time", options ); + validateOptionsPresetEach( "datetime", options ); +} + +function validateOptionsPresetEach( type, options ) { + var value = options[ type ]; + validate( + "E_INVALID_OPTIONS", + "Invalid `{{type}: \"{value}\"}`.", + value === undefined || [ "short", "medium", "long", "full" ].indexOf( value ) !== -1, + { type: type, value: value } + ); +} + +function validateOptionsSkeleton( pattern, skeleton ) { + validate( + "E_INVALID_OPTIONS", + "Invalid `{skeleton: \"{value}\"}` based on provided CLDR.", + skeleton === undefined || ( typeof pattern === "string" && pattern ), + { type: "skeleton", value: skeleton } + ); +} + +function validateRequiredIana( timeZone ) { + return function( path, value ) { + + if ( !/globalize-iana/.test( path ) ) { + return; + } + + validate( + "E_MISSING_IANA_TZ", + "Missing required IANA timezone content for `{timeZone}`: `{path}`.", + value, + { + path: path.replace( /globalize-iana\//, "" ), + timeZone: timeZone + } + ); + }; +} + +/** + * .loadTimeZone( json ) + * + * @json [JSON] + * + * Load IANA timezone data. + */ +Globalize.loadTimeZone = function( json ) { + var customData = { + "globalize-iana": json + }; + + validateParameterPresence( json, "json" ); + validateParameterTypePlainObject( json, "json" ); + + Cldr.load( customData ); +}; + +/** + * .dateFormatter( options ) + * + * @options [Object] see date/expand_pattern for more info. + * + * Return a date formatter function (of the form below) according to the given options and the + * default/instance locale. + * + * fn( value ) + * + * @value [Date] + * + * Return a function that formats a date according to the given `format` and the default/instance + * locale. + */ +Globalize.dateFormatter = +Globalize.prototype.dateFormatter = function( options ) { + var args, dateToPartsFormatter, returnFn; + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + args = [ options ]; + + dateToPartsFormatter = this.dateToPartsFormatter( options ); + returnFn = dateFormatterFn( dateToPartsFormatter ); + runtimeBind( args, this.cldr, returnFn, [ dateToPartsFormatter ] ); + + return returnFn; +}; + +/** + * .dateToPartsFormatter( options ) + * + * @options [Object] see date/expand_pattern for more info. + * + * Return a date formatter function (of the form below) according to the given options and the + * default/instance locale. + * + * fn( value ) + * + * @value [Date] + * + * Return a function that formats a date to parts according to the given `format` + * and the default/instance + * locale. + */ +Globalize.dateToPartsFormatter = +Globalize.prototype.dateToPartsFormatter = function( options ) { + var args, cldr, numberFormatters, pad, pattern, properties, returnFn, + timeZone, ianaListener; + + validateParameterTypePlainObject( options, "options" ); + + cldr = this.cldr; + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + + validateOptionsPreset( options ); + validateDefaultLocale( cldr ); + + timeZone = options.timeZone; + validateParameterTypeString( timeZone, "options.timeZone" ); + + args = [ options ]; + + cldr.on( "get", validateRequiredCldr ); + if ( timeZone ) { + ianaListener = validateRequiredIana( timeZone ); + cldr.on( "get", ianaListener ); + } + try { + pattern = dateExpandPattern( options, cldr ); + validateOptionsSkeleton( pattern, options.skeleton ); + properties = dateFormatProperties( pattern, cldr, timeZone ); + } finally { + cldr.off( "get", validateRequiredCldr ); + if ( ianaListener ) { + cldr.off( "get", ianaListener ); + } + } + + // Create needed number formatters. + numberFormatters = properties.numberFormatters; + delete properties.numberFormatters; + for ( pad in numberFormatters ) { + numberFormatters[ pad ] = this.numberFormatter({ + raw: numberFormatters[ pad ] + }); + } + + returnFn = dateToPartsFormatterFn( numberFormatters, properties ); + + runtimeBind( args, cldr, returnFn, [ numberFormatters, properties ] ); + + return returnFn; +}; + +/** + * .dateParser( options ) + * + * @options [Object] see date/expand_pattern for more info. + * + * Return a function that parses a string date according to the given `formats` and the + * default/instance locale. + */ +Globalize.dateParser = +Globalize.prototype.dateParser = function( options ) { + var args, cldr, numberParser, parseProperties, pattern, returnFn, timeZone, + tokenizerProperties; + + validateParameterTypePlainObject( options, "options" ); + + cldr = this.cldr; + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + + validateOptionsPreset( options ); + validateDefaultLocale( cldr ); + + timeZone = options.timeZone; + validateParameterTypeString( timeZone, "options.timeZone" ); + + args = [ options ]; + + try { + cldr.on( "get", validateRequiredCldr ); + if ( timeZone ) { + cldr.on( "get", validateRequiredIana( timeZone ) ); + } + pattern = dateExpandPattern( options, cldr ); + validateOptionsSkeleton( pattern, options.skeleton ); + tokenizerProperties = dateTokenizerProperties( pattern, cldr, timeZone ); + parseProperties = dateParseProperties( cldr, timeZone ); + } finally { + cldr.off( "get", validateRequiredCldr ); + if ( timeZone ) { + cldr.off( "get", validateRequiredIana( timeZone ) ); + } + } + numberParser = this.numberParser({ raw: "0" }); + + returnFn = dateParserFn( numberParser, parseProperties, tokenizerProperties ); + + runtimeBind( args, cldr, returnFn, [ numberParser, parseProperties, tokenizerProperties ] ); + + return returnFn; +}; + +/** + * .formatDate( value, options ) + * + * @value [Date] + * + * @options [Object] see date/expand_pattern for more info. + * + * Formats a date or number according to the given options string and the default/instance locale. + */ +Globalize.formatDate = +Globalize.prototype.formatDate = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return this.dateFormatter( options )( value ); +}; + +/** + * .formatDateToParts( value, options ) + * + * @value [Date] + * + * @options [Object] see date/expand_pattern for more info. + * + * Formats a date or number to parts according to the given options and the default/instance locale. + */ +Globalize.formatDateToParts = +Globalize.prototype.formatDateToParts = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return this.dateToPartsFormatter( options )( value ); +}; + +/** + * .parseDate( value, options ) + * + * @value [String] + * + * @options [Object] see date/expand_pattern for more info. + * + * Return a Date instance or null. + */ +Globalize.parseDate = +Globalize.prototype.parseDate = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return this.dateParser( options )( value ); +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/day-of-week.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/day-of-week.js new file mode 100644 index 000000000..7c70c20dc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/day-of-week.js @@ -0,0 +1,20 @@ +define(function() { + +/** + * dayOfWeek( date, firstDay ) + * + * @date + * + * @firstDay the result of `dateFirstDayOfWeek( cldr )` + * + * Return the day of the week normalized by the territory's firstDay [0-6]. + * Eg for "mon": + * - return 0 if territory is GB, or BR, or DE, or FR (week starts on "mon"); + * - return 1 if territory is US (week starts on "sun"); + * - return 2 if territory is EG (week starts on "sat"); + */ +return function( date, firstDay ) { + return ( date.getDay() - firstDay + 7 ) % 7; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/day-of-year.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/day-of-year.js new file mode 100644 index 000000000..5158eae26 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/day-of-year.js @@ -0,0 +1,15 @@ +define([ + "./distance-in-days", + "./start-of" +], function( dateDistanceInDays, dateStartOf ) { + +/** + * dayOfYear + * + * Return the distance in days of the date to the begin of the year [0-d]. + */ +return function( date ) { + return Math.floor( dateDistanceInDays( dateStartOf( date, "year" ), date ) ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/distance-in-days.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/distance-in-days.js new file mode 100644 index 000000000..1f1f265ed --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/distance-in-days.js @@ -0,0 +1,13 @@ +define(function() { + +/** + * distanceInDays( from, to ) + * + * Return the distance in days between from and to Dates. + */ +return function( from, to ) { + var inDays = 864e5; + return ( to.getTime() - from.getTime() ) / inDays; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern.js new file mode 100644 index 000000000..34eefb3cf --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern.js @@ -0,0 +1,127 @@ +define([ + "../common/create-error/invalid-parameter-value", + "../common/format-message", + "../common/validate/skeleton", + "./expand-pattern/get-best-match-pattern" +], function( createErrorInvalidParameterValue, formatMessage, validateSkeleton, + dateExpandPatternGetBestMatchPattern ) { + +/** + * expandPattern( options, cldr ) + * + * @options [Object] if String, it's considered a skeleton. Object accepts: + * - skeleton: [String] lookup availableFormat; + * - date: [String] ( "full" | "long" | "medium" | "short" ); + * - time: [String] ( "full" | "long" | "medium" | "short" ); + * - datetime: [String] ( "full" | "long" | "medium" | "short" ); + * - raw: [String] For more info see datetime/format.js. + * + * @cldr [Cldr instance]. + * + * Return the corresponding pattern. + * Eg for "en": + * - "GyMMMd" returns "MMM d, y G"; + * - { skeleton: "GyMMMd" } returns "MMM d, y G"; + * - { date: "full" } returns "EEEE, MMMM d, y"; + * - { time: "full" } returns "h:mm:ss a zzzz"; + * - { datetime: "full" } returns "EEEE, MMMM d, y 'at' h:mm:ss a zzzz"; + * - { raw: "dd/mm" } returns "dd/mm"; + */ +return function( options, cldr ) { + var dateSkeleton, result, skeleton, timeSkeleton, type, + + // Using easier to read variables. + getBestMatchPattern = dateExpandPatternGetBestMatchPattern; + + function combineDateTime( type, datePattern, timePattern ) { + return formatMessage( + cldr.main([ + "dates/calendars/gregorian/dateTimeFormats", + type + ]), + [ timePattern, datePattern ] + ); + } + + switch ( true ) { + case "skeleton" in options: + skeleton = options.skeleton; + + // Preferred hour (j). + skeleton = skeleton.replace( /j/g, function() { + return cldr.supplemental.timeData.preferred(); + }); + + validateSkeleton( skeleton ); + + // Try direct map (note that getBestMatchPattern handles it). + // ... or, try to "best match" the whole skeleton. + result = getBestMatchPattern( + cldr, + skeleton + ); + if ( result ) { + break; + } + + // ... or, try to "best match" the date and time parts individually. + timeSkeleton = skeleton.split( /[^hHKkmsSAzZOvVXx]/ ).slice( -1 )[ 0 ]; + dateSkeleton = skeleton.split( /[^GyYuUrQqMLlwWdDFgEec]/ )[ 0 ]; + dateSkeleton = getBestMatchPattern( + cldr, + dateSkeleton + ); + timeSkeleton = getBestMatchPattern( + cldr, + timeSkeleton + ); + + if ( /(MMMM|LLLL).*[Ec]/.test( dateSkeleton ) ) { + type = "full"; + } else if ( /MMMM|LLLL/.test( dateSkeleton ) ) { + type = "long"; + } else if ( /MMM|LLL/.test( dateSkeleton ) ) { + type = "medium"; + } else { + type = "short"; + } + + if ( dateSkeleton && timeSkeleton ) { + result = combineDateTime( type, dateSkeleton, timeSkeleton ); + } else { + result = dateSkeleton || timeSkeleton; + } + + break; + + case "date" in options: + case "time" in options: + result = cldr.main([ + "dates/calendars/gregorian", + "date" in options ? "dateFormats" : "timeFormats", + ( options.date || options.time ) + ]); + break; + + case "datetime" in options: + result = combineDateTime( options.datetime, + cldr.main([ "dates/calendars/gregorian/dateFormats", options.datetime ]), + cldr.main([ "dates/calendars/gregorian/timeFormats", options.datetime ]) + ); + break; + + case "raw" in options: + result = options.raw; + break; + + default: + throw createErrorInvalidParameterValue({ + name: "options", + value: options + }); + } + + return result; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/augment-format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/augment-format.js new file mode 100644 index 000000000..e403a4471 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/augment-format.js @@ -0,0 +1,56 @@ +define([ + "./normalize-pattern-type", + "../pattern-re", + "../../util/string/repeat" +], function( dateExpandPatternNormalizePatternType, datePatternRe, stringRepeat ) { + +function expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat ) { + var i, j, bestMatchFormatParts, matchedType, matchedLength, requestedType, + requestedLength, requestedSkeletonParts, + + // Using an easier to read variable. + normalizePatternType = dateExpandPatternNormalizePatternType; + + requestedSkeletonParts = skeletonWithoutFractionalSeconds.match( datePatternRe ); + bestMatchFormatParts = bestMatchFormat.match( datePatternRe ); + + for ( i = 0; i < bestMatchFormatParts.length; i++ ) { + matchedType = bestMatchFormatParts[ i ].charAt( 0 ); + matchedLength = bestMatchFormatParts[ i ].length; + for ( j = 0; j < requestedSkeletonParts.length; j++ ) { + requestedType = requestedSkeletonParts[ j ].charAt( 0 ); + requestedLength = requestedSkeletonParts[ j ].length; + if ( normalizePatternType( matchedType ) === normalizePatternType( requestedType ) && + matchedLength < requestedLength + ) { + bestMatchFormatParts[ i ] = stringRepeat( matchedType, requestedLength ); + } + } + } + + return bestMatchFormatParts.join( "" ); +} + +// See: http://www.unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons +return function( requestedSkeleton, bestMatchFormat, decimalSeparator ) { + var countOfFractionalSeconds, fractionalSecondMatch, lastSecondIdx, + skeletonWithoutFractionalSeconds; + + fractionalSecondMatch = requestedSkeleton.match( /S/g ); + countOfFractionalSeconds = fractionalSecondMatch ? fractionalSecondMatch.length : 0; + skeletonWithoutFractionalSeconds = requestedSkeleton.replace( /S/g, "" ); + + bestMatchFormat = expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat ); + + lastSecondIdx = bestMatchFormat.lastIndexOf( "s" ); + if ( lastSecondIdx !== -1 && countOfFractionalSeconds !== 0 ) { + bestMatchFormat = + bestMatchFormat.slice( 0, lastSecondIdx + 1 ) + + decimalSeparator + + stringRepeat( "S", countOfFractionalSeconds ) + + bestMatchFormat.slice( lastSecondIdx + 1 ); + } + return bestMatchFormat; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/compare-formats.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/compare-formats.js new file mode 100644 index 000000000..3ddc8b74a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/compare-formats.js @@ -0,0 +1,58 @@ +define([ + "./normalize-pattern-type", + "../pattern-re" +], function( dateExpandPatternNormalizePatternType, datePatternRe ) { + +return function( formatA, formatB ) { + var a, b, distance, lenA, lenB, typeA, typeB, i, j, + + // Using easier to read variables. + normalizePatternType = dateExpandPatternNormalizePatternType; + + if ( formatA === formatB ) { + return 0; + } + + formatA = formatA.match( datePatternRe ); + formatB = formatB.match( datePatternRe ); + + if ( formatA.length !== formatB.length ) { + return -1; + } + + distance = 1; + for ( i = 0; i < formatA.length; i++ ) { + a = formatA[ i ].charAt( 0 ); + typeA = normalizePatternType( a ); + typeB = null; + for ( j = 0; j < formatB.length; j++ ) { + b = formatB[ j ].charAt( 0 ); + typeB = normalizePatternType( b ); + if ( typeA === typeB ) { + break; + } else { + typeB = null; + } + } + if ( typeB === null ) { + return -1; + } + lenA = formatA[ i ].length; + lenB = formatB[ j ].length; + distance = distance + Math.abs( lenA - lenB ); + + // Most symbols have a small distance from each other, e.g., M ≅ L; E ≅ c; a ≅ b ≅ B; + // H ≅ k ≅ h ≅ K; ... + if ( a !== b ) { + distance += 1; + } + + // Numeric (l<3) and text fields (l>=3) are given a larger distance from each other. + if ( ( lenA < 3 && lenB >= 3 ) || ( lenA >= 3 && lenB < 3 ) ) { + distance += 20; + } + } + return distance; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/get-best-match-pattern.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/get-best-match-pattern.js new file mode 100644 index 000000000..fbc17630f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/get-best-match-pattern.js @@ -0,0 +1,46 @@ +define([ + "./augment-format", + "./compare-formats", + "../../number/symbol" +], function( dateExpandPatternAugmentFormat, dateExpandPatternCompareFormats, numberSymbol ) { + +return function( cldr, askedSkeleton ) { + var availableFormats, decimalSeparator, pattern, ratedFormats, skeleton, + path = "dates/calendars/gregorian/dateTimeFormats/availableFormats", + + // Using easier to read variables. + augmentFormat = dateExpandPatternAugmentFormat, + compareFormats = dateExpandPatternCompareFormats; + + pattern = cldr.main([ path, askedSkeleton ]); + + if ( askedSkeleton && !pattern ) { + availableFormats = cldr.main([ path ]); + ratedFormats = []; + + for ( skeleton in availableFormats ) { + ratedFormats.push({ + skeleton: skeleton, + pattern: availableFormats[ skeleton ], + rate: compareFormats( askedSkeleton, skeleton ) + }); + } + + ratedFormats = ratedFormats + .filter( function( format ) { + return format.rate > -1; + } ) + .sort( function( formatA, formatB ) { + return formatA.rate - formatB.rate; + }); + + if ( ratedFormats.length ) { + decimalSeparator = numberSymbol( "decimal", cldr ); + pattern = augmentFormat( askedSkeleton, ratedFormats[ 0 ].pattern, decimalSeparator ); + } + } + + return pattern; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/normalize-pattern-type.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/normalize-pattern-type.js new file mode 100644 index 000000000..34ddc6b84 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/normalize-pattern-type.js @@ -0,0 +1,9 @@ +define([ + "./similar-fields-map" +], function( dateExpandPatternSimilarFieldsMap ) { + +return function( character ) { + return dateExpandPatternSimilarFieldsMap[ character ] || character; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/similar-fields-map.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/similar-fields-map.js new file mode 100644 index 000000000..b27c75097 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/expand-pattern/similar-fields-map.js @@ -0,0 +1,16 @@ +define([ + "../../util/object/invert" +], function( objectInvert ) { + +// Invert key and values, e.g., {"e": "eEc"} ==> {"e": "e", "E": "e", "c": "e"}. +return objectInvert({ + "e": "eEc", + "L": "ML" +}, function( object, key, value ) { + value.split( "" ).forEach(function( field ) { + object[ field ] = key; + }); + return object; +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/fields-map.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/fields-map.js new file mode 100644 index 000000000..411454b35 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/fields-map.js @@ -0,0 +1,26 @@ +define([ + "../util/object/invert" +], function( objectInvert ) { + +// Invert key and values, e.g., {"year": "yY"} ==> {"y": "year", "Y": "year"} +return objectInvert({ + "era": "G", + "year": "yY", + "quarter": "qQ", + "month": "ML", + "week": "wW", + "day": "dDF", + "weekday": "ecE", + "dayperiod": "a", + "hour": "hHkK", + "minute": "m", + "second": "sSA", + "zone": "zvVOxX" +}, function( object, key, value ) { + value.split( "" ).forEach(function( symbol ) { + object[ symbol ] = key; + }); + return object; +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/first-day-of-week.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/first-day-of-week.js new file mode 100644 index 000000000..44490b43c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/first-day-of-week.js @@ -0,0 +1,12 @@ +define([ + "./week-days" +], function( dateWeekDays ) { + +/** + * firstDayOfWeek + */ +return function( cldr ) { + return dateWeekDays.indexOf( cldr.supplemental.weekData.firstDay() ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/format-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/format-properties.js new file mode 100644 index 000000000..223dd6220 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/format-properties.js @@ -0,0 +1,355 @@ +define([ + "./first-day-of-week", + "./get-time-zone-name", + "./pattern-re", + "./timezone-hour-format/h", + "./timezone-hour-format/hm", + "../common/create-error/unsupported-feature", + "../common/format-message", + "../common/runtime-cache-data-bind", + "../number/symbol", + "../util/string/pad" +], function( dateFirstDayOfWeek, dateGetTimeZoneName, datePatternRe, dateTimezoneHourFormatH, + dateTimezoneHourFormatHm, createErrorUnsupportedFeature, formatMessage, runtimeCacheDataBind, + numberSymbol, stringPad ) { + +/** + * properties( pattern, cldr ) + * + * @pattern [String] raw pattern. + * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + * + * @cldr [Cldr instance]. + * + * Return the properties given the pattern and cldr. + * + * TODO Support other calendar types. + */ +return function( pattern, cldr, timeZone ) { + var properties = { + numberFormatters: {}, + pattern: pattern, + timeSeparator: numberSymbol( "timeSeparator", cldr ) + }, + widths = [ "abbreviated", "wide", "narrow" ]; + + function setNumberFormatterPattern( pad ) { + properties.numberFormatters[ pad ] = stringPad( "", pad ); + } + + if ( timeZone ) { + properties.timeZoneData = runtimeCacheDataBind( "iana/" + timeZone, { + offsets: cldr.get([ "globalize-iana/zoneData", timeZone, "offsets" ]), + untils: cldr.get([ "globalize-iana/zoneData", timeZone, "untils" ]), + isdsts: cldr.get([ "globalize-iana/zoneData", timeZone, "isdsts" ]) + }); + } + + pattern.replace( datePatternRe, function( current ) { + var aux, chr, daylightTzName, formatNumber, genericTzName, length, standardTzName; + + chr = current.charAt( 0 ); + length = current.length; + + if ( chr === "j" ) { + + // Locale preferred hHKk. + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + properties.preferredTime = chr = cldr.supplemental.timeData.preferred(); + } + + // ZZZZ: same as "OOOO". + if ( chr === "Z" && length === 4 ) { + chr = "O"; + length = 4; + } + + // z...zzz: "{shortRegion}", eg. "PST" or "PDT". + // zzzz: "{regionName} {Standard Time}" or "{regionName} {Daylight Time}", + // e.g., "Pacific Standard Time" or "Pacific Daylight Time". + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "z" ) { + standardTzName = dateGetTimeZoneName( length, "standard", timeZone, cldr ); + daylightTzName = dateGetTimeZoneName( length, "daylight", timeZone, cldr ); + if ( standardTzName ) { + properties.standardTzName = standardTzName; + } + if ( daylightTzName ) { + properties.daylightTzName = daylightTzName; + } + + // Fall through the "O" format in case one name is missing. + if ( !standardTzName || !daylightTzName ) { + chr = "O"; + if ( length < 4 ) { + length = 1; + } + } + } + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}" or "{regionName} {Time}", + // e.g., "Pacific Time" + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "v" ) { + genericTzName = dateGetTimeZoneName( length, "generic", timeZone, cldr ); + + // Fall back to "V" format. + if ( !genericTzName ) { + chr = "V"; + length = 4; + } + } + + switch ( chr ) { + + // Era + case "G": + properties.eras = cldr.main([ + "dates/calendars/gregorian/eras", + length <= 3 ? "eraAbbr" : ( length === 4 ? "eraNames" : "eraNarrow" ) + ]); + break; + + // Year + case "y": + + // Plain year. + formatNumber = true; + break; + + case "Y": + + // Year in "Week of Year" + properties.firstDay = dateFirstDayOfWeek( cldr ); + properties.minDays = cldr.supplemental.weekData.minDays(); + formatNumber = true; + break; + + case "u": // Extended year. Need to be implemented. + case "U": // Cyclic year name. Need to be implemented. + throw createErrorUnsupportedFeature({ + feature: "year pattern `" + chr + "`" + }); + + // Quarter + case "Q": + case "q": + if ( length > 2 ) { + if ( !properties.quarters ) { + properties.quarters = {}; + } + if ( !properties.quarters[ chr ] ) { + properties.quarters[ chr ] = {}; + } + properties.quarters[ chr ][ length ] = cldr.main([ + "dates/calendars/gregorian/quarters", + chr === "Q" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + } else { + formatNumber = true; + } + break; + + // Month + case "M": + case "L": + if ( length > 2 ) { + if ( !properties.months ) { + properties.months = {}; + } + if ( !properties.months[ chr ] ) { + properties.months[ chr ] = {}; + } + properties.months[ chr ][ length ] = cldr.main([ + "dates/calendars/gregorian/months", + chr === "M" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + } else { + formatNumber = true; + } + break; + + // Week - Week of Year (w) or Week of Month (W). + case "w": + case "W": + properties.firstDay = dateFirstDayOfWeek( cldr ); + properties.minDays = cldr.supplemental.weekData.minDays(); + formatNumber = true; + break; + + // Day + case "d": + case "D": + case "F": + formatNumber = true; + break; + + case "g": + + // Modified Julian day. Need to be implemented. + throw createErrorUnsupportedFeature({ + feature: "Julian day pattern `g`" + }); + + // Week day + case "e": + case "c": + if ( length <= 2 ) { + properties.firstDay = dateFirstDayOfWeek( cldr ); + formatNumber = true; + break; + } + + /* falls through */ + case "E": + if ( !properties.days ) { + properties.days = {}; + } + if ( !properties.days[ chr ] ) { + properties.days[ chr ] = {}; + } + if ( length === 6 ) { + + // If short day names are not explicitly specified, abbreviated day names are + // used instead. + // http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras + // http://unicode.org/cldr/trac/ticket/6790 + properties.days[ chr ][ length ] = cldr.main([ + "dates/calendars/gregorian/days", + chr === "c" ? "stand-alone" : "format", + "short" + ]) || cldr.main([ + "dates/calendars/gregorian/days", + chr === "c" ? "stand-alone" : "format", + "abbreviated" + ]); + } else { + properties.days[ chr ][ length ] = cldr.main([ + "dates/calendars/gregorian/days", + chr === "c" ? "stand-alone" : "format", + widths[ length < 3 ? 0 : length - 3 ] + ]); + } + break; + + // Period (AM or PM) + case "a": + properties.dayPeriods = { + am: cldr.main( + "dates/calendars/gregorian/dayPeriods/format/wide/am" + ), + pm: cldr.main( + "dates/calendars/gregorian/dayPeriods/format/wide/pm" + ) + }; + break; + + // Hour + case "h": // 1-12 + case "H": // 0-23 + case "K": // 0-11 + case "k": // 1-24 + + // Minute + case "m": + + // Second + case "s": + case "S": + case "A": + formatNumber = true; + break; + + // Zone + case "v": + if ( length !== 1 && length !== 4 ) { + throw createErrorUnsupportedFeature({ + feature: "timezone pattern `" + pattern + "`" + }); + } + properties.genericTzName = genericTzName; + break; + + case "V": + + if ( length === 1 ) { + throw createErrorUnsupportedFeature({ + feature: "timezone pattern `" + pattern + "`" + }); + } + + if ( timeZone ) { + if ( length === 2 ) { + properties.timeZoneName = timeZone; + break; + } + + var timeZoneName, + exemplarCity = cldr.main([ + "dates/timeZoneNames/zone", timeZone, "exemplarCity" + ]); + + if ( length === 3 ) { + if ( !exemplarCity ) { + exemplarCity = cldr.main([ + "dates/timeZoneNames/zone/Etc/Unknown/exemplarCity" + ]); + } + timeZoneName = exemplarCity; + } + + if ( exemplarCity && length === 4 ) { + timeZoneName = formatMessage( + cldr.main( + "dates/timeZoneNames/regionFormat" + ), + [ exemplarCity ] + ); + } + + if ( timeZoneName ) { + properties.timeZoneName = timeZoneName; + break; + } + } + + if ( current === "v" ) { + length = 1; + } + + /* falls through */ + case "O": + + // O: "{gmtFormat}+H;{gmtFormat}-H" or "{gmtZeroFormat}", eg. "GMT-8" or "GMT". + // OOOO: "{gmtFormat}{hourFormat}" or "{gmtZeroFormat}", eg. "GMT-08:00" or "GMT". + properties.gmtFormat = cldr.main( "dates/timeZoneNames/gmtFormat" ); + properties.gmtZeroFormat = cldr.main( "dates/timeZoneNames/gmtZeroFormat" ); + + // Unofficial deduction of the hourFormat variations. + // Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293 + aux = cldr.main( "dates/timeZoneNames/hourFormat" ); + properties.hourFormat = length < 4 ? + [ dateTimezoneHourFormatH( aux ), dateTimezoneHourFormatHm( aux, "H" ) ] : + dateTimezoneHourFormatHm( aux, "HH" ); + + /* falls through */ + case "Z": + case "X": + case "x": + setNumberFormatterPattern( 1 ); + setNumberFormatterPattern( 2 ); + break; + } + + if ( formatNumber ) { + setNumberFormatterPattern( length ); + } + }); + + return properties; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/format.js new file mode 100644 index 000000000..18fe8480e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/format.js @@ -0,0 +1,360 @@ +define([ + "zoned-date-time", + "./day-of-week", + "./day-of-year", + "./fields-map", + "./milliseconds-in-day", + "./pattern-re", + "./start-of", + "./timezone-hour-format", + "./week-days", + "../common/parts/push", + "../util/remove-literal-quotes" +], function( ZonedDateTime, dateDayOfWeek, dateDayOfYear, dateFieldsMap, dateMillisecondsInDay, + datePatternRe, dateStartOf, dateTimezoneHourFormat, dateWeekDays, partsPush, + removeLiteralQuotes ) { + +/** + * format( date, properties ) + * + * @date [Date instance]. + * + * @properties + * + * TODO Support other calendar types. + * + * Disclosure: this function borrows excerpts of dojo/date/locale. + */ +return function( date, numberFormatters, properties ) { + var parts = []; + + var timeSeparator = properties.timeSeparator; + + // create globalize date with given timezone data + if ( properties.timeZoneData ) { + date = new ZonedDateTime( date, properties.timeZoneData() ); + } + + properties.pattern.replace( datePatternRe, function( current ) { + var aux, dateField, type, value, + chr = current.charAt( 0 ), + length = current.length; + + if ( chr === "j" ) { + + // Locale preferred hHKk. + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + chr = properties.preferredTime; + } + + if ( chr === "Z" ) { + + // Z..ZZZ: same as "xxxx". + if ( length < 4 ) { + chr = "x"; + length = 4; + + // ZZZZ: same as "OOOO". + } else if ( length < 5 ) { + chr = "O"; + length = 4; + + // ZZZZZ: same as "XXXXX" + } else { + chr = "X"; + length = 5; + } + } + + // z...zzz: "{shortRegion}", e.g., "PST" or "PDT". + // zzzz: "{regionName} {Standard Time}" or "{regionName} {Daylight Time}", + // e.g., "Pacific Standard Time" or "Pacific Daylight Time". + if ( chr === "z" ) { + if ( date.isDST ) { + value = date.isDST() ? properties.daylightTzName : properties.standardTzName; + } + + // Fall back to "O" format. + if ( !value ) { + chr = "O"; + if ( length < 4 ) { + length = 1; + } + } + } + + switch ( chr ) { + + // Era + case "G": + value = properties.eras[ date.getFullYear() < 0 ? 0 : 1 ]; + break; + + // Year + case "y": + + // Plain year. + // The length specifies the padding, but for two letters it also specifies the + // maximum length. + value = date.getFullYear(); + if ( length === 2 ) { + value = String( value ); + value = +value.substr( value.length - 2 ); + } + break; + + case "Y": + + // Year in "Week of Year" + // The length specifies the padding, but for two letters it also specifies the + // maximum length. + // yearInWeekofYear = date + DaysInAWeek - (dayOfWeek - firstDay) - minDays + value = new Date( date.getTime() ); + value.setDate( + value.getDate() + 7 - + dateDayOfWeek( date, properties.firstDay ) - + properties.firstDay - + properties.minDays + ); + value = value.getFullYear(); + if ( length === 2 ) { + value = String( value ); + value = +value.substr( value.length - 2 ); + } + break; + + // Quarter + case "Q": + case "q": + value = Math.ceil( ( date.getMonth() + 1 ) / 3 ); + if ( length > 2 ) { + value = properties.quarters[ chr ][ length ][ value ]; + } + break; + + // Month + case "M": + case "L": + value = date.getMonth() + 1; + if ( length > 2 ) { + value = properties.months[ chr ][ length ][ value ]; + } + break; + + // Week + case "w": + + // Week of Year. + // woy = ceil( ( doy + dow of 1/1 ) / 7 ) - minDaysStuff ? 1 : 0. + // TODO should pad on ww? Not documented, but I guess so. + value = dateDayOfWeek( dateStartOf( date, "year" ), properties.firstDay ); + value = Math.ceil( ( dateDayOfYear( date ) + value ) / 7 ) - + ( 7 - value >= properties.minDays ? 0 : 1 ); + break; + + case "W": + + // Week of Month. + // wom = ceil( ( dom + dow of `1/month` ) / 7 ) - minDaysStuff ? 1 : 0. + value = dateDayOfWeek( dateStartOf( date, "month" ), properties.firstDay ); + value = Math.ceil( ( date.getDate() + value ) / 7 ) - + ( 7 - value >= properties.minDays ? 0 : 1 ); + break; + + // Day + case "d": + value = date.getDate(); + break; + + case "D": + value = dateDayOfYear( date ) + 1; + break; + + case "F": + + // Day of Week in month. eg. 2nd Wed in July. + value = Math.floor( date.getDate() / 7 ) + 1; + break; + + // Week day + case "e": + case "c": + if ( length <= 2 ) { + + // Range is [1-7] (deduced by example provided on documentation) + // TODO Should pad with zeros (not specified in the docs)? + value = dateDayOfWeek( date, properties.firstDay ) + 1; + break; + } + + /* falls through */ + case "E": + value = dateWeekDays[ date.getDay() ]; + value = properties.days[ chr ][ length ][ value ]; + break; + + // Period (AM or PM) + case "a": + value = properties.dayPeriods[ date.getHours() < 12 ? "am" : "pm" ]; + break; + + // Hour + case "h": // 1-12 + value = ( date.getHours() % 12 ) || 12; + break; + + case "H": // 0-23 + value = date.getHours(); + break; + + case "K": // 0-11 + value = date.getHours() % 12; + break; + + case "k": // 1-24 + value = date.getHours() || 24; + break; + + // Minute + case "m": + value = date.getMinutes(); + break; + + // Second + case "s": + value = date.getSeconds(); + break; + + case "S": + value = Math.round( date.getMilliseconds() * Math.pow( 10, length - 3 ) ); + break; + + case "A": + value = Math.round( dateMillisecondsInDay( date ) * Math.pow( 10, length - 3 ) ); + break; + + // Zone + case "z": + break; + + case "v": + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}", + // e.g., "Pacific Time". + if ( properties.genericTzName ) { + value = properties.genericTzName; + break; + } + + /* falls through */ + case "V": + + //VVVV: "{explarCity} {Time}", e.g., "Los Angeles Time" + if ( properties.timeZoneName ) { + value = properties.timeZoneName; + break; + } + + if ( current === "v" ) { + length = 1; + } + + /* falls through */ + case "O": + + // O: "{gmtFormat}+H;{gmtFormat}-H" or "{gmtZeroFormat}", eg. "GMT-8" or "GMT". + // OOOO: "{gmtFormat}{hourFormat}" or "{gmtZeroFormat}", eg. "GMT-08:00" or "GMT". + if ( date.getTimezoneOffset() === 0 ) { + value = properties.gmtZeroFormat; + } else { + + // If O..OOO and timezone offset has non-zero minutes, show minutes. + if ( length < 4 ) { + aux = date.getTimezoneOffset(); + aux = properties.hourFormat[ aux % 60 - aux % 1 === 0 ? 0 : 1 ]; + } else { + aux = properties.hourFormat; + } + + value = dateTimezoneHourFormat( + date, + aux, + timeSeparator, + numberFormatters + ); + value = properties.gmtFormat.replace( /\{0\}/, value ); + } + break; + + case "X": + + // Same as x*, except it uses "Z" for zero offset. + if ( date.getTimezoneOffset() === 0 ) { + value = "Z"; + break; + } + + /* falls through */ + case "x": + + // x: hourFormat("+HH[mm];-HH[mm]") + // xx: hourFormat("+HHmm;-HHmm") + // xxx: hourFormat("+HH:mm;-HH:mm") + // xxxx: hourFormat("+HHmm[ss];-HHmm[ss]") + // xxxxx: hourFormat("+HH:mm[:ss];-HH:mm[:ss]") + aux = date.getTimezoneOffset(); + + // If x and timezone offset has non-zero minutes, use xx (i.e., show minutes). + if ( length === 1 && aux % 60 - aux % 1 !== 0 ) { + length += 1; + } + + // If (xxxx or xxxxx) and timezone offset has zero seconds, use xx or xxx + // respectively (i.e., don't show optional seconds). + if ( ( length === 4 || length === 5 ) && aux % 1 === 0 ) { + length -= 2; + } + + value = [ + "+HH;-HH", + "+HHmm;-HHmm", + "+HH:mm;-HH:mm", + "+HHmmss;-HHmmss", + "+HH:mm:ss;-HH:mm:ss" + ][ length - 1 ]; + + value = dateTimezoneHourFormat( date, value, ":" ); + break; + + // timeSeparator + case ":": + value = timeSeparator; + break; + + // ' literals. + case "'": + value = removeLiteralQuotes( current ); + break; + + // Anything else is considered a literal, including [ ,:/.@#], chinese, japonese, and + // arabic characters. + default: + value = current; + + } + if ( typeof value === "number" ) { + value = numberFormatters[ length ]( value ); + } + + dateField = dateFieldsMap[ chr ]; + type = dateField ? dateField : "literal"; + + partsPush( parts, type, value ); + }); + + return parts; + +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/formatter-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/formatter-fn.js new file mode 100644 index 000000000..224e5b147 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/formatter-fn.js @@ -0,0 +1,11 @@ +define([ + "../common/parts/join" +], function( partsJoin ) { + +return function( dateToPartsFormatter ) { + return function dateFormatter( value ) { + return partsJoin( dateToPartsFormatter( value )); + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/get-time-zone-name.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/get-time-zone-name.js new file mode 100644 index 000000000..420b5b179 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/get-time-zone-name.js @@ -0,0 +1,39 @@ +define(function() { + +/** + * getTimeZoneName( length, type ) + */ +return function( length, type, timeZone, cldr ) { + var metaZone, result; + + if ( !timeZone ) { + return; + } + + result = cldr.main([ + "dates/timeZoneNames/zone", + timeZone, + length < 4 ? "short" : "long", + type + ]); + + if ( result ) { + return result; + } + + // The latest metazone data of the metazone array. + // TODO expand to support the historic metazones based on the given date. + metaZone = cldr.supplemental([ + "metaZones/metazoneInfo/timezone", timeZone, 0, + "usesMetazone/_mzone" + ]); + + return cldr.main([ + "dates/timeZoneNames/metazone", + metaZone, + length < 4 ? "short" : "long", + type + ]); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/is-leap-year.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/is-leap-year.js new file mode 100644 index 000000000..86ee8be60 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/is-leap-year.js @@ -0,0 +1,14 @@ +define(function() { + +/** + * isLeapYear( year ) + * + * @year [Number] + * + * Returns an indication whether the specified year is a leap year. + */ +return function( year ) { + return new Date( year, 1, 29 ).getMonth() === 1; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/last-day-of-month.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/last-day-of-month.js new file mode 100644 index 000000000..c5208b7ad --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/last-day-of-month.js @@ -0,0 +1,14 @@ +define(function() { + +/** + * lastDayOfMonth( date ) + * + * @date [Date] + * + * Return the last day of the given date's month + */ +return function( date ) { + return new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate(); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/milliseconds-in-day.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/milliseconds-in-day.js new file mode 100644 index 000000000..99d60e7d0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/milliseconds-in-day.js @@ -0,0 +1,14 @@ +define([ + "./start-of" +], function( dateStartOf ) { + +/** + * millisecondsInDay + */ +return function( date ) { + + // TODO Handle daylight savings discontinuities + return date - dateStartOf( date, "day" ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/parse-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/parse-properties.js new file mode 100644 index 000000000..085bfd904 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/parse-properties.js @@ -0,0 +1,30 @@ +define([ + "../common/runtime-cache-data-bind" +], function( runtimeCacheDataBind ) { + +/** + * parseProperties( cldr ) + * + * @cldr [Cldr instance]. + * + * @timeZone [String] FIXME. + * + * Return parser properties. + */ +return function( cldr, timeZone ) { + var properties = { + preferredTimeData: cldr.supplemental.timeData.preferred() + }; + + if ( timeZone ) { + properties.timeZoneData = runtimeCacheDataBind( "iana/" + timeZone, { + offsets: cldr.get([ "globalize-iana/zoneData", timeZone, "offsets" ]), + untils: cldr.get([ "globalize-iana/zoneData", timeZone, "untils" ]), + isdsts: cldr.get([ "globalize-iana/zoneData", timeZone, "isdsts" ]) + }); + } + + return properties; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/parse.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/parse.js new file mode 100644 index 000000000..d0af9cd8e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/parse.js @@ -0,0 +1,301 @@ +define([ + "zoned-date-time", + "./is-leap-year", + "./last-day-of-month", + "./start-of", + "../common/create-error/unsupported-feature", + "../util/date/set-month", + "../util/out-of-range" +], function( ZonedDateTime, dateIsLeapYear, dateLastDayOfMonth, dateStartOf, + createErrorUnsupportedFeature, dateSetMonth, outOfRange ) { + +/** + * parse( value, tokens, properties ) + * + * @value [String] string date. + * + * @tokens [Object] tokens returned by date/tokenizer. + * + * @properties [Object] output returned by date/tokenizer-properties. + * + * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + */ +return function( _value, tokens, properties ) { + var amPm, day, daysOfYear, month, era, hour, hour12, timezoneOffset, valid, + YEAR = 0, + MONTH = 1, + DAY = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECONDS = 6, + date = new Date(), + truncateAt = [], + units = [ "year", "month", "day", "hour", "minute", "second", "milliseconds" ]; + + // Create globalize date with given timezone data. + if ( properties.timeZoneData ) { + date = new ZonedDateTime( date, properties.timeZoneData() ); + } + + if ( !tokens.length ) { + return null; + } + + valid = tokens.every(function( token ) { + var century, chr, value, length; + + if ( token.type === "literal" ) { + + // continue + return true; + } + + chr = token.type.charAt( 0 ); + length = token.type.length; + + if ( chr === "j" ) { + + // Locale preferred hHKk. + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + chr = properties.preferredTimeData; + } + + switch ( chr ) { + + // Era + case "G": + truncateAt.push( YEAR ); + era = +token.value; + break; + + // Year + case "y": + value = token.value; + if ( length === 2 ) { + if ( outOfRange( value, 0, 99 ) ) { + return false; + } + + // mimic dojo/date/locale: choose century to apply, according to a sliding + // window of 80 years before and 20 years after present year. + century = Math.floor( date.getFullYear() / 100 ) * 100; + value += century; + if ( value > date.getFullYear() + 20 ) { + value -= 100; + } + } + date.setFullYear( value ); + truncateAt.push( YEAR ); + break; + + case "Y": // Year in "Week of Year" + throw createErrorUnsupportedFeature({ + feature: "year pattern `" + chr + "`" + }); + + // Quarter (skip) + case "Q": + case "q": + break; + + // Month + case "M": + case "L": + if ( length <= 2 ) { + value = token.value; + } else { + value = +token.value; + } + if ( outOfRange( value, 1, 12 ) ) { + return false; + } + + // Setting the month later so that we have the correct year and can determine + // the correct last day of February in case of leap year. + month = value; + truncateAt.push( MONTH ); + break; + + // Week (skip) + case "w": // Week of Year. + case "W": // Week of Month. + break; + + // Day + case "d": + day = token.value; + truncateAt.push( DAY ); + break; + + case "D": + daysOfYear = token.value; + truncateAt.push( DAY ); + break; + + case "F": + + // Day of Week in month. eg. 2nd Wed in July. + // Skip + break; + + // Week day + case "e": + case "c": + case "E": + + // Skip. + // value = arrayIndexOf( dateWeekDays, token.value ); + break; + + // Period (AM or PM) + case "a": + amPm = token.value; + break; + + // Hour + case "h": // 1-12 + value = token.value; + if ( outOfRange( value, 1, 12 ) ) { + return false; + } + hour = hour12 = true; + date.setHours( value === 12 ? 0 : value ); + truncateAt.push( HOUR ); + break; + + case "K": // 0-11 + value = token.value; + if ( outOfRange( value, 0, 11 ) ) { + return false; + } + hour = hour12 = true; + date.setHours( value ); + truncateAt.push( HOUR ); + break; + + case "k": // 1-24 + value = token.value; + if ( outOfRange( value, 1, 24 ) ) { + return false; + } + hour = true; + date.setHours( value === 24 ? 0 : value ); + truncateAt.push( HOUR ); + break; + + case "H": // 0-23 + value = token.value; + if ( outOfRange( value, 0, 23 ) ) { + return false; + } + hour = true; + date.setHours( value ); + truncateAt.push( HOUR ); + break; + + // Minute + case "m": + value = token.value; + if ( outOfRange( value, 0, 59 ) ) { + return false; + } + date.setMinutes( value ); + truncateAt.push( MINUTE ); + break; + + // Second + case "s": + value = token.value; + if ( outOfRange( value, 0, 59 ) ) { + return false; + } + date.setSeconds( value ); + truncateAt.push( SECOND ); + break; + + case "A": + date.setHours( 0 ); + date.setMinutes( 0 ); + date.setSeconds( 0 ); + + /* falls through */ + case "S": + value = Math.round( token.value * Math.pow( 10, 3 - length ) ); + date.setMilliseconds( value ); + truncateAt.push( MILLISECONDS ); + break; + + // Zone + case "z": + case "Z": + case "O": + case "v": + case "V": + case "X": + case "x": + if ( typeof token.value === "number" ) { + timezoneOffset = token.value; + } + break; + } + + return true; + }); + + if ( !valid ) { + return null; + } + + // 12-hour format needs AM or PM, 24-hour format doesn't, ie. return null + // if amPm && !hour12 || !amPm && hour12. + if ( hour && !( !amPm ^ hour12 ) ) { + return null; + } + + if ( era === 0 ) { + + // 1 BC = year 0 + date.setFullYear( date.getFullYear() * -1 + 1 ); + } + + if ( month !== undefined ) { + dateSetMonth( date, month - 1 ); + } + + if ( day !== undefined ) { + if ( outOfRange( day, 1, dateLastDayOfMonth( date ) ) ) { + return null; + } + date.setDate( day ); + } else if ( daysOfYear !== undefined ) { + if ( outOfRange( daysOfYear, 1, dateIsLeapYear( date.getFullYear() ) ? 366 : 365 ) ) { + return null; + } + date.setMonth( 0 ); + date.setDate( daysOfYear ); + } + + if ( hour12 && amPm === "pm" ) { + date.setHours( date.getHours() + 12 ); + } + + if ( timezoneOffset !== undefined ) { + date.setMinutes( date.getMinutes() + timezoneOffset - date.getTimezoneOffset() ); + } + + // Truncate date at the most precise unit defined. Eg. + // If value is "12/31", and pattern is "MM/dd": + // => new Date( , 12, 31, 0, 0, 0, 0 ); + truncateAt = Math.max.apply( null, truncateAt ); + date = dateStartOf( date, units[ truncateAt ] ); + + // Get date back from globalize date. + if ( date instanceof ZonedDateTime ) { + date = date.toDate(); + } + + return date; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/parser-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/parser-fn.js new file mode 100644 index 000000000..3619d3f35 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/parser-fn.js @@ -0,0 +1,20 @@ +define([ + "../common/validate/parameter-presence", + "../common/validate/parameter-type/string", + "./parse", + "./tokenizer" +], function( validateParameterPresence, validateParameterTypeString, dateParse, dateTokenizer ) { + +return function( numberParser, parseProperties, tokenizerProperties ) { + return function dateParser( value ) { + var tokens; + + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + tokens = dateTokenizer( value, numberParser, tokenizerProperties ); + return dateParse( value, tokens, parseProperties ) || null; + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/pattern-re.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/pattern-re.js new file mode 100644 index 000000000..0fe86386d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/pattern-re.js @@ -0,0 +1,5 @@ +define(function() { + +return ( /([a-z])\1*|'([^']|'')+'|''|./ig ); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/start-of.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/start-of.js new file mode 100644 index 000000000..3fdc58d82 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/start-of.js @@ -0,0 +1,38 @@ +define([ + "zoned-date-time" +], function( ZonedDateTime ) { + +/** + * startOf changes the input to the beginning of the given unit. + * + * For example, starting at the start of a day, resets hours, minutes + * seconds and milliseconds to 0. Starting at the month does the same, but + * also sets the date to 1. + * + * Returns the modified date + */ +return function( date, unit ) { + date = date instanceof ZonedDateTime ? date.clone() : new Date( date.getTime() ); + switch ( unit ) { + case "year": + date.setMonth( 0 ); + /* falls through */ + case "month": + date.setDate( 1 ); + /* falls through */ + case "day": + date.setHours( 0 ); + /* falls through */ + case "hour": + date.setMinutes( 0 ); + /* falls through */ + case "minute": + date.setSeconds( 0 ); + /* falls through */ + case "second": + date.setMilliseconds( 0 ); + } + return date; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/timezone-hour-format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/timezone-hour-format.js new file mode 100644 index 000000000..d2b42b207 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/timezone-hour-format.js @@ -0,0 +1,53 @@ +define([ + "../util/string/pad" +], function( stringPad ) { + +/** + * hourFormat( date, format, timeSeparator, formatNumber ) + * + * Return date's timezone offset according to the format passed. + * Eg for format when timezone offset is 180: + * - "+H;-H": -3 + * - "+HHmm;-HHmm": -0300 + * - "+HH:mm;-HH:mm": -03:00 + * - "+HH:mm:ss;-HH:mm:ss": -03:00:00 + */ +return function( date, format, timeSeparator, formatNumber ) { + var absOffset, + offset = date.getTimezoneOffset(); + + absOffset = Math.abs( offset ); + formatNumber = formatNumber || { + 1: function( value ) { + return stringPad( value, 1 ); + }, + 2: function( value ) { + return stringPad( value, 2 ); + } + }; + + return format + + // Pick the correct sign side (+ or -). + .split( ";" )[ offset > 0 ? 1 : 0 ] + + // Localize time separator + .replace( ":", timeSeparator ) + + // Update hours offset. + .replace( /HH?/, function( match ) { + return formatNumber[ match.length ]( Math.floor( absOffset / 60 ) ); + }) + + // Update minutes offset and return. + .replace( /mm/, function() { + return formatNumber[ 2 ]( Math.floor( absOffset % 60 ) ); + }) + + // Update minutes offset and return. + .replace( /ss/, function() { + return formatNumber[ 2 ]( Math.floor( absOffset % 1 * 60 ) ); + }); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/timezone-hour-format/h.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/timezone-hour-format/h.js new file mode 100644 index 000000000..a5ac0f9e6 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/timezone-hour-format/h.js @@ -0,0 +1,26 @@ +define(function() { + +/** + * timezoneHourFormatShortH( hourFormat ) + * + * @hourFormat [String] + * + * Unofficial deduction of the short hourFormat given time zone `hourFormat` element. + * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293 + * + * Example: + * - "+HH.mm;-HH.mm" => "+H;-H" + * - "+HH:mm;-HH:mm" => "+H;-H" + * - "+HH:mm;−HH:mm" => "+H;−H" (Note MINUS SIGN \u2212) + * - "+HHmm;-HHmm" => "+H:-H" + */ +return function( hourFormat ) { + return hourFormat + .split( ";" ) + .map(function( format ) { + return format.slice( 0, format.indexOf( "H" ) + 1 ); + }) + .join( ";" ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/timezone-hour-format/hm.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/timezone-hour-format/hm.js new file mode 100644 index 000000000..469d69b75 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/timezone-hour-format/hm.js @@ -0,0 +1,35 @@ +define(function() { + +/** + * timezoneHourFormatLongHm( hourFormat ) + * + * @hourFormat [String] + * + * Unofficial deduction of the short hourFormat given time zone `hourFormat` element. + * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293 + * + * Example (hFormat === "H"): (used for short Hm) + * - "+HH.mm;-HH.mm" => "+H.mm;-H.mm" + * - "+HH:mm;-HH:mm" => "+H:mm;-H:mm" + * - "+HH:mm;−HH:mm" => "+H:mm;−H:mm" (Note MINUS SIGN \u2212) + * - "+HHmm;-HHmm" => "+Hmm:-Hmm" + * + * Example (hFormat === "HH": (used for long Hm) + * - "+HH.mm;-HH.mm" => "+HH.mm;-HH.mm" + * - "+HH:mm;-HH:mm" => "+HH:mm;-HH:mm" + * - "+H:mm;-H:mm" => "+HH:mm;-HH:mm" + * - "+HH:mm;−HH:mm" => "+HH:mm;−HH:mm" (Note MINUS SIGN \u2212) + * - "+HHmm;-HHmm" => "+HHmm:-HHmm" + */ +return function( hourFormat, hFormat ) { + return hourFormat + .split( ";" ) + .map(function( format ) { + var parts = format.split( /H+/ ); + parts.splice( 1, 0, hFormat ); + return parts.join( "" ); + }) + .join( ";" ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/to-parts-formatter-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/to-parts-formatter-fn.js new file mode 100644 index 000000000..54da67d4d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/to-parts-formatter-fn.js @@ -0,0 +1,17 @@ +define([ + "../common/validate/parameter-presence", + "../common/validate/parameter-type/date", + "./format" +], function( validateParameterPresence, validateParameterTypeDate, dateFormat ) { + +return function( numberFormatters, properties ) { + return function dateToPartsFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return dateFormat( value, numberFormatters, properties ); + }; + +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/tokenizer-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/tokenizer-properties.js new file mode 100644 index 000000000..34b7c8f2b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/tokenizer-properties.js @@ -0,0 +1,385 @@ +define([ + "./get-time-zone-name", + "./pattern-re", + "./timezone-hour-format/h", + "./timezone-hour-format/hm", + "../common/create-error/unsupported-feature", + "../common/format-message", + "../number/numbering-system-digits-map", + "../number/symbol", + "../util/is-plain-object", + "../util/loose-matching", + "../util/object/filter", + "../util/regexp/escape" +], function( dateGetTimeZoneName, datePatternRe, dateTimezoneHourFormatH, dateTimezoneHourFormatHm, + createErrorUnsupportedFeature, formatMessage, numberNumberingSystemDigitsMap, numberSymbol, + isPlainObject, looseMatching, objectFilter, regexpEscape ) { + +/** + * tokenizerProperties( pattern, cldr ) + * + * @pattern [String] raw pattern. + * + * @cldr [Cldr instance]. + * + * Return Object with data that will be used by tokenizer. + */ +return function( pattern, cldr, timeZone ) { + var digitsReSource, + properties = { + pattern: looseMatching( pattern ) + }, + timeSeparator = numberSymbol( "timeSeparator", cldr ), + widths = [ "abbreviated", "wide", "narrow" ]; + + digitsReSource = numberNumberingSystemDigitsMap( cldr ); + digitsReSource = digitsReSource ? "[" + digitsReSource + "]" : "\\d"; + properties.digitsRe = new RegExp( digitsReSource ); + + // Transform: + // - "+H;-H" -> /\+(\d\d?)|-(\d\d?)/ + // - "+HH;-HH" -> /\+(\d\d)|-(\d\d)/ + // - "+HHmm;-HHmm" -> /\+(\d\d)(\d\d)|-(\d\d)(\d\d)/ + // - "+HH:mm;-HH:mm" -> /\+(\d\d):(\d\d)|-(\d\d):(\d\d)/ + // + // If gmtFormat is GMT{0}, the regexp must fill {0} in each side, e.g.: + // - "+H;-H" -> /GMT\+(\d\d?)|GMT-(\d\d?)/ + function hourFormatRe( hourFormat, gmtFormat, digitsReSource, timeSeparator ) { + var re; + + if ( !digitsReSource ) { + digitsReSource = "\\d"; + } + if ( !gmtFormat ) { + gmtFormat = "{0}"; + } + + re = hourFormat + .replace( "+", "\\+" ) + + // Unicode equivalent to (\\d\\d) + .replace( /HH|mm|ss/g, "((" + digitsReSource + "){2})" ) + + // Unicode equivalent to (\\d\\d?) + .replace( /H|m/g, "((" + digitsReSource + "){1,2})" ); + + if ( timeSeparator ) { + re = re.replace( /:/g, timeSeparator ); + } + + re = re.split( ";" ).map(function( part ) { + return gmtFormat.replace( "{0}", part ); + }).join( "|" ); + + return new RegExp( "^" + re ); + } + + function populateProperties( path, value ) { + + // Skip + var skipRe = /(timeZoneNames\/zone|supplemental\/metaZones|timeZoneNames\/metazone|timeZoneNames\/regionFormat|timeZoneNames\/gmtFormat)/; + if ( skipRe.test( path ) ) { + return; + } + + if ( !value ) { + return; + } + + // The `dates` and `calendars` trim's purpose is to reduce properties' key size only. + path = path.replace( /^.*\/dates\//, "" ).replace( /calendars\//, "" ); + + // Specific filter for "gregorian/dayPeriods/format/wide". + if ( path === "gregorian/dayPeriods/format/wide" ) { + value = objectFilter( value, /^am|^pm/ ); + } + + // Transform object into array of pairs [key, /value/], sort by desc value length. + if ( isPlainObject( value ) ) { + value = Object.keys( value ).map(function( key ) { + return [ key, new RegExp( "^" + regexpEscape( looseMatching( value[ key ] ) ) ) ]; + }).sort(function( a, b ) { + return b[ 1 ].source.length - a[ 1 ].source.length; + }); + + // If typeof value === "string". + } else { + value = looseMatching( value ); + } + properties[ path ] = value; + } + + function regexpSourceSomeTerm( terms ) { + return "(" + terms.filter(function( item ) { + return item; + }).reduce(function( memo, item ) { + return memo + "|" + item; + }) + ")"; + } + + cldr.on( "get", populateProperties ); + + pattern.match( datePatternRe ).forEach(function( current ) { + var aux, chr, daylightTzName, gmtFormat, length, standardTzName; + + chr = current.charAt( 0 ); + length = current.length; + + if ( chr === "Z" ) { + if ( length < 5 ) { + chr = "O"; + length = 4; + } else { + chr = "X"; + length = 5; + } + } + + // z...zzz: "{shortRegion}", eg. "PST" or "PDT". + // zzzz: "{regionName} {Standard Time}" or "{regionName} {Daylight Time}", + // e.g., "Pacific Standard Time" or "Pacific Daylight Time". + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "z" ) { + standardTzName = dateGetTimeZoneName( length, "standard", timeZone, cldr ); + daylightTzName = dateGetTimeZoneName( length, "daylight", timeZone, cldr ); + if ( standardTzName ) { + standardTzName = regexpEscape( looseMatching( standardTzName ) ); + } + if ( daylightTzName ) { + daylightTzName = regexpEscape( looseMatching( daylightTzName ) ); + } + if ( standardTzName || daylightTzName ) { + properties.standardOrDaylightTzName = new RegExp( + "^" + regexpSourceSomeTerm([ standardTzName, daylightTzName ]) + ); + } + + // Fall through the "O" format in case one name is missing. + if ( !standardTzName || !daylightTzName ) { + chr = "O"; + if ( length < 4 ) { + length = 1; + } + } + } + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}" or "{regionName} {Time}", + // e.g., "Pacific Time" + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "v" ) { + if ( length !== 1 && length !== 4 ) { + throw createErrorUnsupportedFeature({ + feature: "timezone pattern `" + pattern + "`" + }); + } + var genericTzName = dateGetTimeZoneName( length, "generic", timeZone, cldr ); + if ( genericTzName ) { + properties.genericTzName = new RegExp( + "^" + regexpEscape( looseMatching( genericTzName ) ) + ); + chr = "O"; + + // Fall back to "V" format. + } else { + chr = "V"; + length = 4; + } + } + + switch ( chr ) { + + // Era + case "G": + cldr.main([ + "dates/calendars/gregorian/eras", + length <= 3 ? "eraAbbr" : ( length === 4 ? "eraNames" : "eraNarrow" ) + ]); + break; + + // Year + case "u": // Extended year. Need to be implemented. + case "U": // Cyclic year name. Need to be implemented. + throw createErrorUnsupportedFeature({ + feature: "year pattern `" + chr + "`" + }); + + // Quarter + case "Q": + case "q": + if ( length > 2 ) { + cldr.main([ + "dates/calendars/gregorian/quarters", + chr === "Q" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + } + break; + + // Month + case "M": + case "L": + + // number l=1:{1,2}, l=2:{2}. + // lookup l=3... + if ( length > 2 ) { + cldr.main([ + "dates/calendars/gregorian/months", + chr === "M" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + } + break; + + // Day + case "g": + + // Modified Julian day. Need to be implemented. + throw createErrorUnsupportedFeature({ + feature: "Julian day pattern `g`" + }); + + // Week day + case "e": + case "c": + + // lookup for length >=3. + if ( length <= 2 ) { + break; + } + + /* falls through */ + case "E": + if ( length === 6 ) { + + // Note: if short day names are not explicitly specified, abbreviated day + // names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras + // eslint-disable-next-line no-unused-expressions + cldr.main([ + "dates/calendars/gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "short" + ]) || cldr.main([ + "dates/calendars/gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "abbreviated" + ]); + } else { + cldr.main([ + "dates/calendars/gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + widths[ length < 3 ? 0 : length - 3 ] + ]); + } + break; + + // Period (AM or PM) + case "a": + cldr.main( + "dates/calendars/gregorian/dayPeriods/format/wide" + ); + break; + + // Zone + case "V": + + if ( length === 1 ) { + throw createErrorUnsupportedFeature({ + feature: "timezone pattern `" + pattern + "`" + }); + } + + if ( timeZone ) { + if ( length === 2 ) { + + // Skip looseMatching processing since timeZone is a canonical posix value. + properties.timeZoneName = timeZone; + properties.timeZoneNameRe = new RegExp( "^" + regexpEscape( timeZone ) ); + break; + } + + var timeZoneName, + exemplarCity = cldr.main([ + "dates/timeZoneNames/zone", timeZone, "exemplarCity" + ]); + + if ( length === 3 ) { + if ( !exemplarCity ) { + exemplarCity = cldr.main([ + "dates/timeZoneNames/zone/Etc/Unknown/exemplarCity" + ]); + } + timeZoneName = exemplarCity; + } + + if ( exemplarCity && length === 4 ) { + timeZoneName = formatMessage( + cldr.main( + "dates/timeZoneNames/regionFormat" + ), + [ exemplarCity ] + ); + } + + if ( timeZoneName ) { + timeZoneName = looseMatching( timeZoneName ); + properties.timeZoneName = timeZoneName; + properties.timeZoneNameRe = new RegExp( + "^" + regexpEscape( timeZoneName ) + ); + } + } + + if ( current === "v" ) { + length = 1; + } + + /* falls through */ + case "z": + case "O": + gmtFormat = cldr.main( "dates/timeZoneNames/gmtFormat" ); + cldr.main( "dates/timeZoneNames/gmtZeroFormat" ); + cldr.main( "dates/timeZoneNames/hourFormat" ); + properties[ "timeZoneNames/gmtZeroFormatRe" ] = + new RegExp( "^" + regexpEscape( properties[ "timeZoneNames/gmtZeroFormat" ] ) ); + aux = properties[ "timeZoneNames/hourFormat" ]; + properties[ "timeZoneNames/hourFormat" ] = ( + length < 4 ? + [ dateTimezoneHourFormatHm( aux, "H" ), dateTimezoneHourFormatH( aux ) ] : + [ dateTimezoneHourFormatHm( aux, "HH" ) ] + ).map(function( hourFormat ) { + return hourFormatRe( + hourFormat, + gmtFormat, + digitsReSource, + timeSeparator + ); + }); + + /* falls through */ + case "X": + case "x": + + // x: hourFormat("+HH[mm];-HH[mm]") + // xx: hourFormat("+HHmm;-HHmm") + // xxx: hourFormat("+HH:mm;-HH:mm") + // xxxx: hourFormat("+HHmm[ss];-HHmm[ss]") + // xxxxx: hourFormat("+HH:mm[:ss];-HH:mm[:ss]") + properties.x = [ + [ "+HHmm;-HHmm", "+HH;-HH" ], + [ "+HHmm;-HHmm" ], + [ "+HH:mm;-HH:mm" ], + [ "+HHmmss;-HHmmss", "+HHmm;-HHmm" ], + [ "+HH:mm:ss;-HH:mm:ss", "+HH:mm;-HH:mm" ] + ][ length - 1 ].map(function( hourFormat ) { + return hourFormatRe( hourFormat ); + }); + } + }); + + cldr.off( "get", populateProperties ); + + return properties; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/tokenizer.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/tokenizer.js new file mode 100644 index 000000000..2e8a0fc70 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/tokenizer.js @@ -0,0 +1,479 @@ +/* eslint-disable no-unused-expressions */ + +define([ + "./pattern-re", + "../util/loose-matching", + "../util/regexp/escape", + "../util/remove-literal-quotes" +], function( datePatternRe, looseMatching, regexpEscape, removeLiteralQuotes ) { + +/** + * tokenizer( value, numberParser, properties ) + * + * @value [String] string date. + * + * @numberParser [Function] + * + * @properties [Object] output returned by date/tokenizer-properties. + * + * Returns an Array of tokens, eg. value "5 o'clock PM", pattern "h 'o''clock' a": + * [{ + * type: "h", + * lexeme: "5" + * }, { + * type: "literal", + * lexeme: " " + * }, { + * type: "literal", + * lexeme: "o'clock" + * }, { + * type: "literal", + * lexeme: " " + * }, { + * type: "a", + * lexeme: "PM", + * value: "pm" + * }] + * + * OBS: lexeme's are always String and may return invalid ranges depending of the token type. + * Eg. "99" for month number. + * + * Return an empty Array when not successfully parsed. + */ +return function( value, numberParser, properties ) { + var digitsRe, valid, + tokens = [], + widths = [ "abbreviated", "wide", "narrow" ]; + + digitsRe = properties.digitsRe; + value = looseMatching( value ); + + valid = properties.pattern.match( datePatternRe ).every(function( current ) { + var aux, chr, length, numeric, tokenRe, + token = {}; + + function hourFormatParse( tokenRe, numberParser ) { + var aux, isPositive, + match = value.match( tokenRe ); + numberParser = numberParser || function( value ) { + return +value; + }; + + if ( !match ) { + return false; + } + + isPositive = match[ 1 ]; + + // hourFormat containing H only, e.g., `+H;-H` + if ( match.length < 6 ) { + aux = isPositive ? 1 : 3; + token.value = numberParser( match[ aux ] ) * 60; + + // hourFormat containing H and m, e.g., `+HHmm;-HHmm` + } else if ( match.length < 10 ) { + aux = isPositive ? [ 1, 3 ] : [ 5, 7 ]; + token.value = numberParser( match[ aux[ 0 ] ] ) * 60 + + numberParser( match[ aux[ 1 ] ] ); + + // hourFormat containing H, m, and s e.g., `+HHmmss;-HHmmss` + } else { + aux = isPositive ? [ 1, 3, 5 ] : [ 7, 9, 11 ]; + token.value = numberParser( match[ aux[ 0 ] ] ) * 60 + + numberParser( match[ aux[ 1 ] ] ) + + numberParser( match[ aux[ 2 ] ] ) / 60; + } + + if ( isPositive ) { + token.value *= -1; + } + + return true; + } + + function oneDigitIfLengthOne() { + if ( length === 1 ) { + + // Unicode equivalent to /\d/ + numeric = true; + return tokenRe = digitsRe; + } + } + + function oneOrTwoDigitsIfLengthOne() { + if ( length === 1 ) { + + // Unicode equivalent to /\d\d?/ + numeric = true; + return tokenRe = new RegExp( "^(" + digitsRe.source + "){1,2}" ); + } + } + + function oneOrTwoDigitsIfLengthOneOrTwo() { + if ( length === 1 || length === 2 ) { + + // Unicode equivalent to /\d\d?/ + numeric = true; + return tokenRe = new RegExp( "^(" + digitsRe.source + "){1,2}" ); + } + } + + function twoDigitsIfLengthTwo() { + if ( length === 2 ) { + + // Unicode equivalent to /\d\d/ + numeric = true; + return tokenRe = new RegExp( "^(" + digitsRe.source + "){2}" ); + } + } + + // Brute-force test every locale entry in an attempt to match the given value. + // Return the first found one (and set token accordingly), or null. + function lookup( path ) { + var array = properties[ path.join( "/" ) ]; + + if ( !array ) { + return null; + } + + // array of pairs [key, value] sorted by desc value length. + array.some(function( item ) { + var valueRe = item[ 1 ]; + if ( valueRe.test( value ) ) { + token.value = item[ 0 ]; + tokenRe = item[ 1 ]; + return true; + } + }); + return null; + } + + token.type = current; + chr = current.charAt( 0 ); + length = current.length; + + if ( chr === "Z" ) { + + // Z..ZZZ: same as "xxxx". + if ( length < 4 ) { + chr = "x"; + length = 4; + + // ZZZZ: same as "OOOO". + } else if ( length < 5 ) { + chr = "O"; + length = 4; + + // ZZZZZ: same as "XXXXX" + } else { + chr = "X"; + length = 5; + } + } + + if ( chr === "z" ) { + if ( properties.standardOrDaylightTzName ) { + token.value = null; + tokenRe = properties.standardOrDaylightTzName; + } + } + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}" or "{regionName} {Time}", + // e.g., "Pacific Time" + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "v" ) { + if ( properties.genericTzName ) { + token.value = null; + tokenRe = properties.genericTzName; + + // Fall back to "V" format. + } else { + chr = "V"; + length = 4; + } + } + + if ( chr === "V" && properties.timeZoneName ) { + token.value = length === 2 ? properties.timeZoneName : null; + tokenRe = properties.timeZoneNameRe; + } + + switch ( chr ) { + + // Era + case "G": + lookup([ + "gregorian/eras", + length <= 3 ? "eraAbbr" : ( length === 4 ? "eraNames" : "eraNarrow" ) + ]); + break; + + // Year + case "y": + case "Y": + numeric = true; + + // number l=1:+, l=2:{2}, l=3:{3,}, l=4:{4,}, ... + if ( length === 1 ) { + + // Unicode equivalent to /\d+/. + tokenRe = new RegExp( "^(" + digitsRe.source + ")+" ); + } else if ( length === 2 ) { + + // Lenient parsing: there's no year pattern to indicate non-zero-padded 2-digits + // year, so parser accepts both zero-padded and non-zero-padded for `yy`. + // + // Unicode equivalent to /\d\d?/ + tokenRe = new RegExp( "^(" + digitsRe.source + "){1,2}" ); + } else { + + // Unicode equivalent to /\d{length,}/ + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + length + ",}" ); + } + break; + + // Quarter + case "Q": + case "q": + + // number l=1:{1}, l=2:{2}. + // lookup l=3... + oneDigitIfLengthOne() || twoDigitsIfLengthTwo() || + lookup([ + "gregorian/quarters", + chr === "Q" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + break; + + // Month + case "M": + case "L": + + // number l=1:{1,2}, l=2:{2}. + // lookup l=3... + // + // Lenient parsing: skeleton "yMd" (i.e., one M) may include MM for the pattern, + // therefore parser accepts both zero-padded and non-zero-padded for M and MM. + // Similar for L. + oneOrTwoDigitsIfLengthOneOrTwo() || lookup([ + "gregorian/months", + chr === "M" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + break; + + // Day + case "D": + + // number {l,3}. + if ( length <= 3 ) { + + // Equivalent to /\d{length,3}/ + numeric = true; + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + length + ",3}" ); + } + break; + + case "W": + case "F": + + // number l=1:{1}. + oneDigitIfLengthOne(); + break; + + // Week day + case "e": + case "c": + + // number l=1:{1}, l=2:{2}. + // lookup for length >=3. + if ( length <= 2 ) { + oneDigitIfLengthOne() || twoDigitsIfLengthTwo(); + break; + } + + /* falls through */ + case "E": + if ( length === 6 ) { + + // Note: if short day names are not explicitly specified, abbreviated day + // names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras + lookup([ + "gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "short" + ]) || lookup([ + "gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "abbreviated" + ]); + } else { + lookup([ + "gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + widths[ length < 3 ? 0 : length - 3 ] + ]); + } + break; + + // Period (AM or PM) + case "a": + lookup([ + "gregorian/dayPeriods/format/wide" + ]); + break; + + // Week + case "w": + + // number l1:{1,2}, l2:{2}. + oneOrTwoDigitsIfLengthOne() || twoDigitsIfLengthTwo(); + break; + + // Day, Hour, Minute, or Second + case "d": + case "h": + case "H": + case "K": + case "k": + case "j": + case "m": + case "s": + + // number l1:{1,2}, l2:{2}. + // + // Lenient parsing: + // - skeleton "hms" (i.e., one m) always includes mm for the pattern, i.e., it's + // impossible to use a different skeleton to parse non-zero-padded minutes, + // therefore parser accepts both zero-padded and non-zero-padded for m. Similar + // for seconds s. + // - skeleton "hms" (i.e., one h) may include h or hh for the pattern, i.e., it's + // impossible to use a different skeleton to parser non-zero-padded hours for some + // locales, therefore parser accepts both zero-padded and non-zero-padded for h. + // Similar for d (in skeleton yMd). + oneOrTwoDigitsIfLengthOneOrTwo(); + break; + + case "S": + + // number {l}. + + // Unicode equivalent to /\d{length}/ + numeric = true; + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + length + "}" ); + break; + + case "A": + + // number {l+5}. + + // Unicode equivalent to /\d{length+5}/ + numeric = true; + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + ( length + 5 ) + "}" ); + break; + + // Zone + case "v": + case "V": + case "z": + if ( tokenRe && tokenRe.test( value ) ) { + break; + } + if ( chr === "V" && length === 2 ) { + break; + } + + /* falls through */ + case "O": + + // O: "{gmtFormat}+H;{gmtFormat}-H" or "{gmtZeroFormat}", eg. "GMT-8" or "GMT". + // OOOO: "{gmtFormat}{hourFormat}" or "{gmtZeroFormat}", eg. "GMT-08:00" or "GMT". + if ( value === properties[ "timeZoneNames/gmtZeroFormat" ] ) { + token.value = 0; + tokenRe = properties[ "timeZoneNames/gmtZeroFormatRe" ]; + } else { + aux = properties[ "timeZoneNames/hourFormat" ].some(function( hourFormatRe ) { + if ( hourFormatParse( hourFormatRe, numberParser ) ) { + tokenRe = hourFormatRe; + return true; + } + }); + if ( !aux ) { + return null; + } + } + break; + + case "X": + + // Same as x*, except it uses "Z" for zero offset. + if ( value === "Z" ) { + token.value = 0; + tokenRe = /^Z/; + break; + } + + /* falls through */ + case "x": + + // x: hourFormat("+HH[mm];-HH[mm]") + // xx: hourFormat("+HHmm;-HHmm") + // xxx: hourFormat("+HH:mm;-HH:mm") + // xxxx: hourFormat("+HHmm[ss];-HHmm[ss]") + // xxxxx: hourFormat("+HH:mm[:ss];-HH:mm[:ss]") + aux = properties.x.some(function( hourFormatRe ) { + if ( hourFormatParse( hourFormatRe ) ) { + tokenRe = hourFormatRe; + return true; + } + }); + if ( !aux ) { + return null; + } + break; + + case "'": + token.type = "literal"; + tokenRe = new RegExp( "^" + regexpEscape( removeLiteralQuotes( current ) ) ); + break; + + default: + token.type = "literal"; + tokenRe = new RegExp( "^" + regexpEscape( current ) ); + } + + if ( !tokenRe ) { + return false; + } + + // Get lexeme and consume it. + value = value.replace( tokenRe, function( lexeme ) { + token.lexeme = lexeme; + if ( numeric ) { + token.value = numberParser( lexeme ); + } + return ""; + }); + + if ( !token.lexeme ) { + return false; + } + + if ( numeric && isNaN( token.value ) ) { + return false; + } + + tokens.push( token ); + return true; + }); + + if ( value !== "" ) { + valid = false; + } + + return valid ? tokens : []; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/week-days.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/week-days.js new file mode 100644 index 000000000..2e0d4db3d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/date/week-days.js @@ -0,0 +1,5 @@ +define(function() { + +return [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ]; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message-runtime.js new file mode 100644 index 000000000..6880351de --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message-runtime.js @@ -0,0 +1,26 @@ +define([ + "./common/runtime-key", + "./common/validate/parameter-type/message-variables", + "./core-runtime", + "./message/formatter-fn" +], function( runtimeKey, validateParameterTypeMessageVariables, Globalize, messageFormatterFn ) { + +Globalize._messageFormatterFn = messageFormatterFn; +Globalize._messageFormat = {}; +Globalize._validateParameterTypeMessageVariables = validateParameterTypeMessageVariables; + +Globalize.messageFormatter = +Globalize.prototype.messageFormatter = function( /* path */ ) { + return Globalize[ + runtimeKey( "messageFormatter", this._locale, [].slice.call( arguments, 0 ) ) + ]; +}; + +Globalize.formatMessage = +Globalize.prototype.formatMessage = function( path /* , variables */ ) { + return this.messageFormatter( path ).apply( {}, [].slice.call( arguments, 1 ) ); +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message.js new file mode 100644 index 000000000..2c3305727 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message.js @@ -0,0 +1,115 @@ +define([ + "cldr", + "messageformat", + "./common/create-error/plural-module-presence", + "./common/runtime-bind", + "./common/validate/default-locale", + "./common/validate/message-bundle", + "./common/validate/message-presence", + "./common/validate/message-type", + "./common/validate/parameter-presence", + "./common/validate/parameter-type", + "./common/validate/parameter-type/plain-object", + "./core", + "./message/formatter-fn", + "./message/formatter-runtime-bind", + "./util/always-array", + + "cldr/event" +], function( Cldr, MessageFormat, createErrorPluralModulePresence, runtimeBind, + validateDefaultLocale, validateMessageBundle, validateMessagePresence, validateMessageType, + validateParameterPresence, validateParameterType, validateParameterTypePlainObject, Globalize, + messageFormatterFn, messageFormatterRuntimeBind, alwaysArray ) { + +var slice = [].slice; + +/** + * .loadMessages( json ) + * + * @json [JSON] + * + * Load translation data. + */ +Globalize.loadMessages = function( json ) { + var locale, + customData = { + "globalize-messages": json, + "main": {} + }; + + validateParameterPresence( json, "json" ); + validateParameterTypePlainObject( json, "json" ); + + // Set available bundles by populating customData main dataset. + for ( locale in json ) { + if ( json.hasOwnProperty( locale ) ) { + customData.main[ locale ] = {}; + } + } + + Cldr.load( customData ); +}; + +/** + * .messageFormatter( path ) + * + * @path [String or Array] + * + * Format a message given its path. + */ +Globalize.messageFormatter = +Globalize.prototype.messageFormatter = function( path ) { + var cldr, formatter, message, pluralGenerator, returnFn, + args = slice.call( arguments, 0 ); + + validateParameterPresence( path, "path" ); + validateParameterType( path, "path", typeof path === "string" || Array.isArray( path ), + "a String nor an Array" ); + + path = alwaysArray( path ); + cldr = this.cldr; + + validateDefaultLocale( cldr ); + validateMessageBundle( cldr ); + + message = cldr.get( [ "globalize-messages/{bundle}" ].concat( path ) ); + validateMessagePresence( path, message ); + + // If message is an Array, concatenate it. + if ( Array.isArray( message ) ) { + message = message.join( " " ); + } + validateMessageType( path, message ); + + // Is plural module present? Yes, use its generator. Nope, use an error generator. + pluralGenerator = this.plural !== undefined ? + this.pluralGenerator() : + createErrorPluralModulePresence; + + formatter = new MessageFormat( cldr.locale, pluralGenerator ).compile( message ); + + returnFn = messageFormatterFn( formatter ); + + runtimeBind( args, cldr, returnFn, + [ messageFormatterRuntimeBind( cldr, formatter ), pluralGenerator ] ); + + return returnFn; +}; + +/** + * .formatMessage( path [, variables] ) + * + * @path [String or Array] + * + * @variables [Number, String, Array or Object] + * + * Format a message given its path. + */ +Globalize.formatMessage = +Globalize.prototype.formatMessage = function( path /* , variables */ ) { + return this.messageFormatter( path ).apply( {}, slice.call( arguments, 1 ) ); +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message/formatter-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message/formatter-fn.js new file mode 100644 index 000000000..720f481cb --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message/formatter-fn.js @@ -0,0 +1,15 @@ +define([ + "../common/validate/parameter-type/message-variables" +], function( validateParameterTypeMessageVariables ) { + +return function( formatter ) { + return function messageFormatter( variables ) { + if ( typeof variables === "number" || typeof variables === "string" ) { + variables = [].slice.call( arguments, 0 ); + } + validateParameterTypeMessageVariables( variables, "variables" ); + return formatter( variables ); + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message/formatter-runtime-bind.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message/formatter-runtime-bind.js new file mode 100644 index 000000000..c2b285d65 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/message/formatter-runtime-bind.js @@ -0,0 +1,46 @@ +define(function() { + +return function( cldr, messageformatter ) { + var locale = cldr.locale, + origToString = messageformatter.toString; + + messageformatter.toString = function() { + var argNames, argValues, output, + args = {}; + + // Properly adjust SlexAxton/messageformat.js compiled variables with Globalize variables: + output = origToString.call( messageformatter ); + + if ( /number\(/.test( output ) ) { + args.number = "messageFormat.number"; + } + + if ( /plural\(/.test( output ) ) { + args.plural = "messageFormat.plural"; + } + + if ( /select\(/.test( output ) ) { + args.select = "messageFormat.select"; + } + + output.replace( /pluralFuncs(\[([^\]]+)\]|\.([a-zA-Z]+))/, function( match ) { + args.pluralFuncs = "{" + + "\"" + locale + "\": Globalize(\"" + locale + "\").pluralGenerator()" + + "}"; + return match; + }); + + argNames = Object.keys( args ).join( ", " ); + argValues = Object.keys( args ).map(function( key ) { + return args[ key ]; + }).join( ", " ); + + return "(function( " + argNames + " ) {\n" + + " return " + output + "\n" + + "})(" + argValues + ")"; + }; + + return messageformatter; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number-runtime.js new file mode 100644 index 000000000..872580a50 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number-runtime.js @@ -0,0 +1,87 @@ +define([ + "./common/runtime-key", + "./common/create-error/unsupported-feature", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/number", + "./common/validate/parameter-type/string", + "./core-runtime", + "./number/format", + "./number/formatter-fn", + "./number/parse", + "./number/parser-fn", + "./number/to-parts-formatter-fn", + "./util/loose-matching", + "./util/number/round", + "./util/remove-literal-quotes" +], function( runtimeKey, createErrorUnsupportedFeature, validateParameterPresence, + validateParameterTypeNumber, validateParameterTypeString, Globalize, numberFormat, + numberFormatterFn, numberParse, numberParserFn, numberToPartsFormatterFn, looseMatching, + numberRound, removeLiteralQuotes ) { + +Globalize._createErrorUnsupportedFeature = createErrorUnsupportedFeature; +Globalize._looseMatching = looseMatching; +Globalize._numberFormat = numberFormat; +Globalize._numberFormatterFn = numberFormatterFn; +Globalize._numberParse = numberParse; +Globalize._numberParserFn = numberParserFn; +Globalize._numberRound = numberRound; +Globalize._numberToPartsFormatterFn = numberToPartsFormatterFn; +Globalize._removeLiteralQuotes = removeLiteralQuotes; +Globalize._validateParameterPresence = validateParameterPresence; +Globalize._validateParameterTypeNumber = validateParameterTypeNumber; +Globalize._validateParameterTypeString = validateParameterTypeString; + +// Stamp runtimeKey and return cached fn. +// Note, this function isn't made common to all formatters and parsers, because in practice this is +// only used (at the moment) for numberFormatter used by unitFormatter. +// TODO: Move this function into a common place when this is used by different formatters. +function cached( runtimeKey ) { + Globalize[ runtimeKey ].runtimeKey = runtimeKey; + return Globalize[ runtimeKey ]; +} + +Globalize.numberFormatter = +Globalize.prototype.numberFormatter = function( options ) { + options = options || {}; + return cached( runtimeKey( "numberFormatter", this._locale, [ options ] ) ); +}; + +Globalize.numberToPartsFormatter = +Globalize.prototype.numberToPartsFormatter = function( options ) { + options = options || {}; + return cached( runtimeKey( "numberToPartsFormatter", this._locale, [ options ] ) ); +}; + +Globalize.numberParser = +Globalize.prototype.numberParser = function( options ) { + options = options || {}; + return Globalize[ runtimeKey( "numberParser", this._locale, [ options ] ) ]; +}; + +Globalize.formatNumber = +Globalize.prototype.formatNumber = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.numberFormatter( options )( value ); +}; + +Globalize.formatNumberToParts = +Globalize.prototype.formatNumberToParts = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.numberFormatter( options )( value ); +}; + +Globalize.parseNumber = +Globalize.prototype.parseNumber = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return this.numberParser( options )( value ); +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number.js new file mode 100644 index 000000000..b132b7ee5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number.js @@ -0,0 +1,246 @@ +define([ + "./core", + "./common/create-error/unsupported-feature", + "./common/runtime-bind", + "./common/validate/cldr", + "./common/validate/default-locale", + "./common/validate/parameter-presence", + "./common/validate/parameter-range", + "./common/validate/parameter-type/number", + "./common/validate/parameter-type/plain-object", + "./common/validate/parameter-type/string", + "./number/formatter-fn", + "./number/format-properties", + "./number/numbering-system", + "./number/numbering-system-digits-map", + "./number/parser-fn", + "./number/parse-properties", + "./number/pattern", + "./number/symbol", + "./number/to-parts-formatter-fn", + "./util/loose-matching", + "./util/remove-literal-quotes", + "./util/string/pad", + + "cldr/event", + "cldr/supplemental" +], function( Globalize, createErrorUnsupportedFeature, runtimeBind, validateCldr, + validateDefaultLocale, validateParameterPresence, validateParameterRange, + validateParameterTypeNumber, validateParameterTypePlainObject, validateParameterTypeString, + numberFormatterFn, numberFormatProperties, numberNumberingSystem, + numberNumberingSystemDigitsMap, numberParserFn, numberParseProperties, numberPattern, + numberSymbol, numberToPartsFormatterFn, looseMatching, removeLiteralQuotes, stringPad ) { + +function validateDigits( properties ) { + var minimumIntegerDigits = properties[ 2 ], + minimumFractionDigits = properties[ 3 ], + maximumFractionDigits = properties[ 4 ], + minimumSignificantDigits = properties[ 5 ], + maximumSignificantDigits = properties[ 6 ]; + + // Validate significant digit format properties + if ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) ) { + validateParameterRange( minimumSignificantDigits, "minimumSignificantDigits", 1, 21 ); + validateParameterRange( maximumSignificantDigits, "maximumSignificantDigits", + minimumSignificantDigits, 21 ); + + } else if ( !isNaN( minimumSignificantDigits ) || !isNaN( maximumSignificantDigits ) ) { + throw new Error( "Neither or both the minimum and maximum significant digits must be " + + "present" ); + + // Validate integer and fractional format + } else { + validateParameterRange( minimumIntegerDigits, "minimumIntegerDigits", 1, 21 ); + validateParameterRange( minimumFractionDigits, "minimumFractionDigits", 0, 20 ); + validateParameterRange( maximumFractionDigits, "maximumFractionDigits", + minimumFractionDigits, 20 ); + } +} + +/** + * .numberFormatter( [options] ) + * + * @options [Object]: + * - style: [String] "decimal" (default) or "percent". + * - see also number/format options. + * + * Return a function that formats a number according to the given options and default/instance + * locale. + */ +Globalize.numberFormatter = +Globalize.prototype.numberFormatter = function( options ) { + var args, numberToPartsFormatter, returnFn; + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + args = [ options ]; + + numberToPartsFormatter = this.numberToPartsFormatter( options ); + returnFn = numberFormatterFn( numberToPartsFormatter ); + runtimeBind( args, this.cldr, returnFn, [ numberToPartsFormatter ] ); + + return returnFn; +}; + +/** + * .numberToPartsFormatter( [options] ) + * + * @options [Object]: + * - style: [String] "symbol" (default), "accounting", "code" or "name". + * - see also number/format options. + * + * Return a function that formats a number to parts according to the given options and + * default/instance locale. + */ +Globalize.numberToPartsFormatter = +Globalize.prototype.numberToPartsFormatter = function( options ) { + var args, cldr, fnArgs, pattern, properties, returnFn; + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + cldr = this.cldr; + + args = [ options ]; + + validateDefaultLocale( cldr ); + + cldr.on( "get", validateCldr ); + try { + if ( options.raw ) { + pattern = options.raw; + } else { + pattern = numberPattern( options.style || "decimal", cldr ); + } + + properties = numberFormatProperties( pattern, cldr, options ); + fnArgs = [ properties ]; + } finally { + cldr.off( "get", validateCldr ); + } + + validateDigits( properties ); + + if ( options.compact ) { + fnArgs.push( this.pluralGenerator() ); + } + returnFn = numberToPartsFormatterFn.apply( null, fnArgs ); + runtimeBind( args, cldr, returnFn, fnArgs ); + + return returnFn; +}; + +/** + * .numberParser( [options] ) + * + * @options [Object]: + * - style: [String] "decimal" (default) or "percent". + * + * Return the number parser according to the default/instance locale. + */ +Globalize.numberParser = +Globalize.prototype.numberParser = function( options ) { + var args, cldr, pattern, properties, returnFn; + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + cldr = this.cldr; + + args = [ options ]; + + validateDefaultLocale( cldr ); + if ( options.compact ) { + throw createErrorUnsupportedFeature({ + feature: "compact number parsing (not implemented)" + }); + } + + cldr.on( "get", validateCldr ); + + if ( options.raw ) { + pattern = options.raw; + } else { + pattern = numberPattern( options.style || "decimal", cldr ); + } + + properties = numberParseProperties( pattern, cldr, options ); + + cldr.off( "get", validateCldr ); + + returnFn = numberParserFn( properties ); + + runtimeBind( args, cldr, returnFn, [ properties ] ); + + return returnFn; +}; + +/** + * .formatNumber( value [, options] ) + * + * @value [Number] number to be formatted. + * + * @options [Object]: see number/format-properties. + * + * Format a number according to the given options and default/instance locale. + */ +Globalize.formatNumber = +Globalize.prototype.formatNumber = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.numberFormatter( options )( value ); +}; + +/** + * .formatNumberToParts( value [, options] ) + * + * @value [Number] number to be formatted. + * + * @options [Object]: see number/format-properties. + * + * Format a number to pars according to the given options and default/instance locale. + */ +Globalize.formatNumberToParts = +Globalize.prototype.formatNumberToParts = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.numberToPartsFormatter( options )( value ); +}; + +/** + * .parseNumber( value [, options] ) + * + * @value [String] + * + * @options [Object]: See numberParser(). + * + * Return the parsed Number (including Infinity) or NaN when value is invalid. + */ +Globalize.parseNumber = +Globalize.prototype.parseNumber = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return this.numberParser( options )( value ); +}; + +/** + * Optimization to avoid duplicating some internal functions across modules. + */ +Globalize._createErrorUnsupportedFeature = createErrorUnsupportedFeature; +Globalize._numberNumberingSystem = numberNumberingSystem; +Globalize._numberNumberingSystemDigitsMap = numberNumberingSystemDigitsMap; +Globalize._numberPattern = numberPattern; +Globalize._numberSymbol = numberSymbol; +Globalize._looseMatching = looseMatching; +Globalize._removeLiteralQuotes = removeLiteralQuotes; +Globalize._stringPad = stringPad; +Globalize._validateParameterTypeNumber = validateParameterTypeNumber; +Globalize._validateParameterTypeString = validateParameterTypeString; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/compact-pattern-re.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/compact-pattern-re.js new file mode 100644 index 000000000..dc4840ad7 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/compact-pattern-re.js @@ -0,0 +1,21 @@ +define(function() { + +/** + * EBNF representation: + * + * compact_pattern_re = prefix? + * number_pattern_re + * suffix? + * + * number_pattern_re = 0+ + * + * Regexp groups: + * + * 0: compact_pattern_re + * 1: prefix + * 2: number_pattern_re (the number pattern to use in compact mode) + * 3: suffix + */ +return ( /^([^0]*)(0+)([^0]*)$/ ); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/compact.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/compact.js new file mode 100644 index 000000000..24771ca79 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/compact.js @@ -0,0 +1,37 @@ +define([ + "./numbering-system" +], function( numberNumberingSystem ) { + +/** + * Compact( name, cldr ) + * + * @compactType [String] Compact mode, `short` or `long`. + * + * @cldr [Cldr instance]. + * + * Return the localized compact map for the given compact mode. + */ +return function( compactType, cldr ) { + var maxExponent = 0; + + var object = cldr.main([ + "numbers/decimalFormats-numberSystem-" + numberNumberingSystem( cldr ), + compactType, + "decimalFormat" + ]); + + object = Object.keys( object ).reduce(function( newObject, compactKey ) { + var numberExponent = compactKey.split( "0" ).length - 1; + var pluralForm = compactKey.split( "-" )[ 2 ]; + newObject[ numberExponent ] = newObject[ numberExponent ] || {}; + newObject[ numberExponent ][ pluralForm ] = object[ compactKey ]; + maxExponent = Math.max( numberExponent, maxExponent ); + return newObject; + }, {}); + + object.maxExponent = maxExponent; + + return object; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format-properties.js new file mode 100644 index 000000000..7310a3e9a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format-properties.js @@ -0,0 +1,121 @@ +define([ + "./compact", + "./numbering-system-digits-map", + "./pattern-properties", + "./symbol", + "./symbol/map", + "../util/number/round" +], function( numberCompact, numberNumberingSystemDigitsMap, numberPatternProperties, numberSymbol, + numberSymbolMap, numberRound ) { + +/** + * formatProperties( pattern, cldr [, options] ) + * + * @pattern [String] raw pattern for numbers. + * + * @cldr [Cldr instance]. + * + * @options [Object]: + * - minimumIntegerDigits [Number] + * - minimumFractionDigits, maximumFractionDigits [Number] + * - minimumSignificantDigits, maximumSignificantDigits [Number] + * - round [String] "ceil", "floor", "round" (default), or "truncate". + * - useGrouping [Boolean] default true. + * + * Return the processed properties that will be used in number/format. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +return function( pattern, cldr, options ) { + var negativePattern, negativePrefix, negativeProperties, negativeSuffix, positivePattern, + roundFn, properties; + + function getOptions( attribute, propertyIndex ) { + if ( attribute in options ) { + properties[ propertyIndex ] = options[ attribute ]; + } + } + + options = options || {}; + pattern = pattern.split( ";" ); + + positivePattern = pattern[ 0 ]; + + negativePattern = pattern[ 1 ] || "-" + positivePattern; + negativeProperties = numberPatternProperties( negativePattern ); + negativePrefix = negativeProperties[ 0 ]; + negativeSuffix = negativeProperties[ 10 ]; + + // Have runtime code to refer to numberRound() instead of including it explicitly. + roundFn = numberRound( options.round ); + roundFn.generatorString = function() { + return "numberRound(" + ( options.round ? "\"" + options.round + "\"" : "" ) + ")"; + }; + + properties = numberPatternProperties( positivePattern ).concat([ + positivePattern, + negativePrefix + positivePattern + negativeSuffix, + negativePrefix, + negativeSuffix, + roundFn, + numberSymbol( "infinity", cldr ), + numberSymbol( "nan", cldr ), + numberSymbolMap( cldr ), + numberNumberingSystemDigitsMap( cldr ) + ]); + + if ( options.compact ) { + + // The compact digits number pattern is always `0+`, so override the following properties. + // Note: minimumIntegerDigits would actually range from `0` to `000` based on the scale of + // the value to be formatted, though we're always using 1 as a simplification, because the + // number won't be zero-padded since we chose the right format based on the scale, i.e., + // we'd never see something like `003M` anyway. + properties[ 2 ] = 1; // minimumIntegerDigits + properties[ 3 ] = 0; // minimumFractionDigits + properties[ 4 ] = 0; // maximumFractionDigits + properties[ 5 ] = // minimumSignificantDigits & + properties[ 6 ] = undefined; // maximumSignificantDigits + + properties[ 20 ] = numberCompact( options.compact, cldr ); + } + + getOptions( "minimumIntegerDigits", 2 ); + getOptions( "minimumFractionDigits", 3 ); + getOptions( "maximumFractionDigits", 4 ); + getOptions( "minimumSignificantDigits", 5 ); + getOptions( "maximumSignificantDigits", 6 ); + + // Grouping separators + if ( options.useGrouping === false ) { + properties[ 8 ] = null; + } + + // Normalize number of digits if only one of either minimumFractionDigits or + // maximumFractionDigits is passed in as an option + if ( "minimumFractionDigits" in options && !( "maximumFractionDigits" in options ) ) { + + // maximumFractionDigits = Math.max( minimumFractionDigits, maximumFractionDigits ); + properties[ 4 ] = Math.max( properties[ 3 ], properties[ 4 ] ); + } else if ( !( "minimumFractionDigits" in options ) && + "maximumFractionDigits" in options ) { + + // minimumFractionDigits = Math.min( minimumFractionDigits, maximumFractionDigits ); + properties[ 3 ] = Math.min( properties[ 3 ], properties[ 4 ] ); + } + + // Return: + // 0-10: see number/pattern-properties. + // 11: @positivePattern [String] Positive pattern. + // 12: @negativePattern [String] Negative pattern. + // 13: @negativePrefix [String] Negative prefix. + // 14: @negativeSuffix [String] Negative suffix. + // 15: @round [Function] Round function. + // 16: @infinitySymbol [String] Infinity symbol. + // 17: @nanSymbol [String] NaN symbol. + // 18: @symbolMap [Object] A bunch of other symbols. + // 19: @nuDigitsMap [Array] Digits map if numbering system is different than `latn`. + // 20: @compactMap [Object] Map of per-digit-count format patterns for specified compact mode. + return properties; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format.js new file mode 100644 index 000000000..6e7e06c2a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format.js @@ -0,0 +1,220 @@ +define([ + "./compact-pattern-re", + "./format/grouping-separator", + "./format/integer-fraction-digits", + "./format/significant-digits", + "./symbol/name", + "../common/parts/push", + "../util/remove-literal-quotes" +], function( numberCompactPatternRe, numberFormatGroupingSeparator, + numberFormatIntegerFractionDigits, numberFormatSignificantDigits, + numberSymbolName, partsPush, removeLiteralQuotes ) { + +/** + * format( number, properties ) + * + * @number [Number]. + * + * @properties [Object] Output of number/format-properties. + * + * Return the formatted number. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +return function( number, properties, pluralGenerator ) { + var aux, compactMap, infinitySymbol, maximumFractionDigits, maximumSignificantDigits, + minimumFractionDigits, minimumIntegerDigits, minimumSignificantDigits, nanSymbol, + nuDigitsMap, prefix, primaryGroupingSize, pattern, round, roundIncrement, + secondaryGroupingSize, stringToParts, suffix, symbolMap; + + minimumIntegerDigits = properties[ 2 ]; + minimumFractionDigits = properties[ 3 ]; + maximumFractionDigits = properties[ 4 ]; + minimumSignificantDigits = properties[ 5 ]; + maximumSignificantDigits = properties[ 6 ]; + roundIncrement = properties[ 7 ]; + primaryGroupingSize = properties[ 8 ]; + secondaryGroupingSize = properties[ 9 ]; + round = properties[ 15 ]; + infinitySymbol = properties[ 16 ]; + nanSymbol = properties[ 17 ]; + symbolMap = properties[ 18 ]; + nuDigitsMap = properties[ 19 ]; + compactMap = properties[ 20 ]; + + // NaN + if ( isNaN( number ) ) { + return [ { type: "nan", value: nanSymbol } ]; + } + + if ( number < 0 ) { + pattern = properties[ 12 ]; + prefix = properties[ 13 ]; + suffix = properties[ 14 ]; + } else { + pattern = properties[ 11 ]; + prefix = properties[ 0 ]; + suffix = properties[ 10 ]; + } + + // For prefix, suffix, and number parts. + stringToParts = function( string ) { + var numberType = "integer", + parts = []; + + // TODO Move the tokenization of all parts that don't depend on number into + // format-properties. + string.replace( /('([^']|'')+'|'')|./g, function( character, literal ) { + + // Literals + if ( literal ) { + partsPush( parts, "literal", removeLiteralQuotes( literal ) ); + return; + } + + // Currency symbol + if ( character === "\u00A4" ) { + partsPush( parts, "currency", character ); + return; + } + + // Symbols + character = character.replace( /[.,\-+E%\u2030]/, function( symbol ) { + if ( symbol === "." ) { + numberType = "fraction"; + } + partsPush( parts, numberSymbolName[ symbol ], symbolMap[ symbol ] ); + + // "Erase" handled character. + return ""; + }); + + // Number + character = character.replace( /[0-9]/, function( digit ) { + + // Numbering system + if ( nuDigitsMap ) { + digit = nuDigitsMap[ +digit ]; + } + partsPush( parts, numberType, digit ); + + // "Erase" handled character. + return ""; + }); + + // Etc + character.replace( /./, function( etc ) { + partsPush( parts, "literal", etc ); + }); + }); + return parts; + }; + + prefix = stringToParts( prefix ); + suffix = stringToParts( suffix ); + + // Infinity + if ( !isFinite( number ) ) { + return prefix.concat( + { type: "infinity", value: infinitySymbol }, + suffix + ); + } + + // Percent + if ( pattern.indexOf( "%" ) !== -1 ) { + number *= 100; + + // Per mille + } else if ( pattern.indexOf( "\u2030" ) !== -1 ) { + number *= 1000; + } + + var compactPattern, compactDigits, compactProperties, divisor, numberExponent, pluralForm; + + // Compact mode: initial number digit processing + if ( compactMap ) { + numberExponent = Math.abs( Math.floor( number ) ).toString().length - 1; + numberExponent = Math.min( numberExponent, compactMap.maxExponent ); + + // Use default plural form to perform initial decimal shift + if ( numberExponent >= 3 ) { + compactPattern = compactMap[ numberExponent ] && compactMap[ numberExponent ].other; + } + + if ( compactPattern === "0" ) { + compactPattern = null; + } else if ( compactPattern ) { + compactDigits = compactPattern.split( "0" ).length - 1; + divisor = numberExponent - ( compactDigits - 1 ); + number = number / Math.pow( 10, divisor ); + } + } + + // Significant digit format + if ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) ) { + number = numberFormatSignificantDigits( number, minimumSignificantDigits, + maximumSignificantDigits, round ); + + // Integer and fractional format + } else { + number = numberFormatIntegerFractionDigits( number, minimumIntegerDigits, + minimumFractionDigits, maximumFractionDigits, round, roundIncrement ); + } + + // Compact mode: apply formatting + if ( compactMap && compactPattern ) { + + // Get plural form after possible roundings + pluralForm = pluralGenerator ? pluralGenerator( +number ) : "other"; + + compactPattern = compactMap[ numberExponent ][ pluralForm ] || compactPattern; + compactProperties = compactPattern.match( numberCompactPatternRe ); + + // TODO Move the tokenization of all parts that don't depend on number into + // format-properties. + aux = function( string ) { + var parts = []; + string.replace( /(\s+)|([^\s0]+)/g, function( _garbage, space, compact ) { + + // Literals + if ( space ) { + partsPush( parts, "literal", space ); + return; + } + + // Compact value + if ( compact ) { + partsPush( parts, "compact", compact ); + return; + } + }); + return parts; + }; + + // update prefix/suffix with compact prefix/suffix + prefix = prefix.concat( aux( compactProperties[ 1 ] ) ); + suffix = aux( compactProperties[ 3 ] ).concat( suffix ); + } + + // Remove the possible number minus sign + number = number.replace( /^-/, "" ); + + // Grouping separators + if ( primaryGroupingSize ) { + number = numberFormatGroupingSeparator( number, primaryGroupingSize, + secondaryGroupingSize ); + } + + // Scientific notation + // TODO implement here + + // Padding/'([^']|'')+'|''|[.,\-+E%\u2030]/g + // TODO implement here + + return prefix.concat( + stringToParts( number ), + suffix + ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format/grouping-separator.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format/grouping-separator.js new file mode 100644 index 000000000..0cb013a28 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format/grouping-separator.js @@ -0,0 +1,38 @@ +define(function() { + +/** + * goupingSeparator( number, primaryGroupingSize, secondaryGroupingSize ) + * + * @number [Number]. + * + * @primaryGroupingSize [Number] + * + * @secondaryGroupingSize [Number] + * + * Return the formatted number with group separator. + */ +return function( number, primaryGroupingSize, secondaryGroupingSize ) { + var index, + currentGroupingSize = primaryGroupingSize, + ret = "", + sep = ",", + switchToSecondary = secondaryGroupingSize ? true : false; + + number = String( number ).split( "." ); + index = number[ 0 ].length; + + while ( index > currentGroupingSize ) { + ret = number[ 0 ].slice( index - currentGroupingSize, index ) + + ( ret.length ? sep : "" ) + ret; + index -= currentGroupingSize; + if ( switchToSecondary ) { + currentGroupingSize = secondaryGroupingSize; + switchToSecondary = false; + } + } + + number[ 0 ] = number[ 0 ].slice( 0, index ) + ( ret.length ? sep : "" ) + ret; + return number.join( "." ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format/integer-fraction-digits.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format/integer-fraction-digits.js new file mode 100644 index 000000000..7650117c7 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format/integer-fraction-digits.js @@ -0,0 +1,76 @@ +define([ + "../../util/string/pad" +], function( stringPad ) { + +/** + * integerFractionDigits( number, minimumIntegerDigits, minimumFractionDigits, + * maximumFractionDigits, round, roundIncrement ) + * + * @number [Number] + * + * @minimumIntegerDigits [Number] + * + * @minimumFractionDigits [Number] + * + * @maximumFractionDigits [Number] + * + * @round [Function] + * + * @roundIncrement [Function] + * + * Return the formatted integer and fraction digits. + */ +return function( number, minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, round, + roundIncrement ) { + + // Fraction + if ( maximumFractionDigits ) { + + // Rounding + if ( roundIncrement ) { + number = round( number, roundIncrement ); + + // Maximum fraction digits + } else { + number = round( number, { exponent: -maximumFractionDigits } ); + } + + } else { + number = round( number ); + } + + number = String( number ); + + // Maximum integer digits (post string phase) + if ( maximumFractionDigits && /e-/.test( number ) ) { + + // Use toFixed( maximumFractionDigits ) to make sure small numbers like 1e-7 are + // displayed using plain digits instead of scientific notation. + // 1: Remove leading decimal zeros. + // 2: Remove leading decimal separator. + // Note: String() is still preferred so it doesn't mess up with a number precision + // unnecessarily, e.g., (123456789.123).toFixed(10) === "123456789.1229999959", + // String(123456789.123) === "123456789.123". + number = ( +number ).toFixed( maximumFractionDigits ) + .replace( /0+$/, "" ) /* 1 */ + .replace( /\.$/, "" ); /* 2 */ + } + + // Minimum fraction digits (post string phase) + if ( minimumFractionDigits ) { + number = number.split( "." ); + number[ 1 ] = stringPad( number[ 1 ] || "", minimumFractionDigits, true ); + number = number.join( "." ); + } + + // Minimum integer digits + if ( minimumIntegerDigits ) { + number = number.split( "." ); + number[ 0 ] = stringPad( number[ 0 ], minimumIntegerDigits ); + number = number.join( "." ); + } + + return number; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format/significant-digits.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format/significant-digits.js new file mode 100644 index 000000000..343e23886 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/format/significant-digits.js @@ -0,0 +1,53 @@ +define([ + "../../common/create-error/unsupported-feature", + "../../util/number/to-precision", + "../../util/string/pad" +], function( createErrorUnsupportedFeature, numberToPrecision, stringPad ) { + +/** + * toPrecision( number, minimumSignificantDigits, maximumSignificantDigits, round ) + * + * @number [Number] + * + * @minimumSignificantDigits [Number] + * + * @maximumSignificantDigits [Number] + * + * @round [Function] + * + * Return the formatted significant digits number. + */ +return function( number, minimumSignificantDigits, maximumSignificantDigits, round ) { + var atMinimum, atMaximum; + + // Sanity check. + if ( minimumSignificantDigits > maximumSignificantDigits ) { + maximumSignificantDigits = minimumSignificantDigits; + } + + atMinimum = numberToPrecision( number, minimumSignificantDigits, round ); + atMaximum = numberToPrecision( number, maximumSignificantDigits, round ); + + // Use atMaximum only if it has more significant digits than atMinimum. + number = +atMinimum === +atMaximum ? atMinimum : atMaximum; + + // Expand integer numbers, eg. 123e5 to 12300. + number = ( +number ).toString( 10 ); + + if ( ( /e/ ).test( number ) ) { + throw createErrorUnsupportedFeature({ + feature: "integers out of (1e21, 1e-7)" + }); + } + + // Add trailing zeros if necessary. + if ( minimumSignificantDigits - number.replace( /^0+|\./g, "" ).length > 0 ) { + number = number.split( "." ); + number[ 1 ] = stringPad( number[ 1 ] || "", minimumSignificantDigits - number[ 0 ].replace( /^0+/, "" ).length, true ); + number = number.join( "." ); + } + + return number; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/formatter-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/formatter-fn.js new file mode 100644 index 000000000..0b16ef704 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/formatter-fn.js @@ -0,0 +1,11 @@ +define([ + "../common/parts/join" +], function( partsJoin ) { + +return function( numberToPartsFormatter ) { + return function numberFormatter( value ) { + return partsJoin( numberToPartsFormatter( value )); + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/numbering-system-digits-map.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/numbering-system-digits-map.js new file mode 100644 index 000000000..cfdd1ef03 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/numbering-system-digits-map.js @@ -0,0 +1,30 @@ +define([ + "./numbering-system", + "../common/create-error/unsupported-feature" +], function( numberNumberingSystem, createErrorUnsupportedFeature ) { + +/** + * nuMap( cldr ) + * + * @cldr [Cldr instance]. + * + * Return digits map if numbering system is different than `latn`. + */ +return function( cldr ) { + var aux, + nu = numberNumberingSystem( cldr ); + + if ( nu === "latn" ) { + return; + } + + aux = cldr.supplemental([ "numberingSystems", nu ]); + + if ( aux._type !== "numeric" ) { + throw createErrorUnsupportedFeature( "`" + aux._type + "` numbering system" ); + } + + return aux._digits; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/numbering-system.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/numbering-system.js new file mode 100644 index 000000000..020a3c2dc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/numbering-system.js @@ -0,0 +1,32 @@ +define(function() { + +/** + * NumberingSystem( cldr ) + * + * - http://www.unicode.org/reports/tr35/tr35-numbers.html#otherNumberingSystems + * - http://cldr.unicode.org/index/bcp47-extension + * - http://www.unicode.org/reports/tr35/#u_Extension + */ +return function( cldr ) { + var nu = cldr.attributes[ "u-nu" ]; + + if ( nu ) { + if ( nu === "traditio" ) { + nu = "traditional"; + } + if ( [ "native", "traditional", "finance" ].indexOf( nu ) !== -1 ) { + + // Unicode locale extension `u-nu` is set using either (native, traditional or + // finance). So, lookup the respective locale's numberingSystem and return it. + return cldr.main([ "numbers/otherNumberingSystems", nu ]); + } + + // Unicode locale extension `u-nu` is set with an explicit numberingSystem. Return it. + return nu; + } + + // Return the default numberingSystem. + return cldr.main( "numbers/defaultNumberingSystem" ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/parse-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/parse-properties.js new file mode 100644 index 000000000..c8a52acfc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/parse-properties.js @@ -0,0 +1,154 @@ +define([ + "./format-properties", + "./symbol/inverted-map", + "../util/loose-matching", + "../util/object/map", + "../util/regexp/escape", + "../util/remove-literal-quotes" +], function( numberFormatProperties, numberSymbolInvertedMap, looseMatching, objectMap, + regexpEscape, removeLiteralQuotes ) { + +/** + * parseProperties( pattern, cldr ) + * + * @pattern [String] raw pattern for numbers. + * + * @cldr [Cldr instance]. + * + * Return parser properties, used to feed parser function. + * + * TODO: + * - Scientific_notation; + * - Padding; + */ +return function( pattern, cldr, options ) { + var aux, decimalSymbolRe, digitsRe, groupingSeparatorRe, infinitySymbol, invertedNuDigitsMap, + invertedSymbolMap, maximumFractionDigits, maximumSignificantDigits, + minimumSignificantDigits, nanSymbol, negativePrefix, negativeSuffix, nuDigitsMap, + numberTokenizer, prefix, primaryGroupingSize, secondaryGroupingSize, suffix, symbolMap, + formatProperties = numberFormatProperties( pattern, cldr, options ); + + prefix = looseMatching( formatProperties[ 0 ] ); + maximumFractionDigits = formatProperties[ 4 ]; + minimumSignificantDigits = formatProperties[ 5 ]; + maximumSignificantDigits = formatProperties[ 6 ]; + primaryGroupingSize = formatProperties[ 8 ]; + secondaryGroupingSize = formatProperties[ 9 ]; + suffix = looseMatching( formatProperties[ 10 ] ); + negativePrefix = looseMatching( formatProperties[ 13 ] ); + negativeSuffix = looseMatching( formatProperties[ 14 ] ); + infinitySymbol = looseMatching( formatProperties[ 16 ] ); + nanSymbol = looseMatching( formatProperties[ 17 ] ); + symbolMap = objectMap( formatProperties[ 18 ], function( pair ) { + return [ pair[ 0 ], looseMatching( pair[ 1 ] ) ]; + }); + nuDigitsMap = formatProperties[ 19 ]; + + invertedSymbolMap = objectMap( numberSymbolInvertedMap( cldr ), function( pair ) { + return [ looseMatching( pair[ 0 ] ), pair[ 1 ] ]; + }); + + digitsRe = nuDigitsMap ? "[" + nuDigitsMap + "]" : "\\d"; + groupingSeparatorRe = regexpEscape( symbolMap[ "," ] ); + decimalSymbolRe = regexpEscape( symbolMap[ "." ] ); + + if ( nuDigitsMap ) { + invertedNuDigitsMap = nuDigitsMap.split( "" ).reduce(function( object, localizedDigit, i ) { + object[ localizedDigit ] = String( i ); + return object; + }, {} ); + } + + aux = [ prefix, suffix, negativePrefix, negativeSuffix ].map(function( value ) { + return value.replace( /('([^']|'')+'|'')|./g, function( character, literal ) { + + // Literals + if ( literal ) { + return removeLiteralQuotes( literal ); + } + + // Symbols + character = character.replace( /[\-+E%\u2030]/, function( symbol ) { + return symbolMap[ symbol ]; + }); + + return character; + }); + }); + + prefix = aux[ 0 ]; + suffix = aux[ 1 ]; + negativePrefix = aux[ 2 ]; + negativeSuffix = aux[ 3 ]; + + // Number + // + // number_re = integer fraction? + // + // integer = digits | digits_using_grouping_separators + // + // fraction = regexp((.\d+)?) + // + // digits = regexp(\d+) + // + // digits_w_grouping_separators = digits_w_1_grouping_separators | + // digits_w_2_grouping_separators + // + // digits_w_1_grouping_separators = regexp(\d{1,3}(,\d{3})+) + // + // digits_w_2_grouping_separators = regexp(\d{1,2}((,\d{2})*(,\d{3}))) + + // Integer part + numberTokenizer = digitsRe + "+"; + + // Grouping separators + if ( primaryGroupingSize ) { + if ( secondaryGroupingSize ) { + aux = digitsRe + "{1," + secondaryGroupingSize + "}((" + groupingSeparatorRe + + digitsRe + "{" + secondaryGroupingSize + "})*(" + groupingSeparatorRe + + digitsRe + "{" + primaryGroupingSize + "}))"; + } else { + aux = digitsRe + "{1," + primaryGroupingSize + "}(" + groupingSeparatorRe + + digitsRe + "{" + primaryGroupingSize + "})+"; + } + numberTokenizer = "(" + aux + "|" + numberTokenizer + ")"; + } + + // Fraction part? Only included if 1 or 2. + // 1: Using significant digit format. + // 2: Using integer and fractional format && it has a maximumFractionDigits. + if ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) || /* 1 */ + maximumFractionDigits /* 2 */ ) { + + // 1: Handle trailing decimal separator, e.g., `"1." => `1``. + aux = decimalSymbolRe + digitsRe + "+"; + numberTokenizer = numberTokenizer + "(" + aux + "|" + decimalSymbolRe /* 1 */ + ")?" + + + // Handle non-padded decimals, e.g., `".12"` => `0.12` by making the integer part + // optional. + "|(" + numberTokenizer + ")?" + aux; + + numberTokenizer = "(" + numberTokenizer + ")"; + } + + // 0: @invertedSymbolMap [Object] Inverted symbol map. + // 1: @invertedNuDigitsMap [Object] Inverted digits map if numbering system is different than + // `latn`. + // 2: @tokenizer [Object] Tokenizer map, used by parser to consume input. + return [ + invertedSymbolMap, + invertedNuDigitsMap, + { + infinity: new RegExp( "^" + regexpEscape( infinitySymbol ) ), + nan: new RegExp( "^" + regexpEscape( nanSymbol ) ), + negativePrefix: new RegExp( "^" + regexpEscape( negativePrefix ) ), + negativeSuffix: new RegExp( "^" + regexpEscape( negativeSuffix ) ), + number: new RegExp( "^" + numberTokenizer ), + prefix: new RegExp( "^" + regexpEscape( prefix ) ), + suffix: new RegExp( "^" + regexpEscape( suffix ) ) + } + ]; + +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/parse.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/parse.js new file mode 100644 index 000000000..ce3d5bb34 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/parse.js @@ -0,0 +1,132 @@ +define([ + "../util/loose-matching" +], function( looseMatching ) { + +/** + * parse( value, properties ) + * + * @value [String]. + * + * @properties [Object] Parser properties is a reduced pre-processed cldr + * data set returned by numberParserProperties(). + * + * Return the parsed Number (including Infinity) or NaN when value is invalid. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +return function( value, properties ) { + var grammar, invertedNuDigitsMap, invertedSymbolMap, negative, number, prefix, prefixNSuffix, + suffix, tokenizer, valid; + + // Grammar: + // - Value <= NaN | PositiveNumber | NegativeNumber + // - PositiveNumber <= PositivePrefix NumberOrInf PositiveSufix + // - NegativeNumber <= NegativePrefix NumberOrInf + // - NumberOrInf <= Number | Inf + grammar = [ + [ "nan" ], + [ "prefix", "infinity", "suffix" ], + [ "prefix", "number", "suffix" ], + [ "negativePrefix", "infinity", "negativeSuffix" ], + [ "negativePrefix", "number", "negativeSuffix" ] + ]; + + invertedSymbolMap = properties[ 0 ]; + invertedNuDigitsMap = properties[ 1 ] || {}; + tokenizer = properties[ 2 ]; + + value = looseMatching( value ); + + function parse( type ) { + return function( lexeme ) { + + // Reverse localized symbols and numbering system. + lexeme = lexeme.split( "" ).map(function( character ) { + return invertedSymbolMap[ character ] || + invertedNuDigitsMap[ character ] || + character; + }).join( "" ); + + switch ( type ) { + case "infinity": + number = Infinity; + break; + + case "nan": + number = NaN; + break; + + case "number": + + // Remove grouping separators. + lexeme = lexeme.replace( /,/g, "" ); + + number = +lexeme; + break; + + case "prefix": + case "negativePrefix": + prefix = lexeme; + break; + + case "suffix": + suffix = lexeme; + break; + + case "negativeSuffix": + suffix = lexeme; + negative = true; + break; + + // This should never be reached. + default: + throw new Error( "Internal error" ); + } + return ""; + }; + } + + function tokenizeNParse( _value, grammar ) { + return grammar.some(function( statement ) { + var value = _value; + + // The whole grammar statement should be used (i.e., .every() return true) and value be + // entirely consumed (i.e., !value.length). + return statement.every(function( type ) { + if ( value.match( tokenizer[ type ] ) === null ) { + return false; + } + + // Consume and parse it. + value = value.replace( tokenizer[ type ], parse( type ) ); + return true; + }) && !value.length; + }); + } + + valid = tokenizeNParse( value, grammar ); + + // NaN + if ( !valid || isNaN( number ) ) { + return NaN; + } + + prefixNSuffix = "" + prefix + suffix; + + // Percent + if ( prefixNSuffix.indexOf( "%" ) !== -1 ) { + number /= 100; + + // Per mille + } else if ( prefixNSuffix.indexOf( "\u2030" ) !== -1 ) { + number /= 1000; + } + + // Negative number + if ( negative ) { + number *= -1; + } + + return number; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/parser-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/parser-fn.js new file mode 100644 index 000000000..c626e706b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/parser-fn.js @@ -0,0 +1,17 @@ +define([ + "../common/validate/parameter-presence", + "../common/validate/parameter-type/string", + "./parse" +], function( validateParameterPresence, validateParameterTypeString, numberParse ) { + +return function( properties ) { + return function numberParser( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return numberParse( value, properties ); + }; + +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/pattern-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/pattern-properties.js new file mode 100644 index 000000000..a501a659e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/pattern-properties.js @@ -0,0 +1,136 @@ +define([ + "./pattern-re", + "../common/create-error/unsupported-feature" +], function( numberPatternRe, createErrorUnsupportedFeature ) { + +/** + * format( number, pattern ) + * + * @number [Number]. + * + * @pattern [String] raw pattern for numbers. + * + * Return the formatted number. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +return function( pattern ) { + var aux1, aux2, fractionPattern, integerFractionOrSignificantPattern, integerPattern, + maximumFractionDigits, maximumSignificantDigits, minimumFractionDigits, + minimumIntegerDigits, minimumSignificantDigits, padding, prefix, primaryGroupingSize, + roundIncrement, scientificNotation, secondaryGroupingSize, significantPattern, suffix; + + pattern = pattern.match( numberPatternRe ); + if ( !pattern ) { + throw new Error( "Invalid pattern: " + pattern ); + } + + prefix = pattern[ 1 ]; + padding = pattern[ 4 ]; + integerFractionOrSignificantPattern = pattern[ 5 ]; + significantPattern = pattern[ 9 ]; + scientificNotation = pattern[ 10 ]; + suffix = pattern[ 11 ]; + + // Significant digit format + if ( significantPattern ) { + significantPattern.replace( /(@+)(#*)/, function( _match, minimumSignificantDigitsMatch, maximumSignificantDigitsMatch ) { + minimumSignificantDigits = minimumSignificantDigitsMatch.length; + maximumSignificantDigits = minimumSignificantDigits + + maximumSignificantDigitsMatch.length; + }); + + // Integer and fractional format + } else { + fractionPattern = pattern[ 8 ]; + integerPattern = pattern[ 7 ]; + + if ( fractionPattern ) { + + // Minimum fraction digits, and rounding. + fractionPattern.replace( /[0-9]+/, function( match ) { + minimumFractionDigits = match; + }); + if ( minimumFractionDigits ) { + roundIncrement = +( "0." + minimumFractionDigits ); + minimumFractionDigits = minimumFractionDigits.length; + } else { + minimumFractionDigits = 0; + } + + // Maximum fraction digits + // 1: ignore decimal character + maximumFractionDigits = fractionPattern.length - 1; /* 1 */ + } else { + minimumFractionDigits = 0; + maximumFractionDigits = 0; + } + + // Minimum integer digits + integerPattern.replace( /0+$/, function( match ) { + minimumIntegerDigits = match.length; + }); + } + + // Scientific notation + if ( scientificNotation ) { + throw createErrorUnsupportedFeature({ + feature: "scientific notation (not implemented)" + }); + } + + // Padding + if ( padding ) { + throw createErrorUnsupportedFeature({ + feature: "padding (not implemented)" + }); + } + + // Grouping + if ( ( aux1 = integerFractionOrSignificantPattern.lastIndexOf( "," ) ) !== -1 ) { + + // Primary grouping size is the interval between the last group separator and the end of + // the integer (or the end of the significant pattern). + aux2 = integerFractionOrSignificantPattern.split( "." )[ 0 ]; + primaryGroupingSize = aux2.length - aux1 - 1; + + // Secondary grouping size is the interval between the last two group separators. + if ( ( aux2 = integerFractionOrSignificantPattern.lastIndexOf( ",", aux1 - 1 ) ) !== -1 ) { + secondaryGroupingSize = aux1 - 1 - aux2; + } + } + + // Return: + // 0: @prefix String + // 1: @padding Array [ , ] TODO + // 2: @minimumIntegerDigits non-negative integer Number value indicating the minimum integer + // digits to be used. Numbers will be padded with leading zeroes if necessary. + // 3: @minimumFractionDigits and + // 4: @maximumFractionDigits are non-negative integer Number values indicating the minimum and + // maximum fraction digits to be used. Numbers will be rounded or padded with trailing + // zeroes if necessary. + // 5: @minimumSignificantDigits and + // 6: @maximumSignificantDigits are positive integer Number values indicating the minimum and + // maximum fraction digits to be shown. Either none or both of these properties are + // present; if they are, they override minimum and maximum integer and fraction digits + // – the formatter uses however many integer and fraction digits are required to display + // the specified number of significant digits. + // 7: @roundIncrement Decimal round increment or null + // 8: @primaryGroupingSize + // 9: @secondaryGroupingSize + // 10: @suffix String + return [ + prefix, + padding, + minimumIntegerDigits, + minimumFractionDigits, + maximumFractionDigits, + minimumSignificantDigits, + maximumSignificantDigits, + roundIncrement, + primaryGroupingSize, + secondaryGroupingSize, + suffix + ]; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/pattern-re.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/pattern-re.js new file mode 100644 index 000000000..2d2b206b1 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/pattern-re.js @@ -0,0 +1,50 @@ +define(function() { + +/** + * EBNF representation: + * + * number_pattern_re = prefix? + * padding? + * (integer_fraction_pattern | significant_pattern) + * scientific_notation? + * suffix? + * + * prefix = non_number_stuff + * + * padding = "*" regexp(.) + * + * integer_fraction_pattern = integer_pattern + * fraction_pattern? + * + * integer_pattern = regexp([#,]*[0,]*0+) + * + * fraction_pattern = "." regexp(0*[0-9]*#*) + * + * significant_pattern = regexp([#,]*@+#*) + * + * scientific_notation = regexp(E\+?0+) + * + * suffix = non_number_stuff + * + * non_number_stuff = regexp(('[^']+'|''|[^*#@0,.E])*) + * + * + * Regexp groups: + * + * 0: number_pattern_re + * 1: prefix + * 2: - + * 3: - + * 4: padding + * 5: (integer_fraction_pattern | significant_pattern) + * 6: integer_fraction_pattern + * 7: integer_pattern + * 8: fraction_pattern + * 9: significant_pattern + * 10: scientific_notation + * 11: suffix + * 12: - + */ +return ( /^(('([^']|'')*'|[^*#@0,.E])*)(\*.)?((([#,]*[0,]*0+)(\.0*[0-9]*#*)?)|([#,]*@+#*))(E\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/ ); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/pattern.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/pattern.js new file mode 100644 index 000000000..fceb3e525 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/pattern.js @@ -0,0 +1,24 @@ +define([ + "./numbering-system" +], function( numberNumberingSystem ) { + +/** + * Pattern( style ) + * + * @style [String] "decimal" (default) or "percent". + * + * @cldr [Cldr instance]. + */ +return function( style, cldr ) { + if ( style !== "decimal" && style !== "percent" ) { + throw new Error( "Invalid style" ); + } + + return cldr.main([ + "numbers", + style + "Formats-numberSystem-" + numberNumberingSystem( cldr ), + "standard" + ]); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol.js new file mode 100644 index 000000000..431d95edb --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol.js @@ -0,0 +1,21 @@ +define([ + "./numbering-system" +], function( numberNumberingSystem ) { + +/** + * Symbol( name, cldr ) + * + * @name [String] Symbol name. + * + * @cldr [Cldr instance]. + * + * Return the localized symbol given its name. + */ +return function( name, cldr ) { + return cldr.main([ + "numbers/symbols-numberSystem-" + numberNumberingSystem( cldr ), + name + ]); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol/inverted-map.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol/inverted-map.js new file mode 100644 index 000000000..76101ae72 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol/inverted-map.js @@ -0,0 +1,29 @@ +define([ + "./name", + "../symbol" +], function( numberSymbolName, numberSymbol ) { + +/** + * symbolMap( cldr ) + * + * @cldr [Cldr instance]. + * + * Return the (localized symbol, pattern symbol) key value pair, eg. { + * "٫": ".", + * "٬": ",", + * "٪": "%", + * ... + * }; + */ +return function( cldr ) { + var symbol, + symbolMap = {}; + + for ( symbol in numberSymbolName ) { + symbolMap[ numberSymbol( numberSymbolName[ symbol ], cldr ) ] = symbol; + } + + return symbolMap; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol/map.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol/map.js new file mode 100644 index 000000000..4d94bd578 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol/map.js @@ -0,0 +1,29 @@ +define([ + "./name", + "../symbol" +], function( numberSymbolName, numberSymbol ) { + +/** + * symbolMap( cldr ) + * + * @cldr [Cldr instance]. + * + * Return the (localized symbol, pattern symbol) key value pair, eg. { + * ".": "٫", + * ",": "٬", + * "%": "٪", + * ... + * }; + */ +return function( cldr ) { + var symbol, + symbolMap = {}; + + for ( symbol in numberSymbolName ) { + symbolMap[ symbol ] = numberSymbol( numberSymbolName[ symbol ], cldr ); + } + + return symbolMap; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol/name.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol/name.js new file mode 100644 index 000000000..2efd2a237 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/symbol/name.js @@ -0,0 +1,13 @@ +define(function() { + +return { + ".": "decimal", + ",": "group", + "%": "percentSign", + "+": "plusSign", + "-": "minusSign", + "E": "exponential", + "\u2030": "perMille" +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/to-parts-formatter-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/to-parts-formatter-fn.js new file mode 100644 index 000000000..b366cacb3 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/number/to-parts-formatter-fn.js @@ -0,0 +1,16 @@ +define([ + "../common/validate/parameter-presence", + "../common/validate/parameter-type/number", + "./format" +], function( validateParameterPresence, validateParameterTypeNumber, numberFormat ) { + +return function( properties, pluralGenerator ) { + return function numberToPartsFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return numberFormat( value, properties, pluralGenerator ); + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/plural-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/plural-runtime.js new file mode 100644 index 000000000..849d95dd8 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/plural-runtime.js @@ -0,0 +1,28 @@ +define([ + "./common/runtime-key", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/number", + "./core-runtime", + "./plural/generator-fn" +], function( runtimeKey, validateParameterPresence, validateParameterTypeNumber, Globalize, + pluralGeneratorFn ) { + +Globalize._pluralGeneratorFn = pluralGeneratorFn; +Globalize._validateParameterTypeNumber = validateParameterTypeNumber; + +Globalize.plural = +Globalize.prototype.plural = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + return this.pluralGenerator( options )( value ); +}; + +Globalize.pluralGenerator = +Globalize.prototype.pluralGenerator = function( options ) { + options = options || {}; + return Globalize[ runtimeKey( "pluralGenerator", this._locale, [ options ] ) ]; +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/plural.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/plural.js new file mode 100644 index 000000000..183b7d1be --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/plural.js @@ -0,0 +1,90 @@ +define([ + "cldr", + "make-plural", + "./common/runtime-bind", + "./common/validate/cldr", + "./common/validate/default-locale", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/number", + "./common/validate/parameter-type/plain-object", + "./common/validate/parameter-type/plural-type", + "./core", + "./plural/generator-fn", + + "cldr/event", + "cldr/supplemental" +], function( _Cldr, MakePlural, runtimeBind, validateCldr, validateDefaultLocale, + validateParameterPresence, validateParameterTypeNumber, + validateParameterTypePlainObject, validateParameterTypePluralType, Globalize, + pluralGeneratorFn ) { + +/** + * .plural( value ) + * + * @value [Number] + * + * Return the corresponding form (zero | one | two | few | many | other) of a + * value given locale. + */ +Globalize.plural = +Globalize.prototype.plural = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + return this.pluralGenerator( options )( value ); +}; + +/** + * .pluralGenerator( [options] ) + * + * Return a plural function (of the form below). + * + * fn( value ) + * + * @value [Number] + * + * Return the corresponding form (zero | one | two | few | many | other) of a value given the + * default/instance locale. + */ +Globalize.pluralGenerator = +Globalize.prototype.pluralGenerator = function( options ) { + var args, cldr, isOrdinal, plural, returnFn, type; + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + cldr = this.cldr; + + args = [ options ]; + type = options.type || "cardinal"; + + validateParameterTypePluralType( options.type, "options.type" ); + + validateDefaultLocale( cldr ); + + isOrdinal = type === "ordinal"; + + cldr.on( "get", validateCldr ); + try { + cldr.supplemental([ "plurals-type-" + type, "{language}" ]); + } finally { + cldr.off( "get", validateCldr ); + } + + MakePlural.rules = {}; + MakePlural.rules[ type ] = cldr.supplemental( "plurals-type-" + type ); + + plural = new MakePlural( cldr.attributes.language, { + "ordinals": isOrdinal, + "cardinals": !isOrdinal + }); + + returnFn = pluralGeneratorFn( plural ); + + runtimeBind( args, cldr, returnFn, [ plural ] ); + + return returnFn; +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/plural/generator-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/plural/generator-fn.js new file mode 100644 index 000000000..3c052396c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/plural/generator-fn.js @@ -0,0 +1,15 @@ +define([ + "../common/validate/parameter-presence", + "../common/validate/parameter-type/number" +], function( validateParameterPresence, validateParameterTypeNumber ) { + +return function( plural ) { + return function pluralGenerator( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return plural( value ); + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time-runtime.js new file mode 100644 index 000000000..eb4e25e13 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time-runtime.js @@ -0,0 +1,31 @@ +define([ + "./common/runtime-key", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/number", + "./core-runtime", + "./relative-time/formatter-fn", + + "./number-runtime", + "./plural-runtime" +], function( runtimeKey, validateParameterPresence, validateParameterTypeNumber, Globalize, + relativeTimeFormatterFn ) { + +Globalize._relativeTimeFormatterFn = relativeTimeFormatterFn; + +Globalize.formatRelativeTime = +Globalize.prototype.formatRelativeTime = function( value, unit, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.relativeTimeFormatter( unit, options )( value ); +}; + +Globalize.relativeTimeFormatter = +Globalize.prototype.relativeTimeFormatter = function( unit, options ) { + options = options || {}; + return Globalize[ runtimeKey( "relativeTimeFormatter", this._locale, [ unit, options ] ) ]; +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time.js new file mode 100644 index 000000000..a4d5f8314 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time.js @@ -0,0 +1,81 @@ +define([ + "./core", + "./common/runtime-bind", + "./common/validate/cldr", + "./common/validate/default-locale", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/number", + "./common/validate/parameter-type/string", + "./relative-time/formatter-fn", + "./relative-time/properties", + + "./number", + "./plural", + "cldr/event" +], function( Globalize, runtimeBind, validateCldr, validateDefaultLocale, validateParameterPresence, + validateParameterTypeNumber, validateParameterTypeString, relativeTimeFormatterFn, + relativeTimeProperties ) { + +/** + * .formatRelativeTime( value, unit [, options] ) + * + * @value [Number] The number of unit to format. + * + * @unit [String] see .relativeTimeFormatter() for details. + * + * @options [Object] see .relativeTimeFormatter() for details. + * + * Formats a relative time according to the given unit, options, and the default/instance locale. + */ +Globalize.formatRelativeTime = +Globalize.prototype.formatRelativeTime = function( value, unit, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.relativeTimeFormatter( unit, options )( value ); +}; + +/** + * .relativeTimeFormatter( unit [, options ]) + * + * @unit [String] String value indicating the unit to be formatted. eg. "day", "week", "month", etc. + * + * @options [Object] + * - form: [String] eg. "short" or "narrow". Or falsy for default long form. + * + * Returns a function that formats a relative time according to the given unit, options, and the + * default/instance locale. + */ +Globalize.relativeTimeFormatter = +Globalize.prototype.relativeTimeFormatter = function( unit, options ) { + var args, cldr, numberFormatter, pluralGenerator, properties, returnFn; + + validateParameterPresence( unit, "unit" ); + validateParameterTypeString( unit, "unit" ); + + cldr = this.cldr; + options = options || {}; + + args = [ unit, options ]; + + validateDefaultLocale( cldr ); + + cldr.on( "get", validateCldr ); + try { + properties = relativeTimeProperties( unit, cldr, options ); + } finally { + cldr.off( "get", validateCldr ); + } + numberFormatter = this.numberFormatter( options ); + pluralGenerator = this.pluralGenerator(); + + returnFn = relativeTimeFormatterFn( numberFormatter, pluralGenerator, properties ); + + runtimeBind( args, cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] ); + + return returnFn; +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time/format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time/format.js new file mode 100644 index 000000000..71b065cd4 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time/format.js @@ -0,0 +1,36 @@ +define([ + "../common/format-message" +], function( formatMessage ) { + +/** + * format( value, numberFormatter, pluralGenerator, properties ) + * + * @value [Number] The number to format + * + * @numberFormatter [String] A numberFormatter from Globalize.numberFormatter + * + * @pluralGenerator [String] A pluralGenerator from Globalize.pluralGenerator + * + * @properties [Object] containing relative time plural message. + * + * Format relative time. + */ +return function( value, numberFormatter, pluralGenerator, properties ) { + + var relativeTime, + message = properties[ "relative-type-" + value ]; + + if ( message ) { + return message; + } + + relativeTime = value <= 0 ? properties[ "relativeTime-type-past" ] : + properties[ "relativeTime-type-future" ]; + + value = Math.abs( value ); + + message = relativeTime[ "relativeTimePattern-count-" + pluralGenerator( value ) ]; + return formatMessage( message, [ numberFormatter( value ) ] ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time/formatter-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time/formatter-fn.js new file mode 100644 index 000000000..b2be713fe --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time/formatter-fn.js @@ -0,0 +1,17 @@ +define([ + "../common/validate/parameter-presence", + "../common/validate/parameter-type/number", + "./format" +], function( validateParameterPresence, validateParameterTypeNumber, relativeTimeFormat ) { + +return function( numberFormatter, pluralGenerator, properties ) { + return function relativeTimeFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return relativeTimeFormat( value, numberFormatter, pluralGenerator, properties ); + }; + +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time/properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time/properties.js new file mode 100644 index 000000000..346cd997b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/relative-time/properties.js @@ -0,0 +1,41 @@ +define(function() { + +/** + * properties( unit, cldr, options ) + * + * @unit [String] eg. "day", "week", "month", etc. + * + * @cldr [Cldr instance]. + * + * @options [Object] + * - form: [String] eg. "short" or "narrow". Or falsy for default long form. + * + * Return relative time properties. + */ +return function( unit, cldr, options ) { + + var form = options.form, + raw, properties, key, match; + + if ( form ) { + unit = unit + "-" + form; + } + + raw = cldr.main( [ "dates", "fields", unit ] ); + properties = { + "relativeTime-type-future": raw[ "relativeTime-type-future" ], + "relativeTime-type-past": raw[ "relativeTime-type-past" ] + }; + for ( key in raw ) { + if ( raw.hasOwnProperty( key ) ) { + match = /relative-type-(-?[0-9]+)/.exec( key ); + if ( match ) { + properties[ key ] = raw[ key ]; + } + } + } + + return properties; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit-runtime.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit-runtime.js new file mode 100644 index 000000000..8eb697232 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit-runtime.js @@ -0,0 +1,25 @@ +define([ + "./common/runtime-key", + "./core-runtime", + "./unit/formatter-fn", + + "./number-runtime", + "./plural-runtime" +], function( runtimeKey, Globalize, unitFormatterFn ) { + +Globalize._unitFormatterFn = unitFormatterFn; + +Globalize.formatUnit = +Globalize.prototype.formatUnit = function( value, unit, options ) { + return this.unitFormatter( unit, options )( value ); +}; + +Globalize.unitFormatter = +Globalize.prototype.unitFormatter = function( unit, options ) { + options = options || {}; + return Globalize[ runtimeKey( "unitFormatter", this._locale, [ unit, options ] ) ]; +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit.js new file mode 100644 index 000000000..024b68e51 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit.js @@ -0,0 +1,74 @@ +define([ + "./core", + "./common/runtime-bind", + "./common/validate/parameter-presence", + "./common/validate/parameter-type/number", + "./common/validate/parameter-type/plain-object", + "./common/validate/parameter-type/string", + "./unit/formatter-fn", + "./unit/properties", + + "./number", + "./plural" +], function( Globalize, runtimeBind, validateParameterPresence, validateParameterTypeNumber, + validateParameterTypePlainObject, validateParameterTypeString, unitFormatterFn, + unitProperties ) { + +/** + * Globalize.formatUnit( value, unit, options ) + * + * @value [Number] + * + * @unit [String]: The unit (e.g "second", "day", "year") + * + * @options [Object] + * - form: [String] "long", "short" (default), or "narrow". + * + * Format units such as seconds, minutes, days, weeks, etc. + */ +Globalize.formatUnit = +Globalize.prototype.formatUnit = function( value, unit, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.unitFormatter( unit, options )( value ); +}; + +/** + * Globalize.unitFormatter( unit, options ) + * + * @unit [String]: The unit (e.g "second", "day", "year") + * + * @options [Object] + * - form: [String] "long", "short" (default), or "narrow". + * + * - numberFormatter: [Function] a number formatter function. Defaults to Globalize + * `.numberFormatter()` for the current locale using the default options. + */ +Globalize.unitFormatter = +Globalize.prototype.unitFormatter = function( unit, options ) { + var args, form, numberFormatter, pluralGenerator, returnFn, properties; + + validateParameterPresence( unit, "unit" ); + validateParameterTypeString( unit, "unit" ); + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + + args = [ unit, options ]; + form = options.form || "long"; + properties = unitProperties( unit, form, this.cldr ); + + numberFormatter = options.numberFormatter || this.numberFormatter(); + pluralGenerator = this.pluralGenerator(); + returnFn = unitFormatterFn( numberFormatter, pluralGenerator, properties ); + + runtimeBind( args, this.cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] ); + + return returnFn; +}; + +return Globalize; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/categories.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/categories.js new file mode 100644 index 000000000..7a2fcad8d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/categories.js @@ -0,0 +1,11 @@ +define(function() { + +/** + * categories() + * + * Return all unit categories. + */ +return [ "acceleration", "angle", "area", "digital", "duration", "length", "mass", "power", +"pressure", "speed", "temperature", "volume" ]; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/format.js new file mode 100644 index 000000000..9ce9d683a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/format.js @@ -0,0 +1,51 @@ +define([ + "../common/format-message" +], function( formatMessage ) { + +/** + * format( value, numberFormatter, pluralGenerator, unitProperies ) + * + * @value [Number] + * + * @numberFormatter [Object]: A numberFormatter from Globalize.numberFormatter. + * + * @pluralGenerator [Object]: A pluralGenerator from Globalize.pluralGenerator. + * + * @unitProperies [Object]: localized unit data from cldr. + * + * Format units such as seconds, minutes, days, weeks, etc. + * + * OBS: + * + * Unit Sequences are not implemented. + * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#Unit_Sequences + * + * Duration Unit (for composed time unit durations) is not implemented. + * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#durationUnit + */ +return function( value, numberFormatter, pluralGenerator, unitProperties ) { + var compoundUnitPattern = unitProperties.compoundUnitPattern, dividend, dividendProperties, + formattedValue, divisor, divisorProperties, message, pluralValue, oneProperty; + + unitProperties = unitProperties.unitProperties; + formattedValue = numberFormatter( value ); + pluralValue = pluralGenerator( value ); + + // computed compound unit, eg. "megabyte-per-second". + if ( unitProperties instanceof Array ) { + dividendProperties = unitProperties[ 0 ]; + divisorProperties = unitProperties[ 1 ]; + oneProperty = divisorProperties.hasOwnProperty( "one" ) ? "one" : "other"; + + dividend = formatMessage( dividendProperties[ pluralValue ], [ formattedValue ] ); + divisor = formatMessage( divisorProperties[ oneProperty ], [ "" ] ).trim(); + + return formatMessage( compoundUnitPattern, [ dividend, divisor ] ); + } + + message = unitProperties[ pluralValue ]; + + return formatMessage( message, [ formattedValue ] ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/formatter-fn.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/formatter-fn.js new file mode 100644 index 000000000..7131c1dd6 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/formatter-fn.js @@ -0,0 +1,17 @@ +define([ + "../common/validate/parameter-presence", + "../common/validate/parameter-type/number", + "./format" +], function( validateParameterPresence, validateParameterTypeNumber, unitFormat ) { + +return function( numberFormatter, pluralGenerator, unitProperties ) { + return function unitFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return unitFormat( value, numberFormatter, pluralGenerator, unitProperties ); + }; + +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/get.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/get.js new file mode 100644 index 000000000..f905b77a3 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/get.js @@ -0,0 +1,97 @@ +define([ + "./categories" +], function( unitCategories ) { + +function stripPluralGarbage( data ) { + var aux, pluralCount; + + if ( data ) { + aux = {}; + for ( pluralCount in data ) { + aux[ pluralCount.replace( /unitPattern-count-/, "" ) ] = data[ pluralCount ]; + } + } + + return aux; +} + +/** + * get( unit, form, cldr ) + * + * @unit [String] The full type-unit name (eg. duration-second), or the short unit name + * (eg. second). + * + * @form [String] A string describing the form of the unit representation (eg. long, + * short, narrow). + * + * @cldr [Cldr instance]. + * + * Return the plural map of a unit, eg: "second" + * { "one": "{0} second", + * "other": "{0} seconds" } + * } + * + * Or the Array of plural maps of a compound-unit, eg: "foot-per-second" + * [ { "one": "{0} foot", + * "other": "{0} feet" }, + * { "one": "{0} second", + * "other": "{0} seconds" } ] + * + * Uses the precomputed form of a compound-unit if available, eg: "mile-per-hour" + * { "displayName": "miles per hour", + * "unitPattern-count-one": "{0} mile per hour", + * "unitPattern-count-other": "{0} miles per hour" + * }, + * + * Also supports "/" instead of "-per-", eg. "foot/second", using the precomputed form if + * available. + * + * Or the Array of plural maps of a compound-unit, eg: "foot-per-second" + * [ { "one": "{0} foot", + * "other": "{0} feet" }, + * { "one": "{0} second", + * "other": "{0} seconds" } ] + * + * Or undefined in case the unit (or a unit of the compound-unit) doesn't exist. + */ +var get = function( unit, form, cldr ) { + var ret; + + // Ensure that we get the 'precomputed' form, if present. + unit = unit.replace( /\//, "-per-" ); + + // Get unit or -unit (eg. "duration-second"). + [ "" ].concat( unitCategories ).some(function( category ) { + return ret = cldr.main([ + "units", + form, + category.length ? category + "-" + unit : unit + ]); + }); + + // Rename keys s/unitPattern-count-//g. + ret = stripPluralGarbage( ret ); + + // Compound Unit, eg. "foot-per-second" or "foot/second". + if ( !ret && ( /-per-/ ).test( unit ) ) { + + // "Some units already have 'precomputed' forms, such as kilometer-per-hour; + // where such units exist, they should be used in preference" UTS#35. + // Note that precomputed form has already been handled above (!ret). + + // Get both recursively. + unit = unit.split( "-per-" ); + ret = unit.map(function( unit ) { + return get( unit, form, cldr ); + }); + if ( !ret[ 0 ] || !ret[ 1 ] ) { + return; + } + } + + return ret; +}; + +return get; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/properties.js new file mode 100644 index 000000000..edabde0cc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/unit/properties.js @@ -0,0 +1,28 @@ +define([ + "./get" +], function( unitGet ) { + +/** + * properties( unit, form, cldr ) + * + * @unit [String] The full type-unit name (eg. duration-second), or the short unit name + * (eg. second). + * + * @form [String] A string describing the form of the unit representation (eg. long, + * short, narrow). + * + * @cldr [Cldr instance]. + */ +return function( unit, form, cldr ) { + var compoundUnitPattern, unitProperties; + + compoundUnitPattern = cldr.main( [ "units", form, "per/compoundUnitPattern" ] ); + unitProperties = unitGet( unit, form, cldr ); + + return { + compoundUnitPattern: compoundUnitPattern, + unitProperties: unitProperties + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/always-array.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/always-array.js new file mode 100644 index 000000000..b7276615d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/always-array.js @@ -0,0 +1,7 @@ +define(function() { + +return function( stringOrArray ) { + return Array.isArray( stringOrArray ) ? stringOrArray : stringOrArray ? [ stringOrArray ] : []; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/always-cldr.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/always-cldr.js new file mode 100644 index 000000000..a17e74dd0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/always-cldr.js @@ -0,0 +1,9 @@ +define([ + "cldr" +], function( Cldr ) { + +return function( localeOrCldr ) { + return localeOrCldr instanceof Cldr ? localeOrCldr : new Cldr( localeOrCldr ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/date/set-date.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/date/set-date.js new file mode 100644 index 000000000..e83c732b9 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/date/set-date.js @@ -0,0 +1,16 @@ +define(function() { + +/** + * Differently from native date.setDate(), this function returns a date whose + * day remains inside the month boundaries. For example: + * + * setDate( FebDate, 31 ): a "Feb 28" date. + * setDate( SepDate, 31 ): a "Sep 30" date. + */ +return function( date, day ) { + var lastDay = new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate(); + + date.setDate( day < 1 ? 1 : day < lastDay ? day : lastDay ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/date/set-month.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/date/set-month.js new file mode 100644 index 000000000..3befece31 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/date/set-month.js @@ -0,0 +1,20 @@ +define([ + "./set-date" +], function( dateSetDate ) { + +/** + * Differently from native date.setMonth(), this function adjusts date if + * needed, so final month is always the one set. + * + * setMonth( Jan31Date, 1 ): a "Feb 28" date. + * setDate( Jan31Date, 8 ): a "Sep 30" date. + */ +return function( date, month ) { + var originalDate = date.getDate(); + + date.setDate( 1 ); + date.setMonth( month ); + dateSetDate( date, originalDate ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/function-name.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/function-name.js new file mode 100644 index 000000000..9ab3a4dc8 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/function-name.js @@ -0,0 +1,16 @@ +define([], function() { + +return function( fn ) { + if ( fn.name !== undefined ) { + return fn.name; + } + + // fn.name is not supported by IE. + var matches = /^function\s+([\w\$]+)\s*\(/.exec( fn.toString() ); + + if ( matches && matches.length > 0 ) { + return matches[ 1 ]; + } +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/is-plain-object.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/is-plain-object.js new file mode 100644 index 000000000..de8cc3d25 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/is-plain-object.js @@ -0,0 +1,10 @@ +define(function() { + +/** + * Function inspired by jQuery Core, but reduced to our use case. + */ +return function( obj ) { + return obj !== null && "" + obj === "[object Object]"; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/loose-matching.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/loose-matching.js new file mode 100644 index 000000000..ea501eaa8 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/loose-matching.js @@ -0,0 +1,21 @@ +define([ + "./regexp/cf-g", + "./regexp/dash-g", + "./regexp/zs-g" +], function( regexpCfG, regexpDashG, regexpZsG ) { + +/** + * Loose Matching: + * - Ignore all format characters, which includes RLM, LRM or ALM used to control BIDI + * formatting. + * - Map all characters in [:Zs:] to U+0020 SPACE; + * - Map all characters in [:Dash:] to U+002D HYPHEN-MINUS; + */ +return function( value ) { + return value + .replace( regexpCfG, "" ) + .replace( regexpDashG, "-" ) + .replace( regexpZsG, " " ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/number/round.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/number/round.js new file mode 100644 index 000000000..35ed3f0be --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/number/round.js @@ -0,0 +1,88 @@ +define([ + "./truncate" +], function( numberTruncate ) { + +/** + * round( method ) + * + * @method [String] with either "round", "ceil", "floor", or "truncate". + * + * Return function( value, incrementOrExp ): + * + * @value [Number] eg. 123.45. + * + * @incrementOrExp [Number] optional, eg. 0.1; or + * [Object] Either { increment: } or { exponent: } + * + * Return the rounded number, eg: + * - round( "round" )( 123.45 ): 123; + * - round( "ceil" )( 123.45 ): 124; + * - round( "floor" )( 123.45 ): 123; + * - round( "truncate" )( 123.45 ): 123; + * - round( "round" )( 123.45, 0.1 ): 123.5; + * - round( "round" )( 123.45, 10 ): 120; + * + * Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round + * Ref: #376 + */ +return function( method ) { + method = method || "round"; + method = method === "truncate" ? numberTruncate : Math[ method ]; + + return function( value, incrementOrExp ) { + var exp, increment; + + value = +value; + + // If the value is not a number, return NaN. + if ( isNaN( value ) ) { + return NaN; + } + + // Exponent given. + if ( typeof incrementOrExp === "object" && incrementOrExp.exponent ) { + exp = +incrementOrExp.exponent; + increment = 1; + + if ( exp === 0 ) { + return method( value ); + } + + // If the exp is not an integer, return NaN. + if ( !( typeof exp === "number" && exp % 1 === 0 ) ) { + return NaN; + } + + // Increment given. + } else { + increment = +incrementOrExp || 1; + + if ( increment === 1 ) { + return method( value ); + } + + // If the increment is not a number, return NaN. + if ( isNaN( increment ) ) { + return NaN; + } + + increment = increment.toExponential().split( "e" ); + exp = +increment[ 1 ]; + increment = +increment[ 0 ]; + } + + // Shift & Round + value = value.toString().split( "e" ); + value[ 0 ] = +value[ 0 ] / increment; + value[ 1 ] = value[ 1 ] ? ( +value[ 1 ] - exp ) : -exp; + value = method( +( value[ 0 ] + "e" + value[ 1 ] ) ); + + // Shift back + value = value.toString().split( "e" ); + value[ 0 ] = +value[ 0 ] * increment; + value[ 1 ] = value[ 1 ] ? ( +value[ 1 ] + exp ) : exp; + return +( value[ 0 ] + "e" + value[ 1 ] ); + }; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/number/to-precision.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/number/to-precision.js new file mode 100644 index 000000000..eb9573b42 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/number/to-precision.js @@ -0,0 +1,27 @@ +define(function() { + +/** + * toPrecision( number, precision, round ) + * + * @number (Number) + * + * @precision (Number) significant figures precision (not decimal precision). + * + * @round (Function) + * + * Return number.toPrecision( precision ) using the given round function. + */ +return function( number, precision, round ) { + var roundOrder; + + if ( number === 0 ) { // Fix #706 + return number; + } + + roundOrder = Math.ceil( Math.log( Math.abs( number ) ) / Math.log( 10 ) ); + roundOrder -= precision; + + return round( number, { exponent: roundOrder } ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/number/truncate.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/number/truncate.js new file mode 100644 index 000000000..0fe06270e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/number/truncate.js @@ -0,0 +1,10 @@ +define(function() { + +return function( value ) { + if ( isNaN( value ) ) { + return NaN; + } + return Math[ value < 0 ? "ceil" : "floor" ]( value ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/extend.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/extend.js new file mode 100644 index 000000000..6d1f44915 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/extend.js @@ -0,0 +1,17 @@ +define(function() { + +return function() { + var destination = arguments[ 0 ], + sources = [].slice.call( arguments, 1 ); + + sources.forEach(function( source ) { + var prop; + for ( prop in source ) { + destination[ prop ] = source[ prop ]; + } + }); + + return destination; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/filter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/filter.js new file mode 100644 index 000000000..5b16e47df --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/filter.js @@ -0,0 +1,16 @@ +define(function() { + +return function( object, testRe ) { + var key, + copy = {}; + + for ( key in object ) { + if ( testRe.test( key ) ) { + copy[ key ] = object[ key ]; + } + } + + return copy; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/invert.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/invert.js new file mode 100644 index 000000000..1f49c99be --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/invert.js @@ -0,0 +1,16 @@ +define(function() { + +/** + * Returns a new object created by using `object`'s values as keys, and the keys as values. + */ +return function( object, fn ) { + fn = fn || function( object, key, value ) { + object[ value ] = key; + return object; + }; + return Object.keys( object ).reduce(function( newObject, key ) { + return fn( newObject, key, object[ key ] ); + }, {}); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/map.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/map.js new file mode 100644 index 000000000..d1fa8b2d4 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/map.js @@ -0,0 +1,19 @@ +define(function() { + +/** + * objectMap( object, fn) + * + * - object + * + * - fn( pair ) => pair + */ +return function( object, fn ) { + return Object.keys( object ).map(function( key ) { + return fn([ key, object[ key ] ]); + }).reduce(function( object, pair ) { + object[ pair[ 0 ] ] = pair[ 1 ]; + return object; + }, {}); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/omit.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/omit.js new file mode 100644 index 000000000..e4e981a8f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/omit.js @@ -0,0 +1,25 @@ +define([ + "../always-array" +], function( alwaysArray ) { + +/** + * objectOmit( object, keys ) + * + * Return a copy of the object, filtered to omit the blacklisted key or array of keys. + */ +return function( object, keys ) { + var key, + copy = {}; + + keys = alwaysArray( keys ); + + for ( key in object ) { + if ( keys.indexOf( key ) === -1 ) { + copy[ key ] = object[ key ]; + } + } + + return copy; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/values.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/values.js new file mode 100644 index 000000000..9364f9dde --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/object/values.js @@ -0,0 +1,14 @@ +define(function() { + +return function( object ) { + var i, + result = []; + + for ( i in object ) { + result.push( object[ i ] ); + } + + return result; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/out-of-range.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/out-of-range.js new file mode 100644 index 000000000..eea8bc3b9 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/out-of-range.js @@ -0,0 +1,7 @@ +define(function() { + +return function( value, low, high ) { + return value < low || value > high; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/cf-g.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/cf-g.js new file mode 100644 index 000000000..e419a62e0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/cf-g.js @@ -0,0 +1,15 @@ +define(function() { + +/** + * Generated by: + * + * var regenerate = require( "regenerate" ); + * var formatSymbols = require( "@unicode/unicode-13.0.0/General_Category/Format/symbols" ); + * regenerate().add( formatSymbols ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/node-unicode/unicode-13.0.0 + */ +return /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/g; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/dash-g.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/dash-g.js new file mode 100644 index 000000000..0e733a7e5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/dash-g.js @@ -0,0 +1,17 @@ +define(function() { + +/** + * Generated by: + * + * var regenerate = require( "regenerate" ); + * var dashSymbols = require( "https://github.com/node-unicode/unicode-13.0.0/General_Category/Dash_Punctuation/symbols" ); + * regenerate().add( dashSymbols ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/node-unicode/unicode-13.0.0 + * + * NOTE: In addition to [:dash:], the below includes MINUS SIGN U+2212. + */ +return /[\x2D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D\u2212]|\uD803\uDEAD/g; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/escape.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/escape.js new file mode 100644 index 000000000..ebfdb73a2 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/escape.js @@ -0,0 +1,8 @@ +define(function() { + +// ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions +return function( string ) { + return string.replace( /([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1" ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/not-s-and-z.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/not-s-and-z.js new file mode 100644 index 000000000..d33ebcbf6 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/not-s-and-z.js @@ -0,0 +1,24 @@ +define(function() { + +/** + * Unicode regular expression for: everything except symbols from categories S and Z + * + * Generated by: + * + * var s = regenerate() + * .addRange( 0x0, 0x10FFFF ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Math_Symbol/symbols" ) ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Currency_Symbol/symbols" ) ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Modifier_Symbol/symbols" ) ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Other_Symbol/symbols" ) ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Space_Separator/symbols" ) ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Line_Separator/symbols" ) ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Paragraph_Separator/symbols" ) ); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/node-unicode/unicode-13.0.0 + * http://www.unicode.org/reports/tr44/#General_Category_Values + */ +return /[\0-\x1F!-#%-\*,-;\?-\]_a-\{\}\x7F-\x9F\xA1\xA7\xAA\xAB\xAD\xB2\xB3\xB5-\xB7\xB9-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376-\u0383\u0386-\u03F5\u03F7-\u0481\u0483-\u058C\u0590-\u0605\u0609\u060A\u060C\u060D\u0610-\u06DD\u06DF-\u06E8\u06EA-\u06FC\u06FF-\u07F5\u07F7-\u07FD\u0800-\u09F1\u09F4-\u09F9\u09FC-\u0AF0\u0AF2-\u0B6F\u0B71-\u0BF2\u0BFB-\u0C7E\u0C80-\u0D4E\u0D50-\u0D78\u0D7A-\u0E3E\u0E40-\u0F00\u0F04-\u0F12\u0F14\u0F18\u0F19\u0F20-\u0F33\u0F35\u0F37\u0F39-\u0FBD\u0FC6\u0FCD\u0FD0-\u0FD4\u0FD9-\u109D\u10A0-\u138F\u139A-\u166C\u166E-\u167F\u1681-\u17DA\u17DC-\u193F\u1941-\u19DD\u1A00-\u1B60\u1B6B-\u1B73\u1B7D-\u1FBC\u1FBE\u1FC2-\u1FCC\u1FD0-\u1FDC\u1FE0-\u1FEC\u1FF0-\u1FFC\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u2043\u2045-\u2051\u2053-\u205E\u2060-\u2079\u207D-\u2089\u208D-\u209F\u20C0-\u20FF\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u218C-\u218F\u2308-\u230B\u2329\u232A\u2427-\u243F\u244B-\u249B\u24EA-\u24FF\u2768-\u2793\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2B74\u2B75\u2B96\u2C00-\u2CE4\u2CEB-\u2E4F\u2E52-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3001-\u3003\u3005-\u3011\u3014-\u301F\u3021-\u3035\u3038-\u303D\u3040-\u309A\u309D-\u318F\u3192-\u3195\u31A0-\u31BF\u31E4-\u31FF\u321F-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48F\uA4C7-\uA6FF\uA717-\uA71F\uA722-\uA788\uA78B-\uA827\uA82C-\uA835\uA83A-\uAA76\uAA7A-\uAB5A\uAB5C-\uAB69\uAB6C-\uD7FF\uE000-\uFB28\uFB2A-\uFBB1\uFBC2-\uFDFB\uFDFE-\uFE61\uFE63\uFE67\uFE68\uFE6A-\uFF03\uFF05-\uFF0A\uFF0C-\uFF1B\uFF1F-\uFF3D\uFF3F\uFF41-\uFF5B\uFF5D\uFF5F-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]|\uD800[\uDC00-\uDD36\uDD40-\uDD78\uDD8A\uDD8B\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFD-\uDFFF]|[\uD801\uD803\uD804\uD806\uD808-\uD819\uD81B-\uD82E\uD830-\uD833\uD837\uD839\uD83A\uD83F-\uDBFF][\uDC00-\uDFFF]|\uD802[\uDC00-\uDC76\uDC79-\uDEC7\uDEC9-\uDFFF]|\uD805[\uDC00-\uDF3E\uDF40-\uDFFF]|\uD807[\uDC00-\uDFD4\uDFF2-\uDFFF]|\uD81A[\uDC00-\uDF3B\uDF40-\uDF44\uDF46-\uDFFF]|\uD82F[\uDC00-\uDC9B\uDC9D-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD65-\uDD69\uDD6D-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDDE9-\uDDFF\uDE42-\uDE44\uDE46-\uDEFF\uDF57-\uDFFF]|\uD835[\uDC00-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE87-\uDFFF]|\uD838[\uDC00-\uDD4E\uDD50-\uDEFE\uDF00-\uDFFF]|\uD83B[\uDC00-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDD2D\uDD2F-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDD0C\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/not-s.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/not-s.js new file mode 100644 index 000000000..76ed25fd0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/not-s.js @@ -0,0 +1,21 @@ +define(function() { + +/** + * Unicode regular expression for: everything except symbols from the category S + * + * Generated by: + * + * var s = regenerate() + * .addRange( 0x0, 0x10FFFF ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Math_Symbol/symbols" ) ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Currency_Symbol/symbols" ) ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Modifier_Symbol/symbols" ) ) + * .remove( require( "@unicode/unicode-13.0.0/General_Category/Other_Symbol/symbols" ) ) + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/node-unicode/unicode-13.0.0 + * http://www.unicode.org/reports/tr44/#General_Category_Values + */ +return /[\0-#%-\*,-;\?-\]_a-\{\}\x7F-\xA1\xA7\xAA\xAB\xAD\xB2\xB3\xB5-\xB7\xB9-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376-\u0383\u0386-\u03F5\u03F7-\u0481\u0483-\u058C\u0590-\u0605\u0609\u060A\u060C\u060D\u0610-\u06DD\u06DF-\u06E8\u06EA-\u06FC\u06FF-\u07F5\u07F7-\u07FD\u0800-\u09F1\u09F4-\u09F9\u09FC-\u0AF0\u0AF2-\u0B6F\u0B71-\u0BF2\u0BFB-\u0C7E\u0C80-\u0D4E\u0D50-\u0D78\u0D7A-\u0E3E\u0E40-\u0F00\u0F04-\u0F12\u0F14\u0F18\u0F19\u0F20-\u0F33\u0F35\u0F37\u0F39-\u0FBD\u0FC6\u0FCD\u0FD0-\u0FD4\u0FD9-\u109D\u10A0-\u138F\u139A-\u166C\u166E-\u17DA\u17DC-\u193F\u1941-\u19DD\u1A00-\u1B60\u1B6B-\u1B73\u1B7D-\u1FBC\u1FBE\u1FC2-\u1FCC\u1FD0-\u1FDC\u1FE0-\u1FEC\u1FF0-\u1FFC\u1FFF-\u2043\u2045-\u2051\u2053-\u2079\u207D-\u2089\u208D-\u209F\u20C0-\u20FF\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u218C-\u218F\u2308-\u230B\u2329\u232A\u2427-\u243F\u244B-\u249B\u24EA-\u24FF\u2768-\u2793\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2B74\u2B75\u2B96\u2C00-\u2CE4\u2CEB-\u2E4F\u2E52-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u3003\u3005-\u3011\u3014-\u301F\u3021-\u3035\u3038-\u303D\u3040-\u309A\u309D-\u318F\u3192-\u3195\u31A0-\u31BF\u31E4-\u31FF\u321F-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48F\uA4C7-\uA6FF\uA717-\uA71F\uA722-\uA788\uA78B-\uA827\uA82C-\uA835\uA83A-\uAA76\uAA7A-\uAB5A\uAB5C-\uAB69\uAB6C-\uD7FF\uE000-\uFB28\uFB2A-\uFBB1\uFBC2-\uFDFB\uFDFE-\uFE61\uFE63\uFE67\uFE68\uFE6A-\uFF03\uFF05-\uFF0A\uFF0C-\uFF1B\uFF1F-\uFF3D\uFF3F\uFF41-\uFF5B\uFF5D\uFF5F-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]|\uD800[\uDC00-\uDD36\uDD40-\uDD78\uDD8A\uDD8B\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFD-\uDFFF]|[\uD801\uD803\uD804\uD806\uD808-\uD819\uD81B-\uD82E\uD830-\uD833\uD837\uD839\uD83A\uD83F-\uDBFF][\uDC00-\uDFFF]|\uD802[\uDC00-\uDC76\uDC79-\uDEC7\uDEC9-\uDFFF]|\uD805[\uDC00-\uDF3E\uDF40-\uDFFF]|\uD807[\uDC00-\uDFD4\uDFF2-\uDFFF]|\uD81A[\uDC00-\uDF3B\uDF40-\uDF44\uDF46-\uDFFF]|\uD82F[\uDC00-\uDC9B\uDC9D-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD65-\uDD69\uDD6D-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDDE9-\uDDFF\uDE42-\uDE44\uDE46-\uDEFF\uDF57-\uDFFF]|\uD835[\uDC00-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE87-\uDFFF]|\uD838[\uDC00-\uDD4E\uDD50-\uDEFE\uDF00-\uDFFF]|\uD83B[\uDC00-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDD2D\uDD2F-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDD0C\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/zs-g.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/zs-g.js new file mode 100644 index 000000000..3ccf0a65d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/regexp/zs-g.js @@ -0,0 +1,15 @@ +define(function() { + +/** + * Generated by: + * + * var regenerate = require( "regenerate" ); + * var spaceSeparatorSymbols = require( "@unicode/unicode-13.0.0/General_Category/Space_Separator/symbols" ); + * regenerate().add( spaceSeparatorSymbols ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/node-unicode/unicode-13.0.0 + */ +return /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/g; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/remove-literal-quotes.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/remove-literal-quotes.js new file mode 100644 index 000000000..5fb17ea5c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/remove-literal-quotes.js @@ -0,0 +1,22 @@ +define(function() { + +/** + * removeLiteralQuotes( string ) + * + * Return: + * - `'` if input string is `''`. + * - `o'clock` if input string is `'o''clock'`. + * - `foo` if input string is `foo`, i.e., return the same value in case it isn't a single-quoted + * string. + */ +return function( string ) { + if ( string[ 0 ] + string[ string.length - 1 ] !== "''" ) { + return string; + } + if ( string === "''" ) { + return "'"; + } + return string.replace( /''/g, "'" ).slice( 1, -1 ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/string/hash.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/string/hash.js new file mode 100644 index 000000000..83e26a88a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/string/hash.js @@ -0,0 +1,12 @@ +define(function() { + +// Based on http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery +return function( str ) { + return [].reduce.call( str, function( hash, i ) { + var chr = i.charCodeAt( 0 ); + hash = ( ( hash << 5 ) - hash ) + chr; + return hash | 0; + }, 0 ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/string/pad.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/string/pad.js new file mode 100644 index 000000000..7ab105870 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/string/pad.js @@ -0,0 +1,14 @@ +define(function() { + +return function( str, count, right ) { + var length; + if ( typeof str !== "string" ) { + str = String( str ); + } + for ( length = str.length; length < count; length += 1 ) { + str = ( right ? ( str + "0" ) : ( "0" + str ) ); + } + return str; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/string/repeat.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/string/repeat.js new file mode 100644 index 000000000..46393a838 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/string/repeat.js @@ -0,0 +1,11 @@ +define(function() { + +return function( str, count ) { + var i, result = ""; + for ( i = 0; i < count; i++ ) { + result = result + str; + } + return result; +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/to-string.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/to-string.js new file mode 100644 index 000000000..29d0f1d32 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/src/util/to-string.js @@ -0,0 +1,14 @@ +define(function() { + +/** + * A toString method that outputs meaningful values for objects or arrays and + * still performs as fast as a plain string in case variable is string, or as + * fast as `"" + number` in case variable is a number. + * Ref: http://jsperf.com/my-stringify + */ +return function( variable ) { + return typeof variable === "string" ? variable : ( typeof variable === "number" ? "" + + variable : JSON.stringify( variable ) ); +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/.eslintrc.json b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/.eslintrc.json new file mode 100644 index 000000000..51416a1be --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/.eslintrc.json @@ -0,0 +1,17 @@ +{ + "root": true, + "extends": "../.eslintrc.json", + "env": { + "node": true, + "amd": true, + "mocha": true + }, + "globals": { + "QUnit": "readonly" + }, + "rules": { + "array-bracket-spacing": "off", + "comma-dangle": "off", + "max-len": "off" + } +} diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/currency.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/currency.js new file mode 100644 index 000000000..596b65dba --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/currency.js @@ -0,0 +1,77 @@ +module.exports = { + dependencies: function() { + var Globalize = require( "../../../dist/node-main.js" ); + + Globalize.load( + // core + require( "../../../external/cldr-data/supplemental/likelySubtags.json" ), + // currency + require( "../../../external/cldr-data/main/en/currencies.json" ), + require( "../../../external/cldr-data/main/de/currencies.json" ), + require( "../../../external/cldr-data/main/zh/currencies.json" ), + require( "../../../external/cldr-data/supplemental/currencyData.json" ), + // number + require( "../../../external/cldr-data/main/en/numbers.json" ), + require( "../../../external/cldr-data/main/de/numbers.json" ), + require( "../../../external/cldr-data/main/zh/numbers.json" ), + require( "../../../external/cldr-data/supplemental/numberingSystems.json" ), + // plural + require( "../../../external/cldr-data/supplemental/plurals.json" ), + require( "../../../external/cldr-data/supplemental/ordinals.json" ) + ); + + return Globalize; + }, + cases: function( Globalize ) { + var accounting = { style: "accounting" }, + code = { style: "code" }, + name = { style: "name" }, + teslaS = 69900; + + var de, zh; + + de = Globalize( "de" ); + zh = Globalize( "zh" ); + Globalize.locale( "en" ); + + return [ + { formatter: Globalize.currencyFormatter( "USD" ), args: [ teslaS ] }, + { formatter: de.currencyFormatter( "USD" ), args: [ teslaS ] }, + { formatter: zh.currencyFormatter( "USD" ), args: [ teslaS ] }, + + { formatter: Globalize.currencyFormatter( "USD" ), args: [ -teslaS ] }, + { formatter: de.currencyFormatter( "USD" ), args: [ -teslaS ] }, + { formatter: zh.currencyFormatter( "USD" ), args: [ -teslaS ] }, + + { formatter: Globalize.currencyFormatter( "USD", code ), args: [ teslaS ] }, + { formatter: de.currencyFormatter( "USD", code ), args: [ teslaS ] }, + { formatter: zh.currencyFormatter( "USD", code ), args: [ teslaS ] }, + + { formatter: Globalize.currencyFormatter( "USD", name ), args: [ teslaS ] }, + { formatter: de.currencyFormatter( "USD", name ), args: [ teslaS ] }, + { formatter: zh.currencyFormatter( "USD", name ), args: [ teslaS ] }, + + { formatter: Globalize.currencyFormatter( "USD", accounting ), args: [ -1 ] }, + + { formatter: Globalize.currencyFormatter( "CLF" ), args: [ 12345 ] }, + { formatter: Globalize.currencyFormatter( "CLF" ), args: [ 12345.67 ] }, + { formatter: Globalize.currencyFormatter( "ZWD" ), args: [ 12345 ] }, + { formatter: Globalize.currencyFormatter( "ZWD" ), args: [ 12345.67 ] }, + { formatter: Globalize.currencyFormatter( "JPY" ), args: [ 12345.67 ] }, + { formatter: Globalize.currencyFormatter( "CLF", code ), args: [ 12345.67 ] }, + { formatter: Globalize.currencyFormatter( "CLF", name ), args: [ 12345.67 ] }, + + { formatter: Globalize.currencyFormatter( "CLF", { + minimumFractionDigits: 0 + }), args: [ 12345 ] }, + { formatter: Globalize.currencyFormatter( "CLF", { + style: "code", + minimumFractionDigits: 0 + }), args: [ 12345 ] }, + { formatter: Globalize.currencyFormatter( "CLF", { + style: "name", + minimumFractionDigits: 0 + }), args: [ 12345 ] } + ]; + } +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/date.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/date.js new file mode 100644 index 000000000..81cfc4377 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/date.js @@ -0,0 +1,43 @@ +module.exports = { + dependencies: function() { + var Globalize = require( "../../../dist/node-main.js" ); + + Globalize.load( + // core + require( "../../../external/cldr-data/supplemental/likelySubtags.json" ), + // date + require( "../../../external/cldr-data/main/en/ca-gregorian.json" ), + require( "../../../external/cldr-data/main/en/timeZoneNames.json" ), + require( "../../../external/cldr-data/supplemental/metaZones.json" ), + require( "../../../external/cldr-data/supplemental/timeData.json" ), + require( "../../../external/cldr-data/supplemental/weekData.json" ), + // number + require( "../../../external/cldr-data/main/en/numbers.json" ), + require( "../../../external/cldr-data/supplemental/numberingSystems.json" ) + ); + + Globalize.loadTimeZone( require( "iana-tz-data" ) ); + + return Globalize; + }, + cases: function( Globalize ) { + var date = new Date( 2010, 8, 15, 17, 35, 7, 369 ); + Globalize.locale( "en" ); + return [ + { formatter: Globalize.dateFormatter({ datetime: "full", timeZone: "Europe/Berlin" }), args: [ date ] }, + { formatter: Globalize.dateFormatter({ datetime: "full", timeZone: "America/Los_Angeles" }), args: [ date ] }, + + { formatter: Globalize.dateFormatter({ skeleton: "GyMMMEd" }), args: [ date ] }, + { formatter: Globalize.dateFormatter({ skeleton: "dhms" }), args: [ date ] }, + { formatter: Globalize.dateFormatter({ skeleton: "GyMMMEdhms" }), args: [ date ] }, + { formatter: Globalize.dateFormatter({ skeleton: "GyMMMEdhmsSSS" }), args: [ date ] }, + { formatter: Globalize.dateFormatter({ skeleton: "Ems" }), args: [ date ] }, + { formatter: Globalize.dateFormatter({ skeleton: "yQQQhm" }), args: [ date ] }, + + { formatter: Globalize.dateFormatter({ skeleton: "yMMMMd" }), args: [ date ] }, + { formatter: Globalize.dateFormatter({ skeleton: "MMMMd" }), args: [ date ] }, + { formatter: Globalize.dateFormatter({ skeleton: "MMMM" }), args: [ date ] }, + { formatter: Globalize.dateFormatter({ skeleton: "EEEE" }), args: [ date ] } + ]; + } +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/message.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/message.js new file mode 100644 index 000000000..16e81e883 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/message.js @@ -0,0 +1,28 @@ +module.exports = { + dependencies: function() { + var Globalize = require( "../../../dist/node-main.js" ); + + Globalize.load( + // core + require( "../../../external/cldr-data/supplemental/likelySubtags.json" ) + ); + + Globalize.loadMessages({ + en: { + greetings: { + hello: "Hello, {name}" + } + } + }); + + return Globalize; + }, + cases: function( Globalize ) { + Globalize.locale( "en" ); + return [ + { formatter: Globalize( "en" ).messageFormatter( "greetings/hello" ), args: [ { + name: "Beethoven" + } ] } + ]; + } +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/number.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/number.js new file mode 100644 index 000000000..d2369baba --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/number.js @@ -0,0 +1,63 @@ +module.exports = { + dependencies: function() { + var Globalize = require( "../../../dist/node-main.js" ); + + Globalize.load( + // core + require( "../../../external/cldr-data/supplemental/likelySubtags.json" ), + // number + require( "../../../external/cldr-data/main/ar/numbers.json" ), + require( "../../../external/cldr-data/main/en/numbers.json" ), + require( "../../../external/cldr-data/main/es/numbers.json" ), + require( "../../../external/cldr-data/main/zh/numbers.json" ), + require( "../../../external/cldr-data/supplemental/numberingSystems.json" ) + ); + + return Globalize; + }, + cases: function( Globalize ) { + var big = 99999999.99; + Globalize.locale( "en" ); + return [ + { formatter: Globalize.numberFormatter(), args: [ Math.PI ] }, + { formatter: Globalize( "es" ).numberFormatter(), args: [ Math.PI ] }, + { formatter: Globalize( "ar" ).numberFormatter(), args: [ Math.PI ] }, + { formatter: Globalize( "zh-u-nu-native" ).numberFormatter(), args: [ Math.PI ] }, + { formatter: Globalize.numberFormatter(), args: [ big ] }, + + { formatter: Globalize.numberFormatter( { + minimumIntegerDigits: 2, + minimumFractionDigits: 2, + maximumFractionDigits: 2 + } ), args: [ Math.PI ] }, + { formatter: Globalize.numberFormatter( { + maximumFractionDigits: 0 + } ), args: [ Math.PI ] }, + { formatter: Globalize.numberFormatter( { + minimumFractionDigits: 3 + } ), args: [ 1.1 ] }, + { formatter: Globalize.numberFormatter( { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + } ), args: [ Math.PI ] }, + { formatter: Globalize.numberFormatter( { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + } ), args: [ 12345 ] }, + { formatter: Globalize.numberFormatter( { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + } ), args: [ 0.00012345 ] }, + { formatter: Globalize.numberFormatter( { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + } ), args: [ 0.00010001 ] }, + { formatter: Globalize.numberFormatter( { useGrouping: false } ), args: [ big ] }, + + { formatter: Globalize.numberFormatter( { style: "percent" } ), args: [ Math.PI ] }, + { formatter: Globalize( "ar" ).numberFormatter( { style: "percent" } ), args: [ Math.PI ] }, + { formatter: Globalize.numberFormatter( { compact: "short" } ), args: [ big ] }, + { formatter: Globalize.numberFormatter( { compact: "long" } ), args: [ big ] } + ]; + } +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/plural.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/plural.js new file mode 100644 index 000000000..229419ece --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/plural.js @@ -0,0 +1,102 @@ +module.exports = { + dependencies: function() { + var Globalize = require( "../../../dist/node-main.js" ); + + Globalize.load( + // core + require( "../../../external/cldr-data/supplemental/likelySubtags.json" ), + // plural + require( "../../../external/cldr-data/supplemental/plurals.json" ), + require( "../../../external/cldr-data/supplemental/ordinals.json" ) + ); + + return Globalize; + }, + cases: function( Globalize ) { + Globalize.locale( "en" ); + return [ + { formatter: Globalize.pluralGenerator(), args: [ 0 ] }, + { formatter: Globalize.pluralGenerator(), args: [ 0.14 ] }, + + { formatter: Globalize( "en" ).pluralGenerator(), args: [ 0 ] }, + { formatter: Globalize( "en" ).pluralGenerator(), args: [ 1 ] }, + { formatter: Globalize( "en" ).pluralGenerator(), args: [ 2 ] }, + { formatter: Globalize( "en" ).pluralGenerator(), args: [ 1412 ] }, + { formatter: Globalize( "en" ).pluralGenerator(), args: [ 0.14 ] }, + { formatter: Globalize( "en" ).pluralGenerator(), args: [ 3.14 ] }, + + { formatter: Globalize( "en" ).pluralGenerator( { type: "ordinal" } ), args: [ 0 ] }, + { formatter: Globalize( "en" ).pluralGenerator( { type: "ordinal" } ), args: [ 1 ] }, + { formatter: Globalize( "en" ).pluralGenerator( { type: "ordinal" } ), args: [ 2 ] }, + { formatter: Globalize( "en" ).pluralGenerator( { type: "ordinal" } ), args: [ 3 ] }, + { formatter: Globalize( "en" ).pluralGenerator( { type: "ordinal" } ), args: [ 1412 ] }, + { formatter: Globalize( "en" ).pluralGenerator( { type: "ordinal" } ), args: [ 0.14 ] }, + { formatter: Globalize( "en" ).pluralGenerator( { type: "ordinal" } ), args: [ 3.14 ] }, + + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 0 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 1 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 2 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 3 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 6 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 9 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 10 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 11 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 15 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 21 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 70 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 99 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 100 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 101 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 102 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 103 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 111 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 199 ] }, + { formatter: Globalize( "ar" ).pluralGenerator(), args: [ 3.14 ] }, + + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 0 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 1 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 2 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 3 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 9 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 10 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 11 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 99 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 100 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 101 ] }, + { formatter: Globalize( "ar" ).pluralGenerator( { type: "ordinal" } ), args: [ 3.14 ] }, + + + { formatter: Globalize( "ja" ).pluralGenerator(), args: [ 0 ] }, + { formatter: Globalize( "ja" ).pluralGenerator(), args: [ 1 ] }, + { formatter: Globalize( "ja" ).pluralGenerator(), args: [ 2 ] }, + { formatter: Globalize( "ja" ).pluralGenerator(), args: [ 3.14 ] }, + + { formatter: Globalize( "pt" ).pluralGenerator(), args: [ 0 ] }, + { formatter: Globalize( "pt" ).pluralGenerator(), args: [ 1 ] }, + { formatter: Globalize( "pt" ).pluralGenerator(), args: [ 2 ] }, + { formatter: Globalize( "pt" ).pluralGenerator(), args: [ 0.1 ] }, + { formatter: Globalize( "pt" ).pluralGenerator(), args: [ 3.14 ] }, + + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 0 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 1 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 2 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 3 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 4 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 5 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 6 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 9 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 11 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 12 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 19 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 21 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 22 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 29 ] }, + { formatter: Globalize( "ru" ).pluralGenerator(), args: [ 3.14 ] }, + + { formatter: Globalize( "zh" ).pluralGenerator(), args: [ 0 ] }, + { formatter: Globalize( "zh" ).pluralGenerator(), args: [ 1 ] }, + { formatter: Globalize( "zh" ).pluralGenerator(), args: [ 2 ] }, + { formatter: Globalize( "zh" ).pluralGenerator(), args: [ 3.14 ] } + ]; + } +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/relative-time.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/relative-time.js new file mode 100644 index 000000000..452e89ad1 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/relative-time.js @@ -0,0 +1,36 @@ +module.exports = { + dependencies: function() { + var Globalize = require( "../../../dist/node-main.js" ); + + Globalize.load( + // core + require( "../../../external/cldr-data/supplemental/likelySubtags.json" ), + // relative time + require( "../../../external/cldr-data/main/en/dateFields.json" ), + require( "../../../external/cldr-data/main/de/dateFields.json" ), + // number + require( "../../../external/cldr-data/main/en/numbers.json" ), + require( "../../../external/cldr-data/main/de/numbers.json" ), + require( "../../../external/cldr-data/supplemental/numberingSystems.json" ), + // plural + require( "../../../external/cldr-data/supplemental/plurals.json" ), + require( "../../../external/cldr-data/supplemental/ordinals.json" ) + ); + + return Globalize; + }, + cases: function( Globalize ) { + var de, en; + Globalize.locale( "en" ); + de = new Globalize( "de" ); + en = new Globalize( "en" ); + + return [ + { formatter: en.relativeTimeFormatter( "week" ), args: [ -2 ] }, + { formatter: en.relativeTimeFormatter( "year" ), args: [ 3 ] }, + { formatter: en.relativeTimeFormatter( "day" ), args: [ 0 ] }, + { formatter: en.relativeTimeFormatter( "day" ), args: [ 1 ] }, + { formatter: de.relativeTimeFormatter( "day" ), args: [ 2 ] } + ]; + } +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/unit.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/unit.js new file mode 100644 index 000000000..c7f42035c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/cases/unit.js @@ -0,0 +1,65 @@ +module.exports = { + dependencies: function() { + var Globalize = require( "../../../dist/node-main.js" ); + + Globalize.load( + // core + require( "../../../external/cldr-data/supplemental/likelySubtags.json" ), + // unit + require( "../../../external/cldr-data/main/en/units.json" ), + require( "../../../external/cldr-data/main/de/units.json" ), + // number + require( "../../../external/cldr-data/main/en/numbers.json" ), + require( "../../../external/cldr-data/main/de/numbers.json" ), + require( "../../../external/cldr-data/supplemental/numberingSystems.json" ), + // plural + require( "../../../external/cldr-data/supplemental/plurals.json" ), + require( "../../../external/cldr-data/supplemental/ordinals.json" ) + ); + + return Globalize; + }, + cases: function( Globalize ) { + var de, en; + Globalize.locale( "en" ); + de = new Globalize( "de" ); + en = new Globalize( "en" ); + return [ + { formatter: Globalize.unitFormatter( "hour", { + numberFormatter: Globalize.numberFormatter( { minimumIntegerDigits: 1 } ) + } ), args: [ 3 ] }, + { formatter: Globalize.unitFormatter( "hour", { + numberFormatter: Globalize.numberFormatter( { minimumIntegerDigits: 2 } ) + } ), args: [ 3 ] }, + + { formatter: en.unitFormatter( "day" ), args: [ 1 ] }, + { formatter: en.unitFormatter( "day" ), args: [ 100 ] }, + + { formatter: de.unitFormatter( "day" ), args: [ 1 ] }, + { formatter: de.unitFormatter( "day" ), args: [ 100 ] }, + + { formatter: en.unitFormatter( "day", { form: "long" } ), args: [ 1 ] }, + { formatter: en.unitFormatter( "day", { form: "long" } ), args: [ 100 ] }, + + { formatter: de.unitFormatter( "day", { form: "long" } ), args: [ 1 ] }, + { formatter: de.unitFormatter( "day", { form: "long" } ), args: [ 100 ] }, + + { formatter: en.unitFormatter( "second", { form: "short" } ), args: [ 1 ] }, + { formatter: en.unitFormatter( "second", { form: "short" } ), args: [ 100 ] }, + + { formatter: en.unitFormatter( "second", { form: "narrow" } ), args: [ 1 ] }, + { formatter: en.unitFormatter( "second", { form: "narrow" } ), args: [ 100 ] }, + + { formatter: en.unitFormatter( "mile-per-hour", { form: "narrow" } ), args: [ 5 ] }, + + { formatter: en.unitFormatter( "mile-per-second", { form: "narrow" } ), args: [ 5 ] }, + + { formatter: en.unitFormatter( "mile/hour", { form: "narrow" } ), args: [ 5 ] }, + + { formatter: en.unitFormatter( "mile/second", { form: "narrow" } ), args: [ 5 ] }, + + { formatter: en.unitFormatter( "mile/hour", { form: "short" } ), args: [ 55000 ] }, + { formatter: de.unitFormatter( "mile/hour", { form: "short" } ), args: [ 55000 ] } + ]; + } +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/test.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/test.js new file mode 100644 index 000000000..a6b10ba9d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/compiler/test.js @@ -0,0 +1,74 @@ +var globalizeCompiler = require( "globalize-compiler" ); +var fs = require( "fs" ); +var path = require( "path" ); +var childProcess = require( "child_process" ); +var assert = require( "assert" ); +var glob = require( "glob" ); + +describe( "compiled", function() { + if ( !fs.existsSync( path.join( __dirname, "_compiled" ) ) ) { + fs.mkdirSync( path.join( __dirname, "_compiled" ) ); + } + var files = glob.sync( "cases/*.js", { + cwd: __dirname + } ); + files.forEach( function(file) { + var name = path.basename( file, ".js" ); + describe( name, function() { + it( "should return identical data", function( done ) { + var test = require( "./" + file ); + var expectedOutput = ""; + var formatters = []; + var testCases = test.cases( test.dependencies() ); + testCases.forEach( function( testCase ) { + formatters.push( testCase.formatter ); + expectedOutput += testCase.formatter.apply( null, testCase.args ) + "\n"; + }); + var out = globalizeCompiler.compile( formatters, { + template: function( data ) { + var deps = "var Globalize = " + + data.dependencies.map( function( dependency ) { + return "require( \"../../../dist/" + dependency + "\" )"; + } ).join( ";\n" ); + return [ + deps, + "", + data.code, + "", + "module.exports = Globalize;" + ].join( "\n" ); + } + } ); + fs.writeFileSync( path.join( __dirname, "_compiled/" + name + ".compiled.js" ), out ); + fs.writeFileSync( path.join( __dirname, "_compiled/" + name + ".test.js" ), [ + "var test = require( \"../" + file + "\" );", + "var Globalize = require( \"../_compiled/" + name + ".compiled.js\" );", + "testCases = test.cases( Globalize );", + "testCases.forEach( function( testCase ) {", + "console.log( testCase.formatter.apply( null, testCase.args ) );", + "});" + ].join("\n") ); + var childOutput = ""; + var child = childProcess.fork( + path.join( __dirname, "_compiled/" + name + ".test.js" ), + { silent: true } + ); + child.on( "error", function( err ) { + done( err ); + } ); + child.on( "exit", function( exit ) { + if ( exit !== 0 ) { + done( new Error( "exited with non-zero" ) ); + } + } ); + child.stdout.on( "data", function( chunk ) { + childOutput += chunk.toString(); + } ); + child.stdout.on( "end", function() { + assert.equal( childOutput, expectedOutput ); + done(); + } ); + } ); + } ); + } ); +} ); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/config.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/config.js new file mode 100644 index 000000000..e0150536c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/config.js @@ -0,0 +1,23 @@ +// eslint-disable-next-line no-unused-vars +var requirejs = { + paths: { + qunit: "../node_modules/qunit/qunit/qunit", + cldr: "../external/cldrjs/dist/cldr", + "cldr-data": "../external/cldr-data", + globalize: "../dist/globalize", + "iana-tz-data": "../node_modules/iana-tz-data/iana-tz-data", + json: "../external/requirejs-plugins/src/json", + src: "../src", + text: "../external/requirejs-text/text", + "zoned-date-time": "../node_modules/zoned-date-time/src/zoned-date-time" + }, + + shim: { + "zoned-date-time": { + exports: "ZonedDateTime" + } + }, + + // Increase the default of 7 seconds for high-latency envs like browserstack-runner. + waitSeconds: 60 +}; diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional-es5-shim.html b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional-es5-shim.html new file mode 100644 index 000000000..05e14f0b7 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional-es5-shim.html @@ -0,0 +1,16 @@ + + + + + Globalize Functional Tests + + + +
+
+ + + + + + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional.html b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional.html new file mode 100644 index 000000000..a16ce0a8f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional.html @@ -0,0 +1,16 @@ + + + + + + Globalize Functional Tests + + + +
+
+ + + + + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional.js new file mode 100644 index 000000000..2ae2656c1 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional.js @@ -0,0 +1,55 @@ +require([ + "qunit", + + // core + "./functional/core", + "./functional/core/load", + "./functional/core/locale", + + // currency + "./functional/currency/currency-formatter", + "./functional/currency/currency-to-parts-formatter", + "./functional/currency/format-currency", + "./functional/currency/format-currency-to-parts", + + // date + "./functional/date/date-formatter", + "./functional/date/date-to-parts-formatter", + "./functional/date/date-parser", + "./functional/date/format-date", + "./functional/date/format-date-to-parts", + "./functional/date/parse-date", + + // message + "./functional/message/message-formatter", + "./functional/message/format-message", + + // number + "./functional/number/number-formatter", + "./functional/number/number-to-parts-formatter", + "./functional/number/number-parser", + "./functional/number/format-number", + "./functional/number/format-number-to-parts", + "./functional/number/parse-number", + + // plural + "./functional/plural/plural", + "./functional/plural/plural-generator", + + // relative-time + "./functional/relative-time/format-relative-time", + "./functional/relative-time/relative-time-formatter", + + // unit + "./functional/unit/format-unit", + "./functional/unit/unit-formatter" + +], function() { + QUnit.start(); +}, function( error ) { + QUnit.test( "requirejs load failure", function( assert ) { + assert.ok( false, "requirejs failed to load: " + QUnit.dump.parse( error ) ); + }); + QUnit.start(); +}); + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/core.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/core.js new file mode 100644 index 000000000..21e7da3af --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/core.js @@ -0,0 +1,30 @@ +define([ + "globalize", + "../util" +], function( Globalize, util ) { + +QUnit.module( "Globalize class constructor" ); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "locale", function() { + new Globalize(); + }); + + util.assertParameterPresence( assert, "locale", function() { + Globalize(); + }); + + util.assertLocaleParameter( assert, "locale", function( invalidValue ) { + return function() { + new Globalize( invalidValue ); + }; + }); + + util.assertLocaleParameter( assert, "locale", function( invalidValue ) { + return function() { + Globalize( invalidValue ); + }; + }); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/core/load.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/core/load.js new file mode 100644 index 000000000..a9407b0a6 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/core/load.js @@ -0,0 +1,20 @@ +define([ + "globalize", + "../../util" +], function( Globalize, util ) { + +QUnit.module( "Globalize.load( cldrJSONData )" ); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "json", function() { + Globalize.load(); + }); + + util.assertCldrJsonDataParameter( assert, "json", function( invalidValue ) { + return function() { + Globalize.load( invalidValue ); + }; + }); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/core/locale.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/core/locale.js new file mode 100644 index 000000000..90382d6df --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/core/locale.js @@ -0,0 +1,50 @@ +define([ + "globalize", + "../../util", + + "globalize/date", + "globalize/message", + "globalize/number" +], function( Globalize, util ) { + +QUnit.module( "Globalize.locale( [locale|cldr] )" ); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertLocaleOrNullParameter( assert, "locale", function( invalidValue ) { + return function() { + Globalize.locale( invalidValue ); + }; + }); +}); + +QUnit.test( "should validate whether default locale is defined on static calls", function( assert ) { + + // Ensure default locale is not set. + delete Globalize.cldr; + + util.assertDefaultLocalePresence( assert, function() { + Globalize.formatDate( new Date() ); + }); + + util.assertDefaultLocalePresence( assert, function() { + Globalize.formatDateToParts( new Date() ); + }); + + util.assertDefaultLocalePresence( assert, function() { + Globalize.parseDate( "15" ); + }); + + util.assertDefaultLocalePresence( assert, function() { + Globalize.formatNumber( 3 ); + }); + + util.assertDefaultLocalePresence( assert, function() { + Globalize.parseNumber( "3" ); + }); + + util.assertDefaultLocalePresence( assert, function() { + Globalize.formatMessage( "amen" ); + }); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/currency-formatter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/currency-formatter.js new file mode 100644 index 000000000..c1cc72038 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/currency-formatter.js @@ -0,0 +1,160 @@ +define([ + "globalize", + "json!cldr-data/main/de/currencies.json", + "json!cldr-data/main/de/numbers.json", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/zh/currencies.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "globalize/currency", + "globalize/number", + "globalize/plural" +], function( Globalize, deCurrencies, deNumbers, enCurrencies, enNumbers, zhCurrencies, + zhNumbers, currencyData, likelySubtags, plurals, util ) { + +var accounting = { style: "accounting" }, + code = { style: "code" }, + name = { style: "name" }, + narrow = { symbolForm: "narrow" }, + teslaS = 69900; + +function extraSetup() { + Globalize.load( + currencyData, + deCurrencies, + deNumbers, + enCurrencies, + enNumbers, + plurals, + zhCurrencies, + zhNumbers + ); + +} + +QUnit.module( ".currencyFormatter( currency [, options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "currency", function() { + Globalize.currencyFormatter(); + }); + + util.assertCurrencyParameter( assert, "currency", function( invalidValue ) { + return function() { + Globalize.currencyFormatter( invalidValue ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.currencyFormatter( "USD", invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.currencyFormatter( "USD" ); + }); +}); + +QUnit.test( "should un-register event listener", function( assert ) { + try { + Globalize.currencyFormatter( "USD" ); + } catch ( error ) { + assert.equal( Globalize.cldr.ee.getListeners( "get" ).length, 0 ); + } +}); + +QUnit.test( "should return a currency formatter", function( assert ) { + var de, zh; + + extraSetup(); + + de = Globalize( "de" ); + zh = Globalize( "zh" ); + + assert.equal( Globalize.currencyFormatter( "USD" )( teslaS ), "$69,900.00" ); + assert.equal( de.currencyFormatter( "USD" )( teslaS ), "69.900,00 $" ); + assert.equal( zh.currencyFormatter( "USD" )( teslaS ), "US$69,900.00" ); + + assert.equal( Globalize.currencyFormatter( "USD" )( -teslaS ), "-$69,900.00" ); + assert.equal( de.currencyFormatter( "USD" )( -teslaS ), "-69.900,00 $" ); + assert.equal( zh.currencyFormatter( "USD" )( -teslaS ), "-US$69,900.00" ); + + assert.equal( Globalize.currencyFormatter( "HKD", narrow )( teslaS ), "$69,900.00" ); + + assert.equal( Globalize.currencyFormatter( "USD", code )( teslaS ), "USD 69,900.00" ); + assert.equal( de.currencyFormatter( "USD", code )( teslaS ), "69.900,00 USD" ); + assert.equal( zh.currencyFormatter( "USD", code )( teslaS ), "USD 69,900.00" ); + + assert.equal( Globalize.currencyFormatter( "USD", name )( teslaS ), "69,900.00 US dollars" ); + assert.equal( de.currencyFormatter( "USD", name )( teslaS ), "69.900,00 US-Dollar" ); + assert.equal( zh.currencyFormatter( "USD", name )( teslaS ), "69,900.00美元" ); + + assert.equal( Globalize.currencyFormatter( "USD", accounting )( -1 ), "($1.00)" ); +}); + +// The number of decimal places and the rounding for each currency is not locale-specific data. +// Those values are overriden by Supplemental Currency Data. +QUnit.test( "should return a currency formatter, overriden by Supplemental Currency Data", + function( assert ) { + extraSetup(); + + assert.equal( Globalize.currencyFormatter( "CLF" )( 12345 ), "CLF 12,345.0000" ); + assert.equal( Globalize.currencyFormatter( "CLF" )( 12345.67 ), "CLF 12,345.6700" ); + assert.equal( Globalize.currencyFormatter( "ZWD" )( 12345 ), "ZWD 12,345" ); + assert.equal( Globalize.currencyFormatter( "ZWD" )( 12345.67 ), "ZWD 12,346" ); + assert.equal( Globalize.currencyFormatter( "JPY" )( 12345.67 ), "¥12,346" ); + + assert.equal( Globalize.currencyFormatter( "CLF", code )( 12345.67 ), + "CLF 12,345.6700" ); + + assert.equal( Globalize.currencyFormatter( "CLF", name )( 12345.67 ), + "12,345.6700 Chilean units of account (UF)" ); +}); + +// User options should override everything. +QUnit.test( "should return a currency formatter, overriden by user options", + function( assert ) { + extraSetup(); + + assert.equal( Globalize.currencyFormatter( "CLF", { + minimumFractionDigits: 0 + })( 12345 ), "CLF 12,345" ); + + assert.equal( Globalize.currencyFormatter( "JPY", { + maximumFractionDigits: 0 + })( 12345 ), "¥12,345" ); + + assert.equal( Globalize.currencyFormatter( "JPY", { + minimumFractionDigits: 2 + })( 12345 ), "¥12,345.00" ); + + assert.equal( Globalize.currencyFormatter( "CLF", { + style: "code", + minimumFractionDigits: 0 + })( 12345 ), "CLF 12,345" ); + + assert.equal( Globalize.currencyFormatter( "CLF", { + style: "name", + minimumFractionDigits: 0 + })( 12345 ), "12,345 Chilean units of account (UF)" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/currency-to-parts-formatter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/currency-to-parts-formatter.js new file mode 100644 index 000000000..a14b5a369 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/currency-to-parts-formatter.js @@ -0,0 +1,828 @@ +define([ + "globalize", + "json!cldr-data/main/de/currencies.json", + "json!cldr-data/main/de/numbers.json", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/zh/currencies.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "globalize/currency", + "globalize/number", + "globalize/plural" +], function( Globalize, deCurrencies, deNumbers, enCurrencies, enNumbers, zhCurrencies, + zhNumbers, currencyData, likelySubtags, plurals, util ) { + +var accounting = { style: "accounting" }, + code = { style: "code" }, + name = { style: "name" }, + narrow = { symbolForm: "narrow" }, + teslaS = 69900; + +function extraSetup() { + Globalize.load( + currencyData, + deCurrencies, + deNumbers, + enCurrencies, + enNumbers, + plurals, + zhCurrencies, + zhNumbers + ); + +} + +QUnit.module( ".currencyToPartsFormatter( currency [, options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "currency", function() { + Globalize.currencyToPartsFormatter(); + }); + + util.assertCurrencyParameter( assert, "currency", function( invalidValue ) { + return function() { + Globalize.currencyToPartsFormatter( invalidValue ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.currencyToPartsFormatter( "USD", invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.currencyToPartsFormatter( "USD" ); + }); +}); + +QUnit.test( "should un-register event listener", function( assert ) { + try { + Globalize.currencyToPartsFormatter( "USD" ); + } catch ( error ) { + assert.equal( Globalize.cldr.ee.getListeners( "get" ).length, 0 ); + } +}); + +QUnit.test( "should return a currency formatter", function( assert ) { + var de, zh; + + extraSetup(); + + de = Globalize( "de" ); + zh = Globalize( "zh" ); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "USD" )( teslaS ), [ + { + "type": "currency", + "value": "$" + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); + assert.deepEqual( de.currencyToPartsFormatter( "USD" )( teslaS ), [ + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "." + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "," + }, + { + "type": "fraction", + "value": "00" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "$" + } + ]); + assert.deepEqual( zh.currencyToPartsFormatter( "USD" )( teslaS ), [ + { + "type": "currency", + "value": "US$" + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "USD" )( -teslaS ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "currency", + "value": "$" + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); + assert.deepEqual( de.currencyToPartsFormatter( "USD" )( -teslaS ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "." + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "," + }, + { + "type": "fraction", + "value": "00" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "$" + } + ]); + assert.deepEqual( zh.currencyToPartsFormatter( "USD" )( -teslaS ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "currency", + "value": "US$" + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "HKD", narrow )( teslaS ), [ + { + "type": "currency", + "value": "$" + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "USD", code )( teslaS ), [ + { + "type": "currency", + "value": "USD" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); + assert.deepEqual( de.currencyToPartsFormatter( "USD", code )( teslaS ), [ + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "." + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "," + }, + { + "type": "fraction", + "value": "00" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "USD" + } + ]); + assert.deepEqual( zh.currencyToPartsFormatter( "USD", code )( teslaS ), [ + { + "type": "currency", + "value": "USD" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "USD", name )( teslaS ), [ + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "US dollars" + } + ]); + assert.deepEqual( de.currencyToPartsFormatter( "USD", name )( teslaS ), [ + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "." + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "," + }, + { + "type": "fraction", + "value": "00" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "US-Dollar" + } + ]); + assert.deepEqual( zh.currencyToPartsFormatter( "USD", name )( teslaS ), [ + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + }, + { + "type": "currency", + "value": "美元" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "USD", accounting )( -1 ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "currency", + "value": "$" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + }, + { + "type": "literal", + "value": ")" + } + ]); +}); + +// The number of decimal places and the rounding for each currency is not locale-specific data. +// Those values are overriden by Supplemental Currency Data. +QUnit.test( "should return a currency formatter, overriden by Supplemental Currency Data", + function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "CLF" )( 12345 ), [ + { + "type": "currency", + "value": "CLF" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "0000" + } + ]); + assert.deepEqual( Globalize.currencyToPartsFormatter( "CLF" )( 12345.67 ), [ + { + "type": "currency", + "value": "CLF" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "6700" + } + ]); + assert.deepEqual( Globalize.currencyToPartsFormatter( "ZWD" )( 12345 ), [ + { + "type": "currency", + "value": "ZWD" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + } + ]); + assert.deepEqual( Globalize.currencyToPartsFormatter( "ZWD" )( 12345.67 ), [ + { + "type": "currency", + "value": "ZWD" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "346" + } + ]); + assert.deepEqual( Globalize.currencyToPartsFormatter( "JPY" )( 12345.67 ), [ + { + "type": "currency", + "value": "¥" + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "346" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "CLF", code )( 12345.67 ), [ + { + "type": "currency", + "value": "CLF" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "6700" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "CLF", name )( 12345.67 ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "6700" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "Chilean units of account (UF)" + } + ]); +}); + +// User options should override everything. +QUnit.test( "should return a currency formatter, overriden by user options", + function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "CLF", { + minimumFractionDigits: 0 + })( 12345 ), [ + { + "type": "currency", + "value": "CLF" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "JPY", { + maximumFractionDigits: 0 + })( 12345 ), [ + { + "type": "currency", + "value": "¥" + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "JPY", { + minimumFractionDigits: 2 + })( 12345 ), [ + { + "type": "currency", + "value": "¥" + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "CLF", { + style: "code", + minimumFractionDigits: 0 + })( 12345 ), [ + { + "type": "currency", + "value": "CLF" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + } + ]); + + assert.deepEqual( Globalize.currencyToPartsFormatter( "CLF", { + style: "name", + minimumFractionDigits: 0 + })( 12345 ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "Chilean units of account (UF)" + } + ]); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/format-currency-to-parts.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/format-currency-to-parts.js new file mode 100644 index 000000000..b82f13a4d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/format-currency-to-parts.js @@ -0,0 +1,101 @@ +define([ + "globalize", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "globalize/currency", + "globalize/number" +], function( Globalize, enCurrencies, enNumbers, currencyData, likelySubtags, plurals, util ) { + +var teslaS = 69900; + +function extraSetup() { + Globalize.load( + currencyData, + enCurrencies, + enNumbers, + plurals + ); +} + +QUnit.module( ".formatCurrencyToParts( value, currency [, options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.formatCurrencyToParts(); + }); + + util.assertNumberParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.formatCurrencyToParts( invalidValue ); + }; + }); + + util.assertParameterPresence( assert, "currency", function() { + Globalize.formatCurrencyToParts( 7 ); + }); + + util.assertCurrencyParameter( assert, "currency", function( invalidValue ) { + return function() { + Globalize.formatCurrencyToParts( 7, invalidValue ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.formatCurrencyToParts( 7, "USD", invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.formatCurrencyToParts( 7, "USD" ); + }); +}); + +QUnit.test( "should format currencies", function( assert ) { + extraSetup(); + assert.deepEqual( Globalize.formatCurrencyToParts( teslaS, "USD" ), [ + { + "type": "currency", + "value": "$" + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/format-currency.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/format-currency.js new file mode 100644 index 000000000..eb65f6dc5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/currency/format-currency.js @@ -0,0 +1,76 @@ +define([ + "globalize", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "globalize/currency", + "globalize/number" +], function( Globalize, enCurrencies, enNumbers, currencyData, likelySubtags, plurals, util ) { + +var teslaS = 69900; + +function extraSetup() { + Globalize.load( + currencyData, + enCurrencies, + enNumbers, + plurals + ); +} + +QUnit.module( ".formatCurrency( value, currency [, options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.formatCurrency(); + }); + + util.assertNumberParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.formatCurrency( invalidValue ); + }; + }); + + util.assertParameterPresence( assert, "currency", function() { + Globalize.formatCurrency( 7 ); + }); + + util.assertCurrencyParameter( assert, "currency", function( invalidValue ) { + return function() { + Globalize.formatCurrency( 7, invalidValue ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.formatCurrency( 7, "USD", invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.formatCurrency( 7, "USD" ); + }); +}); + +QUnit.test( "should format currencies", function( assert ) { + extraSetup(); + assert.equal( Globalize.formatCurrency( teslaS, "USD" ), "$69,900.00" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/date-formatter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/date-formatter.js new file mode 100644 index 000000000..850324e16 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/date-formatter.js @@ -0,0 +1,106 @@ +define([ + "globalize", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "../../util", + + "globalize/date" +], function( Globalize, enNumbers, enCaGregorian, likelySubtags, numberingSystems, timeData, + weekData, util ) { + +var date = new Date( 2010, 8, 15, 17, 35, 7, 369 ); + +function extraSetup() { + Globalize.load( + enCaGregorian, + enNumbers, + numberingSystems, + timeData, + weekData + ); +} + +QUnit.module( ".dateFormatter( pattern )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertPlainObjectParameter( assert, "options", function( invalidPattern ) { + return function() { + Globalize.dateFormatter( invalidPattern ); + }; + }); + + assert.throws(function() { + Globalize.dateFormatter({ date: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*date.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.dateFormatter({ time: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*time.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.dateFormatter({ datetime: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*datetime.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.dateFormatter({ skeleton: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*skeleton.*invalid-stuff/ ); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + Globalize.load({ + "main": { + "en": { + "dates": { + "calendars": { + "gregorian": { + "dateTimeFormats": { + "availableFormats": { + "MMMd": "MMM d" + } + } + } + } + } + } + } + }); + util.assertCldrContent( assert, function() { + Globalize.dateFormatter({ skeleton: "MMMd" }); + }); +}); + +QUnit.test( "should return a formatter", function( assert ) { + extraSetup(); + + assert.equal( Globalize.dateFormatter({ skeleton: "GyMMMEd" })( date ), "Wed, Sep 15, 2010 AD" ); + assert.equal( Globalize.dateFormatter({ skeleton: "dhms" })( date ), "15, 5:35:07 PM" ); + assert.equal( Globalize.dateFormatter({ skeleton: "GyMMMEdhms" })( date ), "Wed, Sep 15, 2010 AD, 5:35:07 PM" ); + assert.equal( Globalize.dateFormatter({ skeleton: "GyMMMEdhmsSSS" })( date ), "Wed, Sep 15, 2010 AD, 5:35:07.369 PM" ); + assert.equal( Globalize.dateFormatter({ skeleton: "Ems" })( date ), "Wed, 35:07" ); + assert.equal( Globalize.dateFormatter({ skeleton: "yQQQhm" })( date ), "Q3 2010, 5:35 PM" ); +}); + +QUnit.test( "should augment a skeleton", function( assert ) { + extraSetup(); + + assert.equal( Globalize.dateFormatter({ skeleton: "yMMMMd" })( date ), "September 15, 2010" ); + assert.equal( Globalize.dateFormatter({ skeleton: "MMMMd" })( date ), "September 15" ); + assert.equal( Globalize.dateFormatter({ skeleton: "MMMM" })( date ), "September" ); + assert.equal( Globalize.dateFormatter({ skeleton: "EEEE" })( date ), "Wednesday" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/date-parser.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/date-parser.js new file mode 100644 index 000000000..637505183 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/date-parser.js @@ -0,0 +1,122 @@ +define([ + "globalize", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/pt/ca-gregorian.json", + "json!cldr-data/main/pt/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "../../util", + + "globalize/date" +], function( Globalize, enCaGregorian, enNumbers, ptCaGregorian, ptNumbers, likelySubtags, + numberingSystems, timeData, weekData, util ) { + +function assertParseDate( assert, input, options, output ) { + assert.deepEqual( Globalize.dateParser( options )( input ), output, JSON.stringify( options ) ); +} + +function extraSetup() { + Globalize.load( + enCaGregorian, + enNumbers, + ptCaGregorian, + ptNumbers, + numberingSystems, + timeData, + weekData + ); +} + +QUnit.module( ".dateParser( pattern )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.dateParser( invalidValue ); + }; + }); + + assert.throws(function() { + Globalize.dateParser({ date: "invalid-stuff" }); + }, function( error ) { + return error.code === "E_INVALID_OPTIONS" && + error.type === "date" && + error.value === "invalid-stuff"; + }, /E_INVALID_OPTIONS.*date.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.dateParser({ time: "invalid-stuff" }); + }, function( error ) { + return error.code === "E_INVALID_OPTIONS" && + error.type === "time" && + error.value === "invalid-stuff"; + }, /E_INVALID_OPTIONS.*time.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.dateParser({ datetime: "invalid-stuff" }); + }, function( error ) { + return error.code === "E_INVALID_OPTIONS" && + error.type === "datetime" && + error.value === "invalid-stuff"; + }, /E_INVALID_OPTIONS.*datetime.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.dateParser({ skeleton: "invalid-stuff" }); + }, function( error ) { + return error.code === "E_INVALID_OPTIONS" && + error.type === "skeleton" && + error.value === "invalid-stuff"; + }, /E_INVALID_OPTIONS.*skeleton.*invalid-stuff/ ); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + Globalize.load({ + "main": { + "en": { + "dates": { + "calendars": { + "gregorian": { + "dateTimeFormats": { + "availableFormats": { + "MMMd": "MMM d" + } + } + } + } + } + } + } + }); + util.assertCldrContent( assert, function() { + Globalize.dateParser({ skeleton: "MMMd" } ); + }); +}); + +QUnit.test( "should un-register event listener", function( assert ) { + try { + Globalize.dateParser({ skeleton: "invalid-stuff" }); + } catch ( error ) { + assert.equal( Globalize.cldr.ee.getListeners( "get" ).length, 0 ); + } +}); + +QUnit.test( "should return a parser", function( assert ) { + extraSetup(); + assertParseDate( assert, "Wed, Sep 15, 2010 AD", { skeleton: "GyMMMEd" }, + new Date( 2010, 8, 15 ) ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/date-to-parts-formatter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/date-to-parts-formatter.js new file mode 100644 index 000000000..6db005544 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/date-to-parts-formatter.js @@ -0,0 +1,297 @@ +define([ + "globalize", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "../../util", + + "globalize/date" +], function( Globalize, enNumbers, enCaGregorian, likelySubtags, numberingSystems, timeData, + weekData, util ) { + +var date = new Date( 2010, 8, 15, 17, 35, 7, 369 ); + +function extraSetup() { + Globalize.load( + enCaGregorian, + enNumbers, + numberingSystems, + timeData, + weekData + ); +} + +QUnit.module( ".dateToPartsFormatter( pattern )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertPlainObjectParameter( assert, "options", function( invalidPattern ) { + return function() { + Globalize.dateToPartsFormatter( invalidPattern ); + }; + }); + + assert.throws(function() { + Globalize.dateToPartsFormatter({ date: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*date.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.dateToPartsFormatter({ time: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*time.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.dateToPartsFormatter({ datetime: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*datetime.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.dateToPartsFormatter({ skeleton: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*skeleton.*invalid-stuff/ ); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + Globalize.load({ + "main": { + "en": { + "dates": { + "calendars": { + "gregorian": { + "dateTimeFormats": { + "availableFormats": { + "MMMd": "MMM d" + } + } + } + } + } + } + } + }); + util.assertCldrContent( assert, function() { + Globalize.dateToPartsFormatter({ skeleton: "MMMd" }); + }); +}); + +QUnit.test( "should return a formatter", function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.dateToPartsFormatter({ skeleton: "GyMMMEd" })( date ), [ + { + "type": "weekday", + "value": "Wed" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "month", + "value": "Sep" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "year", + "value": "2010" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "era", + "value": "AD" + } + ]); + assert.deepEqual( Globalize.dateToPartsFormatter({ skeleton: "dhms" })( date ), [ + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "hour", + "value": "5" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "35" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "second", + "value": "07" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "PM" + } + ]); + assert.deepEqual( Globalize.dateToPartsFormatter({ skeleton: "GyMMMEdhms" })( date ), [ + { + "type": "weekday", + "value": "Wed" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "month", + "value": "Sep" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "year", + "value": "2010" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "era", + "value": "AD" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "hour", + "value": "5" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "35" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "second", + "value": "07" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "PM" + } + ]); + assert.deepEqual( Globalize.dateToPartsFormatter({ skeleton: "Ems" })( date ), [ + { + "type": "weekday", + "value": "Wed" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "minute", + "value": "35" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "second", + "value": "07" + } + ]); + assert.deepEqual( Globalize.dateToPartsFormatter({ skeleton: "yQQQhm" })( date ), [ + { + "type": "quarter", + "value": "Q3" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "year", + "value": "2010" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "hour", + "value": "5" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "35" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "PM" + } + ]); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/format-date-to-parts.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/format-date-to-parts.js new file mode 100644 index 000000000..f7bdf54df --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/format-date-to-parts.js @@ -0,0 +1,698 @@ +define([ + "globalize", + "json!cldr-data/main/ar/ca-gregorian.json", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/ar/timeZoneNames.json", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/pt/ca-gregorian.json", + "json!cldr-data/main/pt/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "json!iana-tz-data.json", + "../../util", + + "globalize/date" +], function( Globalize, arCaGregorian, arNumbers, arTimeZoneNames, enCaGregorian, enNumbers, + enTimeZoneNames, ptCaGregorian, ptNumbers, likelySubtags, numberingSystems, timeData, weekData, + ianaTimezoneData, util ) { + +var ar, + date = new Date( 2010, 8, 15, 17, 35, 7, 369 ); + +function extraSetup() { + Globalize.load( + arCaGregorian, + arNumbers, + arTimeZoneNames, + enCaGregorian, + enNumbers, + enTimeZoneNames, + numberingSystems, + ptCaGregorian, + ptNumbers, + timeData, + weekData + ); + Globalize.loadTimeZone( ianaTimezoneData ); +} + +QUnit.module( ".formatDateToParts( value, options )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters (1/2)", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.formatDateToParts(); + }); + + util.assertDateParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.formatDateToParts( invalidValue, "GyMMMEd" ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidPattern ) { + return function() { + Globalize.formatDateToParts( date, invalidPattern ); + }; + }); + + assert.throws(function() { + Globalize.formatDateToParts(date, { date: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*date.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.formatDateToParts(date, { time: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*time.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.formatDateToParts(date, { datetime: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*datetime.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.formatDateToParts(date, { skeleton: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*skeleton.*invalid-stuff/ ); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + Globalize.load({ + "main": { + "en": { + "dates": { + "calendars": { + "gregorian": { + "dateTimeFormats": { + "availableFormats": { + "MMMd": "MMM d" + } + } + } + } + } + } + } + }); + util.assertCldrContent( assert, function() { + Globalize.formatDateToParts( date, { skeleton: "MMMd" }); + }); +}); + +QUnit.test( "should un-register event listener", function( assert ) { + try { + Globalize.formatDateToParts( date, { skeleton: "invalid-stuff" } ); + } catch ( error ) { + assert.equal( Globalize.cldr.ee.getListeners( "get" ).length, 0 ); + } +}); + +QUnit.test( "should validate parameters (2/2)", function( assert ) { + extraSetup(); + + // Use the default style when passing {timeZone} only. + assert.deepEqual( Globalize.formatDateToParts( new Date( "2010-09-15T08:00:00Z" ), { timeZone: "America/Los_Angeles" } ), [ + { type: "month", value: "9" }, + { type: "literal", value: "/" }, + { type: "day", value: "15" }, + { type: "literal", value: "/" }, + { type: "year", value: "2010" } + ]); + + assert.throws(function() { + Globalize.formatDateToParts( date, { timeZone: "invalid-time-zone" }); + }, /E_MISSING_IANA_TZ.*Missing required IANA timezone content.*invalid-time-zone/ ); +}); + +QUnit.test( "should format skeleton to parts", function( assert ) { + extraSetup(); + + ar = Globalize( "ar" ); + + assert.deepEqual( Globalize.formatDateToParts( date, { skeleton: "d" } ), [ + { + "type": "day", + "value": "15" + } + ]); + + assert.deepEqual( Globalize.formatDateToParts( date, { skeleton: "Ed" } ), [ + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "weekday", + "value": "Wed" + } + ]); + + assert.deepEqual( Globalize.formatDateToParts( date, { skeleton: "Ehms" } ), [ + { + "type": "weekday", + "value": "Wed" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "hour", + "value": "5" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "35" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "second", + "value": "07" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "PM" + } + ]); + + assert.deepEqual( Globalize.formatDateToParts( date, { skeleton: "GyMMMEd" } ), [ + { + "type": "weekday", + "value": "Wed" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "month", + "value": "Sep" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "year", + "value": "2010" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "era", + "value": "AD" + } + ]); + + assert.deepEqual( Globalize.formatDateToParts( date, { skeleton: "yMd" } ), [ + { + "type": "month", + "value": "9" + }, + { + "type": "literal", + "value": "/" + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": "/" + }, + { + "type": "year", + "value": "2010" + } + ]); + + assert.deepEqual( Globalize.formatDateToParts( date, { skeleton: "yQQQ" } ), [ + { + "type": "quarter", + "value": "Q3" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "year", + "value": "2010" + } + ]); + + assert.deepEqual( ar.formatDateToParts( date, { skeleton: "yQQQ" } ), [ + { + "type": "quarter", + "value": "الربع الثالث" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "year", + "value": "٢٠١٠" + } + ]); + + // Via instance .formatDateToParts(). + assert.deepEqual( Globalize( "pt" ).formatDateToParts( date, { skeleton: "Ehms" } ), [ + { + "type": "weekday", + "value": "qua" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "hour", + "value": "5" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "35" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "second", + "value": "07" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "PM" + } + ]); + + assert.deepEqual( Globalize( "pt" ).formatDateToParts( date, { skeleton: "GyMMMEd" } ), [ + { + "type": "weekday", + "value": "qua" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": " de " + }, + { + "type": "month", + "value": "set" + }, + { + "type": "literal", + "value": " de " + }, + { + "type": "year", + "value": "2010" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "era", + "value": "d.C." + } + ]); +}); + +QUnit.test( "should format time presets", function( assert ) { + extraSetup(); + + ar = Globalize( "ar" ); + + assert.deepEqual( Globalize.formatDateToParts( date, { time: "medium" } ), [ + { + "type": "hour", + "value": "5" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "35" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "second", + "value": "07" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "PM" + } + ]); + + assert.deepEqual( ar.formatDateToParts( date, { time: "medium" } ), [ + { + "type": "hour", + "value": "٥" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "٣٥" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "second", + "value": "٠٧" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "م" + } + ]); + + assert.deepEqual( Globalize.formatDateToParts( date, { time: "short" } ), [ + { + "type": "hour", + "value": "5" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "35" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "PM" + } + ]); + + assert.deepEqual( ar.formatDateToParts( date, { time: "short" } ), [ + { + "type": "hour", + "value": "٥" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "٣٥" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "م" + } + ]); +}); + +QUnit.test( "should format date presets", function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.formatDateToParts( date, { date: "full" } ), + [ + { + "type": "weekday", + "value": "Wednesday" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "month", + "value": "September" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "year", + "value": "2010" + } + ]); + + assert.deepEqual( Globalize.formatDateToParts( date, { date: "long" } ), + [ + { + "type": "month", + "value": "September" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "year", + "value": "2010" + } + ]); + + assert.deepEqual( Globalize.formatDateToParts( date, { date: "medium" } ), + [ + { + "type": "month", + "value": "Sep" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "year", + "value": "2010" + } + ]); + + assert.deepEqual( Globalize.formatDateToParts( date, { date: "short" } ), [ + { + "type": "month", + "value": "9" + }, + { + "type": "literal", + "value": "/" + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": "/" + }, + { + "type": "year", + "value": "10" + } + ]); +}); + +QUnit.test( "should format datetime presets", function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.formatDateToParts( date, { datetime: "medium" } ), [ + { + "type": "month", + "value": "Sep" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "year", + "value": "2010" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "hour", + "value": "5" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "35" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "second", + "value": "07" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "dayperiod", + "value": "PM" + } + ]); +}); + +QUnit.test( "should format raw patterns", function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.formatDateToParts( date, { raw: "E, MMM d, y G" } ), [ + { + "type": "weekday", + "value": "Wed" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "month", + "value": "Sep" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "day", + "value": "15" + }, + { + "type": "literal", + "value": ", " + }, + { + "type": "year", + "value": "2010" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "era", + "value": "AD" + } + ]); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/format-date.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/format-date.js new file mode 100644 index 000000000..b5e37bdfc --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/format-date.js @@ -0,0 +1,214 @@ +define([ + "globalize", + "json!cldr-data/main/ar/ca-gregorian.json", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/ar/timeZoneNames.json", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/pt/ca-gregorian.json", + "json!cldr-data/main/pt/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/metaZones.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "json!iana-tz-data.json", + "../../util", + + "globalize/date" +], function( Globalize, arCaGregorian, arNumbers, arTimeZoneNames, enCaGregorian, enNumbers, + enTimeZoneNames, ptCaGregorian, ptNumbers, likelySubtags, metaZones, numberingSystems, timeData, + weekData, ianaTimezoneData, util ) { + +var ar, + date = new Date( 2010, 8, 15, 17, 35, 7, 369 ); + +function extraSetup() { + Globalize.load( + arCaGregorian, + arNumbers, + arTimeZoneNames, + enCaGregorian, + enNumbers, + enTimeZoneNames, + metaZones, + numberingSystems, + ptCaGregorian, + ptNumbers, + timeData, + weekData + ); + Globalize.loadTimeZone( ianaTimezoneData ); +} + +QUnit.module( ".formatDate( value, options )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters (1/2)", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.formatDate(); + }); + + util.assertDateParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.formatDate( invalidValue, "GyMMMEd" ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidPattern ) { + return function() { + Globalize.formatDate( date, invalidPattern ); + }; + }); + + assert.throws(function() { + Globalize.formatDate(date, { date: "invalid-stuff" }); + }, function( error ) { + return error.code === "E_INVALID_OPTIONS" && + error.type === "date" && + error.value === "invalid-stuff"; + }, /E_INVALID_OPTIONS.*date.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.formatDate(date, { time: "invalid-stuff" }); + }, function( error ) { + return error.code === "E_INVALID_OPTIONS" && + error.type === "time" && + error.value === "invalid-stuff"; + }, /E_INVALID_OPTIONS.*time.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.formatDate(date, { datetime: "invalid-stuff" }); + }, function( error ) { + return error.code === "E_INVALID_OPTIONS" && + error.type === "datetime" && + error.value === "invalid-stuff"; + }, /E_INVALID_OPTIONS.*datetime.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.formatDate(date, { skeleton: "invalid-stuff" }); + }, function( error ) { + return error.code === "E_INVALID_OPTIONS" && + error.type === "skeleton" && + error.value === "invalid-stuff"; + }, /E_INVALID_OPTIONS.*skeleton.*invalid-stuff/ ); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + Globalize.load({ + "main": { + "en": { + "dates": { + "calendars": { + "gregorian": { + "dateTimeFormats": { + "availableFormats": { + "MMMd": "MMM d" + } + } + } + } + } + } + } + }); + util.assertCldrContent( assert, function() { + Globalize.formatDate( date, { skeleton: "MMMd" }); + }); +}); + +QUnit.test( "should validate parameters (2/2)", function( assert ) { + extraSetup(); + + // Use the default style when passing {timeZone} only. + assert.equal( Globalize.formatDate( new Date( "2010-09-15T08:00:00Z" ), { timeZone: "America/Los_Angeles" } ), "9/15/2010" ); + + assert.throws(function() { + Globalize.formatDate( date, { timeZone: "invalid-time-zone" }); + }, /E_MISSING_IANA_TZ.*Missing required IANA timezone content.*invalid-time-zone/ ); +}); + +QUnit.test( "should format skeleton", function( assert ) { + extraSetup(); + + ar = Globalize( "ar" ); + + assert.equal( Globalize.formatDate( date, { skeleton: "d" } ), "15" ); + assert.equal( Globalize.formatDate( date, { skeleton: "Ed" } ), "15 Wed" ); + assert.equal( Globalize.formatDate( date, { skeleton: "Ehms" } ), "Wed 5:35:07 PM" ); + assert.equal( Globalize.formatDate( date, { skeleton: "GyMMMEd" } ), "Wed, Sep 15, 2010 AD" ); + assert.equal( Globalize.formatDate( date, { skeleton: "yMd" } ), "9/15/2010" ); + assert.equal( Globalize.formatDate( date, { skeleton: "yQQQ" } ), "Q3 2010" ); + assert.equal( ar.formatDate( date, { skeleton: "yQQQ" } ), "الربع الثالث ٢٠١٠" ); + + // Via instance .formatDate(). + assert.equal( Globalize( "pt" ).formatDate( date, { skeleton: "Ehms" } ), "qua, 5:35:07 PM" ); + assert.equal( Globalize( "pt" ).formatDate( date, { skeleton: "GyMMMEd" } ), "qua, 15 de set de 2010 d.C." ); +}); + +QUnit.test( "should format time presets", function( assert ) { + extraSetup(); + + ar = Globalize( "ar" ); + + assert.equal( Globalize.formatDate( date, { time: "medium" } ), "5:35:07 PM" ); + assert.equal( ar.formatDate( date, { time: "medium" } ), "٥:٣٥:٠٧ م" ); + + assert.equal( Globalize.formatDate( date, { time: "short" } ), "5:35 PM" ); + assert.equal( ar.formatDate( date, { time: "short" } ), "٥:٣٥ م" ); +}); + +QUnit.test( "should format date presets", function( assert ) { + extraSetup(); + + assert.equal( Globalize.formatDate( date, { date: "full" } ), "Wednesday, September 15, 2010" ); + assert.equal( Globalize.formatDate( date, { date: "long" } ), "September 15, 2010" ); + assert.equal( Globalize.formatDate( date, { date: "medium" } ), "Sep 15, 2010" ); + assert.equal( Globalize.formatDate( date, { date: "short" } ), "9/15/10" ); +}); + +QUnit.test( "should format datetime presets", function( assert ) { + extraSetup(); + + assert.equal( Globalize.formatDate( date, { datetime: "medium" } ), "Sep 15, 2010, 5:35:07 PM" ); +}); + +QUnit.test( "should format raw patterns", function( assert ) { + extraSetup(); + + assert.equal( Globalize.formatDate( date, { raw: "E, MMM d, y G" } ), "Wed, Sep 15, 2010 AD" ); +}); + +QUnit.test( "should format date in various timezones", function( assert ) { + var date = new Date( "2010-09-15T16:35:07.000Z" ); + extraSetup(); + + assert.equal( + Globalize.formatDate( date, { datetime: "long", timeZone: "Etc/UTC" } ), + "September 15, 2010 at 4:35:07 PM GMT" + ); + assert.equal( + Globalize.formatDate( date, { datetime: "long", timeZone: "Europe/Berlin" } ), + "September 15, 2010 at 6:35:07 PM GMT+2" + ); + assert.equal( + Globalize.formatDate( date, { datetime: "long", timeZone: "America/Sao_Paulo" } ), + "September 15, 2010 at 1:35:07 PM GMT-3" + ); + assert.equal( + Globalize.formatDate( date, { datetime: "long", timeZone: "America/Los_Angeles" } ), + "September 15, 2010 at 9:35:07 AM PDT" + ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/parse-date.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/parse-date.js new file mode 100644 index 000000000..2e688a01f --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/date/parse-date.js @@ -0,0 +1,295 @@ +define([ + "globalize", + "src/date/start-of", + "json!cldr-data/main/ar/ca-gregorian.json", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/ar/timeZoneNames.json", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/pt/ca-gregorian.json", + "json!cldr-data/main/pt/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/metaZones.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "json!iana-tz-data.json", + "../../util", + + "globalize/date" +], function( Globalize, startOf, arCaGregorian, arNumbers, arTimeZoneNames, enCaGregorian, + enNumbers, enTimeZoneNames, ptCaGregorian, ptNumbers, likelySubtags, metaZones, + numberingSystems, timeData, weekData, ianaTimezoneData, util ) { + +var ar, date; + +function extraSetup() { + Globalize.load( + arCaGregorian, + arNumbers, + arTimeZoneNames, + enCaGregorian, + enNumbers, + enTimeZoneNames, + ptCaGregorian, + ptNumbers, + metaZones, + numberingSystems, + timeData, + weekData + ); + Globalize.loadTimeZone( ianaTimezoneData ); +} + +QUnit.module( ".parseDate( value, options )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +function assertParseDate( assert, input, options, output, globalize ) { + assert.deepEqual( ( globalize || Globalize ).parseDate( input, options ), output, JSON.stringify( options ) ); +} + +QUnit.test( "should validate parameters (1/2)", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.parseDate(); + }); + + util.assertStringParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.parseDate( invalidValue ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.parseDate( "15 Wed", invalidValue ); + }; + }); + + assert.throws(function() { + Globalize.parseDate( "15", { date: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*date.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.parseDate( "15", { time: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*time.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.parseDate( "15", { datetime: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*datetime.*invalid-stuff/ ); + + assert.throws(function() { + Globalize.parseDate( "15", { skeleton: "invalid-stuff" }); + }, /E_INVALID_OPTIONS.*skeleton.*invalid-stuff/ ); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + Globalize.load({ + "main": { + "en": { + "dates": { + "calendars": { + "gregorian": { + "dateTimeFormats": { + "availableFormats": { + "MMMd": "MMM d" + } + } + } + } + } + } + } + }); + util.assertCldrContent( assert, function() { + Globalize.parseDate( "Jan 15", { skeleton: "MMMd" } ); + }); +}); + +QUnit.test( "should validate parameters (2/2)", function( assert ) { + extraSetup(); + + // Use the default style when passing {timeZone} only. + assert.deepEqual( Globalize.parseDate( "5/17/2017", { timeZone: "America/Los_Angeles" } ), new Date( "2017-05-17T07:00:00.000Z" ) ); + + assert.throws(function() { + Globalize.parseDate( "15", { timeZone: "invalid-time-zone" }); + }, /E_MISSING_IANA_TZ.*Missing required IANA timezone content.*invalid-time-zone/ ); +}); + +QUnit.test( "should parse skeleton", function( assert ) { + extraSetup(); + + ar = Globalize( "ar" ); + + date = new Date(); + date.setDate( 15 ); + date = startOf( date, "day" ); + assertParseDate( assert, "15", { skeleton: "d" }, date ); + assertParseDate( assert, "15 Wed", { skeleton: "Ed" }, date ); + + date = new Date(); + date.setHours( 17 ); + date.setMinutes( 35 ); + date.setSeconds( 7 ); + date = startOf( date, "second" ); + assertParseDate( assert, "Wed 5:35:07 PM", { skeleton: "Ehms" }, date ); + + date = new Date(); + date.setHours( 17 ); + date.setMinutes( 35 ); + date.setSeconds( 7 ); + date.setMilliseconds(734); + assertParseDate( assert, "Wed 5:35:07.734 PM", { skeleton: "EhmsSSS" }, date ); + + date = new Date( 2010, 8, 15 ); + date = startOf( date, "day" ); + assertParseDate( assert, "Wed, Sep 15, 2010 AD", { skeleton: "GyMMMEd" }, date ); + assertParseDate( assert, "9/15/2010", { skeleton: "yMd" }, date ); + assertParseDate( assert, "الأربعاء، ١٥ سبتمبر، ٢٠١٠ م", { skeleton: "GyMMMEd" }, date, ar ); + + // Loose matching: ignore control characters. + assertParseDate( assert, "١٥/٩/٢٠١٠", { skeleton: "yMd" }, date, ar ); + + date = new Date( 2010, 0 ); + date = startOf( date, "year" ); + assertParseDate( assert, "Q3 2010", { skeleton: "yQQQ" }, date ); + assertParseDate( assert, "الربع الثالث ٢٠١٠", { skeleton: "yQQQ" }, date, ar ); + + // Via instance globalize.parseDate(). + assert.deepEqual( Globalize( "pt" ).parseDate( "2010 T3", { skeleton: "yQQQ" } ), date, "{ skeleton: \"yQQQ\" }" ); +}); + +QUnit.test( "should parse time presets", function( assert ) { + extraSetup(); + + ar = Globalize( "ar" ); + + date = new Date(); + date.setHours( 17 ); + date.setMinutes( 35 ); + date.setSeconds( 7 ); + date = startOf( date, "second" ); + assertParseDate( assert, "5:35:07 PM", { time: "medium" }, date ); + assertParseDate( assert, "٥:٣٥:٠٧ م", { time: "medium" }, date, ar ); + date = startOf( date, "minute" ); + assertParseDate( assert, "5:35 PM", { time: "short" }, date ); + assertParseDate( assert, "٥:٣٥ م", { time: "short" }, date, ar ); +}); + +QUnit.test( "should parse date presets", function( assert ) { + extraSetup(); + + date = new Date( 2010, 8, 15 ); + date = startOf( date, "day" ); + assertParseDate( assert, "Wednesday, September 15, 2010", { date: "full" }, date ); + assertParseDate( assert, "September 15, 2010", { date: "long" }, date ); + assertParseDate( assert, "Sep 15, 2010", { date: "medium" }, date ); + assertParseDate( assert, "9/15/10", { date: "short" }, date ); +}); + +QUnit.test( "should parse datetime presets", function( assert ) { + extraSetup(); + + date = new Date( 2010, 8, 15 ); + date = startOf( date, "day" ); + assertParseDate( assert, "Wednesday, September 15, 2010", { date: "full" }, date ); + + date = new Date( 2010, 8, 15, 17, 35, 7 ); + date = startOf( date, "second" ); + assertParseDate( assert, "Sep 15, 2010, 5:35:07 PM", { datetime: "medium" }, date ); +}); + +QUnit.test( "should parse raw pattern", function( assert ) { + extraSetup(); + + date = new Date( 2010, 8, 15 ); + date = startOf( date, "day" ); + assertParseDate( assert, "Wed, Sep 15, 2010 AD", { raw: "E, MMM d, y G" }, date ); +}); + +QUnit.test( "should parse date in various timezones", function( assert ) { + var date = new Date( "2010-09-15T16:35:07.000Z" ); + extraSetup(); + + assert.deepEqual( + Globalize.parseDate( "September 15, 2010 at 1:35:07 PM GMT-3", { datetime: "long", timeZone: "America/Sao_Paulo" } ), + date + ); + assert.deepEqual( + Globalize.parseDate( "September 15, 2010 at 9:35:07 AM PDT", { datetime: "long", timeZone: "America/Los_Angeles" } ), + date + ); +}); + +QUnit.test( "should parse a formatted date (reverse operation test)", function( assert ) { + var OrigDate; + + extraSetup(); + + ar = Globalize( "ar" ); + + date = new Date(); + date = startOf( date, "minute" ); + assert.deepEqual( Globalize.parseDate( Globalize.formatDate( date, { datetime: "full" } ), { datetime: "full" } ), date ); + assert.deepEqual( ar.parseDate( ar.formatDate( date, { datetime: "full" } ), { datetime: "full" } ), date ); + + assert.deepEqual( + Globalize.parseDate( + Globalize.formatDate( date, { datetime: "full", timeZone: "America/Los_Angeles" } ), + { datetime: "full", timeZone: "America/Los_Angeles" } + ), + date + ); + assert.deepEqual( + Globalize.parseDate( + Globalize.formatDate( date, { datetime: "long", timeZone: "America/New_York" } ), + { datetime: "long", timeZone: "America/New_York" } + ), + date + ); + assert.deepEqual( + ar.parseDate( + ar.formatDate( date, { datetime: "full", timeZone: "Africa/Cairo" } ), + { datetime: "full", timeZone: "Africa/Cairo" } + ), + date + ); + + // Testing DST edge cases... + // Note we can't reliably parse overlapping times (daylight to standard cases). For example, we + // can't reliably parse "2/18/2017 11:00 PM" for America/Sao_Paulo into + // "2017-02-19T01:00:00.000Z" or "2017-02-19T02:00:00.000Z" without providing the zone string, + // e.g., 11:00 PM BRT or 11:00 PM BRST (both times are valid). Therefore, formatting either one + // should return back the parsed string. + assert.deepEqual( + Globalize.formatDate( + Globalize.parseDate( "2/18/2017 11:00 PM", { raw: "M/d/y h:mm a", timeZone: "America/Sao_Paulo" } ), + { raw: "M/d/y h:mm a", timeZone: "America/Sao_Paulo" } + ), + "2/18/2017 11:00 PM" + ); + + // Test #689 - special test when target date and today are in different DST rules. + // Note it was arbitrarily chosen O, other timezone patterns are supposed to pass too. + // date1 = a DST date (or vice-versa depending on the running environment). + // FakeDate.today = a standard time date (or vice-versa depending on the running environment). + /* globals Date:true */ + OrigDate = Date; + Date = util.FakeDate; + date = new Date( 2017, 6, 1, 12, 0 ); + util.FakeDate.today = new Date( 2017, 0, 1 ); + assert.deepEqual( Globalize.parseDate( Globalize.formatDate( date, { datetime: "full" } ), { datetime: "full" } ), date ); + Date = OrigDate; +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/message/format-message.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/message/format-message.js new file mode 100644 index 000000000..44a0e5e63 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/message/format-message.js @@ -0,0 +1,50 @@ +define([ + "globalize", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "globalize/message", + "globalize/plural" +], function( Globalize, likelySubtags, plurals, util ) { + +QUnit.module( ".formatMessage( path [, variables] )", { + beforeEach: function() { + Globalize.load( likelySubtags ); + Globalize.load( plurals ); + Globalize.loadMessages({ + en: { + greetings: { + hello: "Hello, {name}" + } + } + }); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "path", function() { + Globalize( "en" ).formatMessage(); + }); + + util.assertPathParameter( assert, "path", function( invalidValue ) { + return function() { + Globalize( "en" ).formatMessage( invalidValue ); + }; + }); + + util.assertMessageVariablesType( assert, "variables", function( invalidValue ) { + return function() { + Globalize( "en" ).formatMessage( "greetings/hello", invalidValue ); + }; + }); +}); + +QUnit.test( "should format a message", function( assert ) { + assert.equal( Globalize( "en" ).formatMessage( "greetings/hello", { + name: "Beethoven" + }), "Hello, Beethoven" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/message/message-formatter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/message/message-formatter.js new file mode 100644 index 000000000..c32d4c374 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/message/message-formatter.js @@ -0,0 +1,194 @@ +define([ + "globalize", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "cldr/unresolved", + "globalize/message", + "globalize/plural" +], function( Globalize, likelySubtags, plurals, util ) { + +QUnit.assert.messageFormatter = function( locale, path, variables, expected ) { + if ( arguments.length === 3 ) { + expected = variables; + variables = undefined; + } + this.equal( Globalize( locale ).messageFormatter( path )( variables ), expected ); +}; + +QUnit.assert.messageBundlePresence = function( fn ) { + this.throws( fn, function E_MISSING_MESSAGE_BUNDLE( error ) { + return error.code === "E_MISSING_MESSAGE_BUNDLE" && + "locale" in error; + }, "Expected \"E_MISSING_MESSAGE_BUNDLE\" to be thrown" ); +}; + +QUnit.module( ".messageFormatter( path )", { + beforeEach: function() { + Globalize.load( likelySubtags ); + Globalize.load( plurals ); + Globalize.loadMessages({ + root: { + amen: "Amen" + }, + de: {}, + en: { + greetings: { + hello: "Hello", + helloArray: "Hello, {0}", + helloArray2: "Hello, {0} and {1}", + helloName: "Hello, {name}" + }, + like: [ + "{count, plural, offset:1", + " =0 {Be the first to like this}", + " =1 {You liked this}", + " one {You and {someone} liked this}", + " other {You and # others liked this}", + "}" + ], + party: [ + "{hostGender, select,", + " female {{host} invites {guest} to her party}", + " male {{host} invites {guest} to his party}", + " other {{host} invites {guest} to their party}", + "}" + ], + task: [ + "You have {0, plural,", + " one {one task}", + " other {# tasks}", + "} remaining" + ] + }, + "en-GB": {}, + fr: {}, + pt: { + amen: "Amém" + }, + "pt-PT": {}, + zh: { + amen: "阿门" + } + }); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should pass test's prerequisites", function( assert ) { + var sr = new Globalize( "sr" ); + + // OBS: Ensure `sr` cldr/main dataset hasn't being loaded elsewhere. It's a prerequisites for + // the below messageBundlePresence test. + assert.deepEqual( sr.cldr.attributes.bundle, null, "`sr` cldr/main dataset cannot be loaded" ); +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "path", function() { + Globalize( "en" ).messageFormatter(); + }); + + util.assertPathParameter( assert, "path", function( invalidValue ) { + return function() { + Globalize( "en" ).messageFormatter( invalidValue ); + }; + }); +}); + +QUnit.test( "should validate messages", function( assert ) { + assert.messageBundlePresence(function() { + Globalize( "sr" ).messageFormatter( "path" ); + }); + + util.assertMessagePresence( assert, "non-existent/path", function() { + Globalize( "en" ).messageFormatter( "non-existent/path" ); + }); + + util.assertMessageType( assert, "invalid-message", function( invalidValue ) { + Globalize.loadMessages({ + en: { + "invalid-message": invalidValue + } + }); + return function() { + Globalize( "en" ).messageFormatter( "invalid-message" ); + }; + }); +}); + +QUnit.test( "should return the loaded translation", function( assert ) { + assert.messageFormatter( "pt", "amen", "Amém" ); + assert.messageFormatter( "zh", "amen", "阿门" ); +}); + +QUnit.test( "should traverse the translation data", function( assert ) { + assert.messageFormatter( "en", "greetings/hello", "Hello" ); + assert.messageFormatter( "en", [ "greetings", "hello" ], "Hello" ); +}); + +QUnit.test( "should return inherited translation if cldr/unresolved is loaded", function( assert ) { + assert.messageFormatter( "en", "amen", "Amen" ); + assert.messageFormatter( "de", "amen", "Amen" ); + assert.messageFormatter( "en-GB", "amen", "Amen" ); + assert.messageFormatter( "fr", "amen", "Amen" ); + assert.messageFormatter( "pt-PT", "amen", "Amém" ); +}); + +QUnit.test( "should support ICU message format", function( assert ) { + var like; + + // Var replacement + assert.messageFormatter( "en", "greetings/helloArray", [ "Beethoven" ], "Hello, Beethoven" ); + assert.messageFormatter( "en", "greetings/helloArray", "Beethoven", "Hello, Beethoven" ); + assert.messageFormatter( "en", "greetings/helloArray2", [ "Beethoven", "Mozart" ], + "Hello, Beethoven and Mozart" ); + assert.equal( + Globalize( "en" ).messageFormatter( "greetings/helloArray2" )( "Beethoven", "Mozart" ), + "Hello, Beethoven and Mozart" + ); + assert.messageFormatter( "en", "greetings/helloName", { + name: "Beethoven" + }, "Hello, Beethoven" ); + + // Plural + assert.messageFormatter( "en", "task", 123, "You have 123 tasks remaining" ); + + // Select + assert.messageFormatter( "en", "party", { + guest: "Mozart", + host: "Beethoven", + hostGender: "male" + }, "Beethoven invites Mozart to his party" ); + + // Plural offset + like = new Globalize( "en" ).messageFormatter( "like" ); + assert.equal( like({ count: 0 }), "Be the first to like this" ); + + assert.equal( like({ count: 1 }), "You liked this" ); + + assert.equal( like({ + count: 2, + someone: "Beethoven" + }), "You and Beethoven liked this" ); + + assert.equal( like({ count: 3 }), "You and 2 others liked this" ); +}); + +// Reference #473 +QUnit.test( "should NOT merge array data", function( assert ) { + // Re-loading a message that uses array syntax. + Globalize.loadMessages({ + en: { + task: [ + "You have {0, plural,", + " one {one task}", + " other {# tasks}", + "} remaining" + ] + } + }); + assert.messageFormatter( "en", "task", 123, "You have 123 tasks remaining" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/format-number-to-parts.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/format-number-to-parts.js new file mode 100644 index 000000000..93381771a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/format-number-to-parts.js @@ -0,0 +1,337 @@ +define([ + "globalize", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/es/numbers.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "../../util", + + "globalize/number" +], function( Globalize, arNumbers, enNumbers, esNumbers, zhNumbers, likelySubtags, numberingSystems, + util ) { + +var pi = 3.14159265359; + +function extraSetup() { + Globalize.load( + arNumbers, + enNumbers, + esNumbers, + zhNumbers, + numberingSystems + ); +} + +QUnit.module( ".formatNumberToParts( value [, options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.formatNumberToParts(); + }); + + util.assertNumberParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.formatNumberToParts( invalidValue ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.formatNumberToParts( 7, invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.formatNumberToParts( pi ); + }); +}); + +QUnit.test( "should un-register event listener", function( assert ) { + try { + Globalize.formatNumberToParts( pi ); + } catch ( error ) { + assert.equal( Globalize.cldr.ee.getListeners( "get" ).length, 0 ); + } +}); + +QUnit.test( "should format decimal style", function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.formatNumberToParts( pi ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "142" + } + ]); + assert.deepEqual( Globalize( "es" ).formatNumberToParts( pi ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "," + }, + { + "type": "fraction", + "value": "142" + } + ]); + assert.deepEqual( Globalize( "ar" ).formatNumberToParts( pi ), [ + { + "type": "integer", + "value": "٣" + }, + { + "type": "decimal", + "value": "٫" + }, + { + "type": "fraction", + "value": "١٤٢" + } + ]); + assert.deepEqual( Globalize( "zh-u-nu-native" ).formatNumberToParts( pi ), [ + { + "type": "integer", + "value": "三" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "一四二" + } + ]); + assert.deepEqual( Globalize.formatNumberToParts( 99999999.99 ), [ + { + "type": "integer", + "value": "99" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "999" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "999" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "99" + } + ]); + + assert.deepEqual( Globalize.formatNumberToParts( pi, { + minimumIntegerDigits: 2, + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }), [ + { + "type": "integer", + "value": "03" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( Globalize.formatNumberToParts( pi, { + maximumFractionDigits: 0 + }), [ + { + "type": "integer", + "value": "3" + } + ]); + + assert.deepEqual( Globalize.formatNumberToParts( 1.1, { + minimumFractionDigits: 3 + }), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "100" + } + ]); + + assert.deepEqual( Globalize.formatNumberToParts( pi, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( Globalize.formatNumberToParts( 12345, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "300" + } + ]); + + assert.deepEqual( Globalize.formatNumberToParts( 0.00012345, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "000123" + } + ]); + + assert.deepEqual( Globalize.formatNumberToParts( 0.00010001, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "0001" + } + ]); + + assert.deepEqual( Globalize.formatNumberToParts( 99999999.99, { useGrouping: false } ), [ + { + "type": "integer", + "value": "99999999" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "99" + } + ]); + + assert.deepEqual( Globalize.formatNumberToParts( 0, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "0" + } + ]); +}); + +QUnit.test( "should format percent style", function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.formatNumberToParts( pi, { style: "percent" } ), [ + { + "type": "integer", + "value": "314" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + assert.deepEqual( Globalize( "ar" ).formatNumberToParts( pi, { style: "percent" } ), [ + { + "type": "integer", + "value": "٣١٤" + }, + { + "type": "percentSign", + "value": "٪" + } + ]); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/format-number.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/format-number.js new file mode 100644 index 000000000..8a110b74b --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/format-number.js @@ -0,0 +1,129 @@ +define([ + "globalize", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/es/numbers.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "../../util", + + "globalize/number" +], function( Globalize, arNumbers, enNumbers, esNumbers, zhNumbers, likelySubtags, numberingSystems, + util ) { + +var pi = 3.14159265359; + +function extraSetup() { + Globalize.load( + arNumbers, + enNumbers, + esNumbers, + zhNumbers, + numberingSystems + ); +} + +QUnit.module( ".formatNumber( value [, options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.formatNumber(); + }); + + util.assertNumberParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.formatNumber( invalidValue ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.formatNumber( 7, invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.formatNumber( pi ); + }); +}); + +QUnit.test( "should un-register event listener", function( assert ) { + try { + Globalize.formatNumber( pi ); + } catch ( error ) { + assert.equal( Globalize.cldr.ee.getListeners( "get" ).length, 0 ); + } +}); + +QUnit.test( "should format decimal style", function( assert ) { + extraSetup(); + + assert.equal( Globalize.formatNumber( pi ), "3.142" ); + assert.equal( Globalize( "es" ).formatNumber( pi ), "3,142" ); + assert.equal( Globalize( "ar" ).formatNumber( pi ), "٣٫١٤٢" ); + assert.equal( Globalize( "zh-u-nu-native" ).formatNumber( pi ), "三.一四二" ); + assert.equal( Globalize.formatNumber( 99999999.99 ), "99,999,999.99" ); + + assert.equal( Globalize.formatNumber( pi, { + minimumIntegerDigits: 2, + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }), "03.14" ); + + assert.equal( Globalize.formatNumber( pi, { + maximumFractionDigits: 0 + }), "3" ); + + assert.equal( Globalize.formatNumber( 1.1, { + minimumFractionDigits: 3 + }), "1.100" ); + + assert.equal( Globalize.formatNumber( pi, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), "3.14" ); + + assert.equal( Globalize.formatNumber( 12345, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), "12,300" ); + + assert.equal( Globalize.formatNumber( 0.00012345, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), "0.000123" ); + + assert.equal( Globalize.formatNumber( 0.00010001, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), "0.0001" ); + + assert.equal( Globalize.formatNumber( 99999999.99, { useGrouping: false } ), "99999999.99" ); + + assert.equal( Globalize.formatNumber( 0, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }), "0.0" ); +}); + +QUnit.test( "should format percent style", function( assert ) { + extraSetup(); + + assert.equal( Globalize.formatNumber( pi, { style: "percent" } ), "314%" ); + assert.equal( Globalize( "ar" ).formatNumber( pi, { style: "percent" } ), "٣١٤٪" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/number-formatter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/number-formatter.js new file mode 100644 index 000000000..fed343a07 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/number-formatter.js @@ -0,0 +1,80 @@ +define([ + "globalize", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/es/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "../../util", + + "globalize/number" +], function( Globalize, arNumbers, enNumbers, esNumbers, likelySubtags, util ) { + +var pi = 3.14159265359; + +function extraSetup() { + Globalize.load( + arNumbers, + enNumbers, + esNumbers + ); +} + +QUnit.module( ".numberFormatter( [options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.numberFormatter( invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.numberFormatter(); + }); +}); + +QUnit.test( "should validate options", function( assert ) { + extraSetup(); + + util.assertParameterRange( assert, 1, 21, function( num ) { + Globalize.numberFormatter({ + maximumSignificantDigits: 1, + minimumSignificantDigits: num + }); + }); + util.assertParameterRange( assert, 1, 21, function( num ) { + Globalize.numberFormatter({ + maximumSignificantDigits: num, + minimumSignificantDigits: 1 + }); + }); + util.assertParameterRange( assert, 1, 21, function( num ) { + Globalize.numberFormatter({ minimumIntegerDigits: num } ); + }); + util.assertParameterRange( assert, 0, 20, function( num ) { + Globalize.numberFormatter({ minimumFractionDigits: num } ); + }); + util.assertParameterRange( assert, 0, 20, function( num ) { + Globalize.numberFormatter({ maximumFractionDigits: num } ); + }); +}); + +QUnit.test( "should return a formatter", function( assert ) { + extraSetup(); + + assert.equal( Globalize.numberFormatter()( pi ), "3.142" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/number-parser.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/number-parser.js new file mode 100644 index 000000000..b7d80fd98 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/number-parser.js @@ -0,0 +1,67 @@ +define([ + "globalize", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en-IN/numbers.json", + "json!cldr-data/main/tr-CY/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "../../util", + + "globalize/number" +], function( Globalize, enNumbers, enInNumbers, trCyNumbers, likelySubtags, util ) { + +function extraSetup() { + Globalize.load( enNumbers ); + Globalize.load( enInNumbers ); + Globalize.load( trCyNumbers ); +} + +QUnit.module( ".numberParser( [options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {}, + "en-IN": {}, + "tr-CY": {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.numberParser( invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.numberParser(); + }); +}); + +QUnit.test( "should throw unsupported exception if compact option is set", function( assert ) { + assert.throws(function() { + Globalize.numberParser({ compact: "short" }); + }, /Unsupported.*compact number parsing/); +}); + +QUnit.test( "should return parser", function( assert ) { + extraSetup(); + + assert.equal( Globalize.numberParser()( "3" ), 3 ); + assert.equal( Globalize( "en-IN" ).numberParser()( "76,54,321" ), 7654321 ); + + assert.equal( Globalize.numberParser({ + style: "percent" + })( "50%" ), 0.5 ); + + assert.equal( Globalize( "tr-CY" ).numberParser({ + style: "percent" + })( "%50" ), 0.5 ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/number-to-parts-formatter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/number-to-parts-formatter.js new file mode 100644 index 000000000..445457e10 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/number-to-parts-formatter.js @@ -0,0 +1,93 @@ +define([ + "globalize", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/es/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "../../util", + + "globalize/number" +], function( Globalize, arNumbers, enNumbers, esNumbers, likelySubtags, util ) { + +var pi = 3.14159265359; + +function extraSetup() { + Globalize.load( + arNumbers, + enNumbers, + esNumbers + ); +} + +QUnit.module( ".numberToPartsFormatter( [options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.numberToPartsFormatter( invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.numberToPartsFormatter(); + }); +}); + +QUnit.test( "should validate options", function( assert ) { + extraSetup(); + + util.assertParameterRange( assert, 1, 21, function( num ) { + Globalize.numberToPartsFormatter({ + maximumSignificantDigits: 1, + minimumSignificantDigits: num + }); + }); + util.assertParameterRange( assert, 1, 21, function( num ) { + Globalize.numberToPartsFormatter({ + maximumSignificantDigits: num, + minimumSignificantDigits: 1 + }); + }); + util.assertParameterRange( assert, 1, 21, function( num ) { + Globalize.numberToPartsFormatter({ minimumIntegerDigits: num } ); + }); + util.assertParameterRange( assert, 0, 20, function( num ) { + Globalize.numberToPartsFormatter({ minimumFractionDigits: num } ); + }); + util.assertParameterRange( assert, 0, 20, function( num ) { + Globalize.numberToPartsFormatter({ maximumFractionDigits: num } ); + }); +}); + +QUnit.test( "should return a formatter", function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.numberToPartsFormatter()( pi ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "142" + } + ]); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/parse-number.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/parse-number.js new file mode 100644 index 000000000..0e11786af --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/number/parse-number.js @@ -0,0 +1,226 @@ +define([ + "globalize", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en-IN/numbers.json", + "json!cldr-data/main/es/numbers.json", + "json!cldr-data/main/fa/numbers.json", + "json!cldr-data/main/sv/numbers.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "../../util", + + "globalize/number" +], function( Globalize, arNumbers, enNumbers, enInNumbers, esNumbers, faNumbers, svNumbers, + zhNumbers, likelySubtags, numberingSystems, util ) { + +var ar, enIn, es, fa, sv, zh; + +function extraSetup() { + Globalize.load( + arNumbers, + enNumbers, + enInNumbers, + esNumbers, + faNumbers, + svNumbers, + zhNumbers, + numberingSystems + ); +} + +QUnit.module( ".parseNumber( value [, options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + ar: {}, + en: {}, + "en-IN": {}, + es: {}, + fa: {}, + sv: {}, + zh: {} + } + }); + ar = new Globalize( "ar" ); + enIn = new Globalize( "en-IN" ); + es = new Globalize( "es" ); + fa = new Globalize( "fa" ); + sv = new Globalize( "sv" ); + zh = new Globalize( "zh-u-nu-native" ); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.parseNumber(); + }); + + util.assertStringParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.parseNumber( invalidValue ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.parseNumber( "3", invalidValue ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.parseNumber( "3" ); + }); +}); + +/** + * Integers + */ + +QUnit.test( "should parse integers", function( assert ) { + extraSetup(); + + assert.equal( Globalize.parseNumber( "3" ), 3 ); + assert.equal( Globalize.parseNumber( "12735" ), 12735 ); + + // Loose match: ignore control format symbols. + assert.equal( ar.parseNumber( "-٣" ), -3 ); + + // Grouping separator. + assert.equal( Globalize.parseNumber( "12,735" ), 12735 ); + assert.equal( enIn.parseNumber( "76,54,321" ), 7654321 ); + assert.deepEqual( enIn.parseNumber( "654,321" ), NaN ); + assert.equal( es.parseNumber( "12.735" ), 12735 ); + assert.equal( sv.parseNumber( "12\xA0735" ), 12735 ); + + // Loose match: map all characters in [:Zs:] to U+0020 SPACE, e.g., accept non-breaking space as + // grouping separator. + assert.equal( sv.parseNumber( "12 735" ), 12735 ); +}); + +QUnit.test( "should parse negative integers", function( assert ) { + extraSetup(); + + assert.equal( Globalize.parseNumber( "-3" ), -3 ); + assert.equal( Globalize.parseNumber( "-12,735" ), -12735 ); +}); + +/** + * Decimals + */ + +QUnit.test( "should parse decimals", function( assert ) { + extraSetup(); + + assert.equal( Globalize.parseNumber( "3.14" ), 3.14 ); + assert.deepEqual( Globalize.parseNumber( "3,14" ), NaN ); + assert.equal( es.parseNumber( "3,14" ), 3.14 ); + assert.deepEqual( es.parseNumber( "3.14" ), NaN ); + assert.equal( ar.parseNumber( "٣٫١٤" ), 3.14 ); + assert.equal( zh.parseNumber( "三.一四" ), 3.14 ); + assert.equal( Globalize.parseNumber( "3.00" ), 3 ); + assert.equal( Globalize.parseNumber( "12735.0" ), 12735 ); + assert.equal( Globalize.parseNumber( "0.10" ), 0.1 ); +}); + +QUnit.test( "should parse negative decimal", function( assert ) { + extraSetup(); + + assert.equal( Globalize.parseNumber( "-3.14" ), -3.14 ); +}); + +/** + * Percent + */ + +QUnit.test( "should parse percent", function( assert ) { + extraSetup(); + + assert.equal( Globalize.parseNumber( "1%", { style: "percent" } ), 0.01 ); + assert.equal( Globalize.parseNumber( "01%", { style: "percent" } ), 0.01 ); + assert.equal( Globalize.parseNumber( "10%", { style: "percent" } ), 0.1 ); + assert.equal( Globalize.parseNumber( "50%", { style: "percent" } ), 0.5 ); + assert.equal( Globalize.parseNumber( "100%", { style: "percent" } ), 1 ); + + assert.equal( Globalize.parseNumber( "0.5%", { + style: "percent", + minimumFractionDigits: 0, + maximumFractionDigits: 1 + }), 0.005 ); + + assert.equal( Globalize.parseNumber( "0.5%", { + style: "percent", + minimumFractionDigits: 0, + maximumFractionDigits: 1 + }), 0.005 ); + + assert.equal( ar.parseNumber( "٥٠٪", { style: "percent" } ), 0.5 ); + assert.equal( Globalize.parseNumber( "-10%", { style: "percent" } ), -0.1 ); +}); + +/** + * Infinite number + */ +QUnit.test( "should parse infinite numbers", function( assert ) { + extraSetup(); + + assert.equal( Globalize.parseNumber( "∞" ), Infinity ); + assert.equal( Globalize.parseNumber( "-∞" ), -Infinity ); +}); + +/** + * NaN + */ + +QUnit.test( "should parse invalid numbers as NaN", function( assert ) { + extraSetup(); + + assert.deepEqual( Globalize.parseNumber( "invalid" ), NaN ); + assert.deepEqual( Globalize.parseNumber( "NaN" ), NaN ); +}); + +/** + * Prefix + */ + +QUnit.test( "should parse literals", function( assert ) { + extraSetup(); + + // TODO: Move this test to parse-currency when implemented. + assert.equal( Globalize.parseNumber( "-$1,214.12", { raw: "'$'#,##0.##" } ), -1214.12 ); +}); + +/** + * Other + */ +QUnit.test( "should parse a formatted number (reverse operation test)", function( assert ) { + extraSetup(); + var options; + var number = 12345.67; + assert.equal( Globalize.parseNumber( Globalize.formatNumber( number ) ), number ); + assert.equal( ar.parseNumber( ar.formatNumber( number ) ), number ); + assert.equal( fa.parseNumber( fa.formatNumber( number ) ), number ); + + number = -12345.67; + assert.equal( Globalize.parseNumber( Globalize.formatNumber( number ) ), number ); + assert.equal( ar.parseNumber( ar.formatNumber( number ) ), number ); + assert.equal( fa.parseNumber( fa.formatNumber( number ) ), number ); + + number = 0.5; + options = { style: "percent" }; + + assert.equal( + Globalize.parseNumber( Globalize.formatNumber( number, options ), options ), + number + ); + + assert.equal( ar.parseNumber( ar.formatNumber( number, options ), options ), number ); + assert.equal( fa.parseNumber( fa.formatNumber( number, options ), options ), number ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/plural/plural-generator.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/plural/plural-generator.js new file mode 100644 index 000000000..a48c215df --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/plural/plural-generator.js @@ -0,0 +1,23 @@ +define([ + "globalize", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/plurals.json", + "json!cldr-data/supplemental/ordinals.json", + "../../util", + + "globalize/plural" +], function( Globalize, likelySubtags, plurals, ordinals, util ) { + +QUnit.module( ".pluralGenerator()", { + beforeEach: function() { + Globalize.load( likelySubtags, plurals, ordinals, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/plural/plural.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/plural/plural.js new file mode 100644 index 000000000..b34aa2c94 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/plural/plural.js @@ -0,0 +1,151 @@ +define([ + "globalize", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/plurals.json", + "json!cldr-data/supplemental/ordinals.json", + "../../util", + + "globalize/plural" +], function( Globalize, likelySubtags, plurals, ordinals, util ) { + +function extraSetup() { + Globalize.load( plurals ); + Globalize.load( ordinals ); + + // Temporary fix due to CLDR v26 regression about pt_BR plural + // http://unicode.org/cldr/trac/ticket/7178 + Globalize.load({ + "supplemental": { + "plurals-type-cardinal": { + pt: { + "pluralRule-count-one": "i = 0,1", + "pluralRule-count-other": "" + } + } + } + }); + +} + +QUnit.module( ".plural( value )", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate parameters", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.plural(); + }); + + util.assertNumberParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.plural( invalidValue ); + }; + }); + + util.assertPlainObjectParameter( assert, "options", function( invalidOptions ) { + return function() { + Globalize.plural( 0, invalidOptions ); + }; + }); +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.plural( 1 ); + }); +}); + +QUnit.test( "should un-register event listener", function( assert ) { + try { + Globalize.plural( 1 ); + } catch ( error ) { + assert.equal( Globalize.cldr.ee.getListeners( "get" ).length, 0 ); + } +}); + +QUnit.test( "should return plural form", function( assert ) { + extraSetup(); + assert.equal( Globalize.plural( 0 ), "other" ); + assert.equal( Globalize.plural( 0.14 ), "other" ); + + assert.equal( Globalize( "en" ).plural( 0 ), "other" ); + assert.equal( Globalize( "en" ).plural( 1 ), "one" ); + assert.equal( Globalize( "en" ).plural( 2 ), "other" ); + assert.equal( Globalize( "en" ).plural( 1412 ), "other" ); + assert.equal( Globalize( "en" ).plural( 0.14 ), "other" ); + assert.equal( Globalize( "en" ).plural( 3.14 ), "other" ); + + assert.equal( Globalize( "en" ).plural( 0, { type: "ordinal" } ), "other" ); + assert.equal( Globalize( "en" ).plural( 1, { type: "ordinal" } ), "one" ); + assert.equal( Globalize( "en" ).plural( 2, { type: "ordinal" } ), "two" ); + assert.equal( Globalize( "en" ).plural( 3, { type: "ordinal" } ), "few" ); + assert.equal( Globalize( "en" ).plural( 1412, { type: "ordinal" } ), "other" ); + assert.equal( Globalize( "en" ).plural( 0.14, { type: "ordinal" } ), "other" ); + assert.equal( Globalize( "en" ).plural( 3.14, { type: "ordinal" } ), "other" ); + + assert.equal( Globalize( "ar" ).plural( 0 ), "zero" ); + assert.equal( Globalize( "ar" ).plural( 1 ), "one" ); + assert.equal( Globalize( "ar" ).plural( 2 ), "two" ); + assert.equal( Globalize( "ar" ).plural( 3 ), "few" ); + assert.equal( Globalize( "ar" ).plural( 6 ), "few" ); + assert.equal( Globalize( "ar" ).plural( 9 ), "few" ); + assert.equal( Globalize( "ar" ).plural( 10 ), "few" ); + assert.equal( Globalize( "ar" ).plural( 11 ), "many" ); + assert.equal( Globalize( "ar" ).plural( 15 ), "many" ); + assert.equal( Globalize( "ar" ).plural( 21 ), "many" ); + assert.equal( Globalize( "ar" ).plural( 70 ), "many" ); + assert.equal( Globalize( "ar" ).plural( 99 ), "many" ); + assert.equal( Globalize( "ar" ).plural( 100 ), "other" ); + assert.equal( Globalize( "ar" ).plural( 101 ), "other" ); + assert.equal( Globalize( "ar" ).plural( 102 ), "other" ); + assert.equal( Globalize( "ar" ).plural( 103 ), "few" ); + assert.equal( Globalize( "ar" ).plural( 111 ), "many" ); + assert.equal( Globalize( "ar" ).plural( 199 ), "many" ); + assert.equal( Globalize( "ar" ).plural( 3.14 ), "other" ); + + [ 0, 1, 2, 3, 9, 10, 11, 99, 100, 101, 3.14 ].forEach(function( value ) { + assert.equal( Globalize( "ar" ).plural( value, { type: "ordinal" } ), "other" ); + }); + + assert.equal( Globalize( "ja" ).plural( 0 ), "other" ); + assert.equal( Globalize( "ja" ).plural( 1 ), "other" ); + assert.equal( Globalize( "ja" ).plural( 2 ), "other" ); + assert.equal( Globalize( "ja" ).plural( 3.14 ), "other" ); + + assert.equal( Globalize( "pt" ).plural( 0 ), "one" ); + assert.equal( Globalize( "pt" ).plural( 1 ), "one" ); + assert.equal( Globalize( "pt" ).plural( 2 ), "other" ); + assert.equal( Globalize( "pt" ).plural( 0.1 ), "one" ); + assert.equal( Globalize( "pt" ).plural( 3.14 ), "other" ); + + assert.equal( Globalize( "ru" ).plural( 0 ), "many" ); + assert.equal( Globalize( "ru" ).plural( 1 ), "one" ); + assert.equal( Globalize( "ru" ).plural( 2 ), "few" ); + assert.equal( Globalize( "ru" ).plural( 3 ), "few" ); + assert.equal( Globalize( "ru" ).plural( 4 ), "few" ); + assert.equal( Globalize( "ru" ).plural( 5 ), "many" ); + assert.equal( Globalize( "ru" ).plural( 6 ), "many" ); + assert.equal( Globalize( "ru" ).plural( 9 ), "many" ); + assert.equal( Globalize( "ru" ).plural( 11 ), "many" ); + assert.equal( Globalize( "ru" ).plural( 12 ), "many" ); + assert.equal( Globalize( "ru" ).plural( 19 ), "many" ); + assert.equal( Globalize( "ru" ).plural( 21 ), "one" ); + assert.equal( Globalize( "ru" ).plural( 22 ), "few" ); + assert.equal( Globalize( "ru" ).plural( 29 ), "many" ); + assert.equal( Globalize( "ru" ).plural( 3.14 ), "other" ); + + assert.equal( Globalize( "zh" ).plural( 0 ), "other" ); + assert.equal( Globalize( "zh" ).plural( 1 ), "other" ); + assert.equal( Globalize( "zh" ).plural( 2 ), "other" ); + assert.equal( Globalize( "zh" ).plural( 3.14 ), "other" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/relative-time/format-relative-time.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/relative-time/format-relative-time.js new file mode 100644 index 000000000..415912266 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/relative-time/format-relative-time.js @@ -0,0 +1,105 @@ +define( [ + "globalize", + "json!cldr-data/main/en/dateFields.json", + "json!cldr-data/main/de/dateFields.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/de/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "globalize/number", + "globalize/relative-time" +], function( Globalize, enDateFields, deDateFields, enNumbers, deNumbers, + likelySubtags, numberingSystems, plurals, util ) { + +var de, en; + +QUnit.module( ".fomatRelativeTime( value, unit [, options] ) - no CLDR", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function( ) { + Globalize.formatRelativeTime( 1, "day" ); + }); +}); + +QUnit.test( "should un-register event listener", function( assert ) { + try { + Globalize.formatRelativeTime( 1, "day" ); + } catch ( error ) { + assert.equal( Globalize.cldr.ee.getListeners( "get" ).length, 0 ); + } +}); + +QUnit.module( ".formatRelativeTime( value, unit [, options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, enDateFields, deDateFields, + numberingSystems, enNumbers, deNumbers, + plurals ); + Globalize.locale( "en" ); + de = new Globalize( "de" ); + en = new Globalize( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate value argument presence", function( assert ) { + util.assertParameterPresence( assert, "value", function( ) { + Globalize.formatRelativeTime( ); + }); +}); + +QUnit.test( "should validate value argument is number", function( assert ) { + util.assertNumberParameter( assert, "value", function( invalidValue ) { + return function( ) { + Globalize.formatRelativeTime( invalidValue, "day" ); + }; + }); +}); + +QUnit.test( "should validate unit argument presence", function( assert ) { + util.assertParameterPresence( assert, "unit", function( ) { + Globalize.formatRelativeTime( 0 ); + }); +}); + +QUnit.test( "should validate unit argument is string", function( assert ) { + util.assertStringParameter( assert, "unit", function( invalidValue ) { + return function( ) { + Globalize.formatRelativeTime( 0, invalidValue ); + }; + }); +}); + +QUnit.test( "should format long form in past", function( assert ) { + assert.equal( en.formatRelativeTime( -2, "week" ), "2 weeks ago" ); +}); + +QUnit.test( "should format long form in future", function( assert ) { + assert.equal( en.formatRelativeTime( 3, "year" ), "in 3 years" ); +}); + +QUnit.test( "should format 0 offset with as special word", function( assert ) { + assert.equal( en.formatRelativeTime( 0, "day" ), "today" ); +}); + +QUnit.test( "should format 1 day of offset with special word", function( assert ) { + assert.equal( en.formatRelativeTime( 1, "day" ), "tomorrow" ); +}); + +QUnit.test( "should format using word if available", function( assert ) { + assert.equal( de.formatRelativeTime( 2, "day" ), "übermorgen" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/relative-time/relative-time-formatter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/relative-time/relative-time-formatter.js new file mode 100644 index 000000000..2167a670e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/relative-time/relative-time-formatter.js @@ -0,0 +1,71 @@ +define( [ + "globalize", + "json!cldr-data/main/en/dateFields.json", + "json!cldr-data/main/de/dateFields.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/de/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "globalize/number", + "globalize/relative-time" +], function( Globalize, enDateFields, deDateFields, enNumbers, deNumbers, + likelySubtags, numberingSystems, plurals, util ) { + +var en, de; + +QUnit.module( ".relativeTimeFormatter( unit [, options] ) - no CLDR", { + beforeEach: function() { + Globalize.load( likelySubtags, { + main: { + en: {} + } + }); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function( ) { + Globalize.relativeTimeFormatter( "day" ); + }); +}); + +QUnit.module( ".relativeTimeFormatter( unit [, options] )", { + beforeEach: function() { + Globalize.load( likelySubtags, enDateFields, deDateFields, + numberingSystems, enNumbers, deNumbers, + plurals ); + Globalize.locale( "en" ); + en = new Globalize( "en" ); + de = new Globalize( "de" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate unit argument presence", function( assert ) { + util.assertParameterPresence( assert, "unit", function( ) { + Globalize.formatRelativeTime( 0 ); + }); +}); + +QUnit.test( "should validate unit argument is string", function( assert ) { + util.assertStringParameter( assert, "unit", function( invalidValue ) { + return function( ) { + Globalize.relativeTimeFormatter( invalidValue ); + }; + }); +}); + +QUnit.test( "should format long form", function( assert ) { + assert.equal( en.relativeTimeFormatter( "week" )( -2 ), "2 weeks ago" ); +}); + +QUnit.test( "should format using word if available", function( assert ) { + assert.equal( de.relativeTimeFormatter( "day" )( 2 ), "übermorgen" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/unit/format-unit.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/unit/format-unit.js new file mode 100644 index 000000000..fd1e9bcb3 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/unit/format-unit.js @@ -0,0 +1,139 @@ +define( [ + "globalize", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/de/numbers.json", + "json!cldr-data/main/en/units.json", + "json!cldr-data/main/de/units.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "globalize/unit" +], function( Globalize, enNumbers, deNumbers, enUnitFields, deUnitFields, likelySubtags, + numberingSystems, plurals, util ) { + +var de, en; + +QUnit.module( ".formatUnit( value, unit, options ) - no CLDR", { + beforeEach: function() { + Globalize.load( enUnitFields, likelySubtags ); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.formatUnit( 1, "day", { form: "long" } ); + }); +}); + +QUnit.module( ".formatUnit( value, unit, options )", { + beforeEach: function() { + Globalize.load( enNumbers, deNumbers, enUnitFields, deUnitFields, likelySubtags, + numberingSystems, plurals ); + de = new Globalize( "de" ); + en = new Globalize( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate value argument presence", function( assert ) { + util.assertParameterPresence( assert, "value", function() { + Globalize.formatUnit(); + }); +}); + +QUnit.test( "should validate value argument is number", function( assert ) { + util.assertNumberParameter( assert, "value", function( invalidValue ) { + return function() { + Globalize.formatUnit( invalidValue, "day" ); + }; + }); +}); + +QUnit.test( "should validate unit argument presence", function( assert ) { + util.assertParameterPresence( assert, "unit", function() { + Globalize.formatUnit( 0 ); + }); +}); + +QUnit.test( "should validate unit argument is string", function( assert ) { + util.assertStringParameter( assert, "unit", function( invalidValue ) { + return function() { + Globalize.formatUnit( 0, invalidValue ); + }; + }); +}); + +QUnit.test( "should validate options argument is object", function( assert ) { + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.formatUnit( 1, "day", invalidValue ); + }; + }); +}); + +QUnit.test( "should format units using default form", function( assert ) { + assert.equal( en.formatUnit( 1, "day" ), "1 day" ); + assert.equal( en.formatUnit( 100, "day" ), "100 days" ); + + assert.equal( de.formatUnit( 1, "day" ), "1 Tag" ); + assert.equal( de.formatUnit( 100, "day" ), "100 Tage" ); +}); + +QUnit.test( "should format long form units", function( assert ) { + assert.equal( en.formatUnit( 1, "day", { form: "long" } ), "1 day" ); + assert.equal( en.formatUnit( 100, "day", { form: "long" } ), "100 days" ); + + assert.equal( de.formatUnit( 1, "day", { form: "long" } ), "1 Tag" ); + assert.equal( de.formatUnit( 100, "day", { form: "long" } ), "100 Tage" ); +}); + +QUnit.test( "should format short form units", function( assert ) { + assert.equal( en.formatUnit( 1, "second", { form: "short" } ), "1 sec" ); + assert.equal( en.formatUnit( 100, "second", { form: "short" } ), "100 sec" ); +}); + +QUnit.test( "should format narrow form units", function( assert ) { + assert.equal( en.formatUnit( 1, "second", { form: "narrow" } ), "1s" ); + assert.equal( en.formatUnit( 100, "second", { form: "narrow" } ), "100s" ); +}); + +QUnit.test( "should format precomputed compound units", function( assert ) { + assert.equal( en.formatUnit( 5, "mile-per-hour", { form: "narrow" } ), "5mph" ); +}); + +QUnit.test( "should format computed compound units", function( assert ) { + assert.equal( en.formatUnit( 5, "mile-per-second", { form: "narrow" } ), "5mi/s" ); +}); + +QUnit.test( "should format precomputed compound units with '/'", function( assert ) { + assert.equal( en.formatUnit( 5, "mile/hour", { form: "narrow" } ), "5mph" ); +}); + +QUnit.test( "should format computed compound units with '/'", function( assert ) { + assert.equal( en.formatUnit( 5, "mile/second", { form: "narrow" } ), "5mi/s" ); +}); + +QUnit.test( "should format numbers correctly", function( assert ) { + assert.equal( en.formatUnit( 55000, "mile/hour", { form: "short" } ), "55,000 mph" ); + assert.equal( de.formatUnit( 55000, "mile/hour", { form: "short" } ), "55.000 mi/h" ); +}); + +QUnit.test( "should accept custom number formatters", function( assert ) { + var enCustomFormatter = en.numberFormatter({ useGrouping: false }), + deCustomFormatter = de.numberFormatter({ useGrouping: false }); + + assert.equal( en.formatUnit( 55000, "mile/hour", { + form: "short", + numberFormatter: enCustomFormatter + }), "55000 mph" ); + assert.equal( de.formatUnit( 55000, "mile/hour", { + form: "short", + numberFormatter: deCustomFormatter + }), "55000 mi/h" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/unit/unit-formatter.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/unit/unit-formatter.js new file mode 100644 index 000000000..44a17b0e4 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/functional/unit/unit-formatter.js @@ -0,0 +1,103 @@ +define( [ + "globalize", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/de/numbers.json", + "json!cldr-data/main/en/units.json", + "json!cldr-data/main/de/units.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + "json!cldr-data/supplemental/plurals.json", + "../../util", + + "globalize/unit" +], function( Globalize, enNumbers, deNumbers, enUnitFields, deUnitFields, likelySubtags, + numberingSystems, plurals, util ) { + +var de, en; + +QUnit.module( ".unitFormatter( unit, options ) - no CLDR", { + beforeEach: function() { + Globalize.load( enUnitFields, likelySubtags ); + Globalize.locale( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate CLDR content", function( assert ) { + util.assertCldrContent( assert, function() { + Globalize.unitFormatter( "day", { form: "long" } ); + }); +}); + +QUnit.module( ".unitFormatter( unit, options )", { + beforeEach: function() { + Globalize.load( enNumbers, deNumbers, enUnitFields, deUnitFields, likelySubtags, + numberingSystems, plurals ); + Globalize.locale( "en" ); + de = new Globalize( "de" ); + en = new Globalize( "en" ); + }, + afterEach: util.resetCldrContent +}); + +QUnit.test( "should validate unit argument presence", function( assert ) { + util.assertParameterPresence( assert, "unit", function() { + Globalize.unitFormatter(); + }); +}); + +QUnit.test( "should validate unit argument is string", function( assert ) { + util.assertStringParameter( assert, "unit", function( invalidValue ) { + return function() { + Globalize.unitFormatter( invalidValue ); + }; + }); +}); + +QUnit.test( "should validate options argument is object", function( assert ) { + util.assertPlainObjectParameter( assert, "options", function( invalidValue ) { + return function() { + Globalize.unitFormatter( "day", invalidValue ); + }; + }); +}); + +QUnit.test( "should format long form units", function( assert ) { + var enFormatter = en.unitFormatter( "day", { form: "long" } ), + deFormatter = de.unitFormatter( "day", { form: "long" } ); + + assert.equal( enFormatter( 1 ), "1 day" ); + assert.equal( enFormatter( 100 ), "100 days" ); + + assert.equal( deFormatter( 1 ), "1 Tag" ); + assert.equal( deFormatter( 100 ), "100 Tage" ); +}); + +QUnit.test( "should format numbers correctly", function( assert ) { + var enFormatter = en.unitFormatter( "day", { form: "long" } ), + deFormatter = de.unitFormatter( "day", { form: "long" } ); + + assert.equal( enFormatter( 10000 ), "10,000 days" ); + assert.equal( deFormatter( 10000 ), "10.000 Tage" ); +}); + +QUnit.test( "should accept custom number formatter", function( assert ) { + var enCustomFormatter = en.numberFormatter({ maximumFractionDigits: 2 }), + deCustomFormatter = de.numberFormatter({ maximumFractionDigits: 2 }), + enUnitFormatter = en.unitFormatter( "meter", { + form: "long", numberFormatter: enCustomFormatter + }), + deUnitFormatter = de.unitFormatter( "meter", { + form: "long", numberFormatter: deCustomFormatter + }); + + assert.equal( enUnitFormatter( 3.14159 ), "3.14 meters" ); + assert.equal( deUnitFormatter( 3.14159 ), "3,14 Meter" ); +}); + +QUnit.test( "should generate different runtime key when using different numberFormatter", function( assert ) { + var formatter1 = Globalize.unitFormatter( "hour", { numberFormatter: Globalize.numberFormatter( { minimumIntegerDigits: 1 } ) }); + var formatter2 = Globalize.unitFormatter( "hour", { numberFormatter: Globalize.numberFormatter( { minimumIntegerDigits: 2 } ) }); + assert.notEqual( formatter1.runtimeKey, formatter2.runtimeKey ); +}); +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit.html b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit.html new file mode 100644 index 000000000..5fdc5691d --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit.html @@ -0,0 +1,16 @@ + + + + + + Globalize Unit Tests + + + +
+
+ + + + + diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit.js new file mode 100644 index 000000000..f40502a92 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit.js @@ -0,0 +1,61 @@ +require([ + "qunit", + + // util + "./unit/util/object/invert", + "./unit/util/regexp/escape", + "./unit/util/regexp/not-s-and-z", + "./unit/util/regexp/not-s", + + // core + "./unit/core", + "./unit/core/locale", + + // currency + "./unit/currency/name-properties", + "./unit/currency/symbol-properties", + + "./unit/currency/name-format", + + // date + "./unit/date/expand-pattern/augment-format", + "./unit/date/expand-pattern/compare-formats", + "./unit/date/expand-pattern/get-best-match-pattern", + "./unit/date/expand-pattern", + "./unit/date/timezone-hour-format", + + "./unit/date/format-properties", + "./unit/date/parse-properties", + "./unit/date/tokenizer-properties", + + "./unit/date/format", + "./unit/date/tokenizer", + + "./unit/date/parse", + + // number + "./unit/number/pattern-properties", + "./unit/number/format/integer-fraction-digits", + "./unit/number/format/significant-digits", + "./unit/number/format/grouping-separator", + "./unit/number/format-properties", + "./unit/number/format", + "./unit/number/parse-properties", + "./unit/number/parse", + + // relative time + "./unit/relative-time/properties", + "./unit/relative-time/format", + + /* unit */ + "./unit/unit/get", + "./unit/unit/format" + +], function() { + QUnit.start(); +}, function( error ) { + QUnit.test( "requirejs load failure", function( assert ) { + assert.ok( false, "requirejs failed to load: " + QUnit.dump.parse( error ) ); + }); + QUnit.start(); +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/common/runtime-bind.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/common/runtime-bind.js new file mode 100644 index 000000000..7cd0fd090 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/common/runtime-bind.js @@ -0,0 +1,14 @@ +define([ + "src/common/runtime-bind", +], function( runtimeBind ) { + +QUnit.module( "Common (runtimeBind)" ); + +QUnit.test( "runtimeBind should work with anonymous function", function( assert ) { + var fn = function() { + return "passed"; + }; + assert.equal( runtimeBind({}, {}, fn, {})(), "passed" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/core.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/core.js new file mode 100644 index 000000000..6cf9e4611 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/core.js @@ -0,0 +1,107 @@ +define([ + "cldr", + "src/core", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event" +], function( Cldr, Globalize, likelySubtags ) { + +Cldr.load( likelySubtags, { + supplemental: { + likelySubtags: { + + // The below are fictitious locales for the purpose of this test. + // Note to self: don't use zz, Zzzz or ZZ. These are reserved subtags. + "xx": "xx-Xxxx-XX", + "yy": "yy-Xxxx-YY" + } + }, + main: { + "de-CH": { + "test-bundle": "de-CH" + }, + en: { + "test-bundle": "en" + }, + "en-GB": { + "test-bundle": "en-GB" + }, + "pa-Arab": { + "test-bundle": "pa-Arab" + }, + "sr-Cyrl": { + "test-bundle": "sr-Cyrl" + }, + "sr-Latn": { + "test-bundle": "sr-Latn" + }, + "uz-Arab": { + "test-bundle": "uz-Arab" + }, + "xx": { + "test-bundle": "xx" + }, + "yy-YY": { + "test-bundle": "yy-YY" + }, + "zh": { + "test-bundle": "zh" + }, + "zh-Hant": { + "test-bundle": "zh-Hant" + } + } +}); + +QUnit.module( "Globalize (constructor)" ); + +QUnit.test( "should allow String locale", function( assert ) { + var en = new Globalize( "en" ); + assert.ok( en instanceof Globalize ); + assert.equal( en.cldr.locale, "en" ); +}); + +QUnit.test( "should allow Cldr instance to be passed as locale", function( assert ) { + var en = Globalize( new Cldr( "en" ) ); + assert.ok( en instanceof Globalize ); + assert.equal( en.cldr.locale, "en" ); +}); + +QUnit.test( "should lookup bundle", function( assert ) { + assert.equal( Globalize( "de-Latn-CH" ).cldr.main( "test-bundle" ), "de-CH" ); + assert.equal( Globalize( "en" ).cldr.main( "test-bundle" ), "en" ); + assert.equal( Globalize( "en-GB" ).cldr.main( "test-bundle" ), "en-GB" ); + assert.equal( Globalize( "en-Latn-GB" ).cldr.main( "test-bundle" ), "en-GB" ); + assert.equal( Globalize( "pa-Arab" ).cldr.main( "test-bundle" ), "pa-Arab" ); + assert.equal( Globalize( "pa-PK" ).cldr.main( "test-bundle" ), "pa-Arab" ); + assert.equal( Globalize( "sr" ).cldr.main( "test-bundle" ), "sr-Cyrl" ); + assert.equal( Globalize( "sr-Cyrl" ).cldr.main( "test-bundle" ), "sr-Cyrl" ); + assert.equal( Globalize( "sr-Latn" ).cldr.main( "test-bundle" ), "sr-Latn" ); + assert.equal( Globalize( "sr-Latn-RS" ).cldr.main( "test-bundle" ), "sr-Latn" ); + assert.equal( Globalize( "sr-RS" ).cldr.main( "test-bundle" ), "sr-Cyrl" ); + assert.equal( Globalize( "uz-AF" ).cldr.main( "test-bundle" ), "uz-Arab" ); + assert.equal( Globalize( "uz-Arab" ).cldr.main( "test-bundle" ), "uz-Arab" ); + assert.equal( Globalize( "zh" ).cldr.main( "test-bundle" ), "zh" ); + assert.equal( Globalize( "zh-CN" ).cldr.main( "test-bundle" ), "zh" ); + assert.equal( Globalize( "zh-Hans" ).cldr.main( "test-bundle" ), "zh" ); + assert.equal( Globalize( "zh-Hant" ).cldr.main( "test-bundle" ), "zh-Hant" ); + assert.equal( Globalize( "zh-TW" ).cldr.main( "test-bundle" ), "zh-Hant" ); + + // Simulate loading `en` main dataset. Both instances `en` or `en-US` will use + // `en` bundle. + assert.equal( Globalize( "xx" ).cldr.main( "test-bundle" ), "xx" ); + assert.equal( Globalize( "xx-XX" ).cldr.main( "test-bundle" ), "xx" ); + + // Simulate loading `en-US` main dataset. Both instances `en` or `en-US` will use + // `en-US` bundle. + assert.equal( Globalize( "yy" ).cldr.main( "test-bundle" ), "yy-YY" ); + assert.equal( Globalize( "yy-YY" ).cldr.main( "test-bundle" ), "yy-YY" ); + + assert.throws(function() { + Globalize( "xx-XZ" ).cldr.main( "test-bundle" ); + }, function E_MISSING_BUNDLE( error ) { + return error.code === "E_MISSING_BUNDLE" && error.locale === "xx-XZ"; + }); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/core/locale.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/core/locale.js new file mode 100644 index 000000000..8cc0fbb3a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/core/locale.js @@ -0,0 +1,25 @@ +define([ + "cldr", + "src/core", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event" +], function( Cldr, Globalize, likelySubtags ) { + +Cldr.load( likelySubtags ); + +QUnit.module( "Globalize.locale" ); + +QUnit.test( "should allow String locale", function( assert ) { + Globalize.locale( "en" ); + assert.ok( Globalize.cldr instanceof Cldr ); + assert.equal( Globalize.cldr.locale, "en" ); +}); + +QUnit.test( "should allow Cldr instance to be passed as locale", function( assert ) { + Globalize.locale( new Cldr( "pt" ) ); + assert.ok( Globalize.cldr instanceof Cldr ); + assert.equal( Globalize.cldr.locale, "pt" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/currency/name-format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/currency/name-format.js new file mode 100644 index 000000000..ae5030b26 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/currency/name-format.js @@ -0,0 +1,142 @@ +define([ + "cldr", + "src/currency/name-format", + "src/currency/name-properties", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/zh/currencies.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, format, properties, enCurrencies, enNumbers, zhCurrencies, zhNumbers, + currencyData, likelySubtags ) { + +var en, zh; + +Cldr.load( + currencyData, + enCurrencies, + enNumbers, + likelySubtags, + zhCurrencies, + zhNumbers +); + +en = new Cldr( "en" ); +zh = new Cldr( "zh" ); + +QUnit.module( "Currency Name Format" ); + +QUnit.test( "should format currencies", function( assert ) { + assert.deepEqual( format( [{ type: "integer", value: "1" }], "one", properties( "USD", en ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "US dollar" + } + ]); + + assert.deepEqual( format( [{ type: "integer", value: "2" }], "other", properties( "USD", en ) ), [ + { + "type": "integer", + "value": "2" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "US dollars" + } + ]); + + // Test the fallback to displayNames by the lack of displayNames-count-*. + assert.deepEqual( format( [{ type: "integer", value: "1" }], "something", { + "displayNames": { + "displayName": "US Dollar", + }, + "unitPatterns": { + "unitPattern-count-other": "{0} {1}" + } + }), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "US Dollar" + } + ]); + + // Test the fallback to currency by the lack of displayName and displayName-count-*. + assert.deepEqual( format( [{ type: "integer", value: "1" }], "something", { + "currency": "USD", + "unitPatterns": { + "unitPattern-count-other": "{0} {1}" + } + }), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "currency", + "value": "USD" + } + ]); + + assert.deepEqual( format( [{ type: "integer", value: "10" }], "other", properties( "CNY", zh ) ), [ + { + "type": "integer", + "value": "10" + }, + { + "type": "currency", + "value": "人民币" + } + ]); + + // Testing inverted unitPattern {1} {0}. + assert.deepEqual( format( [{ type: "integer", value: "1" }], "other", { + "currency": "TZS", + "unitPatterns": { + "unitPattern-count-other": "{1} {0}" + } + }), [ + { + "type": "currency", + "value": "TZS" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "integer", + "value": "1" + } + ]); + +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/currency/name-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/currency/name-properties.js new file mode 100644 index 000000000..f0ac16c6a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/currency/name-properties.js @@ -0,0 +1,89 @@ +define([ + "cldr", + "src/currency/name-properties", + "json!cldr-data/main/de/currencies.json", + "json!cldr-data/main/de/numbers.json", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/zh/currencies.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, properties, deCurrencies, deNumbers, enCurrencies, enNumbers, zhCurrencies, + zhNumbers, currencyData, likelySubtags ) { + +var de, en, zh; + +Cldr.load( + currencyData, + deCurrencies, + deNumbers, + enCurrencies, + enNumbers, + likelySubtags, + zhCurrencies, + zhNumbers +); + +de = new Cldr( "de" ); +en = new Cldr( "en" ); +zh = new Cldr( "zh" ); + +QUnit.module( "Currency Name Properties" ); + +QUnit.test( "should return appropriate properties", function( assert ) { + assert.deepEqual( properties( "USD", en ), { + "displayNames": { + "displayName": "US Dollar", + "displayName-count-one": "US dollar", + "displayName-count-other": "US dollars" + }, + "pattern": "#,##0.00", + "unitPatterns": { + "unitPattern-count-one": "{0} {1}", + "unitPattern-count-other": "{0} {1}" + } + }); + assert.deepEqual( properties( "EUR", de ), { + "displayNames": { + "displayName": "Euro", + "displayName-count-one": "Euro", + "displayName-count-other": "Euro" + }, + "pattern": "#,##0.00", + "unitPatterns": { + "unitPattern-count-one": "{0} {1}", + "unitPattern-count-other": "{0} {1}" + } + }); + assert.deepEqual( properties( "CNY", zh ), { + "displayNames": { + "displayName": "人民币", + "displayName-count-other": "人民币" + }, + "pattern": "#,##0.00", + "unitPatterns": { + "unitPattern-count-other": "{0}{1}" + } + }); + + // The number of decimal places and the rounding for each currency is not locale-specific data. + // Those values are overriden by Supplemental Currency Data. + assert.deepEqual( properties( "CLF", en ), { + "displayNames": { + "displayName": "Chilean Unit of Account (UF)", + "displayName-count-one": "Chilean unit of account (UF)", + "displayName-count-other": "Chilean units of account (UF)", + }, + "pattern": "#,##0.0000", + "unitPatterns": { + "unitPattern-count-one": "{0} {1}", + "unitPattern-count-other": "{0} {1}" + } + }); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/currency/symbol-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/currency/symbol-properties.js new file mode 100644 index 000000000..efd4cb5ac --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/currency/symbol-properties.js @@ -0,0 +1,94 @@ +define([ + "cldr", + "src/currency/symbol-properties", + "json!cldr-data/main/de/currencies.json", + "json!cldr-data/main/de/numbers.json", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/zh/currencies.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, symbolProperties, deCurrencies, deNumbers, enCurrencies, enNumbers, zhCurrencies, + zhNumbers, currencyData, likelySubtags ) { + +var de, en, zh; + +Cldr.load( + currencyData, + deCurrencies, + deNumbers, + enCurrencies, + enNumbers, + likelySubtags, + zhCurrencies, + zhNumbers +); + +de = new Cldr( "de" ); +en = new Cldr( "en" ); +zh = new Cldr( "zh" ); + +QUnit.module( "Currency Symbol Properties" ); + +QUnit.test( "should return pattern replacing `¤` with the appropriate currency symbol literal", function( assert ) { + assert.deepEqual( symbolProperties( "USD", en, {} ), { + "pattern": "¤#,##0.00", + "symbol": "$" + }); + assert.deepEqual( symbolProperties( "EUR", en, {} ), { + "pattern": "¤#,##0.00", + "symbol": "€" + }); + assert.deepEqual( symbolProperties( "CLF", en, {} ), { + "pattern": "¤ #,##0.0000", + "symbol": "CLF" + }); + assert.deepEqual( symbolProperties( "USD", de, {} ), { + "pattern": "#,##0.00 ¤", + "symbol": "$" + }); + assert.deepEqual( symbolProperties( "EUR", de, {} ), { + "pattern": "#,##0.00 ¤", + "symbol": "€" + }); + assert.deepEqual( symbolProperties( "USD", zh, {} ), { + "pattern": "¤#,##0.00", + "symbol": "US$" + }); + assert.deepEqual( symbolProperties( "EUR", zh, {} ), { + "pattern": "¤#,##0.00", + "symbol": "€" + }); + assert.deepEqual( symbolProperties( "RUB", en, {} ), { + "pattern": "¤ #,##0.00", + "symbol": "RUB" + }); + + assert.deepEqual( symbolProperties( "USD", en, { + style: "accounting" + }), { + "pattern": "¤#,##0.00;(¤#,##0.00)", + "symbol": "$" + }); +}); + +QUnit.test( "Should use the supplied symbolForm, falling back to standard if none is found", function( assert ) { + assert.deepEqual( + symbolProperties( "RUB", en, { symbolForm: "narrow" } ), + { "pattern": "¤#,##0.00", "symbol": "₽" } + ); + assert.deepEqual( + symbolProperties( "HKD", en, { symbolForm: "narrow" } ), + { "pattern": "¤#,##0.00", "symbol": "$" } + ); + assert.deepEqual( + symbolProperties( "CHF", en, { symbolForm: "narrow" } ), + { "pattern": "¤ #,##0.00", "symbol": "CHF" } + ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern.js new file mode 100644 index 000000000..5c36117f0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern.js @@ -0,0 +1,120 @@ +define([ + "cldr", + "src/date/expand-pattern", + "json!cldr-data/main/de/ca-gregorian.json", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/ru/ca-gregorian.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/timeData.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, expandPattern, deCaGregorian, enCaGregorian, ruCaGregorian, likelySubtags, + timeData ) { + +var de, en, ru; + +Cldr.load( deCaGregorian, enCaGregorian, ruCaGregorian, likelySubtags, timeData ); + +de = new Cldr( "de" ); +en = new Cldr( "en" ); +ru = new Cldr( "ru" ); + +QUnit.assert.expandPattern = function( cldr, style, expected ) { + this.equal( expandPattern( style, cldr ), expected ); +}; + +/** + * Test actual patterns here + * @see https://ssl.icu-project.org/icu4jweb/flexTest.jsp + */ + +QUnit.module( "Date Expand Pattern" ); + +QUnit.test( "should expand {skeleton: \"\"}", function( assert ) { + + // Direct map. + assert.expandPattern( en, { skeleton: "GyMMMEd" }, "E, MMM d, y G" ); + assert.expandPattern( de, { skeleton: "MMMMd" }, "d. MMMM" ); + assert.expandPattern( ru, { skeleton: "MMMMd" }, "d MMMM" ); + + // Preferred hour (j). + assert.expandPattern( en, { skeleton: "jmm" }, "h:mm a" ); + assert.expandPattern( de, { skeleton: "jmm" }, "HH:mm" ); + assert.expandPattern( ru, { skeleton: "jmm" }, "H:mm" ); + + // Best matches the whole skeleton. + assert.expandPattern( en, { skeleton: "hhmm" }, "hh:mm a" ); + assert.expandPattern( en, { skeleton: "HHmm" }, "HH:mm" ); + assert.expandPattern( en, { skeleton: "EHmss" }, "E HH:mm:ss" ); + assert.expandPattern( en, { skeleton: "hhmmssSS" }, "hh:mm:ss.SS a" ); + assert.expandPattern( en, { skeleton: "yy" }, "yy" ); + assert.expandPattern( de, { skeleton: "yMMMMd" }, "d. MMMM y" ); + assert.expandPattern( de, { skeleton: "MMMM" }, "LLLL" ); + assert.expandPattern( de, { skeleton: "yMMMM" }, "MMMM y" ); + assert.expandPattern( de, { skeleton: "EEEE" }, "cccc" ); + assert.expandPattern( de, { skeleton: "cccc" }, "cccc" ); + assert.expandPattern( de, { skeleton: "MMMMEEEEd" }, "EEEE, d. MMMM" ); + assert.expandPattern( de, { skeleton: "MMMMccccd" }, "EEEE, d. MMMM" ); + assert.expandPattern( de, { skeleton: "HHmm" }, "HH:mm" ); + assert.expandPattern( de, { skeleton: "HHmmssSS" }, "HH:mm:ss,SS" ); + assert.expandPattern( de, { skeleton: "EEEEHHmm" }, "EEEE, HH:mm" ); + assert.expandPattern( de, { skeleton: "EEEEHmm" }, "EEEE, HH:mm" ); + assert.expandPattern( de, { skeleton: "ccccHmm" }, "EEEE, HH:mm" ); + assert.expandPattern( ru, { skeleton: "yMMMMd" }, "d MMMM y 'г'." ); + assert.expandPattern( ru, { skeleton: "MMMM" }, "LLLL" ); + assert.expandPattern( ru, { skeleton: "yMMMM" }, "LLLL y 'г'." ); + assert.expandPattern( ru, { skeleton: "EEEE" }, "cccc" ); + assert.expandPattern( ru, { skeleton: "cccc" }, "cccc" ); + assert.expandPattern( ru, { skeleton: "MMMMEEEEd" }, "cccc, d MMMM" ); + assert.expandPattern( ru, { skeleton: "MMMMccccd" }, "cccc, d MMMM" ); + assert.expandPattern( ru, { skeleton: "HHmm" }, "HH:mm" ); + assert.expandPattern( ru, { skeleton: "EEEEHHmm" }, "EEEE HH:mm" ); + assert.expandPattern( ru, { skeleton: "EEEEHmm" }, "EEEE HH:mm" ); + assert.expandPattern( ru, { skeleton: "ccccHHmm" }, "EEEE HH:mm" ); + assert.expandPattern( ru, { skeleton: "ccccHmm" }, "EEEE HH:mm" ); + + // Best matches the date and time parts individually then combine them together. + assert.expandPattern( en, { skeleton: "GyMMMEdhms" }, "E, MMM d, y G, h:mm:ss a" ); + assert.expandPattern( en, { skeleton: "MMMMEdhm" }, "E, MMMM d 'at' h:mm a" ); + assert.expandPattern( en, { skeleton: "MMMMh" }, "LLLL 'at' h a" ); + assert.expandPattern( de, { skeleton: "MMMMEdhm" }, "E, d. MMMM 'um' h:mm a" ); + assert.expandPattern( ru, { skeleton: "MMMMEdhm" }, "ccc, d MMMM, h:mm a" ); +}); + +QUnit.test( "should throw exception on invalid skeletons", function( assert ) { + // Invalid characters. + assert.throws(function() { + expandPattern({ skeleton: "MMM d" }, en ); + }); + assert.throws(function() { + expandPattern({ skeleton: "MM/dd" }, en ); + }); + + // Invalid order. + assert.throws(function() { + expandPattern({ skeleton: "dM" }, en ); + }); + assert.throws(function() { + expandPattern({ skeleton: "My" }, en ); + expandPattern({ skeleton: "MMMy" }, en ); + }); +}); + +QUnit.test( "should expand {date: \"(full, ...)\"}", function( assert ) { + assert.expandPattern( en, { date: "full" }, "EEEE, MMMM d, y" ); +}); + +QUnit.test( "should expand {time: \"(full, ...)\"}", function( assert ) { + assert.expandPattern( en, { time: "full" }, "h:mm:ss a zzzz" ); +}); + +QUnit.test( "should expand {datetime: \"(full, ...)\"}", function( assert ) { + assert.expandPattern( en, { datetime: "full" }, "EEEE, MMMM d, y 'at' h:mm:ss a zzzz" ); +}); + +QUnit.test( "should expand {raw: \"\"}", function( assert ) { + assert.expandPattern( en, { raw: "MMM d" }, "MMM d" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern/augment-format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern/augment-format.js new file mode 100644 index 000000000..702516799 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern/augment-format.js @@ -0,0 +1,35 @@ +define([ + "src/date/expand-pattern/augment-format" +], function( augmentFormat ) { + +QUnit.module( "Date Expand Pattern Augment Format" ); + +QUnit.test( "should augment date skeletons", function( assert ) { + assert.equal( augmentFormat( "yy", "y", "." ), "yy" ); + assert.equal( augmentFormat( "yMMdd", "M/d/y", "." ), "MM/dd/y" ); + + assert.equal( augmentFormat( "MMMMd", "MMM d", "." ), "MMMM d" ); + assert.equal( augmentFormat( "MMMMd", "M d", "." ), "MMMM d" ); + assert.equal( augmentFormat( "MMMMd", "'M' M d", "." ), "'M' MMMM d" ); + + assert.equal( augmentFormat( "LLLL", "LLL", "." ), "LLLL" ); + assert.equal( augmentFormat( "LLLLd", "MMM d", "." ), "MMMM d" ); + + assert.equal( augmentFormat( "EEEE", "ccc", "." ), "cccc" ); + assert.equal( augmentFormat( "EEEEd", "d E", "."), "d EEEE" ); + + assert.equal( augmentFormat( "cccc", "ccc", "." ), "cccc" ); + assert.equal( augmentFormat( "ccccd", "d E", "." ), "d EEEE" ); +}); + +QUnit.test( "should augment time skeletons", function( assert ) { + assert.equal( augmentFormat( "hhmm", "h:mm a", "." ), "hh:mm a" ); + assert.equal( augmentFormat( "hhmmsS", "hh:mm:ss a", "." ), "hh:mm:ss.S a" ); + assert.equal( augmentFormat( "hhmmssSSS", "hh:mm:ss a", "," ), "hh:mm:ss,SSS a" ); +}); + +QUnit.test( "should augment datetime skeletons", function( assert ) { + assert.equal( augmentFormat( "EEEhhmmss", "E h:mm:ss a", "." ), "EEE hh:mm:ss a" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern/compare-formats.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern/compare-formats.js new file mode 100644 index 000000000..f9e41212a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern/compare-formats.js @@ -0,0 +1,27 @@ +define([ + "src/date/expand-pattern/compare-formats" +], function( compareFormats ) { + +QUnit.module( "Date Expand Pattern Compare Formats" ); + +// "Most symbols have a small distance from each other, e.g., M ≅ L; E ≅ c; a ≅ b ≅ B; +// H ≅ k ≅ h ≅ K; ..." +QUnit.test( "should add a small distance on similar patterns", function( assert ) { + assert.ok( compareFormats( "MM", "LL" ) > compareFormats( "MM", "MM" ) ); + assert.ok( compareFormats( "MM", "LLL" ) > compareFormats( "MM", "MMM" ) ); + assert.ok( compareFormats( "E", "c" ) > compareFormats( "E", "E" ) ); +}); + +// Numeric (l<3) and text fields (l>=3) are given a larger distance from each other. +QUnit.test( "should add a larger distance comparing numeric vs text fields", function( assert ) { + assert.ok( compareFormats( "MM", "MMM" ) > compareFormats( "MM", "M" ) ); + assert.ok( compareFormats( "MMM", "MM" ) > compareFormats( "MMM", "MMMMM" ) ); +}); + +QUnit.test( "should mark not equal things", function( assert ) { + assert.equal( compareFormats( "yMd", "d" ), -1 ); + assert.equal( compareFormats( "MM", "d" ), -1 ); + assert.equal( compareFormats( "yMMd", "MMM" ), -1 ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern/get-best-match-pattern.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern/get-best-match-pattern.js new file mode 100644 index 000000000..6968af836 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/expand-pattern/get-best-match-pattern.js @@ -0,0 +1,55 @@ +define([ + "cldr", + "src/date/expand-pattern/get-best-match-pattern", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, getBestMatchPattern, enCaGregorian, likelySubtags ) { + +var en; + +Cldr.load( enCaGregorian, likelySubtags ); + +en = new Cldr( "en" ); + +QUnit.module( "Date Expand Pattern Get Best Match Pattern" ); + +QUnit.test( "should get best match pattern", function( assert ) { + assert.equal( getBestMatchPattern( en, "MMMM" ), "LLLL" ); + assert.equal( getBestMatchPattern( en, "MMMMd" ), "MMMM d" ); + + assert.equal( getBestMatchPattern( en, "EEE" ), "ccc" ); + assert.equal( getBestMatchPattern( en, "EEEE" ), "cccc" ); + assert.equal( getBestMatchPattern( en, "EEEd" ), "d EEE" ); + assert.equal( getBestMatchPattern( en, "EEEEd" ), "d EEEE" ); + + assert.equal( getBestMatchPattern( en, "ccc" ), "ccc" ); + assert.equal( getBestMatchPattern( en, "cccc" ), "cccc" ); + assert.equal( getBestMatchPattern( en, "cccd" ), "d EEE" ); + assert.equal( getBestMatchPattern( en, "ccccd" ), "d EEEE" ); + + assert.equal( getBestMatchPattern( en, "hhmms" ), "hh:mm:ss a" ); + assert.equal( getBestMatchPattern( en, "hhmmsS" ), "hh:mm:ss.S a" ); +}); + +QUnit.test( "should be order-proof", function( assert ) { + var original = Cldr._resolved.main.en.dates.calendars.gregorian.dateTimeFormats.availableFormats; + Cldr._resolved.main.en.dates.calendars.gregorian.dateTimeFormats.availableFormats = { + "MMMd": "MMM d", + "Md": "M/d" + }; + assert.equal( getBestMatchPattern( en, "MMdd" ), "MM/dd" ); + + Cldr._resolved.main.en.dates.calendars.gregorian.dateTimeFormats.availableFormats = { + "Md": "M/d", + "MMMd": "MMM d" + }; + assert.equal( getBestMatchPattern( en, "MMdd" ), "MM/dd" ); + + // Reset it. + Cldr._resolved.main.en.dates.calendars.gregorian.dateTimeFormats.availableFormats = original; +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/format-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/format-properties.js new file mode 100644 index 000000000..a6890d22e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/format-properties.js @@ -0,0 +1,215 @@ +define([ + "cldr", + "src/date/format-properties", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/en-GB/ca-gregorian.json", + "json!cldr-data/main/en-GB/timeZoneNames.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "json!cldr-data/supplemental/metaZones.json", + "json!iana-tz-data.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, properties, enCaGregorian, enTimeZoneNames, enGbCaGregorian, enGbTimeZoneNames, + likelySubtags, timeData, weekData, metaZones, ianaTimezoneData ) { + +var cldr; + +Cldr.load( + enCaGregorian, + enTimeZoneNames, + enGbCaGregorian, + enGbTimeZoneNames, + likelySubtags, + timeData, + weekData, + metaZones +); + +// Needed for globalizeDate. +Cldr.load({ + "globalize-iana": ianaTimezoneData +}); + +cldr = new Cldr( "en" ); + +QUnit.module( "Date Format Properties" ); + +/** + * Era + */ + +QUnit.test( "should return eras property for (G|GG|GGG|GGGG|GGGGG)", function( assert ) { + [ "G", "GG", "GGG", "GGGG", "GGGGG" ].forEach(function( pattern ) { + assert.ok( "eras" in properties( pattern, cldr ) ); + }); +}); + +/** + * Year + */ + +QUnit.test( "should return appropriate properties for year in \"week of year\" (Y+)", + function( assert ) { + [ "Y", "YY", "YYY", "YYYYY" ].forEach(function( pattern ) { + assert.ok( "firstDay" in properties( pattern, cldr ) ); + assert.ok( "minDays" in properties( pattern, cldr ) ); + }); +}); + +/** + * Quarter + */ + +QUnit.test( "should return quarters properties for quarter (QQQ|QQQQ|qqq|qqqq)", + function( assert ) { + [ "QQQ", "qqq", "QQQQ", "qqqq" ].forEach(function( pattern ) { + var character = pattern.charAt( 0 ), + length = pattern.length; + assert.ok( "quarters" in properties( pattern, cldr ) ); + assert.ok( character in properties( pattern, cldr ).quarters ); + assert.ok( length in properties( pattern, cldr ).quarters[ character ] ); + }); +}); + +/** + * Month + */ + +QUnit.test( "should return months properties for month (MMM|MMMM|MMMMM|LLL|LLLL|LLLLL)", + function( assert ) { + [ "MMM", "LLL", "MMMM", "LLLL", "MMMMM", "LLLLL" ].forEach(function( pattern ) { + var character = pattern.charAt( 0 ), + length = pattern.length; + assert.ok( "months" in properties( pattern, cldr ) ); + assert.ok( character in properties( pattern, cldr ).months ); + assert.ok( length in properties( pattern, cldr ).months[ character ] ); + }); +}); + +/** + * Week + */ + +QUnit.test( "should return appropriate properties for week of year (w) or week of month (W)", + function( assert ) { + [ "w", "W" ].forEach(function( pattern ) { + assert.ok( "firstDay" in properties( pattern, cldr ) ); + assert.ok( "minDays" in properties( pattern, cldr ) ); + }); +}); + +/** + * Week day + */ + +QUnit.test( "should return firstDay property for day of week (e|ee|c|cc)", function( assert ) { + [ "e", "c", "ee", "cc" ].forEach(function( pattern ) { + assert.ok( "firstDay" in properties( pattern, cldr ) ); + }); +}); + +QUnit.test( "should return days properties for day of week (eee..eeeeee|ccc..cccccc)", + function( assert ) { + [ "eee", "ccc", "eeee", "cccc", "eeeee", "ccccc", "eeeeee", "cccccc" ].forEach( + function( pattern ) { + var character = pattern.charAt( 0 ), + length = pattern.length; + assert.ok( "days" in properties( pattern, cldr ) ); + assert.ok( character in properties( pattern, cldr ).days ); + assert.ok( length in properties( pattern, cldr ).days[ character ] ); + }); +}); + +/** + * Period + */ + +QUnit.test( "should return dayPeriods property for period (a)", function( assert ) { + assert.ok( "dayPeriods" in properties( "a", cldr ) ); + assert.equal( Object.keys(properties( "a", cldr ).dayPeriods).length, 2 ); +}); + +/** + * Zone + */ + +QUnit.test( "should return properties for timezone (z)", function( assert ) { + var timeZone, + enGb = new Cldr( "en-GB" ); + + timeZone = "America/Los_Angeles"; + [ "z", "zz", "zzz" ].forEach(function( pattern ) { + assert.equal( properties( pattern, cldr, timeZone ).standardTzName, "PST" ); + assert.equal( properties( pattern, cldr, timeZone ).daylightTzName, "PDT" ); + }); + [ "zzzz" ].forEach(function( pattern ) { + assert.equal( properties( pattern, cldr, timeZone ).standardTzName, "Pacific Standard Time" ); + assert.equal( properties( pattern, cldr, timeZone ).daylightTzName, "Pacific Daylight Time" ); + }); + + // Test for ??: + timeZone = "Asia/Dubai"; + [ "z", "zz", "zzz" ].forEach(function( pattern ) { + var formatProperties = properties( pattern, cldr, timeZone ); + assert.ok( !( "standardTzName" in formatProperties ) ); + assert.ok( !( "daylightTzName" in formatProperties ) ); + assert.ok( "gmtFormat" in formatProperties ); + assert.ok( "gmtZeroFormat" in formatProperties ); + assert.ok( "hourFormat" in formatProperties ); + }); + [ "zzzz" ].forEach(function( pattern ) { + var formatProperties = properties( pattern, cldr, timeZone ); + assert.equal( formatProperties.standardTzName, "Gulf Standard Time" ); + assert.ok( !( "daylightTzName" in formatProperties ) ); + assert.ok( "gmtFormat" in formatProperties ); + assert.ok( "gmtZeroFormat" in formatProperties ); + assert.ok( "hourFormat" in formatProperties ); + }); + + // Test for two things: + // - daylightTzName using the zone data (primary), not the metazone (secondary try); + // - standardTzName being undefined, therefore requiring the O fallback properties; + timeZone = "Europe/London"; + [ "z", "zz", "zzz" ].forEach(function( pattern ) { + var formatProperties = properties( pattern, enGb, timeZone ); + assert.ok( !( "standardTzName" in formatProperties ) ); + assert.equal( formatProperties.daylightTzName, "BST" ); + assert.ok( "gmtFormat" in formatProperties ); + assert.ok( "gmtZeroFormat" in formatProperties ); + assert.ok( "hourFormat" in formatProperties ); + }); + [ "zzzz" ].forEach(function( pattern ) { + var formatProperties = properties( pattern, enGb, timeZone ); + assert.ok( !( "standardTzName" in formatProperties ) ); + assert.equal( formatProperties.daylightTzName, "British Summer Time" ); + assert.ok( "gmtFormat" in formatProperties ); + assert.ok( "gmtZeroFormat" in formatProperties ); + assert.ok( "hourFormat" in formatProperties ); + }); +}); + +QUnit.test( "should return properties for timezone (v)", function( assert ) { + assert.equal( properties( "v", cldr, "America/Los_Angeles" ).genericTzName, "PT" ); + assert.equal( properties( "vvvv", cldr, "America/Los_Angeles" ).genericTzName, "Pacific Time" ); +}); + +QUnit.test( "should return properties for timezone (V)", function( assert ) { + assert.equal( properties( "VV", cldr, "America/Los_Angeles" ).timeZoneName, "America/Los_Angeles" ); + assert.equal( properties( "VVV", cldr, "America/Los_Angeles" ).timeZoneName, "Los Angeles" ); + assert.equal( properties( "VVVV", cldr, "America/Los_Angeles" ).timeZoneName, "Los Angeles Time" ); + assert.equal( properties( "VVVV", cldr, "America/Sao_Paulo" ).timeZoneName, "Sao Paulo Time" ); +}); + +QUnit.test( "should return properties.timeZoneData when using timeZone argument", function( assert ) { + var formatProperties = properties( "d", cldr, "America/Los_Angeles" ); + assert.ok( "timeZoneData" in formatProperties ); + assert.ok( "offsets" in formatProperties.timeZoneData() ); + assert.ok( "untils" in formatProperties.timeZoneData() ); + assert.ok( "isdsts" in formatProperties.timeZoneData() ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/format.js new file mode 100644 index 000000000..8aad26522 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/format.js @@ -0,0 +1,1674 @@ +define([ + "cldr", + "src/date/format", + "src/date/format-properties", + "src/util/string/pad", + "json!cldr-data/main/de/ca-gregorian.json", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/en-GB/ca-gregorian.json", + "json!cldr-data/main/en-GB/timeZoneNames.json", + "json!cldr-data/main/en-IN/ca-gregorian.json", + "json!cldr-data/main/pt/ca-gregorian.json", + "json!cldr-data/main/ru/ca-gregorian.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/metaZones.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "json!iana-tz-data.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, format, formatProperties, stringPad, deCaGregorian, enCaGregorian, + enTimeZoneNames, enGbCaGregorian, enGbTimeZoneNames, enInCaGregorian, ptCaGregorian, + ruCaGregorian, likelySubtags, metaZones, timeData, weekData, ianaTimezoneData ) { + +var cldr, + year0 = new Date( -62167190400000 ), + yearBc = new Date( -62482053600000 ), + date1 = new Date( 1982, 0, 2, 9, 5, 59 ), + date2 = new Date( 2010, 8, 15, 17, 35, 7, 369 ), + date3 = new Date( 1981, 11, 31, 12 ), // thu + date4 = new Date( 1994, 11, 31, 12 ); // sat + +function FakeDate( timezoneOffset ) { + this.timezoneOffset = timezoneOffset; +} + +function simpleFormatter( pad ) { + return function( value ) { + return stringPad( value, pad ); + }; +} + +FakeDate.prototype.getTimezoneOffset = function() { + return this.timezoneOffset * -60; +}; + +Cldr.load( + deCaGregorian, + enCaGregorian, + enGbCaGregorian, + enGbTimeZoneNames, + enInCaGregorian, + enTimeZoneNames, + ptCaGregorian, + ruCaGregorian, + likelySubtags, + metaZones, + timeData, + weekData +); + +cldr = new Cldr( "en" ); + +Cldr.load({ + "main": { + "en": { + "dates": { + "timeZoneNames": { + "zone": { + "Foo": { + "Baz": { + "exemplarCity": "Foo City" + } + } + } + } + } + } + } +}); + +// Needed for globalizeDate. +Cldr.load({ + "globalize-iana": ianaTimezoneData +}, { + "globalize-iana": { + "zoneData": { + "Foo": { + "Bar": { + offsets: ianaTimezoneData.zoneData.UTC.offsets, + untils: ianaTimezoneData.zoneData.UTC.untils, + isdsts: ianaTimezoneData.zoneData.UTC.isdsts + }, + "Baz": { + offsets: ianaTimezoneData.zoneData.UTC.offsets, + untils: ianaTimezoneData.zoneData.UTC.untils, + isdsts: ianaTimezoneData.zoneData.UTC.isdsts + } + } + } + } +}); + +QUnit.assert.dateFormat = function( date, pattern, cldr, expected ) { + this.dateFormatWithTimezone( date, pattern, undefined, cldr, expected ); +}; + +QUnit.assert.dateFormatWithTimezone = function( date, pattern, timeZone, cldr, expected ) { + var pad, + numberFormatters = [], + properties = formatProperties( pattern, cldr, timeZone ); + + // Create simple number formatters for this test purposes. + for ( pad in properties.numberFormatters ) { + numberFormatters[ pad ] = simpleFormatter( pad ); + } + + this.deepEqual( format( date, numberFormatters, properties ), expected ); +}; + +QUnit.module( "Date Format" ); + +/** + * Era + */ + +QUnit.test( "should format era (G|GG|GGG)", function( assert ) { + + assert.dateFormat( date1, "G", cldr, [{ + type: "era", + value: "AD" + }]); + assert.dateFormat( year0, "G", cldr, [{ + type: "era", + value: "AD" + }]); + assert.dateFormat( yearBc, "G", cldr, [{ + type: "era", + value: "BC" + }]); + assert.dateFormat( date1, "GG", cldr, [{ + type: "era", + value: "AD" + }]); + assert.dateFormat( year0, "GG", cldr, [{ + type: "era", + value: "AD" + }]); + assert.dateFormat( yearBc, "GG", cldr, [{ + type: "era", + value: "BC" + }]); + assert.dateFormat( date1, "GGG", cldr, [{ + type: "era", + value: "AD" + }]); + assert.dateFormat( year0, "GGG", cldr, [{ + type: "era", + value: "AD" + }]); + assert.dateFormat( yearBc, "GGG", cldr, [{ + type: "era", + value: "BC" + }]); +}); + +QUnit.test( "should format era (GGGG)", function( assert ) { + assert.dateFormat( date1, "GGGG", cldr, [{ + type: "era", + value: "Anno Domini" + }]); + assert.dateFormat( year0, "GGGG", cldr, [{ + type: "era", + value: "Anno Domini" + }]); + assert.dateFormat( yearBc, "GGGG", cldr, [{ + type: "era", + value: "Before Christ" + }]); +}); + +QUnit.test( "should format era (GGGGG)", function( assert ) { + assert.dateFormat( date1, "GGGGG", cldr, [{ + type: "era", + value: "A" + }]); + assert.dateFormat( year0, "GGGGG", cldr, [{ + type: "era", + value: "A" + }]); + assert.dateFormat( yearBc, "GGGGG", cldr, [{ + type: "era", + value: "B" + }]); +}); + +/** + * Year + */ + +QUnit.test( "should format year (y) with no padding", function( assert ) { + assert.dateFormat( date2, "y", cldr, [{ + type: "year", + value: "2010" + }]); + assert.dateFormat( date1, "y", cldr, [{ + type: "year", + value: "1982" + }]); + assert.dateFormat( year0, "y", cldr, [{ + type: "year", + value: "0" + }]); +}); + +QUnit.test( "should format year (yy) with padding, and limit 2 digits", function( assert ) { + assert.dateFormat( date2, "yy", cldr, [{ + type: "year", + value: "10" + }]); + assert.dateFormat( date1, "yy", cldr, [{ + type: "year", + value: "82" + }]); + assert.dateFormat( year0, "yy", cldr, [{ + type: "year", + value: "00" + }]); +}); + +QUnit.test( "should format year (yyy+) with padding", function( assert ) { + assert.dateFormat( date1, "yyy", cldr, [{ + type: "year", + value: "1982" + }]); + assert.dateFormat( date2, "yyy", cldr, [{ + type: "year", + value: "2010" + }]); + assert.dateFormat( year0, "yyyy", cldr, [{ + type: "year", + value: "0000" + }]); + assert.dateFormat( date1, "yyyyy", cldr, [{ + type: "year", + value: "01982" + }]); + assert.dateFormat( date2, "yyyyy", cldr, [{ + type: "year", + value: "02010" + }]); +}); + +QUnit.test( "should format year in \"week of year\" (Y) with no padding", function( assert ) { + assert.dateFormat( date3, "Y", cldr, [{ + type: "year", + value: "1982" + }]); + assert.dateFormat( date4, "Y", cldr, [{ + type: "year", + value: "1994" + }]); +}); + +QUnit.test( "should format year in \"week of year\" (YY) with padding, and limit 2 digits", function( assert ) { + assert.dateFormat( date3, "YY", cldr, [{ + type: "year", + value: "82" + }]); + assert.dateFormat( date4, "YY", cldr, [{ + type: "year", + value: "94" + }]); +}); + +QUnit.test( "should format year in \"week of year\" (YYY+) with padding", function( assert ) { + assert.dateFormat( date3, "YYY", cldr, [{ + type: "year", + value: "1982" + }]); + assert.dateFormat( date4, "YYY", cldr, [{ + type: "year", + value: "1994" + }]); + assert.dateFormat( date3, "YYYYY", cldr, [{ + type: "year", + value: "01982" + }]); + assert.dateFormat( date4, "YYYYY", cldr, [{ + type: "year", + value: "01994" + }]); +}); + +/** + * Quarter + */ + +QUnit.test( "should format quarter (Q|q) with no padding", function( assert ) { + assert.dateFormat( date1, "Q", cldr, [{ + type: "quarter", + value: "1" + }]); + assert.dateFormat( date2, "Q", cldr, [{ + type: "quarter", + value: "3" + }]); + assert.dateFormat( date1, "q", cldr, [{ + type: "quarter", + value: "1" + }]); + assert.dateFormat( date2, "q", cldr, [{ + type: "quarter", + value: "3" + }]); +}); + +QUnit.test( "should format quarter (QQ|qq) with padding", function( assert ) { + assert.dateFormat( date1, "QQ", cldr, [{ + type: "quarter", + value: "01" + }]); + assert.dateFormat( date2, "QQ", cldr, [{ + type: "quarter", + value: "03" + }]); + assert.dateFormat( date1, "qq", cldr, [{ + type: "quarter", + value: "01" + }]); + assert.dateFormat( date2, "qq", cldr, [{ + type: "quarter", + value: "03" + }]); +}); + +QUnit.test( "should format quarter (QQQ|qqq)", function( assert ) { + assert.dateFormat( date1, "QQQ", cldr, [{ + type: "quarter", + value: "Q1" + }]); + assert.dateFormat( date2, "QQQ", cldr, [{ + type: "quarter", + value: "Q3" + }]); + assert.dateFormat( date1, "qqq", cldr, [{ + type: "quarter", + value: "Q1" + }]); + assert.dateFormat( date2, "qqq", cldr, [{ + type: "quarter", + value: "Q3" + }]); +}); + +QUnit.test( "should format quarter (QQQQ|qqqq) with padding", function( assert ) { + assert.dateFormat( date1, "QQQQ", cldr, [{ + type: "quarter", + value: "1st quarter" + }]); + assert.dateFormat( date2, "QQQQ", cldr, [{ + type: "quarter", + value: "3rd quarter" + }]); + assert.dateFormat( date1, "qqqq", cldr, [{ + type: "quarter", + value: "1st quarter" + }]); + assert.dateFormat( date2, "qqqq", cldr, [{ + type: "quarter", + value: "3rd quarter" + }]); +}); + +/** + * Month + */ + +QUnit.test( "should format month (M|L) with no padding", function( assert ) { + assert.dateFormat( date1, "M", cldr, [{ + type: "month", + value: "1" + }]); + assert.dateFormat( date2, "M", cldr, [{ + type: "month", + value: "9" + }]); + assert.dateFormat( date1, "L", cldr, [{ + type: "month", + value: "1" + }]); + assert.dateFormat( date2, "L", cldr, [{ + type: "month", + value: "9" + }]); +}); + +QUnit.test( "should format month (MM|LL) with padding", function( assert ) { + assert.dateFormat( date1, "MM", cldr, [{ + type: "month", + value: "01" + }]); + assert.dateFormat( date2, "MM", cldr, [{ + type: "month", + value: "09" + }]); + assert.dateFormat( date1, "LL", cldr, [{ + type: "month", + value: "01" + }]); + assert.dateFormat( date2, "LL", cldr, [{ + type: "month", + value: "09" + }]); +}); + +QUnit.test( "should format month (MMM|LLL)", function( assert ) { + assert.dateFormat( date1, "MMM", cldr, [{ + type: "month", + value: "Jan" + }]); + assert.dateFormat( date2, "MMM", cldr, [{ + type: "month", + value: "Sep" + }]); + assert.dateFormat( date1, "LLL", cldr, [{ + type: "month", + value: "Jan" + }]); + assert.dateFormat( date2, "LLL", cldr, [{ + type: "month", + value: "Sep" + }]); +}); + +QUnit.test( "should format month (MMMM|LLLL)", function( assert ) { + assert.dateFormat( date1, "MMMM", cldr, [{ + type: "month", + value: "January" + }]); + assert.dateFormat( date2, "MMMM", cldr, [{ + type: "month", + value: "September" + }]); + assert.dateFormat( date1, "LLLL", cldr, [{ + type: "month", + value: "January" + }]); + assert.dateFormat( date2, "LLLL", cldr, [{ + type: "month", + value: "September" + }]); +}); + +QUnit.test( "should format month (MMMMM|LLLLL)", function( assert ) { + assert.dateFormat( date1, "MMMMM", cldr, [{ + type: "month", + value: "J" + }]); + assert.dateFormat( date2, "MMMMM", cldr, [{ + type: "month", + value: "S" + }]); + assert.dateFormat( date1, "LLLLL", cldr, [{ + type: "month", + value: "J" + }]); + assert.dateFormat( date2, "LLLLL", cldr, [{ + type: "month", + value: "S" + }]); +}); + +/** + * Week + */ + +QUnit.test( "should format week of year (w) with no padding", function( assert ) { + assert.dateFormat( date1, "w", cldr, [{ + type: "week", + value: "1" + }]); + assert.dateFormat( date2, "w", cldr, [{ + type: "week", + value: "38" + }]); +}); + +QUnit.test( "should format week of year (ww) with padding", function( assert ) { + assert.dateFormat( date1, "ww", cldr, [{ + type: "week", + value: "01" + }]); + assert.dateFormat( date2, "ww", cldr, [{ + type: "week", + value: "38" + }]); +}); + +QUnit.test( "should format week of month (W)", function( assert ) { + assert.dateFormat( date1, "W", cldr, [{ + type: "week", + value: "1" + }]); + assert.dateFormat( date2, "W", cldr, [{ + type: "week", + value: "3" + }]); + assert.dateFormat( date3, "W", cldr, [{ + type: "week", + value: "5" + }]); +}); + +/** + * Day + */ + +QUnit.test( "should format day (d) with no padding", function( assert ) { + assert.dateFormat( date1, "d", cldr, [{ + type: "day", + value: "2" + }]); + assert.dateFormat( date2, "d", cldr, [{ + type: "day", + value: "15" + }]); +}); + +QUnit.test( "should format day (dd) with padding", function( assert ) { + assert.dateFormat( date1, "dd", cldr, [{ + type: "day", + value: "02" + }]); + assert.dateFormat( date2, "dd", cldr, [{ + type: "day", + value: "15" + }]); +}); + +QUnit.test( "should format day of year (D) with no padding", function( assert ) { + assert.dateFormat( date1, "D", cldr, [{ + type: "day", + value: "2" + }]); + assert.dateFormat( date2, "D", cldr, [{ + type: "day", + value: "258" + }]); +}); + +QUnit.test( "should format day of year (DD|DDD) with padding", function( assert ) { + assert.dateFormat( date1, "DD", cldr, [{ + type: "day", + value: "02" + }]); + assert.dateFormat( date1, "DDD", cldr, [{ + type: "day", + value: "002" + }]); + assert.dateFormat( date2, "DD", cldr, [{ + type: "day", + value: "258" + }]); +}); + +QUnit.test( "should format day of week in month (F)", function( assert ) { + assert.dateFormat( date1, "F", cldr, [{ + type: "day", + value: "1" + }]); + assert.dateFormat( date2, "F", cldr, [{ + type: "day", + value: "3" + }]); +}); + +/** + * Week day + */ +QUnit.test( "should format local day of week (e|c) with no padding", function( assert ) { + assert.dateFormat( date1, "e", cldr, [{ + type: "weekday", + value: "7" + }]); + assert.dateFormat( date2, "e", cldr, [{ + type: "weekday", + value: "4" + }]); + assert.dateFormat( date1, "c", cldr, [{ + type: "weekday", + value: "7" + }]); + assert.dateFormat( date2, "c", cldr, [{ + type: "weekday", + value: "4" + }]); +}); + +QUnit.test( "should format local day of week (ee|cc) with padding", function( assert ) { + assert.dateFormat( date1, "ee", cldr, [{ + type: "weekday", + value: "07" + }]); + assert.dateFormat( date2, "ee", cldr, [{ + type: "weekday", + value: "04" + }]); + assert.dateFormat( date1, "cc", cldr, [{ + type: "weekday", + value: "07" + }]); + assert.dateFormat( date2, "cc", cldr, [{ + type: "weekday", + value: "04" + }]); +}); + +QUnit.test( "should format local day of week (E|EE|EEE|eee|ccc)", function( assert ) { + assert.dateFormat( date1, "E", cldr, [{ + type: "weekday", + value: "Sat" + }]); + assert.dateFormat( date2, "E", cldr, [{ + type: "weekday", + value: "Wed" + }]); + assert.dateFormat( date1, "EE", cldr, [{ + type: "weekday", + value: "Sat" + }]); + assert.dateFormat( date2, "EE", cldr, [{ + type: "weekday", + value: "Wed" + }]); + assert.dateFormat( date1, "EEE", cldr, [{ + type: "weekday", + value: "Sat" + }]); + assert.dateFormat( date2, "EEE", cldr, [{ + type: "weekday", + value: "Wed" + }]); + assert.dateFormat( date1, "eee", cldr, [{ + type: "weekday", + value: "Sat" + }]); + assert.dateFormat( date2, "eee", cldr, [{ + type: "weekday", + value: "Wed" + }]); + assert.dateFormat( date1, "ccc", cldr, [{ + type: "weekday", + value: "Sat" + }]); + assert.dateFormat( date2, "ccc", cldr, [{ + type: "weekday", + value: "Wed" + }]); +}); + +QUnit.test( "should format local day of week (EEEE|eeee|cccc)", function( assert ) { + assert.dateFormat( date1, "EEEE", cldr, [{ + type: "weekday", + value: "Saturday" + }]); + assert.dateFormat( date2, "EEEE", cldr, [{ + type: "weekday", + value: "Wednesday" + }]); + assert.dateFormat( date1, "eeee", cldr, [{ + type: "weekday", + value: "Saturday" + }]); + assert.dateFormat( date2, "eeee", cldr, [{ + type: "weekday", + value: "Wednesday" + }]); + assert.dateFormat( date1, "cccc", cldr, [{ + type: "weekday", + value: "Saturday" + }]); + assert.dateFormat( date2, "cccc", cldr, [{ + type: "weekday", + value: "Wednesday" + }]); +}); + +QUnit.test( "should format local day of week (EEEEE|eeeee|ccccc)", function( assert ) { + assert.dateFormat( date1, "EEEEE", cldr, [{ + type: "weekday", + value: "S" + }]); + assert.dateFormat( date2, "EEEEE", cldr, [{ + type: "weekday", + value: "W" + }]); + assert.dateFormat( date1, "eeeee", cldr, [{ + type: "weekday", + value: "S" + }]); + assert.dateFormat( date2, "eeeee", cldr, [{ + type: "weekday", + value: "W" + }]); + assert.dateFormat( date1, "ccccc", cldr, [{ + type: "weekday", + value: "S" + }]); + assert.dateFormat( date2, "ccccc", cldr, [{ + type: "weekday", + value: "W" + }]); +}); + +QUnit.test( "should format local day of week (EEEEEE|eeeeee|cccccc)", function( assert ) { + assert.dateFormat( date1, "EEEEEE", cldr, [{ + type: "weekday", + value: "Sa" + }]); + assert.dateFormat( date2, "EEEEEE", cldr, [{ + type: "weekday", + value: "We" + }]); + assert.dateFormat( date1, "eeeeee", cldr, [{ + type: "weekday", + value: "Sa" + }]); + assert.dateFormat( date2, "eeeeee", cldr, [{ + type: "weekday", + value: "We" + }]); + assert.dateFormat( date1, "cccccc", cldr, [{ + type: "weekday", + value: "Sa" + }]); + assert.dateFormat( date2, "cccccc", cldr, [{ + type: "weekday", + value: "We" + }]); +}); + +/** + * Period + */ + +QUnit.test( "should format period (a)", function( assert ) { + assert.dateFormat( date1, "a", cldr, [{ + type: "dayperiod", + value: "AM" + }]); + assert.dateFormat( date2, "a", cldr, [{ + type: "dayperiod", + value: "PM" + }]); +}); + +/** + * Hour + */ + +QUnit.test( "should format hour (h) using 12-hour-cycle [1-12] with no padding", function( assert ) { + assert.dateFormat( date1, "h", cldr, [{ + type: "hour", + value: "9" + }]); + assert.dateFormat( date2, "h", cldr, [{ + type: "hour", + value: "5" + }]); + assert.dateFormat( new Date( 0, 0, 0, 0 ), "h", cldr, [{ + type: "hour", + value: "12" + }]); +}); + +QUnit.test( "should format hour (hh) using 12-hour-cycle [1-12] with padding", function( assert ) { + assert.dateFormat( date1, "hh", cldr, [{ + type: "hour", + value: "09" + }]); + assert.dateFormat( date2, "hh", cldr, [{ + type: "hour", + value: "05" + }]); + assert.dateFormat( new Date( 0, 0, 0, 0 ), "hh", cldr, [{ + type: "hour", + value: "12" + }]); +}); + +QUnit.test( "should format hour (H) using 24-hour-cycle [0-23] with no padding", function( assert ) { + assert.dateFormat( date1, "H", cldr, [{ + type: "hour", + value: "9" + }]); + assert.dateFormat( date2, "H", cldr, [{ + type: "hour", + value: "17" + }]); + assert.dateFormat( new Date( 0, 0, 0, 0 ), "H", cldr, [{ + type: "hour", + value: "0" + }]); +}); + +QUnit.test( "should format hour (HH) using 24-hour-cycle [0-23] with padding", function( assert ) { + assert.dateFormat( date1, "HH", cldr, [{ + type: "hour", + value: "09" + }]); + assert.dateFormat( date2, "HH", cldr, [{ + type: "hour", + value: "17" + }]); + assert.dateFormat( new Date( 0, 0, 0, 0 ), "HH", cldr, [{ + type: "hour", + value: "00" + }]); +}); + +QUnit.test( "should format hour (K) using 12-hour-cycle [0-11] with no padding", function( assert ) { + assert.dateFormat( date1, "K", cldr, [{ + type: "hour", + value: "9" + }]); + assert.dateFormat( date2, "K", cldr, [{ + type: "hour", + value: "5" + }]); + assert.dateFormat( new Date( 0, 0, 0, 0 ), "K", cldr, [{ + type: "hour", + value: "0" + }]); +}); + +QUnit.test( "should format hour (KK) using 12-hour-cycle [0-11] with padding", function( assert ) { + assert.dateFormat( date1, "KK", cldr, [{ + type: "hour", + value: "09" + }]); + assert.dateFormat( date2, "KK", cldr, [{ + type: "hour", + value: "05" + }]); + assert.dateFormat( new Date( 0, 0, 0, 0 ), "KK", cldr, [{ + type: "hour", + value: "00" + }]); +}); + +QUnit.test( "should format hour (k) using 24-hour-cycle [1-24] with no padding", function( assert ) { + assert.dateFormat( date1, "k", cldr, [{ + type: "hour", + value: "9" + }]); + assert.dateFormat( date2, "k", cldr, [{ + type: "hour", + value: "17" + }]); + assert.dateFormat( new Date( 0, 0, 0, 0 ), "k", cldr, [{ + type: "hour", + value: "24" + }]); +}); + +QUnit.test( "should format hour (kk) using 24-hour-cycle [1-24] with padding", function( assert ) { + assert.dateFormat( date1, "kk", cldr, [{ + type: "hour", + value: "09" + }]); + assert.dateFormat( date2, "kk", cldr, [{ + type: "hour", + value: "17" + }]); + assert.dateFormat( new Date( 0, 0, 0, 0 ), "kk", cldr, [{ + type: "hour", + value: "24" + }]); +}); + +QUnit.test( "should format hour (j) using preferred hour format for the locale (h, H, K, or k) with no padding", function( assert ) { + assert.dateFormat( date2, "j", cldr, [{ + type: "hour", + value: "5" + }]); + assert.dateFormat( date2, "j", new Cldr( "pt-BR" ), [{ + type: "hour", + value: "17" + }]); + assert.dateFormat( date2, "j", new Cldr( "de" ), [{ + type: "hour", + value: "17" + }]); + assert.dateFormat( date2, "j", new Cldr( "en-IN" ), [{ + type: "hour", + value: "5" + }]); + assert.dateFormat( date2, "j", new Cldr( "en-GB" ), [{ + type: "hour", + value: "17" + }]); + assert.dateFormat( date2, "j", new Cldr( "ru" ), [{ + type: "hour", + value: "17" + }]); +}); + +QUnit.test( "should format hour (jj) using preferred hour format for the locale (h, H, K, or k) with padding", function( assert ) { + assert.dateFormat( date1, "jj", cldr, [{ + type: "hour", + value: "09" + }]); + assert.dateFormat( date2, "jj", cldr, [{ + type: "hour", + value: "05" + }]); + assert.dateFormat( new Date( 0, 0, 0, 0 ), "jj", cldr, [{ + type: "hour", + value: "12" + }]); +}); + +/** + * Minute + */ + +QUnit.test( "should format minute (m) with no padding", function( assert ) { + assert.dateFormat( date1, "m", cldr, [{ + type: "minute", + value: "5" + }]); + assert.dateFormat( date2, "m", cldr, [{ + type: "minute", + value: "35" + }]); +}); + +QUnit.test( "should format minute (mm) with padding", function( assert ) { + assert.dateFormat( date1, "mm", cldr, [{ + type: "minute", + value: "05" + }]); + assert.dateFormat( date2, "mm", cldr, [{ + type: "minute", + value: "35" + }]); +}); + +/** + * Second + */ + +QUnit.test( "should format second (s) with no padding", function( assert ) { + assert.dateFormat( date1, "s", cldr, [{ + type: "second", + value: "59" + }]); + assert.dateFormat( date2, "s", cldr, [{ + type: "second", + value: "7" + }]); +}); + +QUnit.test( "should format second (ss) with padding", function( assert ) { + assert.dateFormat( date1, "ss", cldr, [{ + type: "second", + value: "59" + }]); + assert.dateFormat( date2, "ss", cldr, [{ + type: "second", + value: "07" + }]); +}); + +QUnit.test( "should format various milliseconds (S+)", function( assert ) { + assert.dateFormat( date2, "S", cldr, [{ + type: "second", + value: "4" + }]); + assert.dateFormat( date2, "SS", cldr, [{ + type: "second", + value: "37" + }]); + assert.dateFormat( date2, "SSS", cldr, [{ + type: "second", + value: "369" + }]); + assert.dateFormat( date2, "SSSS", cldr, [{ + type: "second", + value: "3690" + }]); + assert.dateFormat( date2, "SSSSS", cldr, [{ + type: "second", + value: "36900" + }]); +}); + +QUnit.test( "should format various milliseconds (A+)", function( assert ) { + assert.dateFormat( date2, "A", cldr, [{ + type: "second", + value: "633074" + }]); + assert.dateFormat( date2, "AA", cldr, [{ + type: "second", + value: "6330737" + }]); + assert.dateFormat( date2, "AAA", cldr, [{ + type: "second", + value: "63307369" + }]); + assert.dateFormat( date2, "AAAA", cldr, [{ + type: "second", + value: "633073690" + }]); + assert.dateFormat( date2, "AAAAA", cldr, [{ + type: "second", + value: "6330736900" + }]); +}); + +/** + * Zone + */ +QUnit.test( "should format timezone (z)", function( assert ) { + var date, + enGb = new Cldr( "en-GB" ); + + // Test for country with Daylight Savings and Standard time, e.g., Pacific Standard Time and + // Pacific Daylight Time. + date = new Date( 2017, 0, 1 ); + assert.dateFormatWithTimezone( date, "z", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "PST" + }]); + assert.dateFormatWithTimezone( date, "zz", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "PST" + }]); + assert.dateFormatWithTimezone( date, "zzz", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "PST" + }]); + assert.dateFormatWithTimezone( date, "zzzz", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "Pacific Standard Time" + }]); + + date = new Date( 2017, 6, 1 ); + assert.dateFormatWithTimezone( date, "z", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "PDT" + }]); + assert.dateFormatWithTimezone( date, "zz", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "PDT" + }]); + assert.dateFormatWithTimezone( date, "zzz", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "PDT" + }]); + assert.dateFormatWithTimezone( date, "zzzz", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "Pacific Daylight Time" + }]); + + date = new Date( 2017, 0, 1 ); + assert.dateFormatWithTimezone( date, "zzzz", "Asia/Dubai", cldr, [{ + type: "zone", + value: "Gulf Standard Time" + }]); + + date = new Date( 2017, 6, 1 ); + assert.dateFormatWithTimezone( date, "zzzz", "Asia/Dubai", cldr, [{ + type: "zone", + value: "Gulf Standard Time" + }]); + + // Test for two things: + // - daylightTzName using the zone data (primary), not the metazone (secondary try); + // - standardTzName being undefined, therefore requiring the O fallback properties; + date = new Date( "2015-06-01T12:32:46" ); + assert.dateFormatWithTimezone( date, "z", "Europe/London", enGb, [{ + type: "zone", + value: "BST" + }]); + assert.dateFormatWithTimezone( date, "zz", "Europe/London", enGb, [{ + type: "zone", + value: "BST" + }]); + assert.dateFormatWithTimezone( date, "zzz", "Europe/London", enGb, [{ + type: "zone", + value: "BST" + }]); + assert.dateFormatWithTimezone( date, "zzzz", "Europe/London", enGb, [{ + type: "zone", + value: "British Summer Time" + }]); + + date = new Date( "2015-01-01T12:32:46" ); + assert.dateFormatWithTimezone( date, "z", "Europe/London", enGb, [{ + type: "zone", + value: "GMT" + }]); + assert.dateFormatWithTimezone( date, "zz", "Europe/London", enGb, [{ + type: "zone", + value: "GMT" + }]); + assert.dateFormatWithTimezone( date, "zzz", "Europe/London", enGb, [{ + type: "zone", + value: "GMT" + }]); + assert.dateFormatWithTimezone( date, "zzzz", "Europe/London", enGb, [{ + type: "zone", + value: "GMT" + }]); + + // Test for country with only standard time, e.g., long: Indian Standard Time. + // This test also covers the case where timezone name is undefined like short timezone name for + // Asia/Calcutta and should fall through 'O' format. + // isDST === false. + date = new Date( 2017, 0, 1 ); + assert.dateFormatWithTimezone( date, "z", "Asia/Calcutta", cldr, [{ + type: "zone", + value: "GMT+5:30" + }]); + assert.dateFormatWithTimezone( date, "zz", "Asia/Calcutta", cldr, [{ + type: "zone", + value: "GMT+5:30" + }]); + assert.dateFormatWithTimezone( date, "zzz", "Asia/Calcutta", cldr, [{ + type: "zone", + value: "GMT+5:30" + }]); + assert.dateFormatWithTimezone( date, "zzzz", "Asia/Calcutta", cldr, [{ + type: "zone", + value: "India Standard Time" + }]); + + // isDST === true: + date = new Date( 1943, 0, 1 ); + assert.dateFormatWithTimezone( date, "z", "Asia/Calcutta", cldr, [{ + type: "zone", + value: "GMT+6:30" + }]); + assert.dateFormatWithTimezone( date, "zz", "Asia/Calcutta", cldr, [{ + type: "zone", + value: "GMT+6:30" + }]); + assert.dateFormatWithTimezone( date, "zzz", "Asia/Calcutta", cldr, [{ + type: "zone", + value: "GMT+6:30" + }]); + + // Fall through to 'O' format + assert.dateFormatWithTimezone( date, "zzzz", "Asia/Calcutta", cldr, [{ + type: "zone", + value: "GMT+06:30" + }]); + assert.dateFormatWithTimezone( date1, "z", "Foo/Bar", cldr, [{ + type: "zone", + value: "GMT" + }]); + assert.dateFormatWithTimezone( date1, "zz", "Foo/Bar", cldr, [{ + type: "zone", + value: "GMT" + }]); + assert.dateFormatWithTimezone( date1, "zzz", "Foo/Bar", cldr, [{ + type: "zone", + value: "GMT" + }]); + assert.dateFormatWithTimezone( date1, "zzzz", "Foo/Bar", cldr, [{ + type: "zone", + value: "GMT" + }]); +}); + +QUnit.test( "should format timezone (Z)", function( assert ) { + var date = new FakeDate( 0 ); + assert.dateFormat( date, "Z", cldr, [{ + type: "zone", + value: "+0000" + }]); + assert.dateFormat( date, "ZZ", cldr, [{ + type: "zone", + value: "+0000" + }]); + assert.dateFormat( date, "ZZZ", cldr, [{ + type: "zone", + value: "+0000" + }]); + assert.dateFormat( date, "ZZZZ", cldr, [{ + type: "zone", + value: "GMT" + }]); + assert.dateFormat( date, "ZZZZZ", cldr, [{ + type: "zone", + value: "Z" + }]); + + date = new FakeDate( -3 ); + assert.dateFormat( date, "Z", cldr, [{ + type: "zone", + value: "-0300" + }]); + assert.dateFormat( date, "ZZ", cldr, [{ + type: "zone", + value: "-0300" + }]); + assert.dateFormat( date, "ZZZ", cldr, [{ + type: "zone", + value: "-0300" + }]); + assert.dateFormat( date, "ZZZZ", cldr, [{ + type: "zone", + value: "GMT-03:00" + }]); + assert.dateFormat( date, "ZZZZZ", cldr, [{ + type: "zone", + value: "-03:00" + }]); + + date = new FakeDate( 11 ); + assert.dateFormat( date, "Z", cldr, [{ + type: "zone", + value: "+1100" + }]); + assert.dateFormat( date, "ZZ", cldr, [{ + type: "zone", + value: "+1100" + }]); + assert.dateFormat( date, "ZZZ", cldr, [{ + type: "zone", + value: "+1100" + }]); + assert.dateFormat( date, "ZZZZ", cldr, [{ + type: "zone", + value: "GMT+11:00" + }]); + assert.dateFormat( date, "ZZZZZ", cldr, [{ + type: "zone", + value: "+11:00" + }]); +}); + +QUnit.test( "should format timezone (O)", function( assert ) { + var date = new FakeDate( 0 ); + assert.dateFormat( date, "O", cldr, [{ + type: "zone", + value: "GMT" + }]); + assert.dateFormat( date, "OOOO", cldr, [{ + type: "zone", + value: "GMT" + }]); + + date = new FakeDate( -3 ); + assert.dateFormat( date, "O", cldr, [{ + type: "zone", + value: "GMT-3" + }]); + assert.dateFormat( date, "OOOO", cldr, [{ + type: "zone", + value: "GMT-03:00" + }]); + + date = new FakeDate( 11 ); + assert.dateFormat( date, "O", cldr, [{ + type: "zone", + value: "GMT+11" + }]); + assert.dateFormat( date, "OOOO", cldr, [{ + type: "zone", + value: "GMT+11:00" + }]); + + // TODO Support optional seconds. + date = new FakeDate( -7.883 ); + assert.dateFormat( date, "O", cldr, [{ + type: "zone", + value: "GMT-7:52" + }]); + assert.dateFormat( date, "OOOO", cldr, [{ + type: "zone", + value: "GMT-07:52" + }]); + + date = new FakeDate( 5.5 ); + assert.dateFormat( date, "O", cldr, [{ + type: "zone", + value: "GMT+5:30" + }]); + assert.dateFormat( date, "OOOO", cldr, [{ + type: "zone", + value: "GMT+05:30" + }]); +}); + +QUnit.test( "should format timezone (v)", function( assert ) { + var date = new Date( 2017, 5, 1 ); + assert.dateFormatWithTimezone( date, "v", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "PT" + }]); + assert.dateFormatWithTimezone( date, "vvvv", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "Pacific Time" + }]); + + // Use metazone. + assert.dateFormatWithTimezone( date, "vvvv", "America/Sao_Paulo", cldr, [{ + type: "zone", + value: "Brasilia Time" + }]); + + // Fall through 'VVVV' format. + assert.dateFormatWithTimezone( date, "v", "America/Sao_Paulo", cldr, [{ + type: "zone", + value: "Sao Paulo Time" + }]); + assert.dateFormatWithTimezone( date, "v", "Foo/Baz", cldr, [{ + type: "zone", + value: "Foo City Time" + }]); + assert.dateFormatWithTimezone( date, "vvvv", "Foo/Baz", cldr, [{ + type: "zone", + value: "Foo City Time" + }]); + + // Fall through 'O' and 'OOOO' formats. + assert.dateFormatWithTimezone( date, "v", "Etc/GMT+8", cldr, [{ + type: "zone", + value: "GMT-8" + }]); + assert.dateFormatWithTimezone( date, "vvvv", "Etc/GMT+8", cldr, [{ + type: "zone", + value: "GMT-08:00" + }]); +}); + +QUnit.test( "should format timezone (V)", function( assert ) { + var date = new Date( 2017, 5, 1 ); + assert.dateFormatWithTimezone( date, "VV", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "America/Los_Angeles" + }]); + assert.dateFormatWithTimezone( date, "VVV", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "Los Angeles" + }]); + assert.dateFormatWithTimezone( date, "VVVV", "America/Los_Angeles", cldr, [{ + type: "zone", + value: "Los Angeles Time" + }]); + assert.dateFormatWithTimezone( date, "VVVV", "America/Sao_Paulo", cldr, [{ + type: "zone", + value: "Sao Paulo Time" + }]); + + // Fall through 'VVV' format with "Unknown" exemplarCity. + assert.dateFormatWithTimezone( date, "VVV", "Foo/Bar", cldr, [{ + type: "zone", + value: "Unknown City" + }]); + + // Fall through 'OOOO' format. + assert.dateFormatWithTimezone( date, "VVVV", "Etc/GMT+8", cldr, [{ + type: "zone", + value: "GMT-08:00" + }]); +}); + +QUnit.test( "should format timezone (X)", function( assert ) { + var date = new FakeDate( 0 ); + assert.dateFormat( date, "X", cldr, [{ + type: "zone", + value: "Z" + }]); + assert.dateFormat( date, "XX", cldr, [{ + type: "zone", + value: "Z" + }]); + assert.dateFormat( date, "XXX", cldr, [{ + type: "zone", + value: "Z" + }]); + assert.dateFormat( date, "XXXX", cldr, [{ + type: "zone", + value: "Z" + }]); + assert.dateFormat( date, "XXXXX", cldr, [{ + type: "zone", + value: "Z" + }]); + + date = new FakeDate( -3 ); + assert.dateFormat( date, "X", cldr, [{ + type: "zone", + value: "-03" + }]); + assert.dateFormat( date, "XX", cldr, [{ + type: "zone", + value: "-0300" + }]); + assert.dateFormat( date, "XXX", cldr, [{ + type: "zone", + value: "-03:00" + }]); + assert.dateFormat( date, "XXXX", cldr, [{ + type: "zone", + value: "-0300" + }]); + assert.dateFormat( date, "XXXXX", cldr, [{ + type: "zone", + value: "-03:00" + }]); + + date = new FakeDate( -7.883 ); + assert.dateFormat( date, "X", cldr, [{ + type: "zone", + value: "-0752" + }]); + assert.dateFormat( date, "XX", cldr, [{ + type: "zone", + value: "-0752" + }]); + assert.dateFormat( date, "XXX", cldr, [{ + type: "zone", + value: "-07:52" + }]); + assert.dateFormat( date, "XXXX", cldr, [{ + type: "zone", + value: "-075258" + }]); + assert.dateFormat( date, "XXXXX", cldr, [{ + type: "zone", + value: "-07:52:58" + }]); + + date = new FakeDate( 5.5 ); + assert.dateFormat( date, "X", cldr, [{ + type: "zone", + value: "+0530" + }]); + assert.dateFormat( date, "XX", cldr, [{ + type: "zone", + value: "+0530" + }]); + assert.dateFormat( date, "XXX", cldr, [{ + type: "zone", + value: "+05:30" + }]); + assert.dateFormat( date, "XXXX", cldr, [{ + type: "zone", + value: "+0530" + }]); + assert.dateFormat( date, "XXXXX", cldr, [{ + type: "zone", + value: "+05:30" + }]); + + date = new FakeDate( 11 ); + assert.dateFormat( date, "X", cldr, [{ + type: "zone", + value: "+11" + }]); + assert.dateFormat( date, "XX", cldr, [{ + type: "zone", + value: "+1100" + }]); + assert.dateFormat( date, "XXX", cldr, [{ + type: "zone", + value: "+11:00" + }]); + assert.dateFormat( date, "XXXX", cldr, [{ + type: "zone", + value: "+1100" + }]); + assert.dateFormat( date, "XXXXX", cldr, [{ + type: "zone", + value: "+11:00" + }]); +}); + +QUnit.test( "should format timezone (x)", function( assert ) { + var date = new FakeDate( 0 ); + assert.dateFormat( date, "x", cldr, [{ + type: "zone", + value: "+00" + }]); + assert.dateFormat( date, "xx", cldr, [{ + type: "zone", + value: "+0000" + }]); + assert.dateFormat( date, "xxx", cldr, [{ + type: "zone", + value: "+00:00" + }]); + assert.dateFormat( date, "xxxx", cldr, [{ + type: "zone", + value: "+0000" + }]); + assert.dateFormat( date, "xxxxx", cldr, [{ + type: "zone", + value: "+00:00" + }]); + + date = new FakeDate( -3 ); + assert.dateFormat( date, "x", cldr, [{ + type: "zone", + value: "-03" + }]); + assert.dateFormat( date, "xx", cldr, [{ + type: "zone", + value: "-0300" + }]); + assert.dateFormat( date, "xxx", cldr, [{ + type: "zone", + value: "-03:00" + }]); + assert.dateFormat( date, "xxxx", cldr, [{ + type: "zone", + value: "-0300" + }]); + assert.dateFormat( date, "xxxxx", cldr, [{ + type: "zone", + value: "-03:00" + }]); + + date = new FakeDate( -7.883 ); + assert.dateFormat( date, "x", cldr, [{ + type: "zone", + value: "-0752" + }]); + assert.dateFormat( date, "xx", cldr, [{ + type: "zone", + value: "-0752" + }]); + assert.dateFormat( date, "xxx", cldr, [{ + type: "zone", + value: "-07:52" + }]); + assert.dateFormat( date, "xxxx", cldr, [{ + type: "zone", + value: "-075258" + }]); + assert.dateFormat( date, "xxxxx", cldr, [{ + type: "zone", + value: "-07:52:58" + }]); + + date = new FakeDate( 5.5 ); + + assert.dateFormat( date, "x", cldr, [{ + type: "zone", + value: "+0530" + }]); + assert.dateFormat( date, "xx", cldr, [{ + type: "zone", + value: "+0530" + }]); + assert.dateFormat( date, "xxx", cldr, [{ + type: "zone", + value: "+05:30" + }]); + assert.dateFormat( date, "xxxx", cldr, [{ + type: "zone", + value: "+0530" + }]); + assert.dateFormat( date, "xxxxx", cldr, [{ + type: "zone", + value: "+05:30" + }]); + + date = new FakeDate( 11 ); + assert.dateFormat( date, "x", cldr, [{ + type: "zone", + value: "+11" + }]); + assert.dateFormat( date, "xx", cldr, [{ + type: "zone", + value: "+1100" + }]); + assert.dateFormat( date, "xxx", cldr, [{ + type: "zone", + value: "+11:00" + }]); + assert.dateFormat( date, "xxxx", cldr, [{ + type: "zone", + value: "+1100" + }]); + assert.dateFormat( date, "xxxxx", cldr, [{ + type: "zone", + value: "+11:00" + }]); +}); + +/** + * Literal + */ +QUnit.test( "should format literal (')", function( assert ) { + assert.dateFormat( date1, "yyyy.MM.dd G 'at' HH:mm:ss", cldr, [ + { + "type": "year", + "value": "1982" + }, + { + "type": "literal", + "value": "." + }, + { + "type": "month", + "value": "01" + }, + { + "type": "literal", + "value": "." + }, + { + "type": "day", + "value": "02" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "era", + "value": "AD" + }, + { + "type": "literal", + "value": " at " + }, + { + "type": "hour", + "value": "09" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "minute", + "value": "05" + }, + { + "type": "literal", + "value": ":" + }, + { + "type": "second", + "value": "59" + } + ]); + + assert.dateFormat( date1, "hh 'o''clock' a", cldr, [ + { + "type": "hour", + "value": "09" + }, + { + "type": "literal", + "value": " o'clock " + }, + { + "type": "dayperiod", + "value": "AM" + } + ]); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/parse-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/parse-properties.js new file mode 100644 index 000000000..46149e937 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/parse-properties.js @@ -0,0 +1,43 @@ +define([ + "cldr", + "src/date/parse-properties", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/timeData.json", + "json!iana-tz-data.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, parseProperties, enCaGregorian, likelySubtags, timeData, ianaTimezoneData ) { + +var cldr; + +Cldr.load( + enCaGregorian, + likelySubtags, + timeData +); + +// Needed for globalizeDate. +Cldr.load({ + "globalize-iana": ianaTimezoneData +}); + +cldr = new Cldr( "en" ); + +QUnit.module( "Date Parse Properties" ); + +QUnit.test( "should return parse properties", function( assert ) { + var properties; + + assert.ok( "preferredTimeData" in parseProperties( cldr ) ); + + properties = parseProperties( cldr, "America/Los_Angeles" ); + assert.ok( "preferredTimeData" in properties ); + assert.ok( "timeZoneData" in properties ); + assert.ok( "offsets" in properties.timeZoneData() ); + assert.ok( "untils" in properties.timeZoneData() ); + assert.ok( "isdsts" in properties.timeZoneData() ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/parse.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/parse.js new file mode 100644 index 000000000..336524cfb --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/parse.js @@ -0,0 +1,1283 @@ +define([ + "cldr", + "src/date/parse", + "src/date/parse-properties", + "src/date/start-of", + "src/date/tokenizer", + "src/date/tokenizer-properties", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/en-GB/ca-gregorian.json", + "json!cldr-data/main/en-GB/numbers.json", + "json!cldr-data/main/en-GB/timeZoneNames.json", + "json!cldr-data/main/fr/ca-gregorian.json", + "json!cldr-data/main/fr/numbers.json", + "json!cldr-data/main/fr/timeZoneNames.json", + "json!cldr-data/main/tr/ca-gregorian.json", + "json!cldr-data/main/tr/numbers.json", + "json!cldr-data/main/zh/ca-gregorian.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "json!iana-tz-data.json", + "../../util", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, parse, parseProperties, startOf, tokenizer, dateTokenizerProperties, + enCaGregorian, enNumbers, enTimeZoneNames, enGbCaGregorian, enGbNumbers, enGbTimeZoneNames, + frCaGregorian, frNumbers, frTimeZoneNames, trCaGregorian, trNumbers, zhCaGregorian, zhNumbers, + likelySubtags, timeData, weekData, ianaTimezoneData, util ) { + +var cldr, date1, date2, fr, midnight, zh; + +QUnit.assert.dateParse = function( stringDate, pattern, cldr, expected ) { + this.dateParseWithTimezone( stringDate, pattern, undefined, cldr, expected ); +}; + +QUnit.assert.dateParseWithTimezone = function( stringDate, pattern, timeZone, cldr, expected ) { + var tokenizerProperties, tokens; + + tokenizerProperties = dateTokenizerProperties( pattern, cldr, timeZone ); + tokens = tokenizer( stringDate, simpleNumberParser, tokenizerProperties ); + + this.deepEqual( parse( stringDate, tokens, parseProperties( cldr, timeZone ) ), expected ); +}; + +QUnit.assert.timezoneParse = function( stringDate, pattern, cldr, timezoneOffset ) { + var parsedTimezoneOffset, parsedDate, tokenizerProperties, tokens, + testPattern = "HH:mm " + pattern, + testStringDate = "00:00 " + stringDate; + + tokenizerProperties = dateTokenizerProperties( testPattern, cldr ); + tokens = tokenizer( testStringDate, simpleNumberParser, tokenizerProperties ); + parsedDate = parse( testStringDate, tokens, parseProperties( cldr ) ); + parsedTimezoneOffset = ( parsedDate - midnight ) / 1000 / 60 + midnight.getTimezoneOffset(); + + this.equal( parsedTimezoneOffset, timezoneOffset, "stringDate `" + stringDate + + "` pattern `" + pattern + "`" ); +}; + +// Simple number parser for this test purposes. +function simpleNumberParser( value ) { + return +value; +} + +Cldr.load( + enCaGregorian, + enNumbers, + enTimeZoneNames, + enGbCaGregorian, + enGbNumbers, + enGbTimeZoneNames, + frCaGregorian, + frNumbers, + frTimeZoneNames, + trCaGregorian, + trNumbers, + zhCaGregorian, + zhNumbers, + likelySubtags, + timeData, + weekData +); + +// Needed for globalizeDate. +Cldr.load({ + "globalize-iana": ianaTimezoneData +}); + +cldr = new Cldr( "en" ); +fr = new Cldr( "fr" ); +zh = new Cldr( "zh" ); + +midnight = new Date(); +midnight = startOf( midnight, "day" ); + +QUnit.module( "Date Parse" ); + +/** + * Era + */ + +QUnit.test( "should parse era (G|GG|GGG)", function( assert ) { + date1 = new Date( 0, 0 ); + date2 = new Date( 0, 0 ); + date1.setFullYear( 4 ); + date2.setFullYear( -4 ); + assert.dateParse( "AD 4", "G y", cldr, date1 ); + assert.dateParse( "BC 5", "G y", cldr, date2 ); + assert.dateParse( "AD 4", "GG y", cldr, date1 ); + assert.dateParse( "BC 5", "GG y", cldr, date2 ); + assert.dateParse( "AD 4", "GGG y", cldr, date1 ); + assert.dateParse( "BC 5", "GGG y", cldr, date2 ); +}); + +QUnit.test( "should parse era (GGGG)", function( assert ) { + date1 = new Date( 0, 0 ); + date2 = new Date( 0, 0 ); + date1.setFullYear( 4 ); + date2.setFullYear( -4 ); + assert.dateParse( "Anno Domini 4", "GGGG y", cldr, date1 ); + assert.dateParse( "Before Christ 5", "GGGG y", cldr, date2 ); +}); + +QUnit.test( "should parse era (GGGGG)", function( assert ) { + date1 = new Date( 0, 0 ); + date2 = new Date( 0, 0 ); + date1.setFullYear( 4 ); + date2.setFullYear( -4 ); + assert.dateParse( "A 4", "GGGGG y", cldr, date1 ); + assert.dateParse( "B 5", "GGGGG y", cldr, date2 ); +}); + +/** + * Year + */ + +QUnit.test( "should parse year (y) with no padding", function( assert ) { + assert.dateParse( "1982", "y", cldr, new Date( 1982, 0 ) ); + + date1 = new Date(0, 0); + date1.setFullYear(2); + assert.dateParse( "2", "y", cldr, date1 ); + assert.dateParse( "02", "y", cldr, date1 ); +}); + +QUnit.test( "should parse year (yy) with padding, and limit 2 digits", function( assert ) { + // This may change in the future, eg. 82 could eventually be 2082, same for the below years. + assert.dateParse( "82", "yy", cldr, new Date( 1982, 0 ) ); + assert.dateParse( "9", "yy", cldr, new Date( 2009, 0 ) ); + assert.dateParse( "09", "yy", cldr, new Date( 2009, 0 ) ); +}); + +QUnit.test( "should parse year (yyy+) with padding", function( assert ) { + assert.dateParse( "1982", "yyy", cldr, new Date( 1982, 0 ) ); + assert.dateParse( "82", "yyy", cldr, null ); + + assert.dateParse( "01982", "yyyyy", cldr, new Date( 1982, 0 ) ); + assert.dateParse( "1982", "yyyyy", cldr, null ); +}); + +/** + * Month + */ + +QUnit.test( "should parse month (M|L) with no padding", function( assert ) { + date1 = new Date(); + date1.setMonth( 0 ); + date1 = startOf( date1, "month" ); + assert.dateParse( "1", "M", cldr, date1 ); + assert.dateParse( "1", "L", cldr, date1 ); +}); + +QUnit.test( "should parse month (MM|LL) with padding", function( assert ) { + date1 = new Date(); + date1.setMonth( 0 ); + date1 = startOf( date1, "month" ); + assert.dateParse( "1", "MM", cldr, date1 ); + assert.dateParse( "01", "MM", cldr, date1 ); + assert.dateParse( "1", "LL", cldr, date1 ); + assert.dateParse( "01", "LL", cldr, date1 ); +}); + +QUnit.test( "should parse month (MMM|LLL)", function( assert ) { + date1 = new Date(); + date1.setMonth( 0 ); + date1 = startOf( date1, "month" ); + assert.dateParse( "Jan", "MMM", cldr, date1 ); + assert.dateParse( "Jan", "LLL", cldr, date1 ); +}); + +QUnit.test( "should parse month (MMMM|LLLL)", function( assert ) { + date1 = new Date(); + date1.setMonth( 0 ); + date1 = startOf( date1, "month" ); + assert.dateParse( "January", "MMMM", cldr, date1 ); + assert.dateParse( "January", "LLLL", cldr, date1 ); +}); + +QUnit.test( "should parse month (MMMMM|LLLLL)", function( assert ) { + date1 = new Date(); + date1.setMonth( 0 ); + date1 = startOf( date1, "month" ); + assert.dateParse( "J", "MMMMM", cldr, date1 ); + assert.dateParse( "J", "LLLLL", cldr, date1 ); +}); + +QUnit.test( "should parse February correctly in leap year", function( assert ) { + var OrigDate; + + /* globals Date:true */ + // Use a leap year and a day of month greater than 28 + OrigDate = Date; + Date = util.FakeDate; + util.FakeDate.today = new Date( 2016, 0, 29 ); + + date1 = new Date(); + date1.setMonth( 1 ); + date1 = startOf( date1, "month" ); + date1.setYear( 2015 ); + assert.dateParse( "2/2015", "M/y", cldr, date1 ); + assert.dateParse( "2/2015", "L/y", cldr, date1 ); + + Date = OrigDate; +}); + +/** + * Day + */ + +QUnit.test( "should parse day (d) with no padding", function( assert ) { + var OrigDate; + + date1 = new Date(); + date1.setDate( 2 ); + date1 = startOf( date1, "day" ); + assert.dateParse( "2", "d", cldr, date1 ); + + /* globals Date:true */ + // Test #323 - Day parsing must use the correct day range given its corresponding month/year. + OrigDate = Date; + Date = util.FakeDate; + + date1 = new Date( 2014, 1, 28 ); + date1 = startOf( date1, "day" ); + util.FakeDate.today = new Date( 2014, 1 ); + assert.dateParse( "29", "d", cldr, null ); + assert.dateParse( "28", "d", cldr, date1 ); + + date2 = new Date( 2016, 1, 29 ); + date2 = startOf( date2, "day" ); + util.FakeDate.today = new Date( 2016, 1 ); + assert.dateParse( "30", "d", cldr, null ); + assert.dateParse( "29", "d", cldr, date2 ); + Date = OrigDate; +}); + +QUnit.test( "should parse day (dd) with padding", function( assert ) { + date1 = new Date(); + date1.setDate( 2 ); + date1 = startOf( date1, "day" ); + assert.dateParse( "2", "dd", cldr, date1 ); + assert.dateParse( "02", "dd", cldr, date1 ); +}); + +QUnit.test( "should parse day of year (D) with no padding", function( assert ) { + var OrigDate; + + date1 = new Date(); + date1.setMonth( 0 ); + date1.setDate( 2 ); + date1 = startOf( date1, "day" ); + assert.dateParse( "2", "D", cldr, date1 ); + + /* globals Date:true */ + // Test #323 - Day of year parsing must use the correct day range given leap year into account. + OrigDate = Date; + Date = util.FakeDate; + + util.FakeDate.today = new Date( 2014, 1 ); + assert.dateParse( "366", "D", cldr, null ); + + // date1 = last day of 2016 + date1 = new Date( 2017, 0, 0 ); + util.FakeDate.today = new Date( 2016, 1 ); + assert.dateParse( "366", "D", cldr, date1 ); + + Date = OrigDate; +}); + +QUnit.test( "should parse day of year (DD|DDD) with padding", function( assert ) { + date1 = new Date(); + date1.setMonth( 0 ); + date1.setDate( 2 ); + date1 = startOf( date1, "day" ); + assert.dateParse( "02", "DD", cldr, date1 ); + assert.dateParse( "002", "DDD", cldr, date1 ); +}); + +/** + * Week day + */ + +QUnit.test( "should format local day of week (e|c) with no padding", function( assert ) { + date1 = new Date( 1982, 0, 2 ); + date2 = new Date( 2010, 8, 15 ); + assert.dateParse( "1/2/82 7", "M/d/yy e", cldr, date1 ); + assert.dateParse( "9/15/10 4", "M/d/yy e", cldr, date2 ); + assert.dateParse( "1/2/82 7", "M/d/yy c", cldr, date1 ); + assert.dateParse( "9/15/10 4", "M/d/yy c", cldr, date2 ); +}); + +QUnit.test( "should format local day of week (ee|cc) with padding", function( assert ) { + date1 = new Date( 1982, 0, 2 ); + date2 = new Date( 2010, 8, 15 ); + assert.dateParse( "1/2/82 07", "M/d/yy ee", cldr, date1 ); + assert.dateParse( "9/15/10 04", "M/d/yy ee", cldr, date2 ); + assert.dateParse( "1/2/82 07", "M/d/yy cc", cldr, date1 ); + assert.dateParse( "9/15/10 04", "M/d/yy cc", cldr, date2 ); +}); + +QUnit.test( "should format local day of week (E|EE|EEE|eee|ccc)", function( assert ) { + date1 = new Date( 1982, 0, 2 ); + date2 = new Date( 2010, 8, 15 ); + assert.dateParse( "1/2/82 Sat", "M/d/yy E", cldr, date1 ); + assert.dateParse( "9/15/10 Wed", "M/d/yy E", cldr, date2 ); + assert.dateParse( "1/2/82 Sat", "M/d/yy EE", cldr, date1 ); + assert.dateParse( "9/15/10 Wed", "M/d/yy EE", cldr, date2 ); + assert.dateParse( "1/2/82 Sat", "M/d/yy EEE", cldr, date1 ); + assert.dateParse( "9/15/10 Wed", "M/d/yy EEE", cldr, date2 ); + assert.dateParse( "1/2/82 Sat", "M/d/yy eee", cldr, date1 ); + assert.dateParse( "9/15/10 Wed", "M/d/yy eee", cldr, date2 ); + assert.dateParse( "1/2/82 Sat", "M/d/yy ccc", cldr, date1 ); + assert.dateParse( "9/15/10 Wed", "M/d/yy ccc", cldr, date2 ); +}); + +QUnit.test( "should format local day of week (EEEE|eeee|cccc)", function( assert ) { + var tr; + date1 = new Date( 1982, 0, 2 ); + date2 = new Date( 2010, 8, 15 ); + assert.dateParse( "1/2/82 Saturday", "M/d/yy EEEE", cldr, date1 ); + assert.dateParse( "9/15/10 Wednesday", "M/d/yy EEEE", cldr, date2 ); + assert.dateParse( "1/2/82 Saturday", "M/d/yy eeee", cldr, date1 ); + assert.dateParse( "9/15/10 Wednesday", "M/d/yy eeee", cldr, date2 ); + assert.dateParse( "1/2/82 Saturday", "M/d/yy cccc", cldr, date1 ); + assert.dateParse( "9/15/10 Wednesday", "M/d/yy cccc", cldr, date2 ); + + // Special test for #690 parseDate fails on Turkish full datetime with Monday or Saturday. + tr = new Cldr( "tr" ); + assert.dateParse( "1/2/82 Cumartesi", "M/d/yy EEEE", tr, date1 ); +}); + +QUnit.test( "should format local day of week (EEEEE|eeeee|ccccc)", function( assert ) { + date1 = new Date( 1982, 0, 2 ); + date2 = new Date( 2010, 8, 15 ); + assert.dateParse( "1/2/82 S", "M/d/yy EEEEE", cldr, date1 ); + assert.dateParse( "9/15/10 W", "M/d/yy EEEEE", cldr, date2 ); + assert.dateParse( "1/2/82 S", "M/d/yy eeeee", cldr, date1 ); + assert.dateParse( "9/15/10 W", "M/d/yy eeeee", cldr, date2 ); + assert.dateParse( "1/2/82 S", "M/d/yy ccccc", cldr, date1 ); + assert.dateParse( "9/15/10 W", "M/d/yy ccccc", cldr, date2 ); +}); + +QUnit.test( "should format local day of week (EEEEEE|eeeeee|cccccc)", function( assert ) { + date1 = new Date( 1982, 0, 2 ); + date2 = new Date( 2010, 8, 15 ); + assert.dateParse( "1/2/82 Sa", "M/d/yy EEEEEE", cldr, date1 ); + assert.dateParse( "9/15/10 We", "M/d/yy EEEEEE", cldr, date2 ); + assert.dateParse( "1/2/82 Sa", "M/d/yy eeeeee", cldr, date1 ); + assert.dateParse( "9/15/10 We", "M/d/yy eeeeee", cldr, date2 ); + assert.dateParse( "1/2/82 Sa", "M/d/yy cccccc", cldr, date1 ); + assert.dateParse( "9/15/10 We", "M/d/yy cccccc", cldr, date2 ); +}); + +/** + * Period + */ + +QUnit.test( "should parse period (a)", function( assert ) { + date1 = new Date(); + date2 = new Date(); + date1.setHours( 5 ); + date2.setHours( 17 ); + date1 = startOf( date1, "hour" ); + date2 = startOf( date2, "hour" ); + assert.dateParse( "5 AM", "h a", cldr, date1 ); + assert.dateParse( "5 PM", "h a", cldr, date2 ); + assert.dateParse( "上午5", "ah", zh, date1 ); + assert.dateParse( "下午5", "ah", zh, date2 ); +}); + +/** + * Date composite + */ + +QUnit.test( "should parse composite of date fields", function( assert ) { + var OrigDate; + + // Test #612 - Incorrect parsing when days in today's month is bigger than + // the parsing month. + OrigDate = Date; + Date = util.FakeDate; + util.FakeDate.today = new Date( 2016, 11, 31 ); + assert.dateParse( "2/2/2015", "M/d/y", cldr, new Date( 2015, 1, 2 ) ); + Date = OrigDate; + + // Loose matching: ignore control characters. + date1 = new Date( 2010, 8, 15 ); + assert.dateParse( "15/9/2010", "d\u200f/M\u200f/y", cldr, date1 ); + + // Test #696 - Mix of numbering systems. + assert.dateParse( "15/٧/2010", "d/M/y", cldr, null ); +}); + +/** + * Hour + */ + +QUnit.test( "should parse hour (h) using 12-hour-cycle [1-12] with no padding", function( assert ) { + assert.dateParse( "1", "h", cldr, null, "12-hour time without period should return null" ); + assert.dateParse( "0 AM", "h a", cldr, null, "Out of range should return null" ); + assert.dateParse( "13 AM", "h a", cldr, null, "Out of range should return null" ); + + date1 = new Date(); + date1.setHours( 9 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "9 AM", "h a", cldr, date1 ); + + date1.setHours( 0 ); + assert.dateParse( "12 AM", "h a", cldr, date1 ); + + date1.setHours( 1 ); + assert.dateParse( "1 AM", "h a", cldr, date1 ); + + date1.setHours( 12 ); + assert.dateParse( "12 PM", "h a", cldr, date1 ); + + date1.setHours( 13 ); + assert.dateParse( "1 PM", "h a", cldr, date1 ); +}); + +QUnit.test( "should parse hour (hh) using 12-hour-cycle [1-12] with padding", function( assert ) { + date1 = new Date(); + date1.setHours( 9 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "9 AM", "hh a", cldr, date1 ); + assert.dateParse( "09 AM", "hh a", cldr, date1 ); +}); + +QUnit.test( "should parse hour (H) using 24-hour-cycle [0-23] with no padding", function( assert ) { + assert.dateParse( "24", "H", cldr, null, "Out of range should return null" ); + + date1 = new Date(); + date1.setHours( 0 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "0", "H", cldr, date1 ); + + date1.setHours( 1 ); + assert.dateParse( "1", "H", cldr, date1 ); + + date1.setHours( 12 ); + assert.dateParse( "12", "H", cldr, date1 ); + + date1.setHours( 16 ); + assert.dateParse( "16", "H", cldr, date1 ); +}); + +QUnit.test( "should parse hour (HH) using 24-hour-cycle [0-23] with padding", function( assert ) { + date1 = new Date(); + date1.setHours( 9 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "9", "HH", cldr, date1 ); + assert.dateParse( "09", "HH", cldr, date1 ); + + date1.setHours( 16 ); + assert.dateParse( "16", "HH", cldr, date1 ); +}); + +QUnit.test( "should parse hour (K) using 12-hour-cycle [0-11] with no padding", function( assert ) { + assert.dateParse( "1", "K", cldr, null, "12-hour time without period should return null" ); + assert.dateParse( "12 AM", "K a", cldr, null, "Out of range should return null" ); + assert.dateParse( "13 AM", "K a", cldr, null, "Out of range should return null" ); + + date1 = new Date(); + date1.setHours( 0 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "0 AM", "K a", cldr, date1 ); + + date1.setHours( 8 ); + assert.dateParse( "8 AM", "K a", cldr, date1 ); + + date1.setHours( 12 ); + assert.dateParse( "0 PM", "K a", cldr, date1 ); + + date1.setHours( 20 ); + assert.dateParse( "8 PM", "K a", cldr, date1 ); +}); + +QUnit.test( "should parse hour (KK) using 12-hour-cycle [0-11] with padding", function( assert ) { + date1 = new Date(); + date1.setHours( 8 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "8 AM", "KK a", cldr, date1 ); + assert.dateParse( "08 AM", "KK a", cldr, date1 ); +}); + +QUnit.test( "should parse hour (k) using 24-hour-cycle [1-24] with no padding", function( assert ) { + assert.dateParse( "0", "k", cldr, null, "Out of range should return null" ); + + date1 = new Date(); + date1.setHours( 0 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "24", "k", cldr, date1 ); + + date1.setHours( 8 ); + assert.dateParse( "8", "k", cldr, date1 ); + + date1.setHours( 12 ); + assert.dateParse( "12", "k", cldr, date1 ); + + date1.setHours( 20 ); + assert.dateParse( "20", "k", cldr, date1 ); +}); + +QUnit.test( "should parse hour (kk) using 24-hour-cycle [1-24] with padding", function( assert ) { + date1 = new Date(); + date1.setHours( 5 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "5", "kk", cldr, date1 ); + assert.dateParse( "05", "kk", cldr, date1 ); + + date1.setHours( 17 ); + assert.dateParse( "17", "kk", cldr, date1 ); +}); + +QUnit.test( "should parse hour (j) using preferred hour format for the locale (h, H, K, or k) with no padding", function( assert ) { + date1 = new Date(); + date1.setHours( 9 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "9 AM", "j a", cldr, date1 ); +}); + +QUnit.test( "should parse hour (jj) using preferred hour format for the locale (h, H, K, or k) with padding", function( assert ) { + date1 = new Date(); + date1.setHours( 9 ); + date1 = startOf( date1, "hour" ); + assert.dateParse( "9 AM", "jj a", cldr, date1 ); + assert.dateParse( "09 AM", "jj a", cldr, date1 ); +}); + +/** + * Minute + */ + +QUnit.test( "should parse minute (m) with no padding", function( assert ) { + date1 = new Date(); + date1.setMinutes( 5 ); + date1 = startOf( date1, "minute" ); + assert.dateParse( "5", "m", cldr, date1 ); +}); + +QUnit.test( "should parse minute (mm) with padding", function( assert ) { + date1 = new Date(); + date1.setMinutes( 5 ); + date1 = startOf( date1, "minute" ); + assert.dateParse( "5", "mm", cldr, date1 ); + assert.dateParse( "05", "mm", cldr, date1 ); +}); + +/** + * Second + */ + +QUnit.test( "should parse second (s) with no padding", function( assert ) { + date1 = new Date(); + date1.setSeconds( 59 ); + date1 = startOf( date1, "second" ); + assert.dateParse( "59", "s", cldr, date1 ); +}); + +QUnit.test( "should parse second (ss) with padding", function( assert ) { + date1 = new Date(); + date1.setSeconds( 59 ); + date1 = startOf( date1, "second" ); + assert.dateParse( "59", "ss", cldr, date1 ); + + date1.setSeconds( 9 ); + assert.dateParse( "9", "ss", cldr, date1 ); + assert.dateParse( "09", "ss", cldr, date1 ); +}); + +QUnit.test( "should parse milliseconds (S+)", function( assert ) { + date1 = new Date(); + date1.setSeconds( 0 ); + date1.setMilliseconds( 400 ); + assert.dateParse( "0 4", "s S", cldr, date1 ); + date1.setMilliseconds( 370 ); + assert.dateParse( "0 37", "s SS", cldr, date1 ); + date1.setMilliseconds( 369 ); + assert.dateParse( "0 369", "s SSS", cldr, date1 ); + assert.dateParse( "0 3690", "s SSSS", cldr, date1 ); + assert.dateParse( "0 36900", "s SSSSS", cldr, date1 ); +}); + +QUnit.test( "should parse milliseconds in a day (A+)", function( assert ) { + date1 = new Date(); + date1 = startOf( date1, "day" ); + date1.setMilliseconds( 63307400 ); + assert.dateParse( "633074", "A", cldr, date1 ); + date1 = startOf( date1, "day" ); + date1.setMilliseconds( 63307370 ); + assert.dateParse( "6330737", "AA", cldr, date1 ); + date1 = startOf( date1, "day" ); + date1.setMilliseconds( 63307369 ); + assert.dateParse( "63307369", "AAA", cldr, date1 ); + assert.dateParse( "633073690", "AAAA", cldr, date1 ); + assert.dateParse( "6330736900", "AAAAA", cldr, date1 ); +}); + +/** + * Zone + */ + +QUnit.test( "should parse timezone (z)", function( assert ) { + var enGb = new Cldr( "en-GB" ); + + [ "z", "zz", "zzz" ].forEach(function( z ) { + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM PST", + "M/d/y h:mm a " + z, + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Foo Bar", + "M/d/y h:mm a " + z, + "America/Los_Angeles", + cldr, + null + ); + assert.dateParseWithTimezone( + "01/07/2017 00:00 BST", + "dd/MM/y H:mm " + z, + "Europe/London", + enGb, + new Date( "2017-06-30T23:00:00.000Z" ) + ); + }); + + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Pacific Standard Time", + "M/d/y h:mm a zzzz", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Gulf Standard Time", + "M/d/y h:mm a zzzz", + "Asia/Dubai", + cldr, + new Date( "2016-12-31T20:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "01/07/2017 00:00 British Summer Time", + "dd/MM/y H:mm zzzz", + "Europe/London", + enGb, + new Date( "2017-06-30T23:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM India Standard Time", + "M/d/y h:mm a zzzz", + "Asia/Calcutta", + cldr, + new Date( "2016-12-31T18:30:00.000Z" ) + ); + + // Fall through 'O' format. + [ "z", "zz", "zzz", "zzzz" ].forEach(function( z ) { + assert.timezoneParse( "GMT", z, cldr, 0 ); + }); + + assert.timezoneParse( "GMT-3", "z", cldr, 180 ); + assert.timezoneParse( "GMT-3", "zz", cldr, 180 ); + assert.timezoneParse( "GMT-3", "zzz", cldr, 180 ); + assert.timezoneParse( "GMT-03:00", "zzzz", cldr, 180 ); + + assert.timezoneParse( "GMT+11", "z", cldr, -660 ); + assert.timezoneParse( "GMT+11", "zz", cldr, -660 ); + assert.timezoneParse( "GMT+11", "zzz", cldr, -660 ); + assert.timezoneParse( "GMT+11:00", "zzzz", cldr, -660 ); + + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-8", + "M/d/y h:mm a z", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-2", + "M/d/y h:mm a z", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-8", + "M/d/y h:mm a z", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-2", + "M/d/y h:mm a z", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-8", + "M/d/y h:mm a z", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-2", + "M/d/y h:mm a z", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-08:00", + "M/d/y h:mm a zzzz", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a zzzz", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-08:00", + "M/d/y h:mm a zzzz", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a zzzz", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-08:00", + "M/d/y h:mm a zzzz", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a zzzz", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); +}); + +QUnit.test( "should parse timezone (Z)", function( assert ) { + assert.timezoneParse( "+0000", "Z", cldr, 0 ); + assert.timezoneParse( "+0000", "ZZ", cldr, 0 ); + assert.timezoneParse( "+0000", "ZZZ", cldr, 0 ); + assert.timezoneParse( "GMT", "ZZZZ", cldr, 0 ); + assert.timezoneParse( "Z", "ZZZZZ", cldr, 0 ); + + assert.timezoneParse( "-0300", "Z", cldr, 180 ); + assert.timezoneParse( "-0300", "ZZ", cldr, 180 ); + assert.timezoneParse( "-0300", "ZZZ", cldr, 180 ); + assert.timezoneParse( "GMT-03:00", "ZZZZ", cldr, 180 ); + assert.timezoneParse( "-03:00", "ZZZZZ", cldr, 180 ); + + assert.timezoneParse( "+1100", "Z", cldr, -660 ); + assert.timezoneParse( "+1100", "ZZ", cldr, -660 ); + assert.timezoneParse( "+1100", "ZZZ", cldr, -660 ); + assert.timezoneParse( "GMT+11:00", "ZZZZ", cldr, -660 ); + assert.timezoneParse( "+11:00", "ZZZZZ", cldr, -660 ); +}); + +QUnit.test( "should parse timezone (O)", function( assert ) { + assert.timezoneParse( "GMT", "O", cldr, 0 ); + assert.timezoneParse( "GMT", "OOOO", cldr, 0 ); + + assert.timezoneParse( "GMT-3", "O", cldr, 180 ); + assert.timezoneParse( "GMT-03:00", "OOOO", cldr, 180 ); + + assert.timezoneParse( "GMT+11", "O", cldr, -660 ); + assert.timezoneParse( "GMT+11:00", "OOOO", cldr, -660 ); + + // Loose matching: normalize [:Dash:] category. + assert.timezoneParse( "UTC-7", "O", fr, 420 ); + assert.timezoneParse( "UTC\u22127", "O", fr, 420 ); +}); + +QUnit.test( "should parse timezone (v)", function( assert ) { + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM PT", + "M/d/y h:mm a v", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM XX", + "M/d/y h:mm a v", + "America/Los_Angeles", + cldr, + null + ); + assert.dateParse( + "1/1/2017 12:00 AM XX", + "M/d/y h:mm a v", + cldr, + null + ); + + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Pacific Time", + "M/d/y h:mm a vvvv", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Foo Bar", + "M/d/y h:mm a v", + "America/Los_Angeles", + cldr, + null + ); + assert.dateParse( + "1/1/2017 12:00 AM Foo Bar", + "M/d/y h:mm a vvvv", + cldr, + null + ); + + // Use metazone. + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Brasilia Time", + "M/d/y h:mm a vvvv", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + + // Fall through 'VVVV' format. + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Sao Paulo Time", + "M/d/y h:mm a v", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Foo City Time", + "M/d/y h:mm a v", + "Foo/Baz", + cldr, + new Date( "2017-01-01T00:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Foo City Time", + "M/d/y h:mm a vvvv", + "Foo/Baz", + cldr, + new Date( "2017-01-01T00:00:00.000Z" ) + ); + + // Fall through 'O' and 'OOOO' formats. + assert.dateParse( + "1/1/2017 12:00 AM GMT-8", + "M/d/y h:mm a v", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParse( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a vvvv", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-8", + "M/d/y h:mm a v", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-2", + "M/d/y h:mm a v", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-8", + "M/d/y h:mm a v", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-2", + "M/d/y h:mm a v", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-8", + "M/d/y h:mm a v", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-2", + "M/d/y h:mm a v", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-08:00", + "M/d/y h:mm a vvvv", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a vvvv", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-08:00", + "M/d/y h:mm a vvvv", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a vvvv", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-08:00", + "M/d/y h:mm a vvvv", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a vvvv", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); +}); + +QUnit.test( "should parse timezone (V)", function( assert ) { + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM America/Los_Angeles", + "M/d/y h:mm a VV", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Foo/Bar", + "M/d/y h:mm a VV", + "America/Los_Angeles", + cldr, + null + ); + + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Los Angeles", + "M/d/y h:mm a VVV", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Foo Bar", + "M/d/y h:mm a VVV", + "America/Los_Angeles", + cldr, + null + ); + + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Los Angeles Time", + "M/d/y h:mm a VVVV", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Foo Bar", + "M/d/y h:mm a VVVV", + "America/Los_Angeles", + cldr, + null + ); + + // Fall through to 'VVV' format with "Unknown" exemplarCity. + // "VVV" / "Foo/Bar" / "Unknown City" + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM Unknown City", + "M/d/y h:mm a VVV", + "Foo/Bar", + cldr, + new Date( "2017-01-01T00:00:00.000Z" ) + ); + + // Fall through 'OOOO' format. + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-08:00", + "M/d/y h:mm a VVVV", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a VVVV", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-08:00", + "M/d/y h:mm a VVVV", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a VVVV", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-08:00", + "M/d/y h:mm a VVVV", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM GMT-02:00", + "M/d/y h:mm a VVVV", + "Etc/GMT+8", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); +}); + +QUnit.test( "should parse timezone (X)", function( assert ) { + assert.timezoneParse( "Z", "X", cldr, 0 ); + assert.timezoneParse( "Z", "XX", cldr, 0 ); + assert.timezoneParse( "Z", "XXX", cldr, 0 ); + assert.timezoneParse( "Z", "XXXX", cldr, 0 ); + assert.timezoneParse( "Z", "XXXXX", cldr, 0 ); + + assert.timezoneParse( "-03", "X", cldr, 180 ); + assert.timezoneParse( "-0300", "XX", cldr, 180 ); + assert.timezoneParse( "-03:00", "XXX", cldr, 180 ); + assert.timezoneParse( "-0300", "XXXX", cldr, 180 ); + assert.timezoneParse( "-03:00", "XXXXX", cldr, 180 ); + + assert.timezoneParse( "+0530", "XX", cldr, -330 ); + assert.timezoneParse( "+05:30", "XXX", cldr, -330 ); + assert.timezoneParse( "+0530", "XXXX", cldr, -330 ); + assert.timezoneParse( "+05:30", "XXXXX", cldr, -330 ); + + assert.timezoneParse( "+11", "X", cldr, -660 ); + assert.timezoneParse( "+1100", "XX", cldr, -660 ); + assert.timezoneParse( "+11:00", "XXX", cldr, -660 ); + assert.timezoneParse( "+1100", "XXXX", cldr, -660 ); + assert.timezoneParse( "+11:00", "XXXXX", cldr, -660 ); +}); + +QUnit.test( "should parse timezone (x)", function( assert ) { + assert.timezoneParse( "+00", "x", cldr, 0 ); + assert.timezoneParse( "+0000", "xx", cldr, 0 ); + assert.timezoneParse( "+00:00", "xxx", cldr, 0 ); + assert.timezoneParse( "+0000", "xxxx", cldr, 0 ); + assert.timezoneParse( "+00:00", "xxxxx", cldr, 0 ); + + assert.timezoneParse( "-03", "x", cldr, 180 ); + assert.timezoneParse( "-0300", "xx", cldr, 180 ); + assert.timezoneParse( "-03:00", "xxx", cldr, 180 ); + assert.timezoneParse( "-0300", "xxxx", cldr, 180 ); + assert.timezoneParse( "-03:00", "xxxxx", cldr, 180 ); + + assert.timezoneParse( "+0530", "x", cldr, -330 ); + assert.timezoneParse( "+0530", "xx", cldr, -330 ); + assert.timezoneParse( "+05:30", "xxx", cldr, -330 ); + assert.timezoneParse( "+0530", "xxxx", cldr, -330 ); + assert.timezoneParse( "+05:30", "xxxxx", cldr, -330 ); + + assert.timezoneParse( "+11", "x", cldr, -660 ); + assert.timezoneParse( "+1100", "xx", cldr, -660 ); + assert.timezoneParse( "+11:00", "xxx", cldr, -660 ); + assert.timezoneParse( "+1100", "xxxx", cldr, -660 ); + assert.timezoneParse( "+11:00", "xxxxx", cldr, -660 ); + + assert.timezoneParse( "-0752", "x", cldr, 472 ); + assert.timezoneParse( "-0752", "xx", cldr, 472 ); + assert.timezoneParse( "-07:52", "xxx", cldr, 472 ); + assert.timezoneParse( "-075258", "xxxx", cldr, 472 ); + assert.timezoneParse( "-07:52:58", "xxxxx", cldr, 472 ); + + assert.timezoneParse( "+0752", "x", cldr, -472 ); + assert.timezoneParse( "+0752", "xx", cldr, -472 ); + assert.timezoneParse( "+07:52", "xxx", cldr, -472 ); + assert.timezoneParse( "+075258", "xxxx", cldr, -472 ); + assert.timezoneParse( "+07:52:58", "xxxxx", cldr, -472 ); + + +}); + +QUnit.test( "should parse date according to passed timeZone in various datetime patterns", + function( assert ) { + + // "M/d/y h:mm a" + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM", + "M/d/y h:mm a", + "Etc/UTC", + cldr, + new Date( "2017-01-01T00:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM", + "M/d/y h:mm a", + "Europe/Berlin", + cldr, + new Date( "2016-12-31T23:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM", + "M/d/y h:mm a", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM", + "M/d/y h:mm a", + "America/New_York", + cldr, + new Date( "2017-01-01T05:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017 12:00 AM", + "M/d/y h:mm a", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); + + // Testing DST edge cases... + + // Note we can't reliably parse overlapping times (daylight to standard cases). For example, we + // can't reliably parse "2/18/2017 11:00 PM" for America/Sao_Paulo into + // "2017-02-19T01:00:00.000Z" or "2017-02-19T02:00:00.000Z" without providing the zone string, + // e.g., 11:00 PM BRT or 11:00 PM BRST (both times are valid). Therefore, formatting either one + // should return back the parsed string. This is tested on functional tests. + + // PST + assert.dateParseWithTimezone( + "3/12/2017 1:00 AM", + "M/d/y h:mm a", + "America/Los_Angeles", + cldr, + new Date( "2017-03-12T09:00:00.000Z" ) + ); + + // PDT + assert.dateParseWithTimezone( + "3/12/2017 3:00 AM", + "M/d/y h:mm a", + "America/Los_Angeles", + cldr, + new Date( "2017-03-12T10:00:00.000Z" ) + ); + + // "M/d/y" + assert.dateParseWithTimezone( + "1/1/2017", + "M/d/y", + "Etc/UTC", + cldr, + new Date( "2017-01-01T00:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017", + "M/d/y", + "Europe/Berlin", + cldr, + new Date( "2016-12-31T23:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017", + "M/d/y", + "America/Sao_Paulo", + cldr, + new Date( "2017-01-01T02:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017", + "M/d/y", + "America/New_York", + cldr, + new Date( "2017-01-01T05:00:00.000Z" ) + ); + assert.dateParseWithTimezone( + "1/1/2017", + "M/d/y", + "America/Los_Angeles", + cldr, + new Date( "2017-01-01T08:00:00.000Z" ) + ); +}); + +/** + * Literal + */ + +QUnit.test( "should parse literal (')", function( assert ) { + var date = new Date(); + date.setHours( 9 ); + date = startOf( date, "hour" ); + assert.dateParse( "09 o'clock AM", "hh 'o''clock' a", cldr, date ); +}); + +QUnit.test( "should parse invalid literal as null", function( assert ) { + assert.dateParse( "2-20-2017", "M/d/y", cldr, null ); + assert.dateParse( "2a20a2017", "M/d/y", cldr, null ); + assert.dateParse( "2/20/2017", "M-d-y", cldr, null ); + assert.dateParse( "2/20/2017x5xAM", "M/d/y h a", cldr, null ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/timezone-hour-format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/timezone-hour-format.js new file mode 100644 index 000000000..27d442f8e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/timezone-hour-format.js @@ -0,0 +1,50 @@ +define([ + "src/date/timezone-hour-format" +], function( hourFormat ) { + +var BRT, FakeDate, HST, IST, UTC; + +FakeDate = function( timezoneOffset ) { + this.timezoneOffset = timezoneOffset; +}; + +function foo() { + return "foo"; +} + +FakeDate.prototype.getTimezoneOffset = function() { + return this.timezoneOffset; +}; + +HST = new FakeDate( -600 ); +IST = new FakeDate( -330 ); +UTC = new FakeDate( 0 ); +BRT = new FakeDate( 180 ); + +QUnit.module( "Datetime Timezone Hour Format" ); + +QUnit.test( "should format +H;-H", function( assert ) { + assert.equal( hourFormat( BRT, "+H;-H", ":" ), "-3", "" ); + assert.equal( hourFormat( UTC, "+H;-H", ":" ), "+0", "" ); + assert.equal( hourFormat( IST, "+H;-H", ":" ), "+5", "" ); + assert.equal( hourFormat( HST, "+H;-H", ":" ), "+10", "" ); + assert.equal( hourFormat( IST, "+H;-H", "،", { 1: foo } ), "+foo", "" ); +}); + +QUnit.test( "should format +HHmm;-HHmm", function( assert ) { + assert.equal( hourFormat( BRT, "+HHmm;-HHmm", ":" ), "-0300", "" ); + assert.equal( hourFormat( UTC, "+HHmm;-HHmm", ":" ), "+0000", "" ); + assert.equal( hourFormat( IST, "+HHmm;-HHmm", ":" ), "+0530", "" ); + assert.equal( hourFormat( HST, "+HHmm;-HHmm", ":" ), "+1000", "" ); + assert.equal( hourFormat( IST, "+HHmm;-HHmm", "،", { 2: foo } ), "+foofoo", "" ); +}); + +QUnit.test( "should format +HH:mm;-HH:mm", function( assert ) { + assert.equal( hourFormat( BRT, "+HH:mm;-HH:mm", ":" ), "-03:00", "" ); + assert.equal( hourFormat( UTC, "+HH:mm;-HH:mm", ":" ), "+00:00", "" ); + assert.equal( hourFormat( IST, "+HH:mm;-HH:mm", ":" ), "+05:30", "" ); + assert.equal( hourFormat( HST, "+HH:mm;-HH:mm", ":" ), "+10:00", "" ); + assert.equal( hourFormat( IST, "+HH:mm;-HH:mm", "،", { 2: foo } ), "+foo،foo", "" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/tokenizer-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/tokenizer-properties.js new file mode 100644 index 000000000..065a983b0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/tokenizer-properties.js @@ -0,0 +1,486 @@ +define([ + "cldr", + "src/date/tokenizer-properties", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/en-GB/ca-gregorian.json", + "json!cldr-data/main/en-GB/timeZoneNames.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/metaZones.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, tokenizerProperties, enCaGregorian, enTimeZoneNames, enGbCaGregorian, + enGbTimeZoneNames, likelySubtags, metaZones ) { + +var cldr; + +Cldr.load( + enCaGregorian, + enTimeZoneNames, + enGbCaGregorian, + enGbTimeZoneNames, + likelySubtags, + metaZones +); + +Cldr.load({ + "main": { + "en": { + "dates": { + "timeZoneNames": { + "zone": { + "Foo": { + "Baz": { + "exemplarCity": "Foo City" + } + } + } + } + } + } + } +}); + +cldr = new Cldr( "en" ); + +QUnit.module( "Date Tokenizer Properties" ); + +/** + * Era + */ + +QUnit.test( "should return properties for era (G..GGGGG)", function( assert ) { + [ "G", "GG", "GGG" ].forEach(function( pattern ) { + assert.ok( "gregorian/eras/eraAbbr" in tokenizerProperties( pattern, cldr ) ); + }); + assert.ok( "gregorian/eras/eraNames" in tokenizerProperties( "GGGG", cldr ) ); + assert.ok( "gregorian/eras/eraNarrow" in tokenizerProperties( "GGGGG", cldr ) ); +}); + +/** + * Quarter + */ + +QUnit.test( "should return properties for quarter (QQQ..QQQQQ)", function( assert ) { + assert.ok( "gregorian/quarters/format/abbreviated" in tokenizerProperties( "QQQ", cldr ) ); + assert.ok( "gregorian/quarters/format/wide" in tokenizerProperties( "QQQQ", cldr ) ); + assert.ok( "gregorian/quarters/format/narrow" in tokenizerProperties( "QQQQQ", cldr ) ); +}); + +QUnit.test( "should return properties for quarter (qqq..qqqqq)", function( assert ) { + assert.ok( "gregorian/quarters/stand-alone/abbreviated" in tokenizerProperties( "qqq", cldr ) ); + assert.ok( "gregorian/quarters/stand-alone/wide" in tokenizerProperties( "qqqq", cldr ) ); + assert.ok( "gregorian/quarters/stand-alone/narrow" in tokenizerProperties( "qqqqq", cldr ) ); +}); + +/** + * Month + */ + +QUnit.test( "should return properties for month (MMM..MMMMM)", function( assert ) { + assert.ok( "gregorian/months/format/abbreviated" in tokenizerProperties( "MMM", cldr ) ); + assert.ok( "gregorian/months/format/wide" in tokenizerProperties( "MMMM", cldr ) ); + assert.ok( "gregorian/months/format/narrow" in tokenizerProperties( "MMMMM", cldr ) ); +}); + +QUnit.test( "should return properties for month (LL..LLLLL)", function( assert ) { + assert.ok( "gregorian/months/stand-alone/abbreviated" in tokenizerProperties( "LLL", cldr ) ); + assert.ok( "gregorian/months/stand-alone/wide" in tokenizerProperties( "LLLL", cldr ) ); + assert.ok( "gregorian/months/stand-alone/narrow" in tokenizerProperties( "LLLLL", cldr ) ); +}); + +/** + * Week day + */ + +QUnit.test( "should return properties for day of week (eee..eeeeee)", function( assert ) { + assert.ok( "gregorian/days/format/abbreviated" in tokenizerProperties( "eee", cldr ) ); + assert.ok( "gregorian/days/format/wide" in tokenizerProperties( "eeee", cldr ) ); + assert.ok( "gregorian/days/format/narrow" in tokenizerProperties( "eeeee", cldr ) ); + assert.ok( "gregorian/days/format/short" in tokenizerProperties( "eeeeee", cldr ) ); +}); + +QUnit.test( "should return properties for day of week (ccc..cccccc)", function( assert ) { + assert.ok( "gregorian/days/stand-alone/abbreviated" in tokenizerProperties( "ccc", cldr ) ); + assert.ok( "gregorian/days/stand-alone/wide" in tokenizerProperties( "cccc", cldr ) ); + assert.ok( "gregorian/days/stand-alone/narrow" in tokenizerProperties( "ccccc", cldr ) ); + assert.ok( "gregorian/days/stand-alone/short" in tokenizerProperties( "cccccc", cldr ) ); +}); + +QUnit.test( "should return properties for day of week (E..EEEEEE)", function( assert ) { + [ "E", "EE", "EEE" ].forEach(function( pattern ) { + assert.ok( "gregorian/days/format/abbreviated" in tokenizerProperties( pattern, cldr ) ); + }); + assert.ok( "gregorian/days/format/wide" in tokenizerProperties( "EEEE", cldr ) ); + assert.ok( "gregorian/days/format/narrow" in tokenizerProperties( "EEEEE", cldr ) ); + assert.ok( "gregorian/days/format/short" in tokenizerProperties( "EEEEEE", cldr ) ); +}); + +/** + * Period + */ + +QUnit.test( "should return properties for period (a)", function( assert ) { + assert.ok( "gregorian/dayPeriods/format/wide" in tokenizerProperties( "a", cldr ) ); +}); + +/** + * Zone + */ + +var properties; +QUnit.test( "should return properties for timezone (z)", function( assert ) { + var enGb = new Cldr( "en-GB" ); + + properties = tokenizerProperties( "z", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + properties = tokenizerProperties( "zzzz", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + properties = tokenizerProperties( "z", cldr, "America/Los_Angeles" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "standardOrDaylightTzName", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + properties = tokenizerProperties( "zzzz", cldr, "America/Los_Angeles" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "standardOrDaylightTzName", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + properties = tokenizerProperties( "z", enGb, "Europe/London" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "standardOrDaylightTzName", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + properties = tokenizerProperties( "zzzz", cldr, "Europe/London" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "standardOrDaylightTzName", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + properties = tokenizerProperties( "zzzz", cldr, "Asia/Dubai" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "standardOrDaylightTzName", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); +}); + +QUnit.test( "should return properties for timezone (Z)", function( assert ) { + properties = tokenizerProperties( "Z", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + properties = tokenizerProperties( "ZZZZ", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + properties = tokenizerProperties( "ZZZZZ", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); +}); + +QUnit.test( "should return properties for timezone (O)", function( assert ) { + properties = tokenizerProperties( "O", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + properties = tokenizerProperties( "OOOO", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); +}); + +QUnit.test( "should return properties for timezone (v)", function( assert ) { + properties = tokenizerProperties( "v", cldr, "America/Los_Angeles" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "genericTzName", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + properties = tokenizerProperties( "vvvv", cldr, "America/Los_Angeles" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "genericTzName", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + // Use metazone. + properties = tokenizerProperties( "vvvv", cldr, "America/Sao_Paulo" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "genericTzName", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + // Fall through 'VVVV' format. + properties = tokenizerProperties( "v", cldr, "America/Sao_Paulo" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneName", + "timeZoneNameRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + properties = tokenizerProperties( "v", cldr, "Foo/Baz" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneName", + "timeZoneNameRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + properties = tokenizerProperties( "vvvv", cldr, "Foo/Baz" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneName", + "timeZoneNameRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + // Fall through 'O' and 'OOOO' formats. + properties = tokenizerProperties( "v", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + properties = tokenizerProperties( "vvvv", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); +}); + +QUnit.test( "should return properties for timezone (V)", function( assert ) { + // FIXME assert.equal( JSON.stringify( properties ), "" ); + properties = tokenizerProperties( "VV", cldr, "America/Los_Angeles" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneName", + "timeZoneNameRe" + ]); + + properties = tokenizerProperties( "VVV", cldr, "America/Los_Angeles" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneName", + "timeZoneNameRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + properties = tokenizerProperties( "VVVV", cldr, "America/Los_Angeles" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneName", + "timeZoneNameRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + // Fall through to 'VVV' format with "Unknown" exemplarCity. + properties = tokenizerProperties( "VVV", cldr, "Foo/Bar" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneName", + "timeZoneNameRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); + + // Fall through 'OOOO' format. + properties = tokenizerProperties( "VVVV", cldr, "America/Los_Angeles" ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "timeZoneName", + "timeZoneNameRe", + "timeZoneNames/gmtZeroFormat", + "timeZoneNames/hourFormat", + "timeZoneNames/gmtZeroFormatRe", + "x" + ]); +}); + +QUnit.test( "should return properties for timezone (X)", function( assert ) { + properties = tokenizerProperties( "X", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); + + properties = tokenizerProperties( "XX", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); + + properties = tokenizerProperties( "XXX", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); + + properties = tokenizerProperties( "XXXX", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); + + properties = tokenizerProperties( "XXXXX", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); +}); + +QUnit.test( "should return properties for timezone (x)", function( assert ) { + properties = tokenizerProperties( "x", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); + + properties = tokenizerProperties( "xx", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); + + properties = tokenizerProperties( "xxx", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); + + properties = tokenizerProperties( "xxxx", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); + + properties = tokenizerProperties( "xxxxx", cldr ); + assert.deepEqual( Object.keys( properties ), [ + "pattern", + "digitsRe", + "x" + ]); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/tokenizer.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/tokenizer.js new file mode 100644 index 000000000..b93d30e3e --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/date/tokenizer.js @@ -0,0 +1,1179 @@ +define([ + "cldr", + "src/date/tokenizer", + "src/date/tokenizer-properties", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/en-GB/ca-gregorian.json", + "json!cldr-data/main/en-GB/numbers.json", + "json!cldr-data/main/en-GB/timeZoneNames.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/metaZones.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, tokenizer, tokenizerProperties, enCaGregorian, enNumbers, enTimeZoneNames, + enGbCaGregorian, enGbNumbers, enGbTimeZoneNames, likelySubtags, metaZones, timeData, weekData ) { + +var cldr; + +// Simple number parser for this test purposes. +function simpleNumberParser( value ) { + return +value; +} + +Cldr.load( + enCaGregorian, + enNumbers, + enTimeZoneNames, + enGbCaGregorian, + enGbNumbers, + enGbTimeZoneNames, + likelySubtags, + metaZones, + timeData, + weekData +); + +Cldr.load({ + "main": { + "en": { + "dates": { + "timeZoneNames": { + "zone": { + "Foo": { + "Baz": { + "exemplarCity": "Foo City" + } + } + } + } + } + } + } +}); + +cldr = new Cldr( "en" ); + +QUnit.assert.dateTokenizer = function( value, pattern, cldr, expected ) { + this.dateWithTimeZoneTokenizer( value, pattern, cldr, null, expected ); +}; + +QUnit.assert.dateWithTimeZoneTokenizer = function( value, pattern, cldr, timeZone, expected ) { + this.deepEqual( + tokenizer( value, simpleNumberParser, tokenizerProperties( pattern, cldr, timeZone ) ), + expected + ); +}; + +QUnit.module( "Date Tokenizer" ); + +/** + * Correctness + */ + +QUnit.test( "should not tokenize when extra characters present at the end", function( assert ) { + assert.dateTokenizer( "2016", "yy", cldr, [] ); +}); + +/** + * Era + */ + +QUnit.test( "should tokenize era (G|GG|GGG)", function( assert ) { + assert.dateTokenizer( "AD", "G", cldr, [{ + type: "G", + lexeme: "AD", + value: "1" + }] ); + assert.dateTokenizer( "AD", "GG", cldr, [{ + type: "GG", + lexeme: "AD", + value: "1" + }] ); + assert.dateTokenizer( "AD", "GGG", cldr, [{ + type: "GGG", + lexeme: "AD", + value: "1" + }] ); +}); + +QUnit.test( "should tokenize era (GGGG)", function( assert ) { + assert.dateTokenizer( "Anno Domini", "GGGG", cldr, [{ + type: "GGGG", + lexeme: "Anno Domini", + value: "1" + }] ); +}); + +QUnit.test( "should tokenize era (GGGGG)", function( assert ) { + assert.dateTokenizer( "A", "GGGGG", cldr, [{ + type: "GGGGG", + lexeme: "A", + value: "1" + }] ); +}); + +/** + * Year + */ + +QUnit.test( "should tokenize year (y) with no padding", function( assert ) { + assert.dateTokenizer( "1982", "y", cldr, [{ + type: "y", + lexeme: "1982", + value: 1982 + }] ); +}); + +QUnit.test( "should tokenize year (yy) with padding, and limit 2 digits", function( assert ) { + assert.dateTokenizer( "82", "yy", cldr, [{ + type: "yy", + lexeme: "82", + value: 82 + }] ); +}); + +QUnit.test( "should tokenize year (yyy+) with padding", function( assert ) { + assert.dateTokenizer( "1982", "yyy", cldr, [{ + type: "yyy", + lexeme: "1982", + value: 1982 + }] ); + assert.dateTokenizer( "01982", "yyyyy", cldr, [{ + type: "yyyyy", + lexeme: "01982", + value: 1982 + }] ); +}); + +QUnit.test( "should tokenize year in \"week of year\" (Y) with no padding", function( assert ) { + assert.dateTokenizer( "1982", "Y", cldr, [{ + type: "Y", + lexeme: "1982", + value: 1982 + }] ); +}); + +QUnit.test( "should tokenize year in \"week of year\" (YY) with padding, and limit 2 digits", function( assert ) { + assert.dateTokenizer( "82", "YY", cldr, [{ + type: "YY", + lexeme: "82", + value: 82 + }] ); +}); + +QUnit.test( "should tokenize year in \"week of year\" (YYY+) with padding", function( assert ) { + assert.dateTokenizer( "1982", "YYY", cldr, [{ + type: "YYY", + lexeme: "1982", + value: 1982 + }] ); + assert.dateTokenizer( "01982", "YYYYY", cldr, [{ + type: "YYYYY", + lexeme: "01982", + value: 1982 + }] ); +}); + +/** + * Quarter + */ + +QUnit.test( "should tokenize quarter (Q|q) with no padding", function( assert ) { + assert.dateTokenizer( "1", "Q", cldr, [{ + type: "Q", + lexeme: "1", + value: 1 + }] ); + assert.dateTokenizer( "1", "q", cldr, [{ + type: "q", + lexeme: "1", + value: 1 + }] ); +}); + +QUnit.test( "should tokenize quarter (QQ|qq) with padding", function( assert ) { + assert.dateTokenizer( "01", "QQ", cldr, [{ + type: "QQ", + lexeme: "01", + value: 1 + }] ); + assert.dateTokenizer( "01", "qq", cldr, [{ + type: "qq", + lexeme: "01", + value: 1 + }] ); +}); + +QUnit.test( "should tokenize quarter (QQQ|qqq)", function( assert ) { + assert.dateTokenizer( "Q1", "QQQ", cldr, [{ + type: "QQQ", + lexeme: "Q1", + value: "1" + }] ); + assert.dateTokenizer( "Q1", "qqq", cldr, [{ + type: "qqq", + lexeme: "Q1", + value: "1" + }] ); +}); + +QUnit.test( "should tokenize quarter (QQQQ|qqqq) with padding", function( assert ) { + assert.dateTokenizer( "1st quarter", "QQQQ", cldr, [{ + type: "QQQQ", + lexeme: "1st quarter", + value: "1" + }] ); + assert.dateTokenizer( "1st quarter", "qqqq", cldr, [{ + type: "qqqq", + lexeme: "1st quarter", + value: "1" + }] ); +}); + +/** + * Month + */ + +QUnit.test( "should tokenize month (M|L) with no padding", function( assert ) { + assert.dateTokenizer( "1", "M", cldr, [{ + type: "M", + lexeme: "1", + value: 1 + }] ); + assert.dateTokenizer( "1", "L", cldr, [{ + type: "L", + lexeme: "1", + value: 1 + }] ); +}); + +QUnit.test( "should tokenize month (MM|LL) with padding", function( assert ) { + assert.dateTokenizer( "01", "MM", cldr, [{ + type: "MM", + lexeme: "01", + value: 1 + }] ); + assert.dateTokenizer( "01", "LL", cldr, [{ + type: "LL", + lexeme: "01", + value: 1 + }] ); +}); + +QUnit.test( "should tokenize month (MMM|LLL)", function( assert ) { + assert.dateTokenizer( "Jan", "MMM", cldr, [{ + type: "MMM", + lexeme: "Jan", + value: "1" + }] ); + assert.dateTokenizer( "Jan", "LLL", cldr, [{ + type: "LLL", + lexeme: "Jan", + value: "1" + }] ); +}); + +QUnit.test( "should tokenize month (MMMM|LLLL)", function( assert ) { + assert.dateTokenizer( "January", "MMMM", cldr, [{ + type: "MMMM", + lexeme: "January", + value: "1" + }] ); + assert.dateTokenizer( "January", "LLLL", cldr, [{ + type: "LLLL", + lexeme: "January", + value: "1" + }] ); +}); + +QUnit.test( "should tokenize month (MMMMM|LLLLL)", function( assert ) { + assert.dateTokenizer( "J", "MMMMM", cldr, [{ + type: "MMMMM", + lexeme: "J", + value: "1" + }] ); + assert.dateTokenizer( "J", "LLLLL", cldr, [{ + type: "LLLLL", + lexeme: "J", + value: "1" + }] ); +}); + +/** + * Week + */ + +QUnit.test( "should tokenize week of year (w) with no padding", function( assert ) { + assert.dateTokenizer( "1", "w", cldr, [{ + type: "w", + lexeme: "1", + value: 1 + }] ); +}); + +QUnit.test( "should tokenize week of year (ww) with padding", function( assert ) { + assert.dateTokenizer( "01", "ww", cldr, [{ + type: "ww", + lexeme: "01", + value: 1 + }] ); +}); + +QUnit.test( "should tokenize week of month (W)", function( assert ) { + assert.dateTokenizer( "1", "W", cldr, [{ + type: "W", + lexeme: "1", + value: 1 + }] ); +}); + +/** + * Day + */ + +QUnit.test( "should tokenize day (d) with no padding", function( assert ) { + assert.dateTokenizer( "2", "d", cldr, [{ + type: "d", + lexeme: "2", + value: 2 + }] ); + + // Test #696 - Mix of numbering systems. + assert.dateTokenizer( "٧", "d", cldr, [] ); +}); + +QUnit.test( "should tokenize day (dd) with padding", function( assert ) { + assert.dateTokenizer( "02", "dd", cldr, [{ + type: "dd", + lexeme: "02", + value: 2 + }] ); +}); + +QUnit.test( "should tokenize day of year (D) with no padding", function( assert ) { + assert.dateTokenizer( "2", "D", cldr, [{ + type: "D", + lexeme: "2", + value: 2 + }] ); +}); + +QUnit.test( "should tokenize day of year (DD|DDD) with padding", function( assert ) { + assert.dateTokenizer( "02", "DD", cldr, [{ + type: "DD", + lexeme: "02", + value: 2 + }] ); + assert.dateTokenizer( "002", "DDD", cldr, [{ + type: "DDD", + lexeme: "002", + value: 2 + }] ); +}); + +QUnit.test( "should tokenize day of week in month (F)", function( assert ) { + assert.dateTokenizer( "1", "F", cldr, [{ + type: "F", + lexeme: "1", + value: 1 + }] ); +}); + +/** + * Week day + */ + +QUnit.test( "should tokenize local day of week (e|c) with no padding", function( assert ) { + assert.dateTokenizer( "7", "e", cldr, [{ + type: "e", + lexeme: "7", + value: 7 + }] ); + assert.dateTokenizer( "7", "c", cldr, [{ + type: "c", + lexeme: "7", + value: 7 + }] ); +}); + +QUnit.test( "should tokenize local day of week (ee|cc) with padding", function( assert ) { + assert.dateTokenizer( "07", "ee", cldr, [{ + type: "ee", + lexeme: "07", + value: 7 + }] ); + assert.dateTokenizer( "07", "cc", cldr, [{ + type: "cc", + lexeme: "07", + value: 7 + }] ); +}); + +QUnit.test( "should tokenize local day of week (E|EE|EEE|eee|ccc)", function( assert ) { + assert.dateTokenizer( "Sat", "E", cldr, [{ + type: "E", + lexeme: "Sat", + value: "sat" + }] ); + assert.dateTokenizer( "Sat", "EE", cldr, [{ + type: "EE", + lexeme: "Sat", + value: "sat" + }] ); + assert.dateTokenizer( "Sat", "EEE", cldr, [{ + type: "EEE", + lexeme: "Sat", + value: "sat" + }] ); + assert.dateTokenizer( "Sat", "eee", cldr, [{ + type: "eee", + lexeme: "Sat", + value: "sat" + }] ); + assert.dateTokenizer( "Sat", "ccc", cldr, [{ + type: "ccc", + lexeme: "Sat", + value: "sat" + }] ); +}); + +QUnit.test( "should tokenize local day of week (EEEE|eeee|cccc)", function( assert ) { + assert.dateTokenizer( "Saturday", "EEEE", cldr, [{ + type: "EEEE", + lexeme: "Saturday", + value: "sat" + }] ); + assert.dateTokenizer( "Saturday", "eeee", cldr, [{ + type: "eeee", + lexeme: "Saturday", + value: "sat" + }] ); + assert.dateTokenizer( "Saturday", "cccc", cldr, [{ + type: "cccc", + lexeme: "Saturday", + value: "sat" + }] ); +}); + +QUnit.test( "should tokenize local day of week (EEEEE|eeeee|ccccc)", function( assert ) { + // OBS: note the abbreviated S would matche sun or sat. But, only the first is returned. + assert.dateTokenizer( "S", "EEEEE", cldr, [{ + type: "EEEEE", + lexeme: "S", + value: "sun" + }] ); + assert.dateTokenizer( "S", "eeeee", cldr, [{ + type: "eeeee", + lexeme: "S", + value: "sun" + }] ); + assert.dateTokenizer( "S", "ccccc", cldr, [{ + type: "ccccc", + lexeme: "S", + value: "sun" + }] ); +}); + +QUnit.test( "should tokenize local day of week (EEEEEE|eeeeee|cccccc)", function( assert ) { + assert.dateTokenizer( "Sa", "EEEEEE", cldr, [{ + type: "EEEEEE", + lexeme: "Sa", + value: "sat" + }] ); + assert.dateTokenizer( "Sa", "eeeeee", cldr, [{ + type: "eeeeee", + lexeme: "Sa", + value: "sat" + }] ); + assert.dateTokenizer( "Sa", "cccccc", cldr, [{ + type: "cccccc", + lexeme: "Sa", + value: "sat" + }] ); +}); + +/** + * Period + */ + +QUnit.test( "should tokenize period (a)", function( assert ) { + assert.dateTokenizer( "AM", "a", cldr, [{ + type: "a", + lexeme: "AM", + value: "am" + }] ); +}); + +/** + * Hour + */ + +QUnit.test( "should tokenize hour (h) using 12-hour-cycle [1-12] with no padding", function( assert ) { + assert.dateTokenizer( "9", "h", cldr, [{ + type: "h", + lexeme: "9", + value: 9 + }] ); +}); + +QUnit.test( "should tokenize hour (hh) using 12-hour-cycle [1-12] with padding", function( assert ) { + assert.dateTokenizer( "09", "hh", cldr, [{ + type: "hh", + lexeme: "09", + value: 9 + }] ); +}); + +QUnit.test( "should tokenize hour (H) using 24-hour-cycle [0-23] with no padding", function( assert ) { + assert.dateTokenizer( "9", "H", cldr, [{ + type: "H", + lexeme: "9", + value: 9 + }] ); +}); + +QUnit.test( "should tokenize hour (HH) using 24-hour-cycle [0-23] with padding", function( assert ) { + assert.dateTokenizer( "09", "HH", cldr, [{ + type: "HH", + lexeme: "09", + value: 9 + }] ); +}); + +QUnit.test( "should tokenize hour (K) using 12-hour-cycle [0-11] with no padding", function( assert ) { + assert.dateTokenizer( "9", "K", cldr, [{ + type: "K", + lexeme: "9", + value: 9 + }] ); +}); + +QUnit.test( "should tokenize hour (KK) using 12-hour-cycle [0-11] with padding", function( assert ) { + assert.dateTokenizer( "09", "KK", cldr, [{ + type: "KK", + lexeme: "09", + value: 9 + }] ); +}); + +QUnit.test( "should tokenize hour (k) using 24-hour-cycle [1-24] with no padding", function( assert ) { + assert.dateTokenizer( "9", "k", cldr, [{ + type: "k", + lexeme: "9", + value: 9 + }] ); +}); + +QUnit.test( "should tokenize hour (kk) using 24-hour-cycle [1-24] with padding", function( assert ) { + assert.dateTokenizer( "09", "kk", cldr, [{ + type: "kk", + lexeme: "09", + value: 9 + }] ); +}); + +QUnit.test( "should tokenize hour (j) using preferred hour format for the locale (h, H, K, or k) with no padding", function( assert ) { + assert.dateTokenizer( "9", "j", cldr, [{ + type: "j", + lexeme: "9", + value: 9 + }] ); +}); + +QUnit.test( "should tokenize hour (jj) using preferred hour format for the locale (h, H, K, or k) with padding", function( assert ) { + assert.dateTokenizer( "09", "jj", cldr, [{ + type: "jj", + lexeme: "09", + value: 9 + }] ); +}); + +/** + * Minute + */ + +QUnit.test( "should tokenize minute (m) with no padding", function( assert ) { + assert.dateTokenizer( "5", "m", cldr, [{ + type: "m", + lexeme: "5", + value: 5 + }] ); +}); + +QUnit.test( "should tokenize minute (mm) with padding", function( assert ) { + assert.dateTokenizer( "05", "mm", cldr, [{ + type: "mm", + lexeme: "05", + value: 5 + }] ); +}); + +/** + * Second + */ + +QUnit.test( "should tokenize second (s) with no padding", function( assert ) { + assert.dateTokenizer( "59", "s", cldr, [{ + type: "s", + lexeme: "59", + value: 59 + }] ); +}); + +QUnit.test( "should tokenize second (ss) with padding", function( assert ) { + assert.dateTokenizer( "59", "ss", cldr, [{ + type: "ss", + lexeme: "59", + value: 59 + }] ); +}); + +QUnit.test( "should tokenize milliseconds (S+)", function( assert ) { + assert.dateTokenizer( "4", "S", cldr, [{ + type: "S", + lexeme: "4", + value: 4 + }] ); + assert.dateTokenizer( "37", "SS", cldr, [{ + type: "SS", + lexeme: "37", + value: 37 + }] ); + assert.dateTokenizer( "369", "SSS", cldr, [{ + type: "SSS", + lexeme: "369", + value: 369 + }] ); + assert.dateTokenizer( "3690", "SSSS", cldr, [{ + type: "SSSS", + lexeme: "3690", + value: 3690 + }] ); + assert.dateTokenizer( "36900", "SSSSS", cldr, [{ + type: "SSSSS", + lexeme: "36900", + value: 36900 + }] ); +}); + +QUnit.test( "should tokenize milliseconds in a day (A+)", function( assert ) { + assert.dateTokenizer( "633074", "A", cldr, [{ + type: "A", + lexeme: "633074", + value: 633074 + }] ); + assert.dateTokenizer( "6330737", "AA", cldr, [{ + type: "AA", + lexeme: "6330737", + value: 6330737 + }] ); + assert.dateTokenizer( "63307369", "AAA", cldr, [{ + type: "AAA", + lexeme: "63307369", + value: 63307369 + }] ); + assert.dateTokenizer( "633073690", "AAAA", cldr, [{ + type: "AAAA", + lexeme: "633073690", + value: 633073690 + }] ); + assert.dateTokenizer( "6330736900", "AAAAA", cldr, [{ + type: "AAAAA", + lexeme: "6330736900", + value: 6330736900 + }] ); +}); + +/** + * Zone + */ + +QUnit.test( "should tokenize timezone (z)", function( assert ) { + var enGb = new Cldr( "en-GB" ); + + assert.dateWithTimeZoneTokenizer( "PST", "z", cldr, "America/Los_Angeles", [{ + lexeme: "PST", + type: "z", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "PDT", "z", cldr, "America/Los_Angeles", [{ + lexeme: "PDT", + type: "z", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "BST", "z", enGb, "Europe/London", [{ + lexeme: "BST", + type: "z", + value: null + }] ); + + assert.dateWithTimeZoneTokenizer( "Pacific Standard Time", "zzzz", cldr, "America/Los_Angeles", [{ + lexeme: "Pacific Standard Time", + type: "zzzz", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "Pacific Daylight Time", "zzzz", cldr, "America/Los_Angeles", [{ + lexeme: "Pacific Daylight Time", + type: "zzzz", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "British Summer Time", "zzzz", cldr, "Europe/London", [{ + lexeme: "British Summer Time", + type: "zzzz", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "Gulf Standard Time", "zzzz", cldr, "Asia/Dubai", [{ + lexeme: "Gulf Standard Time", + type: "zzzz", + value: null + }] ); + + // Fall through 'O' format. + assert.dateTokenizer( "GMT", "z", cldr, [{ + lexeme: "GMT", + type: "z", + value: 0 + }] ); + assert.dateTokenizer( "GMT", "zzzz", cldr, [{ + lexeme: "GMT", + type: "zzzz", + value: 0 + }] ); + assert.dateTokenizer( "GMT-3", "z", cldr, [{ + lexeme: "GMT-3", + type: "z", + value: 180 + }] ); + assert.dateTokenizer( "GMT-03:00", "zzzz", cldr, [{ + lexeme: "GMT-03:00", + type: "zzzz", + value: 180 + }] ); + assert.dateTokenizer( "GMT+11", "z", cldr, [{ + lexeme: "GMT+11", + type: "z", + value: -660 + }] ); + assert.dateTokenizer( "GMT+11:00", "zzzz", cldr, [{ + lexeme: "GMT+11:00", + type: "zzzz", + value: -660 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT", "z", enGb, "Europe/London", [{ + lexeme: "GMT", + type: "z", + value: 0 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT", "zzzz", enGb, "Europe/London", [{ + lexeme: "GMT", + type: "zzzz", + value: 0 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-3", "z", cldr, "America/Los_Angeles", [{ + lexeme: "GMT-3", + type: "z", + value: 180 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-03:00", "zzzz", cldr, "America/Los_Angeles", [{ + lexeme: "GMT-03:00", + type: "zzzz", + value: 180 + }] ); +}); + +QUnit.test( "should tokenize timezone (Z)", function( assert ) { + assert.dateTokenizer( "+0000", "Z", cldr, [{ + lexeme: "+0000", + type: "Z", + value: 0 + }] ); + assert.dateTokenizer( "GMT", "ZZZZ", cldr, [{ + lexeme: "GMT", + type: "ZZZZ", + value: 0 + }] ); + assert.dateTokenizer( "Z", "ZZZZZ", cldr, [{ + lexeme: "Z", + type: "ZZZZZ", + value: 0 + }] ); + assert.dateTokenizer( "-0300", "Z", cldr, [{ + lexeme: "-0300", + type: "Z", + value: 180 + }] ); + assert.dateTokenizer( "GMT-03:00", "ZZZZ", cldr, [{ + lexeme: "GMT-03:00", + type: "ZZZZ", + value: 180 + }] ); + assert.dateTokenizer( "-03:00", "ZZZZZ", cldr, [{ + lexeme: "-03:00", + type: "ZZZZZ", + value: 180 + }] ); + assert.dateTokenizer( "+1100", "Z", cldr, [{ + lexeme: "+1100", + type: "Z", + value: -660 + }] ); + assert.dateTokenizer( "GMT+11:00", "ZZZZ", cldr, [{ + lexeme: "GMT+11:00", + type: "ZZZZ", + value: -660 + }] ); + assert.dateTokenizer( "+11:00", "ZZZZZ", cldr, [{ + lexeme: "+11:00", + type: "ZZZZZ", + value: -660 + }] ); +}); + +QUnit.test( "should tokenize timezone (O)", function( assert ) { + assert.dateTokenizer( "GMT", "O", cldr, [{ + lexeme: "GMT", + type: "O", + value: 0 + }] ); + assert.dateTokenizer( "GMT", "OOOO", cldr, [{ + lexeme: "GMT", + type: "OOOO", + value: 0 + }] ); + assert.dateTokenizer( "GMT-3", "O", cldr, [{ + lexeme: "GMT-3", + type: "O", + value: 180 + }] ); + assert.dateTokenizer( "GMT-03:00", "OOOO", cldr, [{ + lexeme: "GMT-03:00", + type: "OOOO", + value: 180 + }] ); + assert.dateTokenizer( "GMT+11", "O", cldr, [{ + lexeme: "GMT+11", + type: "O", + value: -660 + }] ); + assert.dateTokenizer( "GMT+11:00", "OOOO", cldr, [{ + lexeme: "GMT+11:00", + type: "OOOO", + value: -660 + }] ); +}); + +QUnit.test( "should tokenize timezone (v)", function( assert ) { + assert.dateWithTimeZoneTokenizer( "PT", "v", cldr, "America/Los_Angeles", [{ + lexeme: "PT", + type: "v", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "Pacific Time", "vvvv", cldr, "America/Los_Angeles", [{ + lexeme: "Pacific Time", + type: "vvvv", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "PT", "v", cldr, "America/Los_Angeles", [{ + lexeme: "PT", + type: "v", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "Pacific Time", "vvvv", cldr, "America/Los_Angeles", [{ + lexeme: "Pacific Time", + type: "vvvv", + value: null + }] ); + + // Use metazone. + assert.dateWithTimeZoneTokenizer( "Brasilia Time", "vvvv", cldr, "America/Sao_Paulo", [{ + lexeme: "Brasilia Time", + type: "vvvv", + value: null + }] ); + + // Fall through 'VVVV' format. + assert.dateWithTimeZoneTokenizer( "Sao Paulo Time", "v", cldr, "America/Sao_Paulo", [{ + lexeme: "Sao Paulo Time", + type: "v", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "Foo City Time", "v", cldr, "Foo/Baz", [{ + lexeme: "Foo City Time", + type: "v", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "Foo City Time", "vvvv", cldr, "Foo/Baz", [{ + lexeme: "Foo City Time", + type: "vvvv", + value: null + }] ); + + // Fall through 'O' and 'OOOO' formats. + assert.dateTokenizer( "GMT-8", "v", cldr, [{ + lexeme: "GMT-8", + type: "v", + value: 480 + }] ); + assert.dateTokenizer( "GMT-3", "v", cldr, [{ + lexeme: "GMT-3", + type: "v", + value: 180 + }] ); + assert.dateTokenizer( "GMT-08:00", "vvvv", cldr, [{ + lexeme: "GMT-08:00", + type: "vvvv", + value: 480 + }] ); + assert.dateTokenizer( "GMT-03:00", "vvvv", cldr, [{ + lexeme: "GMT-03:00", + type: "vvvv", + value: 180 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-8", "v", cldr, "America/Sao_Paulo", [{ + lexeme: "GMT-8", + type: "v", + value: 480 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-3", "v", cldr, "America/Sao_Paulo", [{ + lexeme: "GMT-3", + type: "v", + value: 180 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-08:00", "vvvv", cldr, "America/Sao_Paulo", [{ + lexeme: "GMT-08:00", + type: "vvvv", + value: 480 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-03:00", "vvvv", cldr, "America/Sao_Paulo", [{ + lexeme: "GMT-03:00", + type: "vvvv", + value: 180 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-8", "v", cldr, "Etc/GMT+8", [{ + lexeme: "GMT-8", + type: "v", + value: 480 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-3", "v", cldr, "Etc/GMT+8", [{ + lexeme: "GMT-3", + type: "v", + value: 180 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-08:00", "vvvv", cldr, "Etc/GMT+8", [{ + lexeme: "GMT-08:00", + type: "vvvv", + value: 480 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-03:00", "vvvv", cldr, "Etc/GMT+8", [{ + lexeme: "GMT-03:00", + type: "vvvv", + value: 180 + }] ); +}); + +QUnit.test( "should tokenize timezone (V)", function( assert ) { + assert.dateWithTimeZoneTokenizer( "America/Los_Angeles", "VV", cldr, "America/Los_Angeles", [{ + lexeme: "America/Los_Angeles", + type: "VV", + value: "America/Los_Angeles" + }] ); + assert.dateWithTimeZoneTokenizer( "Los Angeles", "VVV", cldr, "America/Los_Angeles", [{ + lexeme: "Los Angeles", + type: "VVV", + value: null + }] ); + assert.dateWithTimeZoneTokenizer( "Los Angeles Time", "VVVV", cldr, "America/Los_Angeles", [{ + lexeme: "Los Angeles Time", + type: "VVVV", + value: null + }] ); + + // Fall through to 'VVV' format with "Unknown" exemplarCity. + assert.dateWithTimeZoneTokenizer( "Unknown City", "VVV", cldr, "Foo/Bar", [{ + lexeme: "Unknown City", + type: "VVV", + value: null + }] ); + + // Fall through 'OOOO' format. + assert.dateWithTimeZoneTokenizer( "GMT-08:00", "VVVV", cldr, "America/Los_Angeles", [{ + lexeme: "GMT-08:00", + type: "VVVV", + value: 480 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-03:00", "VVVV", cldr, "America/Los_Angeles", [{ + lexeme: "GMT-03:00", + type: "VVVV", + value: 180 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-08:00", "VVVV", cldr, "Etc/GMT+8", [{ + lexeme: "GMT-08:00", + type: "VVVV", + value: 480 + }] ); + assert.dateWithTimeZoneTokenizer( "GMT-03:00", "VVVV", cldr, "Etc/GMT+8", [{ + lexeme: "GMT-03:00", + type: "VVVV", + value: 180 + }] ); +}); + +QUnit.test( "should tokenize timezone (X)", function( assert ) { + [ "X", "XX", "XXX", "XXXX", "XXXXX" ].forEach(function( X ) { + assert.dateTokenizer( "Z", X, cldr, [{ + lexeme: "Z", + type: X, + value: 0 + }] ); + }); + assert.dateTokenizer( "-03", "X", cldr, [{ + lexeme: "-03", + type: "X", + value: 180 + }] ); + assert.dateTokenizer( "-0300", "XX", cldr, [{ + lexeme: "-0300", + type: "XX", + value: 180 + }] ); + assert.dateTokenizer( "-03:00", "XXX", cldr, [{ + lexeme: "-03:00", + type: "XXX", + value: 180 + }] ); + assert.dateTokenizer( "-0300", "XXXX", cldr, [{ + lexeme: "-0300", + type: "XXXX", + value: 180 + }] ); + assert.dateTokenizer( "-03:00", "XXXXX", cldr, [{ + lexeme: "-03:00", + type: "XXXXX", + value: 180 + }] ); + assert.dateTokenizer( "+0530", "XX", cldr, [{ + lexeme: "+0530", + type: "XX", + value: -330 + }] ); + assert.dateTokenizer( "+05:30", "XXX", cldr, [{ + lexeme: "+05:30", + type: "XXX", + value: -330 + }] ); + assert.dateTokenizer( "+0530", "XXXX", cldr, [{ + lexeme: "+0530", + type: "XXXX", + value: -330 + }] ); + assert.dateTokenizer( "+05:30", "XXXXX", cldr, [{ + lexeme: "+05:30", + type: "XXXXX", + value: -330 + }] ); + assert.dateTokenizer( "+11", "X", cldr, [{ + lexeme: "+11", + type: "X", + value: -660 + }] ); + assert.dateTokenizer( "+1100", "XX", cldr, [{ + lexeme: "+1100", + type: "XX", + value: -660 + }] ); + assert.dateTokenizer( "+11:00", "XXX", cldr, [{ + lexeme: "+11:00", + type: "XXX", + value: -660 + }] ); + assert.dateTokenizer( "+1100", "XXXX", cldr, [{ + lexeme: "+1100", + type: "XXXX", + value: -660 + }] ); + assert.dateTokenizer( "+11:00", "XXXXX", cldr, [{ + lexeme: "+11:00", + type: "XXXXX", + value: -660 + }] ); +}); + +QUnit.test( "should tokenize timezone (x)", function( assert ) { + assert.dateTokenizer( "-03", "x", cldr, [{ + lexeme: "-03", + type: "x", + value: 180 + }] ); + assert.dateTokenizer( "-0300", "xx", cldr, [{ + lexeme: "-0300", + type: "xx", + value: 180 + }] ); + assert.dateTokenizer( "-03:00", "xxx", cldr, [{ + lexeme: "-03:00", + type: "xxx", + value: 180 + }] ); + assert.dateTokenizer( "-0300", "xxxx", cldr, [{ + lexeme: "-0300", + type: "xxxx", + value: 180 + }] ); + assert.dateTokenizer( "-03:00", "xxxxx", cldr, [{ + lexeme: "-03:00", + type: "xxxxx", + value: 180 + }] ); + assert.dateTokenizer( "+0530", "xx", cldr, [{ + lexeme: "+0530", + type: "xx", + value: -330 + }] ); + assert.dateTokenizer( "+05:30", "xxx", cldr, [{ + lexeme: "+05:30", + type: "xxx", + value: -330 + }] ); + assert.dateTokenizer( "+0530", "xxxx", cldr, [{ + lexeme: "+0530", + type: "xxxx", + value: -330 + }] ); + assert.dateTokenizer( "+05:30", "xxxxx", cldr, [{ + lexeme: "+05:30", + type: "xxxxx", + value: -330 + }] ); + assert.dateTokenizer( "+11", "x", cldr, [{ + lexeme: "+11", + type: "x", + value: -660 + }] ); + assert.dateTokenizer( "+1100", "xx", cldr, [{ + lexeme: "+1100", + type: "xx", + value: -660 + }] ); + assert.dateTokenizer( "+11:00", "xxx", cldr, [{ + lexeme: "+11:00", + type: "xxx", + value: -660 + }] ); + assert.dateTokenizer( "+1100", "xxxx", cldr, [{ + lexeme: "+1100", + type: "xxxx", + value: -660 + }] ); + assert.dateTokenizer( "+11:00", "xxxxx", cldr, [{ + lexeme: "+11:00", + type: "xxxxx", + value: -660 + }] ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format-properties.js new file mode 100644 index 000000000..f3b8be449 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format-properties.js @@ -0,0 +1,94 @@ +define([ + "cldr", + "src/number/format-properties", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/es/numbers.json", + "json!cldr-data/main/fa/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, properties, arNumbers, enNumbers, esNumbers, faNumbers, likelySubtags, + numberingSystems ) { + +var ar, en, es, fa; + +Cldr.load( + arNumbers, + enNumbers, + esNumbers, + faNumbers, + likelySubtags, + numberingSystems +); + +ar = new Cldr( "ar" ); +en = new Cldr( "en" ); +es = new Cldr( "es" ); +fa = new Cldr( "fa" ); + +QUnit.module( "Number Format Properties" ); + +QUnit.test( "should return positivePattern", function( assert ) { + assert.equal( properties( "0", en )[ 11 ], "0" ); + assert.equal( properties( "#,##0.0#;(0)", en )[ 11 ], "#,##0.0#" ); +}); + +QUnit.test( "should return negativePattern", function( assert ) { + assert.equal( properties( "0", en )[ 12 ], "-0" ); + assert.equal( properties( "#,##0.0#;(0)", en )[ 12 ], "(#,##0.0#)" ); +}); + +QUnit.test( "should return negativePrefix", function( assert ) { + assert.equal( properties( "#,##0.0#;(0)", en )[ 13 ], "(" ); + assert.equal( properties( "'$'#,##0.0#;-'$'0", en )[ 13 ], "-'$'" ); +}); + +QUnit.test( "should return negativeSuffix", function( assert ) { + assert.equal( properties( "#,##0.0#;(0)", en )[ 14 ], ")" ); +}); + +QUnit.test( "should return round function", function( assert ) { + assert.equal( properties( "0", en )[ 15 ]( 123.45 ), "123" ); + assert.equal( properties( "0", en, { + round: "ceil" + })[ 15 ]( 123.45 ), "124" ); +}); + +QUnit.test( "should return infinitySymbol", function( assert ) { + assert.equal( properties( "0", en )[ 16 ], "∞" ); +}); + +QUnit.test( "should return nanSymbol", function( assert ) { + assert.equal( properties( "0", en )[ 17 ], "NaN" ); +}); + +QUnit.test( "should return symbolMap", function( assert ) { + assert.deepEqual( properties( "0", es )[ 18 ], { + "%": "%", + "+": "+", + ",": ".", + "-": "-", + ".": ",", + "E": "E", + "‰": "‰" + }); + + assert.deepEqual( properties( "0", fa )[ 18 ], { + "%": "٪", + "+": "\u200e+\u200e", + ",": "٬", + "-": "\u200e−", + ".": "٫", + "E": "×۱۰^", + "‰": "؉" + }); +}); + +QUnit.test( "should return nuDigits", function( assert ) { + assert.deepEqual( properties( "0", ar )[ 19 ], "٠١٢٣٤٥٦٧٨٩" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format.js new file mode 100644 index 000000000..209e968d8 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format.js @@ -0,0 +1,3017 @@ +/* eslint-disable object-curly-spacing */ +define([ + "cldr", + "src/number/format", + "src/number/format-properties", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/es/numbers.json", + "json!cldr-data/main/fa/numbers.json", + "json!cldr-data/main/hu/numbers.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, format, properties, arNumbers, enNumbers, esNumbers, faNumbers, huNumbers, + zhNumbers, likelySubtags, numberingSystems ) { + +// 1: Earth average diameter according to: +// http://www.wolframalpha.com/input/?i=earth+diameter +var ar, en, es, fa, hu, zh, zhSimplified, + deci = 0.1, + earthDiameter = 12735, /* 1 */ + pi = 3.14159265359; + +Cldr.load( + arNumbers, + enNumbers, + esNumbers, + faNumbers, + huNumbers, + zhNumbers, + likelySubtags, + numberingSystems +); + +ar = new Cldr( "ar" ); +en = new Cldr( "en" ); +es = new Cldr( "es" ); +fa = new Cldr( "fa" ); +hu = new Cldr( "hu" ); +zh = new Cldr( "zh-u-nu-native" ); +zhSimplified = new Cldr( "zh" ); + +QUnit.module( "Number Format" ); + +function esPluralGenerator( n ) { + return ( n === 1 ) ? "one" : "other"; +} + +/** + * Integers + */ + +QUnit.test( "should format integers", function( assert ) { + assert.deepEqual( format( pi, properties( "#0", en ) ), [{type: "integer", value: "3"}] ); + assert.deepEqual( format( pi, properties( "###0", en ) ), [{type: "integer", value: "3"}] ); +}); + +QUnit.test( "should zero-pad minimum integer digits", function( assert ) { + assert.deepEqual( format( pi, properties( "0", en ) ), [{type: "integer", value: "3"}] ); + assert.deepEqual( format( pi, properties( "00", en ) ), [{type: "integer", value: "03"}] ); + assert.deepEqual( format( pi, properties( "000", en ) ), [{type: "integer", value: "003"}] ); +}); + +QUnit.test( "should not limit the maximum number of digits of integers", function( assert ) { + assert.deepEqual( format( earthDiameter, properties( "0", en ) ), [{type: "integer", value: "12735"}] ); + assert.deepEqual( format( earthDiameter, properties( "00", en ) ), [{type: "integer", value: "12735"}] ); + assert.deepEqual( format( earthDiameter, properties( "#0", en ) ), [{type: "integer", value: "12735"}] ); +}); + +QUnit.test( "should format negative integer", function( assert ) { + assert.deepEqual( format( -earthDiameter, properties( "0", en ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "12735" + } + ]); + + assert.deepEqual( format( -earthDiameter, properties( "0;(0)", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "12735" + }, + { + "type": "literal", + "value": ")" + } + ]); + + + // The number of digits, minimal digits, and other characteristics shall be ignored in the negative subpattern. + assert.deepEqual( format( -earthDiameter, properties( "0;(0.0##)", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "12735" + }, + { + "type": "literal", + "value": ")" + } + ]); +}); + +/** + * Decimals + */ + +QUnit.test( "should format decimals", function( assert ) { + assert.deepEqual( format( pi, properties( "0.##", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); +}); + +QUnit.test( "should limit maximum fraction digits", function( assert ) { + assert.deepEqual( format( pi, properties( "0.##", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( pi, properties( "0.0#", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( pi, properties( "0.####", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1416" + } + ]); + + assert.deepEqual( format( 0.10004, properties( "0.##", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1" + } + ]); +}); + +QUnit.test( "should zero-pad minimum fraction digits", function( assert ) { + assert.deepEqual( format( earthDiameter, properties( "0.0", en ) ), [ + { + "type": "integer", + "value": "12735" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "0" + } + ]); + + assert.deepEqual( format( deci, properties( "0.00", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "10" + } + ]); +}); + +QUnit.test( "should localize decimal separator symbol (.)", function( assert ) { + assert.deepEqual( format( pi, properties( "0.##", es ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "," + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( pi, properties( "0.##", ar ) ), [ + { + "type": "integer", + "value": "٣" + }, + { + "type": "decimal", + "value": "٫" + }, + { + "type": "fraction", + "value": "١٤" + } + ]); + + assert.deepEqual( format( pi, properties( "0.##", zh ) ), [ + { + "type": "integer", + "value": "三" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "一四" + } + ]); +}); + +QUnit.test( "should allow integer and fraction options override", function( assert ) { + // Overriding minimum integer digits only. + assert.deepEqual( format( pi, properties( "0", en, { minimumIntegerDigits: 2 } ) ), [ + { + "type": "integer", + "value": "03" + } + ]); + + // Overriding both fraction options. + assert.deepEqual( format( pi, properties( "0.##", en, { + maximumFractionDigits: 5, + minimumFractionDigits: 3 + } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14159" + } + ]); + + assert.deepEqual( format( 0.1, properties( "0.##", en, { + maximumFractionDigits: 5, + minimumFractionDigits: 3 + } ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "100" + } + ]); + + // Overriding maximum fraction digits only. + assert.deepEqual( format( pi, properties( "0.##", en, { maximumFractionDigits: 0 } ) ), [ + { + "type": "integer", + "value": "3" + } + ]); + + assert.deepEqual( format( pi, properties( "0.##", en, { maximumFractionDigits: 1 } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1" + } + ]); + + assert.deepEqual( format( pi, properties( "0.##", en, { maximumFractionDigits: 3 } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "142" + } + ]); + + assert.deepEqual( format( 0.01, properties( "0.##", en, { maximumFractionDigits: 1 } ) ), [ + { + "type": "integer", + "value": "0" + } + ]); + + assert.deepEqual( format( 0.01, properties( "0.0#", en, { maximumFractionDigits: 1 } ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "0" + } + ]); + + // Sanity normalization: minimumFractionDigits = min( minimumFractionDigits, maximumFractionDigits ) + assert.deepEqual( format( 0.1, properties( "0.0000", en, { maximumFractionDigits: 2 } ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "10" + } + ]); + + // Overriding minimum fraction digits only. + assert.deepEqual( format( 1, properties( "0.00", en, { minimumFractionDigits: 0 } ) ), [ + { + "type": "integer", + "value": "1" + } + ]); + + assert.deepEqual( format( 0.1, properties( "0.00", en, { minimumFractionDigits: 0 } ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1" + } + ]); + + assert.deepEqual( format( 0.001, properties( "0.00", en, { minimumFractionDigits: 0 } ) ), [ + { + "type": "integer", + "value": "0" + } + ]); + + assert.deepEqual( format( 0.1, properties( "0.##", en, { minimumFractionDigits: 2 } ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "10" + } + ]); + + // Sanity normalization: maximumFractionDigits = max( minimumFractionDigits, maximumFractionDigits ). + assert.deepEqual( format( pi, properties( "0.##", en, { minimumFractionDigits: 5 } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14159" + } + ]); + + // Overriding both minimum and maximum fraction digits. + assert.deepEqual( format( pi, properties( "0.##", en, { + minimumFractionDigits: 1, + maximumFractionDigits: 4 + }) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1416" + } + ]); + + assert.deepEqual( format( pi, properties( "0.##", en, { + minimumIntegerDigits: 2, + maximumFractionDigits: 3 + }) ), [ + { + "type": "integer", + "value": "03" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "142" + } + ]); + + // Overriding both integer and fraction options. + assert.deepEqual( format( 1.1, properties( "0.##", en, { + minimumIntegerDigits: 2, + minimumFractionDigits: 3 + }) ), [ + { + "type": "integer", + "value": "01" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "100" + } + ]); + + assert.deepEqual( format( 1.1, properties( "0.##", en, { + minimumIntegerDigits: 2, + maximumFractionDigits: 3 + }) ), [ + { + "type": "integer", + "value": "01" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1" + } + ]); +}); + +QUnit.test( "should allow rounding", function( assert ) { + assert.deepEqual( format( pi, properties( "0.10", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "10" + } + ]); + + assert.deepEqual( format( pi, properties( "0.20", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "20" + } + ]); + + assert.deepEqual( format( pi, properties( "0.5", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "0" + } + ]); + + assert.deepEqual( format( pi, properties( "0.1", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1" + } + ]); + + // Handle inaccurate floating point arithmetics like 0.00015 * 10000 = 1.49999999999999. + // See #376. + assert.deepEqual( format( 0.00015, properties( "0.0000", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "0002" + } + ]); +}); + +QUnit.test( "should allow different rounding options", function( assert ) { + assert.deepEqual( format( pi, properties( "0.##", en, { round: "ceil" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "15" + } + ]); + + assert.deepEqual( format( pi, properties( "0.##", en, { round: "floor"} ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( pi, properties( "0.##", en, { round: "round" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( pi, properties( "0.##", en, { round: "truncate"} ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( pi, properties( "0.####", en, { round: "ceil" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1416" + } + ]); + + assert.deepEqual( format( pi, properties( "0.####", en, { round: "floor"} ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1415" + } + ]); + + assert.deepEqual( format( pi, properties( "0.####", en, { round: "round" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1416" + } + ]); + + assert.deepEqual( format( pi, properties( "0.####", en, { round: "truncate"} ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1415" + } + ]); + + assert.deepEqual( format( -pi, properties( "0.##", en, { round: "ceil" } ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( -pi, properties( "0.##", en, { round: "floor"} ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "15" + } + ]); + + assert.deepEqual( format( -pi, properties( "0.##", en, { round: "round" } ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( -pi, properties( "0.##", en, { round: "truncate"} ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( -pi, properties( "0.####", en, { round: "ceil" } ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1415" + } + ]); + + assert.deepEqual( format( -pi, properties( "0.####", en, { round: "floor"} ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1416" + } + ]); + + assert.deepEqual( format( -pi, properties( "0.####", en, { round: "round" } ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1416" + } + ]); + + assert.deepEqual( format( -pi, properties( "0.####", en, { round: "truncate"} ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1415" + } + ]); +}); + +QUnit.test( "should format significant digits", function( assert ) { + assert.deepEqual( format( 123, properties( "@@@", en ) ), [ + { + "type": "integer", + "value": "123" + } + ]); + + assert.deepEqual( format( 12345, properties( "@@@", en ) ), [ + { + "type": "integer", + "value": "12300" + } + ]); + + assert.deepEqual( format( 12345, properties( "@@#", en ) ), [ + { + "type": "integer", + "value": "12300" + } + ]); + + assert.deepEqual( format( 12345, properties( "@##", en ) ), [ + { + "type": "integer", + "value": "12300" + } + ]); + + assert.deepEqual( format( pi, properties( "@@", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1" + } + ]); + + assert.deepEqual( format( pi, properties( "@@#", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( pi, properties( "@@##", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "142" + } + ]); + + assert.deepEqual( format( pi, properties( "@####", en ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1416" + } + ]); + + assert.deepEqual( format( 0.10004, properties( "@@", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "10" + } + ]); + + assert.deepEqual( format( 0.10004, properties( "@##", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "1" + } + ]); + + // This also test for the following inaccurate floating point arithmetics: + // `1234 * 0.0001 = 0.12340000000000001`. + assert.deepEqual( format( 0.12345, properties( "@@@", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "123" + } + ]); + + assert.deepEqual( format( 1.23004, properties( "@@##", en ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "23" + } + ]); + +}); + +QUnit.test( "should format negative decimal", function( assert ) { + assert.deepEqual( format( -pi, properties( "0.##", en ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( -pi, properties( "0.##;(0.##)", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + }, + { + "type": "literal", + "value": ")" + } + ]); + + assert.deepEqual( format( -pi, properties( "@@#", en ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + } + ]); + + assert.deepEqual( format( -pi, properties( "@@#;(@@#)", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + }, + { + "type": "literal", + "value": ")" + } + ]); + + + // The U+002D HYPHEN-MINUS sign shall be localized. + assert.deepEqual( format( -pi, properties( "0.##", fa ) ), [ + { + "type": "minusSign", + "value": "\u200e\u2212" + }, + { + "type": "integer", + "value": "۳" + }, + { + "type": "decimal", + "value": "٫" + }, + { + "type": "fraction", + "value": "۱۴" + } + ]); + + // The number of digits, minimal digits, and other characteristics shall be ignored in the negative subpattern. + assert.deepEqual( format( -pi, properties( "0.##;(0)", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + }, + { + "type": "literal", + "value": ")" + } + ]); + + assert.deepEqual( format( -pi, properties( "@@#;(0)", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "14" + }, + { + "type": "literal", + "value": ")" + } + ]); + +}); + +/** + * Grouping separators + */ + +QUnit.test( "should format grouping separators", function( assert ) { + assert.deepEqual( format( earthDiameter, properties( "#,##0.#", en ) ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "735" + } + ]); + + assert.deepEqual( format( earthDiameter, properties( "#,#,#0.#", en ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "2" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "7" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "35" + } + ]); + + assert.deepEqual( format( 123456789, properties( "#,##,###,###0", en ) ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "6789" + } + ]); + + assert.deepEqual( format( 123456789, properties( "###,###,###0", en ) ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "6789" + } + ]); + + assert.deepEqual( format( 123456789, properties( "##,#,###,###0", en ) ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "345" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "6789" + } + ]); + +}); + +/** + * Percent + */ + +QUnit.test( "should format percent", function( assert ) { + assert.deepEqual( format( 0.01, properties( "0%", en ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + + assert.deepEqual( format( 0.01, properties( "00%", en ) ), [ + { + "type": "integer", + "value": "01" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + + assert.deepEqual( format( 0.1, properties( "0%", en ) ), [ + { + "type": "integer", + "value": "10" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + + assert.deepEqual( format( 0.5, properties( "#0%", en ) ), [ + { + "type": "integer", + "value": "50" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + + assert.deepEqual( format( 1, properties( "0%", en ) ), [ + { + "type": "integer", + "value": "100" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + + assert.deepEqual( format( 0.005, properties( "##0.#%", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "5" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + + assert.deepEqual( format( 0.005, properties( "##0.#%", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "5" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + +}); + +QUnit.test( "should localize percent symbol (%)", function( assert ) { + assert.deepEqual( format( 0.5, properties( "#0%", ar ) ), [ + { + "type": "integer", + "value": "٥٠" + }, + { + "type": "percentSign", + "value": "٪" + } + ]); +}); + +QUnit.test( "should format negative percentage", function( assert ) { + assert.deepEqual( format( -0.1, properties( "0%", en ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "10" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + + assert.deepEqual( format( -0.1, properties( "0%;(0%)", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "10" + }, + { + "type": "percentSign", + "value": "%" + }, + { + "type": "literal", + "value": ")" + } + ]); + + assert.deepEqual( format( -0.1, properties( "0%;(0)%", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "10" + }, + { + "type": "literal", + "value": ")" + }, + { + "type": "percentSign", + "value": "%" + } + ]); +}); + +/** + * Per mille + */ + +QUnit.test( "should format per mille", function( assert ) { + assert.deepEqual( format( 0.001, properties( "0\u2030", en ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "perMille", + "value": "‰" + } + ]); + + assert.deepEqual( format( 0.001, properties( "00\u2030", en ) ), [ + { + "type": "integer", + "value": "01" + }, + { + "type": "perMille", + "value": "‰" + } + ]); + + assert.deepEqual( format( 0.01, properties( "0\u2030", en ) ), [ + { + "type": "integer", + "value": "10" + }, + { + "type": "perMille", + "value": "‰" + } + ]); + + assert.deepEqual( format( 0.1, properties( "0\u2030", en ) ), [ + { + "type": "integer", + "value": "100" + }, + { + "type": "perMille", + "value": "‰" + } + ]); + + + assert.deepEqual( format( 0.5, properties( "#0\u2030", en ) ), [ + { + "type": "integer", + "value": "500" + }, + { + "type": "perMille", + "value": "‰" + } + ]); + + assert.deepEqual( format( 1, properties( "0\u2030", en ) ), [ + { + "type": "integer", + "value": "1000" + }, + { + "type": "perMille", + "value": "‰" + } + ]); + + assert.deepEqual( format( 0.0005, properties( "##0.#\u2030", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "5" + }, + { + "type": "perMille", + "value": "‰" + } + ]); + + assert.deepEqual( format( 0.0005, properties( "##0.#\u2030", en ) ), [ + { + "type": "integer", + "value": "0" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "5" + }, + { + "type": "perMille", + "value": "‰" + } + ]); + + assert.deepEqual( format( 0.5, properties( "#0‰", en ) ), [ + { + "type": "integer", + "value": "500" + }, + { + "type": "perMille", + "value": "‰" + } + ]); + + assert.deepEqual( format( 0.5, properties( "#0‰", en ) ), [ + { + "type": "integer", + "value": "500" + }, + { + "type": "perMille", + "value": "‰" + } + ]); +}); + +QUnit.test( "should localize per mille symbol (\u2030)", function( assert ) { + assert.deepEqual( format( 0.5, properties( "#0\u2030", ar ) ), [ + { + "type": "integer", + "value": "٥٠٠" + }, + { + "type": "perMille", + "value": "؉" + } + ]); +}); + +QUnit.test( "should format negative mille", function( assert ) { + assert.deepEqual( format( -0.001, properties( "0\u2030", en ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "perMille", + "value": "\u2030" + } + ]); + + assert.deepEqual( format( -0.001, properties( "0\u2030;(0\u2030)", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "perMille", + "value": "\u2030" + }, + { + "type": "literal", + "value": ")" + } + ]); + + assert.deepEqual( format( -0.001, properties( "0\u2030;(0)\u2030", en ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": ")" + }, + { + "type": "perMille", + "value": "\u2030" + } + ]); +}); + +/** + * Infinity + */ + +QUnit.test( "should format infinite numbers", function( assert ) { + assert.deepEqual( format( Math.pow(2, 2000 ), properties( "0", en ) ), [ + { + "type": "infinity", + "value": "∞" + } + ]); + + assert.deepEqual( format( Math.pow(-2, 2001 ), properties( "0", en ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "infinity", + "value": "∞" + } + ]); +}); + +/** + * NaN + */ + +QUnit.test( "should format infinite numbers", function( assert ) { + assert.deepEqual( format( NaN, properties( "0", en ) ), [ + { + "type": "nan", + "value": "NaN" + } + ]); +}); + +/** + * Literal + */ + +QUnit.test( "should format literal (')", function( assert ) { + assert.deepEqual( format( 69900, properties( "'$'#,##0", en ) ), [ + { + "type": "literal", + "value": "$" + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + } + ]); + + assert.deepEqual( format( 69900, properties( "'$'#,##0.00", en ) ), [ + { + "type": "literal", + "value": "$" + }, + { + "type": "integer", + "value": "69" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "900" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "00" + } + ]); + + // Make sure quoted characters (in this case, minus sign) aren't localized. + assert.deepEqual( format( -pi, properties( "0.##;'-'0.##", fa ) ), [ + { + "type": "literal", + "value": "-" + }, + { + "type": "integer", + "value": "۳" + }, + { + "type": "decimal", + "value": "٫" + }, + { + "type": "fraction", + "value": "۱۴" + } + ]); +}); + +/** + * Compact Numbers + */ + +QUnit.test( "should format numbers in compact mode", function( assert ) { + assert.deepEqual( format( 273.7, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "274" + } + ]); + + assert.deepEqual( format( 273.7, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "274" + } + ]); + + assert.deepEqual( format( 273, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "273" + } + ]); + + assert.deepEqual( format( 273, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "273" + } + ]); + + assert.deepEqual( format( 573, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "573" + } + ]); + + assert.deepEqual( format( 573, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "573" + } + ]); + + assert.deepEqual( format( 1273, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 1273, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "thousand" + } + ]); + + assert.deepEqual( format( 1234000000000000, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "1234" + }, + { + "type": "compact", + "value": "T" + } + ]); + + assert.deepEqual( format( 1273000, properties( "0", es, { + compact: "long" + } ), esPluralGenerator ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "millón" + } + ]); + + assert.deepEqual( format( 2273000, properties( "0", es, { + compact: "long" + } ), esPluralGenerator ), [ + { + "type": "integer", + "value": "2" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "millones" + } + ]); + + assert.deepEqual( format( 27371, properties( "0", zhSimplified, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "compact", + "value": "万" + } + ]); + + assert.deepEqual( format( 27371, properties( "0", zhSimplified, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "compact", + "value": "万" + } + ]); + + assert.deepEqual( format( 9999.9, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "10" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "thousand" + } + ]); + + assert.deepEqual( format( 12735, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "13" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 12735, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "13" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "thousand" + } + ]); + + assert.deepEqual( format( 127350, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "127" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 127350, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "127" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "thousand" + } + ]); + + assert.deepEqual( format( 1273500, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "compact", + "value": "M" + } + ]); + + assert.deepEqual( format( 1273500, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "million" + } + ]); + + assert.deepEqual( format( -1273500, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "compact", + "value": "M" + } + ]); + + assert.deepEqual( format( -1273500, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "million" + } + ]); + + assert.deepEqual( format( -1273500, properties( "0;(0)", en, { compact: "short" } ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "compact", + "value": "M" + }, + { + "type": "literal", + "value": ")" + } + ]); + + assert.deepEqual( format( -1273500, properties( "0;(0)", en, { compact: "long" } ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "million" + }, + { + "type": "literal", + "value": ")" + } + ]); + + + // Some hungarian short formats have a terminating E, which is treated as a special + // character in non-compact formats. + // \u00A0 is a unicode non-breaking space. + assert.deepEqual( format( 1273, properties( "0", hu, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "E" + } + ]); + + assert.deepEqual( format( 1273, properties( "0", hu, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "ezer" + } + ]); + + assert.deepEqual( format( 9000000, properties( "0", hu, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "9" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "M" + } + ]); + + assert.deepEqual( format( 9000000, properties( "0", hu, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "9" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "millió" + } + ]); + +}); + +QUnit.test( "should format numbers that lack pattern in compact mode (use default compact mode pattern)", function( assert ) { + assert.deepEqual( format( 0.01, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "0" + } + ]); + + assert.deepEqual( format( 273.7, properties( "0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "274" + } + ]); + + assert.deepEqual( format( 273.7, properties( "0", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "274" + } + ]); + + assert.deepEqual( format( 2737, properties( "0", zhSimplified, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "2737" + } + ]); + + assert.deepEqual( format( 2737, properties( "0", zhSimplified, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "2737" + } + ]); + +}); + +QUnit.test( "numbers should support fraction digits in compact mode", function( assert ) { + assert.deepEqual( format( 1273, properties( "0", en, { + compact: "short", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 1273, properties( "0", en, { + compact: "long", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "thousand" + } + ]); + + assert.deepEqual( format( 1273000, properties( "0", es, { + compact: "long", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + }), esPluralGenerator ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "," + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "millones" + } + ]); + + assert.deepEqual( format( 2273000, properties( "0", es, { + compact: "long", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + } ), esPluralGenerator ), [ + { + "type": "integer", + "value": "2" + }, + { + "type": "decimal", + "value": "," + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "millones" + } + ]); + + assert.deepEqual( format( 12735, properties( "0", en, { + compact: "short", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "7" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 12735, properties( "0", en, { + compact: "long", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "7" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "thousand" + } + ]); + + assert.deepEqual( format( 127350, properties( "0", en, { + compact: "short", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "integer", + "value": "127" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "4" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 127350, properties( "0", en, { + compact: "long", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "integer", + "value": "127" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "4" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "thousand" + } + ]); + + assert.deepEqual( format( 1273500, properties( "0", en, { + compact: "short", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "compact", + "value": "M" + } + ]); + + assert.deepEqual( format( 1273500, properties( "0", en, { + compact: "long", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "million" + } + ]); + + assert.deepEqual( format( -1273500, properties( "0", en, { + compact: "short", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "compact", + "value": "M" + } + ]); + + assert.deepEqual( format( -1273500, properties( "0", en, { + compact: "long", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "million" + } + ]); + + assert.deepEqual( format( -1273500, properties( "0;(0)", en, { + compact: "short", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "compact", + "value": "M" + }, + { + "type": "literal", + "value": ")" + } + ]); + + assert.deepEqual( format( -1273500, properties( "0;(0)", en, { + compact: "long", + maximumFractionDigits: 1, + minimumFractionDigits: 1 + })), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "1" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "3" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "million" + }, + { + "type": "literal", + "value": ")" + } + ]); + +}); + +QUnit.test( "numbers should support significant digits in compact mode", function( assert ) { + assert.deepEqual( format( 12735, properties( "0", en, { + compact: "short", + maximumSignificantDigits: 3, + minimumSignificantDigits: 3 + })), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "7" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 12735, properties( "0", en, { + compact: "short", + maximumSignificantDigits: 2, + minimumSignificantDigits: 2 + })), [ + { + "type": "integer", + "value": "13" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 12735, properties( "0", en, { + compact: "short", + maximumSignificantDigits: 1, + minimumSignificantDigits: 1 + })), [ + { + "type": "integer", + "value": "10" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( -127350, properties( "0", en, { + compact: "short", + maximumSignificantDigits: 3, + minimumSignificantDigits: 1 + })), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "127" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( -127350000, properties( "0", en, { + compact: "short", + maximumSignificantDigits: 3, + minimumSignificantDigits: 1 + })), [ + { + "type": "minusSign", + "value": "-" + }, + { + "type": "integer", + "value": "127" + }, + { + "type": "compact", + "value": "M" + } + ]); + + assert.deepEqual( format( 12849872883, properties("0", en, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3, + compact: "short" + })), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "8" + }, + { + "type": "compact", + "value": "B" + } + ]); + + assert.deepEqual( format( 12850172883, properties("0", en, { + minimumSignificantDigits: 1, + maximumSignificantDigits: 3, + compact: "short" + })), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "9" + }, + { + "type": "compact", + "value": "B" + } + ]); +}); + +QUnit.test( "numbers should support rounding in compact mode", function( assert ) { + assert.deepEqual( format( 12735, properties( "0", en, { + compact: "short", + maximumFractionDigits: 2, + minimumFractionDigits: 1 + } ) ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "74" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 12735, properties( "0", en, { + compact: "short", + maximumFractionDigits: 2, + minimumFractionDigits: 1, + round: "ceil" + } ) ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "74" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 12735, properties( "0", en, { + compact: "short", + maximumFractionDigits: 2, + minimumFractionDigits: 1, + round: "floor" + } ) ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "73" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 12735, properties( "0", en, { + compact: "short", + maximumFractionDigits: 2, + minimumFractionDigits: 1, + round: "truncate" + } ) ), [ + { + "type": "integer", + "value": "12" + }, + { + "type": "decimal", + "value": "." + }, + { + "type": "fraction", + "value": "73" + }, + { + "type": "compact", + "value": "K" + } + ]); + +}); + +QUnit.test( "percents should format in compact mode", function( assert ) { + assert.deepEqual( format( 127, properties( "0%", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "13" + }, + { + "type": "compact", + "value": "K" + }, + { + "type": "percentSign", + "value": "%" + } + ]); + + assert.deepEqual( format( 127, properties( "0%", en, { compact: "long" } ) ), [ + { + "type": "integer", + "value": "13" + }, + { + "type": "literal", + "value": " " + }, + { + "type": "compact", + "value": "thousand" + }, + { + "type": "percentSign", + "value": "%" + } + ]); +}); + + +QUnit.test( "given pattern properties should be ignored in compact mode", function( assert ) { + + // minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, minimumSignificantDigits, + // maximumSignificantDigits extracted from the pattern should be ignored. + assert.deepEqual( format( 2737, properties( "0.#", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 2737, properties( "0.0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 2737, properties( "0.0#", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 2737, properties( "@@", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "3" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 69900, properties( "'$'#,##0.00", en, {compact: "short"} ) ), [ + { + "type": "literal", + "value": "$" + }, + { + "type": "integer", + "value": "70" + }, + { + "type": "compact", + "value": "K" + } + ]); + + assert.deepEqual( format( 12.01, properties( "0.#", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "12" + } + ]); + + assert.deepEqual( format( 12.01, properties( "0.#", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "12" + } + ]); + + assert.deepEqual( format( 12.01, properties( "0.0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "12" + } + ]); + + assert.deepEqual( format( 12.01, properties( "0.0#", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "12" + } + ]); + + assert.deepEqual( format( 12.01, properties( "@@", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "12" + } + ]); + + assert.deepEqual( format( 12.01, properties( "'$'#,##0.00", en, {compact: "short"} ) ), [ + { + "type": "literal", + "value": "$" + }, + { + "type": "integer", + "value": "12" + } + ]); + + // Preserve grouping separator from original pattern. (only used in very big numbers) + assert.deepEqual( format( 1234000000000000, properties( "#,##0", en, { compact: "short" } ) ), [ + { + "type": "integer", + "value": "1" + }, + { + "type": "group", + "value": "," + }, + { + "type": "integer", + "value": "234" + }, + { + "type": "compact", + "value": "T" + } + ]); + + // Preserve prefix and suffix + assert.deepEqual( format( 2737, properties( "(0.0#)", en, { compact: "short" } ) ), [ + { + "type": "literal", + "value": "(" + }, + { + "type": "integer", + "value": "3" + }, + { + "type": "compact", + "value": "K" + }, + { + "type": "literal", + "value": ")" + } + ]); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format/grouping-separator.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format/grouping-separator.js new file mode 100644 index 000000000..540aea5d6 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format/grouping-separator.js @@ -0,0 +1,25 @@ +define([ + "src/number/format/grouping-separator" +], function( groupingSeparator ) { + +QUnit.module( "Number Format Grouping Separator" ); + +QUnit.test( "should format primary grouping separator", function( assert ) { + assert.equal( groupingSeparator( 1, 2 ), "1" ); + assert.equal( groupingSeparator( 11, 2 ), "11" ); + assert.equal( groupingSeparator( 111, 2 ), "1,11" ); + assert.equal( groupingSeparator( 1111, 2 ), "11,11" ); + assert.equal( groupingSeparator( 11111, 2 ), "1,11,11" ); + assert.equal( groupingSeparator( 1111111, 3 ), "1,111,111" ); + assert.equal( groupingSeparator( 1111111.1111, 3 ), "1,111,111.1111" ); +}); + +QUnit.test( "should format primary and second grouping separator", function( assert ) { + assert.equal( groupingSeparator( 111111, 3, 2 ), "1,11,111" ); + assert.equal( groupingSeparator( 1111111, 3, 2 ), "11,11,111" ); + assert.equal( groupingSeparator( 11111111, 3, 2 ), "1,11,11,111" ); + assert.equal( groupingSeparator( 11111111, 2, 1 ), "1,1,1,1,1,1,11" ); + assert.equal( groupingSeparator( 11111111.1111, 2, 1 ), "1,1,1,1,1,1,11.1111" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format/integer-fraction-digits.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format/integer-fraction-digits.js new file mode 100644 index 000000000..63cf74c5a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format/integer-fraction-digits.js @@ -0,0 +1,86 @@ +define([ + "src/number/format/integer-fraction-digits", + "src/util/number/round" +], function( formatIntegerFractionDigits, round ) { + +// 1: Earth average diameter according to: +// http://www.wolframalpha.com/input/?i=earth+diameter +var ceil = round( "ceil" ), + deci = 0.1, + earthDiameter = 12735, /* 1 */ + floor = round( "floor" ), + pi = 3.14159265359, + truncate = round( "truncate" ), + round = round( "round" ); + +QUnit.module( "Number Integer and Fraction Format" ); + +/** + * Integers + */ + +QUnit.test( "should zero-pad minimum integer digits", function( assert ) { + assert.equal( formatIntegerFractionDigits( pi, 2, null, null, round, null ), "03" ); +}); + +QUnit.test( "should not limit the maximum number of digits of integers", function( assert ) { + assert.equal( formatIntegerFractionDigits( earthDiameter, 1, null, null, round, null ), "12735" ); +}); + +/** + * Decimals + */ + +QUnit.test( "should limit maximum fraction digits", function( assert ) { + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 0, round, null ), "3" ); + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 2, round, null ), "3.14" ); + assert.equal( formatIntegerFractionDigits( pi, 1, 4, 4, round, null ), "3.1416" ); +}); + +QUnit.test( "should zero-pad minimum fraction digits", function( assert ) { + assert.equal( formatIntegerFractionDigits( deci, 1, 2, 2, round, null ), "0.10" ); +}); + +QUnit.test( "should allow rounding", function( assert ) { + assert.equal( formatIntegerFractionDigits( pi, 1, 2, 2, round, 0.10 ), "3.10" ); + assert.equal( formatIntegerFractionDigits( 100.7, 1, 0, 0, round, null ), "101" ); +}); + +QUnit.test( "should allow different rounding options", function( assert ) { + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 2, ceil, null ), "3.15" ); + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 2, floor, null ), "3.14" ); + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 2, round, null ), "3.14" ); + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 2, truncate, null ), "3.14" ); + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 4, ceil, null ), "3.1416" ); + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 4, floor, null), "3.1415" ); + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 4, round, null ), "3.1416" ); + assert.equal( formatIntegerFractionDigits( pi, 1, 0, 4, truncate, null ), "3.1415" ); + assert.equal( formatIntegerFractionDigits( -pi, 1, 0, 2, ceil, null ), "-3.14" ); + assert.equal( formatIntegerFractionDigits( -pi, 1, 0, 2, floor, null ), "-3.15" ); + assert.equal( formatIntegerFractionDigits( -pi, 1, 0, 2, round, null ), "-3.14" ); + assert.equal( formatIntegerFractionDigits( -pi, 1, 0, 2, truncate, null ), "-3.14" ); + assert.equal( formatIntegerFractionDigits( -pi, 1, 0, 4, ceil, null ), "-3.1415" ); + assert.equal( formatIntegerFractionDigits( -pi, 1, 0, 4, floor, null ), "-3.1416" ); + assert.equal( formatIntegerFractionDigits( -pi, 1, 0, 4, round, null ), "-3.1416" ); + assert.equal( formatIntegerFractionDigits( -pi, 1, 0, 4, truncate, null ), "-3.1415" ); +}); + +// `12341234.233` => `"12,341,234.233000001"` (#227). +// `0.00015 * 10000 = 1.49999999999999` (#376). +QUnit.test( "should handle inaccurate floating point arithmetics", function( assert ) { + assert.equal( formatIntegerFractionDigits( 12341234.233, 1, 1, 3, round, null ), "12341234.233" ); + assert.equal( formatIntegerFractionDigits( 1234 * 0.0001, 1, 1, 4, round, null ), "0.1234" ); + assert.equal( formatIntegerFractionDigits( 0.00015, 1, 1, 4, round, null ), "0.0002" ); +}); + +// `2e-7` => `"2,e-7"` (#750) +QUnit.test( "should handle small numbers", function( assert ) { + assert.equal( formatIntegerFractionDigits( 2e-7, 1, 0, 10, round, null ), "0.0000002" ); + assert.equal( formatIntegerFractionDigits( 1e-20, 1, 0, 20, round, null ), "0.00000000000000000001" ); + assert.equal( formatIntegerFractionDigits( 9e-8, 1, 0, 7, round, null ), "0.0000001" ); + + // Make sure precision isn't wrongly messed up, e.g., 123456789.1229999959. + assert.equal( formatIntegerFractionDigits( 123456789.123, 1, 0, 10, round, null ), "123456789.123" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format/significant-digits.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format/significant-digits.js new file mode 100644 index 000000000..cdd203d0a --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/format/significant-digits.js @@ -0,0 +1,44 @@ +define([ + "src/number/format/significant-digits", + "src/util/number/round" +], function( formatSignificantDigits, round ) { + +var ceil = round( "ceil" ), + deci = 0.1, + floor = round( "floor" ), + pi = 3.14159265359, + truncate = round( "truncate" ), + round = round( "round" ); + +QUnit.module( "Number Significant Format" ); + +QUnit.test( "should zero-pad minimum significant figures", function( assert ) { + assert.equal( formatSignificantDigits( deci, 3, 3, round ), "0.100" ); +}); + +QUnit.test( "should limit maximum significant figures", function( assert ) { + assert.equal( formatSignificantDigits( 123, 3, 3, round ), "123" ); + assert.equal( formatSignificantDigits( 12345, 3, 3, round ), "12300" ); + assert.equal( formatSignificantDigits( pi, 2, 2, round ), "3.1" ); + assert.equal( formatSignificantDigits( pi, 2, 3, round ), "3.14" ); + assert.equal( formatSignificantDigits( pi, 2, 4, round ), "3.142" ); + assert.equal( formatSignificantDigits( pi, 1, 5, round ), "3.1416" ); + assert.equal( formatSignificantDigits( 0.10004, 2, 2, round ), "0.10" ); + assert.equal( formatSignificantDigits( 0.12345, 3, 3, round ), "0.123" ); + assert.equal( formatSignificantDigits( 0.012345, 3, 3, round ), "0.0123" ); +}); + +QUnit.test( "should allow different round options", function( assert ) { + assert.equal( formatSignificantDigits( 0.12345, 3, 3, ceil ), "0.124" ); + assert.equal( formatSignificantDigits( 0.12345, 3, 3, floor ), "0.123" ); + assert.equal( formatSignificantDigits( 0.12345, 3, 3, truncate ), "0.123" ); + assert.equal( formatSignificantDigits( -0.12345, 3, 3, ceil ), "-0.123" ); + assert.equal( formatSignificantDigits( -0.12345, 3, 3, floor ), "-0.124" ); + assert.equal( formatSignificantDigits( -0.12345, 3, 3, truncate ), "-0.123" ); +}); + +QUnit.test( "should handle inaccurate floating point arithmetics", function( assert ) { + assert.equal( formatSignificantDigits( 0.00012345, 1, 3, round ), "0.000123" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/parse-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/parse-properties.js new file mode 100644 index 000000000..100539155 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/parse-properties.js @@ -0,0 +1,129 @@ +define([ + "cldr", + "src/number/parse-properties", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/es/numbers.json", + "json!cldr-data/main/fa/numbers.json", + "json!cldr-data/main/sv/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, properties, arNumbers, enNumbers, esNumbers, faNumbers, svNumbers, + likelySubtags ) { + +var ar, en, es, sv; + +Cldr.load( + arNumbers, + enNumbers, + esNumbers, + faNumbers, + svNumbers, + likelySubtags +); + +ar = new Cldr( "ar" ); +en = new Cldr( "en" ); +es = new Cldr( "es" ); +sv = new Cldr( "sv" ); + +QUnit.module( "Number Parse Properties" ); + +QUnit.test( "should return invertedSymbolMap", function( assert ) { + assert.deepEqual( properties( "0", es )[ 0 ], { + "%": "%", + "+": "+", + ",": ".", + "-": "-", + ".": ",", + "E": "E", + "‰": "‰" + }); + + // Note grouping separator is using regular U+0020 SPACE due to loose matching. + assert.deepEqual( properties( "0", sv )[ 0 ], { + "%": "%", + "+": "+", + ",": ".", + " ": ",", + "×10^": "E", + "‰": "‰", + "-": "-" + }); +}); + +QUnit.test( "should return invertedNuDigitsMap", function( assert ) { + assert.deepEqual( properties( "0", ar )[ 1 ], { + "٠": "0", + "١": "1", + "٢": "2", + "٣": "3", + "٤": "4", + "٥": "5", + "٦": "6", + "٧": "7", + "٨": "8", + "٩": "9" + }); +}); + +QUnit.test( "should return infinity tokenizer", function( assert ) { + assert.deepEqual( properties( "0", en )[ 2 ].infinity, /^∞/ ); +}); + +QUnit.test( "should return NaN tokenizer", function( assert ) { + assert.deepEqual( properties( "0", en )[ 2 ].nan, /^NaN/ ); + assert.deepEqual( properties( "0", ar )[ 2 ].nan, /^ليس رقم/ ); +}); + +QUnit.test( "should return negativePrefix tokenizer", function( assert ) { + assert.deepEqual( properties( "0", en )[ 2 ].negativePrefix, /^-/ ); + assert.deepEqual( properties( "0;(0)", en )[ 2 ].negativePrefix, /^\(/ ); + }); + +QUnit.test( "should return negativeSuffix tokenizer", function( assert ) { + assert.deepEqual( properties( "0", en )[ 2 ].negativeSuffix, /^/ ); + assert.deepEqual( properties( "0;(0)", en )[ 2 ].negativeSuffix, /^\)/ ); +}); + +QUnit.test( "should return number tokenizer", function( assert ) { + assert.deepEqual( properties( "0", en )[ 2 ].number, /^\d+/ ); + assert.deepEqual( properties( "0.##", en )[ 2 ].number, /^(\d+(\.\d+|\.)?|(\d+)?\.\d+)/ ); + + assert.deepEqual( + properties( "#,##0.##", en )[ 2 ].number, + /^((\d{1,3}(,\d{3})+|\d+)(\.\d+|\.)?|((\d{1,3}(,\d{3})+|\d+))?\.\d+)/ + ); + + assert.deepEqual( + properties( "#,##0.##", es )[ 2 ].number, + /^((\d{1,3}(\.\d{3})+|\d+)(,\d+|,)?|((\d{1,3}(\.\d{3})+|\d+))?,\d+)/ + ); + + assert.deepEqual( + properties( "#,##,##0.##", en )[ 2 ].number, + /^((\d{1,2}((,\d{2})*(,\d{3}))|\d+)(\.\d+|\.)?|((\d{1,2}((,\d{2})*(,\d{3}))|\d+))?\.\d+)/ + ); + + assert.deepEqual( + properties( "#,##0.##", sv )[ 2 ].number, + /^((\d{1,3}( \d{3})+|\d+)(,\d+|,)?|((\d{1,3}( \d{3})+|\d+))?,\d+)/ + ); +}); + +QUnit.test( "should return prefix tokenizer", function( assert ) { + assert.deepEqual( properties( "%0", en )[ 2 ].prefix, /^%/ ); + assert.deepEqual( properties( "'$'0.##", en )[ 2 ].prefix, /^\$/ ); + assert.deepEqual( properties( "'$ '0.##", en )[ 2 ].prefix, /^\$ / ); + assert.deepEqual( properties( "'foo''bar'0.##", en )[ 2 ].prefix, /^foo'bar/ ); + assert.deepEqual( properties( "-'foo''bar'0.##", en )[ 2 ].prefix, /^-foo'bar/ ); +}); + +QUnit.test( "should return suffix tokenizer", function( assert ) { + assert.deepEqual( properties( "#,##0%", en )[ 2 ].suffix, /^%/ ); + assert.deepEqual( properties( "#,##0 %", ar )[ 2 ].suffix, /^ ٪/ ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/parse.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/parse.js new file mode 100644 index 000000000..7e33dae95 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/parse.js @@ -0,0 +1,215 @@ +define([ + "cldr", + "src/number/parse", + "src/number/parse-properties", + "json!cldr-data/main/ar/numbers.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/es/numbers.json", + "json!cldr-data/main/pt/numbers.json", + "json!cldr-data/main/ru/numbers.json", + "json!cldr-data/main/sv/numbers.json", + "json!cldr-data/main/zh/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/numberingSystems.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, parse, properties, arNumbers, enNumbers, esNumbers, ptNumbers, ruNumbers, + svNumbers, zhNumbers, likelySubtags, numberingSystems ) { + +var ar, en, es, pt, ru, sv, zh; + +Cldr.load( + arNumbers, + enNumbers, + esNumbers, + ptNumbers, + ruNumbers, + svNumbers, + zhNumbers, + likelySubtags, + numberingSystems +); + +ar = new Cldr( "ar" ); +en = new Cldr( "en" ); +es = new Cldr( "es" ); +pt = new Cldr( "pt" ); +ru = new Cldr( "ru" ); +sv = new Cldr( "sv" ); +zh = new Cldr( "zh-u-nu-native" ); + +QUnit.module( "Number Parse" ); + +/** + * Integers + */ + +QUnit.test( "should parse integers", function( assert ) { + assert.equal( parse( "3", properties( "0", en ) ), 3 ); +}); + +QUnit.test( "should parse invalid integers as NaN", function( assert ) { + assert.deepEqual( parse( "", properties( "0", en ) ), NaN ); +}); + +QUnit.test( "should parse zero-padded integers", function( assert ) { + assert.equal( parse( "003", properties( "000", en ) ), 3 ); +}); + +QUnit.test( "should parse grouping separators", function( assert ) { + assert.equal( parse( "12,735", properties( "#,##0.#", en ) ), 12735 ); + assert.equal( parse( "12735", properties( "#,##0.#", en ) ), 12735 ); + assert.equal( parse( "1,2,7,35", properties( "#,#,#0.#", en ) ), 12735 ); + assert.equal( parse( "12.735", properties( "#,##0", es ) ), 12735 ); + assert.equal( parse( "1000", properties( "#,##0", en ) ), 1000 ); + assert.equal( parse( "1000", properties( "#,##,##0", en ) ), 1000 ); +}); + +QUnit.test( "should parse invalid grouping separators as NaN", function( assert ) { + assert.deepEqual( parse( "1,2735", properties( "#,##0.#", en ) ), NaN ); + assert.deepEqual( parse( "1,2,735", properties( "#,#,#0.#", en ) ), NaN ); + assert.deepEqual( parse( "1,27,35", properties( "#,#,#0.#", en ) ), NaN ); + assert.deepEqual( parse( "12,7,35", properties( "#,#,#0.#", en ) ), NaN ); + assert.deepEqual( parse( "1.2735", properties( "#,##0", es ) ), NaN ); +}); + +QUnit.test( "should parse negative integers", function( assert ) { + assert.equal( parse( "-3", properties( "0", en ) ), -3 ); + assert.equal( parse( "(3)", properties( "0;(0)", en ) ), -3 ); + assert.equal( parse( "-3", properties( "0", sv ) ), -3 ); + assert.equal( parse( "\u22123", properties( "0", sv ) ), -3 ); +}); + +QUnit.test( "should parse mixed non breaking space and breaking space", function( assert ) { + assert.equal( parse( "12\xA0735", properties( "#,##0", sv ) ), 12735 ); + assert.equal( parse( "12 735", properties( "#,##0", sv ) ), 12735 ); +}); + +/** + * Decimals + */ + +QUnit.test( "should parse decimals", function( assert ) { + assert.equal( parse( "3.14", properties( "0.##", en ) ), 3.14 ); + assert.equal( parse( "3,14", properties( "0.##", es ) ), 3.14 ); + assert.equal( parse( "٣٫١٤", properties( "0.##", ar ) ), 3.14 ); + assert.equal( parse( "三.一四", properties( "0.##", zh ) ), 3.14 ); + assert.equal( parse( "3.00", properties( "0.##", en ) ), 3 ); +}); + +QUnit.test( "should parse invalid decimals as NaN", function( assert ) { + assert.deepEqual( parse( "", properties( "0.#", en ) ), NaN ); + assert.deepEqual( parse( "3,14", properties( "0.#", en ) ), NaN ); + assert.deepEqual( parse( "3.14", properties( "0.#", es ) ), NaN ); +}); + +QUnit.test( "should parse zero-padded decimals", function( assert ) { + assert.equal( parse( "12735.0", properties( "0.0", en ) ), 12735 ); + assert.equal( parse( "0.10", properties( "0.00", en ) ), 0.1 ); +}); + +QUnit.test( "should parse trailing decimal separator", function( assert ) { + assert.equal( parse( "1.", properties( "0.0", en ) ), 1 ); + assert.equal( parse( "١٫", properties( "0.0", ar ) ), 1 ); + assert.equal( parse( "1,", properties( "0.0", pt ) ), 1 ); +}); + +QUnit.test( "should parse non-padded decimals", function( assert ) { + assert.equal( parse( ".14159", properties( "0.0", en ) ), 0.14159 ); + assert.equal( parse( ".752", properties( "0.0", en ) ), 0.752 ); + assert.equal( parse( "٫١٤١٥٩", properties( "0.0", ar ) ), 0.14159 ); + assert.equal( parse( ",752", properties( "0.0", pt ) ), 0.752 ); +}); + +QUnit.test( "should parse negative decimal", function( assert ) { + assert.equal( parse( "-3.14", properties( "0.##", en ) ), -3.14 ); + assert.equal( parse( "(3.14)", properties( "0.##;(0.##)", en ) ), -3.14 ); +}); + +QUnit.test( "should not parse too permissive", function( assert ) { + assert.deepEqual( parse( "3.14", properties( "0.##", ru ) ), NaN ); +}); + +/** + * Percent + */ + +QUnit.test( "should parse percent", function( assert ) { + assert.equal( parse( "1%", properties( "0%", en ) ), 0.01 ); + assert.equal( parse( "01%", properties( "00%", en ) ), 0.01 ); + assert.equal( parse( "10%", properties( "0%", en ) ), 0.1 ); + assert.equal( parse( "50%", properties( "#0%", en ) ), 0.5 ); + assert.equal( parse( "100%", properties( "0%", en ) ), 1 ); + assert.equal( parse( "0.5%", properties( "##0.#%", en ) ), 0.005 ); + assert.equal( parse( "0.5%", properties( "##0.#%", en ) ), 0.005 ); + assert.equal( parse( "%100", properties( "%0", en ) ), 1 ); + assert.deepEqual( parse( "1", properties( "0%", en ) ), NaN ); +}); + +QUnit.test( "should localize percent symbol (%)", function( assert ) { + assert.equal( parse( "٥٠٪", properties( "#0%", ar ) ), 0.5 ); +}); + +QUnit.test( "should parse negative percentage", function( assert ) { + assert.equal( parse( "-10%", properties( "0%", en ) ), -0.1 ); + assert.equal( parse( "(10%)", properties( "0%;(0%)", en ) ), -0.1 ); + assert.equal( parse( "(10)%", properties( "0%;(0)%", en ) ), -0.1 ); +}); + +/** + * Per mille + */ + +QUnit.test( "should parse per mille", function( assert ) { + assert.equal( parse( "1\u2030", properties( "0\u2030", en ) ), 0.001 ); + assert.equal( parse( "01\u2030", properties( "00\u2030", en ) ), 0.001 ); + assert.equal( parse( "10\u2030", properties( "0\u2030", en ) ), 0.01 ); + assert.equal( parse( "100\u2030", properties( "0\u2030", en ) ), 0.1 ); + assert.equal( parse( "500\u2030", properties( "#0\u2030", en ) ), 0.5 ); + assert.equal( parse( "1000\u2030", properties( "0\u2030", en ) ), 1 ); + assert.equal( parse( "0.5\u2030", properties( "##0.#\u2030", en ) ), 0.0005 ); + assert.equal( parse( "0.5\u2030", properties( "##0.#\u2030", en ) ), 0.0005 ); + assert.equal( parse( "500\u2030", properties( "#0‰", en ) ), 0.5 ); + assert.equal( parse( "500‰", properties( "#0‰", en ) ), 0.5 ); + assert.equal( parse( "٥٠٠؉", properties( "#0\u2030", ar ) ), 0.5 ); +}); + +QUnit.test( "should parse negative mille", function( assert ) { + assert.equal( parse( "-1\u2030", properties( "0\u2030", en ) ), -0.001 ); + assert.equal( parse( "(1\u2030)", properties( "0\u2030;(0\u2030)", en ) ), -0.001 ); + assert.equal( parse( "(1)\u2030", properties( "0\u2030;(0)\u2030", en ) ), -0.001 ); +}); + +/** + * Infinite number + */ +QUnit.test( "should parse infinite numbers", function( assert ) { + assert.equal( parse( "∞", properties( "0", en ) ), Infinity ); + assert.equal( parse( "-∞", properties( "0", en ) ), -Infinity ); + assert.equal( parse( "(∞)", properties( "0;(0)", en ) ), -Infinity ); +}); + +/** + * NaN + */ +QUnit.test( "should parse NaN", function( assert ) { + assert.deepEqual( parse( "NaN", properties( "0", en ) ), NaN ); +}); + +/** + * Prefix + */ +QUnit.test( "should parse invalid prefix as NaN", function( assert ) { + assert.deepEqual( parse( "invalid", properties( "0", en ) ), NaN ); + assert.deepEqual( parse( "garbage123", properties( "0", en ) ), NaN ); +}); + +/** + * Suffix + */ +QUnit.test( "should parse invalid suffix as NaN", function( assert ) { + assert.deepEqual( parse( "123garbage", properties( "0", en ) ), NaN ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/pattern-properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/pattern-properties.js new file mode 100644 index 000000000..8e1eed3ef --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/number/pattern-properties.js @@ -0,0 +1,83 @@ +define([ + "cldr", + "src/number/format-properties", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, properties, enNumbers, likelySubtags ) { + +var en; + +Cldr.load( enNumbers, likelySubtags ); + +en = new Cldr( "en" ); + +QUnit.module( "Number Pattern Properties" ); + +QUnit.test( "should return prefix", function( assert ) { + assert.equal( properties( "0", en )[ 0 ], "" ); + assert.equal( properties( "foo 0", en )[ 0 ], "foo " ); + assert.equal( properties( "-0", en )[ 0 ], "-" ); + assert.equal( properties( "'-'0", en )[ 0 ], "'-'" ); + assert.equal( properties( "-'$'0", en )[ 0 ], "-'$'" ); +}); + +QUnit.test( "should return minimumIntegerDigits", function( assert ) { + assert.equal( properties( "0", en )[ 2 ], 1 ); + assert.equal( properties( "#,##0", en )[ 2 ], 1 ); + assert.equal( properties( "00", en )[ 2 ], 2 ); + assert.equal( properties( "#0.00", en )[ 2 ], 1 ); +}); + +QUnit.test( "should return minimumFractionDigits", function( assert ) { + assert.equal( properties( "0", en )[ 3 ], 0 ); + assert.equal( properties( "0.##", en )[ 3 ], 0 ); + assert.equal( properties( "0.0#", en )[ 3 ], 1 ); +}); + +QUnit.test( "should return maximumFractionDigits", function( assert ) { + assert.equal( properties( "0", en )[ 4 ], 0 ); + assert.equal( properties( "0.##", en )[ 4 ], 2 ); + assert.equal( properties( "0.0#", en )[ 4 ], 2 ); +}); + +QUnit.test( "should return minimumSignificantDigits", function( assert ) { + assert.equal( properties( "0", en )[ 5 ], undefined ); + assert.equal( properties( "0.##", en )[ 5 ], undefined ); + assert.equal( properties( "@##", en )[ 5 ], 1 ); + assert.equal( properties( "#,#@@", en )[ 5 ], 2 ); +}); + +QUnit.test( "should return maximumSignificantDigits", function( assert ) { + assert.equal( properties( "0", en )[ 6 ], undefined ); + assert.equal( properties( "0.##", en )[ 6 ], undefined ); + assert.equal( properties( "@##", en )[ 6 ], 3 ); + assert.equal( properties( "#,#@@", en )[ 6 ], 2 ); +}); + +QUnit.test( "should return roundIncrement", function( assert ) { + assert.equal( properties( "0.##", en )[ 7 ], undefined ); + assert.equal( properties( "0.05", en )[ 7 ], 0.05 ); + assert.equal( properties( "0.002", en )[ 7 ], 0.002 ); +}); + +QUnit.test( "should return primaryGroupingSize", function( assert ) { + assert.equal( properties( "0.##", en )[ 8 ], undefined ); + assert.equal( properties( "#,##0.##", en )[ 8 ], 3 ); + assert.equal( properties( "#,##,##0.##", en )[ 8 ], 3 ); +}); + +QUnit.test( "should return secondaryGroupingSize", function( assert ) { + assert.equal( properties( "0.##", en )[ 9 ], undefined ); + assert.equal( properties( "#,##0.##", en )[ 9 ], undefined ); + assert.equal( properties( "#,##,##0.##", en )[ 9 ], 2 ); +}); + +QUnit.test( "should return suffix", function( assert ) { + assert.equal( properties( "0.##", en )[ 10 ], "" ); + assert.equal( properties( "0.## bar", en )[ 10 ], " bar" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/relative-time/format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/relative-time/format.js new file mode 100644 index 000000000..ffc79c5ae --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/relative-time/format.js @@ -0,0 +1,112 @@ +define([ + "cldr", + "src/relative-time/format", + "src/relative-time/properties", + "json!cldr-data/main/en/dateFields.json", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, format, properties, enDateFields, likelySubtags ) { + +var cldr; + +Cldr.load( enDateFields ); +Cldr.load( likelySubtags ); + +cldr = new Cldr( "en" ); + +QUnit.module( "Relative Time Format" ); + +function mockNumberFormatter(assert, expectedValue) { + return function( value ) { + assert.equal( value, expectedValue ); + return expectedValue.toString(); + }; +} + +function mockPluralGenerator(plural) { + return function() { + return plural; + }; +} + +QUnit.test( "should format number in past", function( assert ) { + assert.equal( + format( + -7, + mockNumberFormatter( assert, 7 ), + mockPluralGenerator( "other" ), + properties( "month", cldr, {} ) + ), + "7 months ago" + ); +}); + +QUnit.test( "should format number in future", function( assert ) { + assert.equal( + format( + 7, + mockNumberFormatter( assert, 7 ), + mockPluralGenerator( "other" ), + properties( "month", cldr, {} ) + ), + "in 7 months" + ); +}); + +QUnit.test( "should format using word if possible", function( assert ) { + function mockNumberFormatter() { + assert.ok( false, "no need to call number formatter" ); + } + function mockPluralGenerator() { + assert.ok( false, "no need to call plural generator" ); + } + assert.equal( + format( 1, mockNumberFormatter, mockPluralGenerator, properties( "month", cldr, {} ) ), + "next month" + ); +}); + +QUnit.test( "should format numerically if relative-type is absent", function( assert ) { + assert.equal( + format( + 1, + mockNumberFormatter( assert, 1 ), + mockPluralGenerator( "one" ), { + "relative-type-0": "this month", + "relativeTime-type-future": { + "relativeTimePattern-count-one": "in {0} month", + "relativeTimePattern-count-other": "in {0} months" + }, + "relativeTime-type-past": { + "relativeTimePattern-count-one": "{0} month ago", + "relativeTimePattern-count-other": "{0} months ago" + } + } + ), + "in 1 month" + ); +}); + +QUnit.test( "should format 0 as the past if no relative option is available", function( assert ) { + assert.equal( + format( + 0, + mockNumberFormatter( assert, 0 ), + mockPluralGenerator( "other" ), { + "relativeTime-type-future": { + "relativeTimePattern-count-one": "in {0} month", + "relativeTimePattern-count-other": "in {0} months" + }, + "relativeTime-type-past": { + "relativeTimePattern-count-one": "{0} month ago", + "relativeTimePattern-count-other": "{0} months ago" + } + } + ), + "0 months ago" + ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/relative-time/properties.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/relative-time/properties.js new file mode 100644 index 000000000..160836107 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/relative-time/properties.js @@ -0,0 +1,89 @@ +define([ + "cldr", + "src/relative-time/properties", + "json!cldr-data/main/en/dateFields.json", + "json!cldr-data/main/de/dateFields.json", + "json!cldr-data/supplemental/likelySubtags.json", + + "cldr/event", + "cldr/supplemental" +], function( Cldr, properties, enDateFields, deDateFields, likelySubtags ) { + +var cldr, de; + +Cldr.load( enDateFields ); +Cldr.load( deDateFields ); +Cldr.load( likelySubtags ); + +cldr = new Cldr( "en" ); +de = new Cldr( "de" ); + +QUnit.module( "Relative Time Properties" ); + +QUnit.test( "should return month info in english", function( assert ) { + assert.deepEqual( properties( "month", cldr, {} ), { + "relative-type--1": "last month", + "relative-type-0": "this month", + "relative-type-1": "next month", + "relativeTime-type-future": { + "relativeTimePattern-count-one": "in {0} month", + "relativeTimePattern-count-other": "in {0} months" + }, + "relativeTime-type-past": { + "relativeTimePattern-count-one": "{0} month ago", + "relativeTimePattern-count-other": "{0} months ago" + } + }); +}); + +QUnit.test( "should return complete day info in german", function( assert ) { + assert.deepEqual( properties( "day", de, {} ), { + "relative-type--1": "gestern", + "relative-type--2": "vorgestern", + "relative-type-0": "heute", + "relative-type-1": "morgen", + "relative-type-2": "übermorgen", + "relativeTime-type-future": { + "relativeTimePattern-count-one": "in {0} Tag", + "relativeTimePattern-count-other": "in {0} Tagen" + }, + "relativeTime-type-past": { + "relativeTimePattern-count-one": "vor {0} Tag", + "relativeTimePattern-count-other": "vor {0} Tagen" + } + }); +}); + +QUnit.test( "should return short info when requested", function( assert ) { + assert.deepEqual( properties( "month", cldr, { form: "short" } ), { + "relative-type--1": "last mo.", + "relative-type-0": "this mo.", + "relative-type-1": "next mo.", + "relativeTime-type-future": { + "relativeTimePattern-count-one": "in {0} mo.", + "relativeTimePattern-count-other": "in {0} mo." + }, + "relativeTime-type-past": { + "relativeTimePattern-count-one": "{0} mo. ago", + "relativeTimePattern-count-other": "{0} mo. ago" + } + }); +}); + +QUnit.test( "should return narrow info when requested", function( assert ) { + assert.deepEqual( properties( "month", cldr, { form: "narrow" } ), { + "relative-type--1": "last mo.", + "relative-type-0": "this mo.", + "relative-type-1": "next mo.", + "relativeTime-type-future": { + "relativeTimePattern-count-one": "in {0} mo.", + "relativeTimePattern-count-other": "in {0} mo." + }, + "relativeTime-type-past": { + "relativeTimePattern-count-one": "{0} mo. ago", + "relativeTimePattern-count-other": "{0} mo. ago" + } + }); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/unit/format.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/unit/format.js new file mode 100644 index 000000000..3a77c5c30 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/unit/format.js @@ -0,0 +1,169 @@ +define([ + "cldr", + "src/core", + "src/unit/format", + "src/unit/properties", + "json!cldr-data/main/en/units.json", + "json!cldr-data/main/ja/units.json", + "json!cldr-data/supplemental/likelySubtags.json" +], function( Cldr, Globalize, formatUnit, unitProperties, enUnits, jaUnits, likelySubtags ) { + +var cldr, globalize, units, pluralGenerator; + +QUnit.module( "Unit Format" ); + +units = { + en: enUnits, + ja: jaUnits +}; + +pluralGenerator = { + en: function oneOrOtherPluralGenerator( plural ) { + if ( plural === 1 ) { + return "one"; + } else { + return "other"; + } + }, + ja: function otherPluralGenerator() { + return "other"; + } +}; + +function stubNumberFormatter( number ) { + return number.toString(); +} + +QUnit.assert.unitFormat = function( value, unit, options, expected, language ) { + language = language || "en"; + + Cldr.load( units[ language ] ); + Cldr.load( likelySubtags ); + + globalize = new Globalize( language ); + cldr = globalize.cldr; + + var unitProps = unitProperties( unit, options.form, cldr ); + + this.equal( + formatUnit( value, options.numberFormatter || stubNumberFormatter, pluralGenerator[ language ], unitProps ), + expected + ); +}; + +QUnit.test( "Long form", function( assert ) { + assert.unitFormat( 1, "millisecond", { form: "long" }, "1 millisecond" ); + assert.unitFormat( 2, "millisecond", { form: "long" }, "2 milliseconds" ); + assert.unitFormat( 1, "second", { form: "long" }, "1 second" ); + assert.unitFormat( 2, "second", { form: "long" }, "2 seconds" ); + assert.unitFormat( 1, "minute", { form: "long" }, "1 minute" ); + assert.unitFormat( 2, "minute", { form: "long" }, "2 minutes" ); + assert.unitFormat( 1, "hour", { form: "long" }, "1 hour" ); + assert.unitFormat( 2, "hour", { form: "long" }, "2 hours" ); + assert.unitFormat( 1, "day", { form: "long" }, "1 day" ); + assert.unitFormat( 2, "day", { form: "long" }, "2 days" ); + assert.unitFormat( 1, "week", { form: "long" }, "1 week" ); + assert.unitFormat( 2, "week", { form: "long" }, "2 weeks" ); + assert.unitFormat( 1, "month", { form: "long" }, "1 month" ); + assert.unitFormat( 2, "month", { form: "long" }, "2 months" ); + assert.unitFormat( 1, "year", { form: "long" }, "1 year" ); + assert.unitFormat( 2, "year", { form: "long" }, "2 years" ); +}); + +QUnit.test( "Short form", function( assert ) { + assert.unitFormat( 1, "millisecond", { form: "short" }, "1 ms" ); + assert.unitFormat( 2, "millisecond", { form: "short" }, "2 ms" ); + assert.unitFormat( 1, "second", { form: "short" }, "1 sec" ); + assert.unitFormat( 2, "second", { form: "short" }, "2 sec" ); + assert.unitFormat( 1, "minute", { form: "short" }, "1 min" ); + assert.unitFormat( 2, "minute", { form: "short" }, "2 min" ); + assert.unitFormat( 1, "hour", { form: "short" }, "1 hr" ); + assert.unitFormat( 2, "hour", { form: "short" }, "2 hr" ); + assert.unitFormat( 1, "day", { form: "short" }, "1 day" ); + assert.unitFormat( 2, "day", { form: "short" }, "2 days" ); + assert.unitFormat( 1, "week", { form: "short" }, "1 wk" ); + assert.unitFormat( 2, "week", { form: "short" }, "2 wks" ); + assert.unitFormat( 1, "month", { form: "short" }, "1 mth" ); + assert.unitFormat( 2, "month", { form: "short" }, "2 mths" ); + assert.unitFormat( 1, "year", { form: "short" }, "1 yr" ); + assert.unitFormat( 2, "year", { form: "short" }, "2 yrs" ); +}); + +QUnit.test( "Narrow form", function( assert ) { + assert.unitFormat( 1, "millisecond", { form: "narrow" }, "1ms" ); + assert.unitFormat( 2, "millisecond", { form: "narrow" }, "2ms" ); + assert.unitFormat( 1, "second", { form: "narrow" }, "1s" ); + assert.unitFormat( 2, "second", { form: "narrow" }, "2s" ); + assert.unitFormat( 1, "minute", { form: "narrow" }, "1m" ); + assert.unitFormat( 2, "minute", { form: "narrow" }, "2m" ); + assert.unitFormat( 1, "hour", { form: "narrow" }, "1h" ); + assert.unitFormat( 2, "hour", { form: "narrow" }, "2h" ); + assert.unitFormat( 1, "day", { form: "narrow" }, "1d" ); + assert.unitFormat( 2, "day", { form: "narrow" }, "2d" ); + assert.unitFormat( 1, "week", { form: "narrow" }, "1w" ); + assert.unitFormat( 2, "week", { form: "narrow" }, "2w" ); + assert.unitFormat( 1, "month", { form: "narrow" }, "1m" ); + assert.unitFormat( 2, "month", { form: "narrow" }, "2m" ); + assert.unitFormat( 1, "year", { form: "narrow" }, "1y" ); + assert.unitFormat( 2, "year", { form: "narrow" }, "2y" ); +}); + +QUnit.test( "Compound form (long)", function( assert ) { + assert.unitFormat( 1, "speed-mile-per-hour", { form: "long" }, "1 mile per hour" ); + assert.unitFormat( 100, "speed-mile-per-hour", { form: "long" }, "100 miles per hour" ); + assert.unitFormat( 1, "consumption-mile-per-gallon", { form: "long" }, "1 mile per gallon" ); + assert.unitFormat( 100, "consumption-mile-per-gallon", { form: "long" }, "100 miles per gallon" ); +}); + +QUnit.test( "Compound form (without category)", function( assert ) { + assert.unitFormat( 1, "mile-per-hour", { form: "long" }, "1 mile per hour" ); + assert.unitFormat( 100, "mile-per-hour", { form: "long" }, "100 miles per hour" ); +}); + +QUnit.test( "Compound form (without precomputed)", function( assert ) { + assert.unitFormat( 1, "length-foot-per-second", { form: "long" }, "1 foot per second" ); + assert.unitFormat( 100, "length-foot-per-second", { form: "long" }, "100 feet per second" ); + assert.unitFormat( 1, "megabyte-per-second", { form: "narrow" }, "1MB/s" ); + assert.unitFormat( 100, "megabyte-per-second", { form: "narrow" }, "100MB/s" ); + + assert.unitFormat( 1.2345678910, "megabyte-per-second", + { + form: "narrow", + numberFormatter: function( number ) { + return number.toFixed(1); + } + }, + "1.2MB/s" ); +}); + +QUnit.test( "Compound form (short)", function( assert ) { + assert.unitFormat( 1, "speed-mile-per-hour", { form: "short" }, "1 mph" ); + assert.unitFormat( 100, "speed-mile-per-hour", { form: "short" }, "100 mph" ); + assert.unitFormat( 1, "consumption-mile-per-gallon", { form: "short" }, "1 mpg" ); + assert.unitFormat( 100, "consumption-mile-per-gallon", { form: "short" }, "100 mpg" ); +}); + +QUnit.test( "Compound form (narrow)", function( assert ) { + assert.unitFormat( 1, "speed-mile-per-hour", { form: "narrow" }, "1mph" ); + assert.unitFormat( 100, "speed-mile-per-hour", { form: "narrow" }, "100mph" ); + assert.unitFormat( 1, "consumption-mile-per-gallon", { form: "narrow" }, "1mpg" ); + assert.unitFormat( 100, "consumption-mile-per-gallon", { form: "narrow" }, "100mpg" ); +}); + +QUnit.test( "Compound form (without precomputed) in language without 'one' unit", function( assert ) { + assert.unitFormat( 1, "length-foot-per-second", { form: "long" }, "1 フィート毎秒", "ja" ); + assert.unitFormat( 100, "length-foot-per-second", { form: "long" }, "100 フィート毎秒", "ja" ); + assert.unitFormat( 1, "megabyte-per-second", { form: "narrow" }, "1MB/秒", "ja" ); + assert.unitFormat( 100, "megabyte-per-second", { form: "narrow" }, "100MB/秒", "ja" ); + + assert.unitFormat( 1.2345678910, "megabyte-per-second", + { + form: "narrow", + numberFormatter: function( number ) { + return number.toFixed(1); + } + }, + "1.2MB/秒", "ja" ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/unit/get.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/unit/get.js new file mode 100644 index 000000000..f048ef2e8 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/unit/get.js @@ -0,0 +1,87 @@ +define([ + "cldr", + "src/unit/get", + "json!cldr-data/main/en/units.json", + "json!cldr-data/supplemental/likelySubtags.json", +], function( Cldr, unitGet, enUnits, likelySubtags ) { + +var cldr; + +Cldr.load( enUnits ); +Cldr.load( likelySubtags ); + +cldr = new Cldr( "en" ); + +QUnit.module( "Unit Get" ); + +QUnit.test( "should get type-unit", function( assert ) { + assert.deepEqual( unitGet( "duration-second", "short", cldr ), { + "displayName": "secs", + "one": "{0} sec", + "other": "{0} sec", + "perUnitPattern": "{0}/s" + }); + assert.deepEqual( unitGet( "duration-second", "long", cldr ), { + "displayName": "seconds", + "one": "{0} second", + "other": "{0} seconds", + "perUnitPattern": "{0} per second" + }); + assert.deepEqual( unitGet( "digital-megabyte", "long", cldr ), { + "displayName": "megabytes", + "one": "{0} megabyte", + "other": "{0} megabytes" + }); +}); + +QUnit.test( "should get unit (when no type is provided)", function( assert ) { + assert.deepEqual( unitGet( "second", "short", cldr ), { + "displayName": "secs", + "one": "{0} sec", + "other": "{0} sec", + "perUnitPattern": "{0}/s" + }); + assert.deepEqual( unitGet( "second", "long", cldr ), { + "displayName": "seconds", + "one": "{0} second", + "other": "{0} seconds", + "perUnitPattern": "{0} per second" + }); + assert.deepEqual( unitGet( "megabyte", "long", cldr ), { + "displayName": "megabytes", + "one": "{0} megabyte", + "other": "{0} megabytes" + }); +}); + +QUnit.test( "should get precomputed compound-unit", function( assert ) { + assert.deepEqual( unitGet( "meter-per-second", "short", cldr ), { + "displayName": "meters/sec", + "one": "{0} m/s", + "other": "{0} m/s" + }); +}); + +QUnit.test( "should compute compound-unit", function( assert ) { + assert.deepEqual( unitGet( "foot-per-second", "short", cldr ), [{ + "displayName": "feet", + "one": "{0} ft", + "other": "{0} ft", + "perUnitPattern": "{0}/ft" + }, { + "displayName": "secs", + "one": "{0} sec", + "other": "{0} sec", + "perUnitPattern": "{0}/s" + }]); +}); + +QUnit.test( "should get precomputed compount-unit with '/'", function( assert ) { + assert.deepEqual( unitGet( "meter/second", "short", cldr ), { + "displayName": "meters/sec", + "one": "{0} m/s", + "other": "{0} m/s" + }); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/object/invert.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/object/invert.js new file mode 100644 index 000000000..5858f1f19 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/object/invert.js @@ -0,0 +1,24 @@ +define([ + "src/util/object/invert", +], function( objectInvert ) { + +QUnit.module( "Util object invert" ); + +QUnit.test( "it should invert an object", function( assert ) { + assert.deepEqual( + objectInvert({ a: "x", b: "y" }), + { x: "a", y: "b" } + ); +}); + +QUnit.test( "it should invert an object using a custom setter", function( assert ) { + assert.deepEqual( + objectInvert({ a: "x", b: "y" }, function( object, key, value ) { + object[ value ] = "foo-" + key; + return object; + }), + { x: "foo-a", y: "foo-b" } + ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/regexp/escape.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/regexp/escape.js new file mode 100644 index 000000000..ba6763711 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/regexp/escape.js @@ -0,0 +1,18 @@ +define([ + "src/util/regexp/escape", +], function( regexpEscape ) { + +QUnit.module( "Util regexp escape" ); + +QUnit.test( "it shouldn't escape not-reserved characters", function( assert ) { + assert.equal( regexpEscape( "foo" ), "foo" ); +}); + +QUnit.test( "it should escape reserved characters", function( assert ) { + assert.equal( + regexpEscape( ".*+?^=!:${}()|\[\]\/\\" ), + "\\.\\*\\+\\?\\^\\=\\!\\:\\$\\{\\}\\(\\)\\|\\[\\]\\/\\\\" + ); +}); + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/regexp/not-s-and-z.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/regexp/not-s-and-z.js new file mode 100644 index 000000000..400fbbf4c --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/regexp/not-s-and-z.js @@ -0,0 +1,56 @@ +define([ + "src/util/regexp/not-s-and-z", +], function( regexpNotSAndZ ) { + + QUnit.module( "Util regexp ^S&^Z" ); + + [ + { + symbol: "௹", + category: "Sc" + }, + { + symbol: "꜏", + category: "Sk" + }, + { + symbol: "∇", + category: "Sm" + }, + { + symbol: "❤", + category: "So" + }, + { + symbol: "\u2028", + category: "Zl" + }, + { + symbol: "\u2029", + category: "Zp" + }, + { + symbol: "\u2003", + category: "Zs" + } + ].forEach(function( c ) { + QUnit.test("it should NOT match category " + c.category, function( assert ) { + assert.notOk(regexpNotSAndZ.test(c.symbol)); + }); + }); + + [ + { + symbol: "𒐖", + category: "Nl" + }, + { + symbol: "א", + category: "Lo" + } + ].forEach(function( c ) { + QUnit.test("it should match category " + c.category, function( assert ) { + assert.ok(regexpNotSAndZ.test(c.symbol)); + }); + }); +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/regexp/not-s.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/regexp/not-s.js new file mode 100644 index 000000000..882419920 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/unit/util/regexp/not-s.js @@ -0,0 +1,56 @@ +define([ + "src/util/regexp/not-s", +], function( regexpNotS ) { + + QUnit.module( "Util regexp ^S" ); + + [ + { + symbol: "௹", + category: "Sc" + }, + { + symbol: "꜏", + category: "Sk" + }, + { + symbol: "∇", + category: "Sm" + }, + { + symbol: "❤", + category: "So" + } + ].forEach(function( c ) { + QUnit.test("it should NOT match category " + c.category, function( assert ) { + assert.notOk(regexpNotS.test(c.symbol)); + }); + }); + + [ + { + symbol: "𒐖", + category: "Nl" + }, + { + symbol: "א", + category: "Lo" + }, + { + symbol: "\u2028", + category: "Zl" + }, + { + symbol: "\u2029", + category: "Zp" + }, + { + symbol: "\u2003", + category: "Zs" + } + ].forEach(function( c ) { + QUnit.test("it should match category " + c.category, function( assert ) { + assert.ok(regexpNotS.test(c.symbol)); + }); + }); +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/util.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/util.js new file mode 100644 index 000000000..e503aeca0 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/globalize-master/test/util.js @@ -0,0 +1,222 @@ +define([ + "cldr" +], function( Cldr ) { + +var allTypes, FakeDate; + +allTypes = { + array: [], + cldr: new Cldr( "en" ), + date: new Date(), + "function": Foo, + "null": null, + number: 7, + plainObject: {}, + string: "foo" +}; + +FakeDate = (function( Date ) { + function FakeDate() { + var date; + if ( arguments.length === 0 ) { + return FakeDate.today; + } + if ( arguments.length === 1 ) { + date = new Date( arguments[ 0 ] ); + } else if ( arguments.length === 2 ) { + date = new Date( arguments[ 0 ], arguments[ 1 ] ); + } else if ( arguments.length === 3 ) { + date = new Date( arguments[ 0 ], arguments[ 1 ], arguments[ 2 ] ); + } else if ( arguments.length === 4 ) { + date = new Date( arguments[ 0 ], arguments[ 1 ], arguments[ 2 ], arguments[ 3 ] ); + } else if ( arguments.length === 5 ) { + date = new Date( arguments[ 0 ], arguments[ 1 ], arguments[ 2 ], arguments[ 3 ], arguments[ 4 ] ); + } else if ( arguments.length === 6 ) { + date = new Date( arguments[ 0 ], arguments[ 1 ], arguments[ 2 ], arguments[ 3 ], arguments[ 4 ], arguments[ 5 ] ); + } else if ( arguments.length === 7 ) { + date = new Date( arguments[ 0 ], arguments[ 1 ], arguments[ 2 ], arguments[ 3 ], arguments[ 4 ], arguments[ 5 ], arguments[ 6 ] ); + } + + date.__proto__ = FakeDate.prototype; + return date; + } + FakeDate.prototype = FakeDate.today = new Date(); + return FakeDate; +})( Date ); + +function assertParameterType( assert, type, name, fn ) { + Object.keys( allTypes ).filter( not( type ) ).forEach(function( type ) { + assert.throws( fn( allTypes[ type ] ), function E_INVALID_PAR_TYPE( error ) { + return error.code === "E_INVALID_PAR_TYPE" && + error.name === name && + "value" in error && + "expected" in error; + }, "Expected \"E_INVALID_PAR_TYPE: Invalid `" + name + "` parameter type (" + type + ")\" to be thrown" ); + }); +} + +function Foo() {} + +/** + * not() should be used with Array.prototype.filter(). + * + * Return true only if b is different than any a. + * + * For example: + * [ 1, 2, 3 ].filter( not( 2 ) ) => [ 1, 3 ] + * [ 1, 2, 3 ].filter( not( [ 2, 3 ] ) ) => [ 1 ] + */ +function not( a ) { + return function( b ) { + if ( Array.isArray( a ) ) { + return !a.some(function( a ) { + return a === b; + }); + } + return a !== b; + }; +} + +return { + + /** + * CLDR content assertion + */ + assertCldrContent: function( assert, fn ) { + assert.throws( fn, function E_MISSING_CLDR( error ) { + return error.code === "E_MISSING_CLDR" && + "path" in error; + }, "Expected \"E_MISSING_CLDR\" to be thrown" ); + }, + + /** + * Default locale assertion + */ + assertDefaultLocalePresence: function( assert, fn) { + assert.throws( fn, function E_DEFAULT_LOCALE_NOT_DEFINED( error ) { + return error.code === "E_DEFAULT_LOCALE_NOT_DEFINED"; + }, "Expected \"E_DEFAULT_LOCALE_NOT_DEFINED\" to be thrown" ); + }, + + /** + * Parameter assertions + */ + assertArrayParameter: function( assert, name, fn ) { + assertParameterType( assert, "array", name, fn ); + }, + + assertCldrJsonDataParameter: function( assert, name, fn ) { + assertParameterType( assert, [ "array", "cldr", "plainObject" ], name, fn ); + }, + + assertCurrencyParameter: function( assert, name, fn ) { + assertParameterType( assert, [ "string" ], name, fn ); + assert.throws( fn( "ABCD" ), function E_INVALID_PAR_TYPE( error ) { + return error.code === "E_INVALID_PAR_TYPE" && + error.name === name && + "value" in error && + "expected" in error; + }, "Expected \"E_INVALID_PAR_TYPE: Invalid `" + name + "` parameter type (string.length > 3)\" to be thrown" ); + }, + + assertDateParameter: function( assert, name, fn ) { + assertParameterType( assert, "date", name, fn ); + }, + + assertLocaleParameter: function( assert, name, fn ) { + assertParameterType( assert, [ "cldr", "string" ], name, fn ); + }, + + assertLocaleOrNullParameter: function( assert, name, fn ) { + assertParameterType( assert, [ "cldr", "null", "string" ], name, fn ); + }, + + assertMessagePresence: function( assert, path, fn ) { + assert.throws( fn, function E_MISSING_PARAMETER( error ) { + return error.code === "E_MISSING_MESSAGE" && + error.path === path; + }, "Expected \"E_MISSING_MESSAGE: Missing required message content `" + path + "`\" to be thrown" ); + }, + + assertMessageType: function( assert, path, fn ) { + Object.keys( allTypes ).filter( not([ "array", "string" ]) ).forEach(function( type ) { + assert.throws( fn( allTypes[ type ] ), function E_INVALID_MESSAGE( error ) { + return error.code === "E_INVALID_MESSAGE" && + error.path === path && + "expected" in error; + }, "Expected \"E_INVALID_MESSAGE: Invalid message content `" + path + "`\" to be thrown. (" + type + ")" ); + }); + }, + + assertMessageVariablesType: function( assert, name, fn ) { + assertParameterType( assert, [ "array", "cldr", "number", "plainObject", "string" ], name, fn ); + }, + + assertNumberParameter: function( assert, name, fn ) { + assertParameterType( assert, "number", name, fn ); + }, + + assertParameterMissingKey: function( assert, name, key, fn ) { + assert.throws( fn, function E_PAR_MISSING_KEY( error ) { + return error.code === "E_PAR_MISSING_KEY" && + error.name === name && error.key === key; + }, "Expected \"E_PAR_MISSING_KEY: Parameter `" + name + "` misses key `" + + key + "`\" to be thrown" ); + }, + + assertParameterPresence: function( assert, name, fn ) { + assert.throws( fn, function E_MISSING_PARAMETER( error ) { + return error.code === "E_MISSING_PARAMETER" && + error.name === name; + }, "Expected \"E_MISSING_PARAMETER: Missing `" + name + "` parameter\" to be thrown" ); + }, + + assertParameterRange: function( assert, min, max, fn ) { + [ min - 1, max + 1 ].forEach(function( num ) { + assert.throws(function() { + fn( num ); + }, function E_OUT_OF_RANGE( error ) { + return error.code === "E_PAR_OUT_OF_RANGE"; + }, "Expected \"E_PAR_OUT_OF_RANGE error to be thrown testing " + num ); + }); + }, + + assertPathParameter: function( assert, name, fn ) { + assertParameterType( assert, [ "array", "string" ], name, fn ); + }, + + assertPlainObjectParameter: function( assert, name, fn ) { + assertParameterType( assert, [ "cldr", "plainObject" ], name, fn ); + }, + + assertPluralFormatValueParameter: function( assert, name, fn ) { + assertParameterType( assert, [ "string", "number" ], name, fn ); + }, + + assertStringParameter: function( assert, name, fn ) { + assertParameterType( assert, "string", name, fn ); + }, + + /** + * Etc + */ + assertRuntimeBind: function( assert, formatterOrParser, runtimeKey, generatorString, runtimeArgsFn ) { + assert.equal( typeof formatterOrParser, "function" ); + assert.ok( "runtimeKey" in formatterOrParser ); + assert.equal( formatterOrParser.runtimeKey, runtimeKey ); + assert.ok( "generatorString" in formatterOrParser ); + assert.equal( typeof formatterOrParser.generatorString, "function" ); + assert.equal( formatterOrParser.generatorString(), generatorString ); + assert.ok( "runtimeArgs" in formatterOrParser ); + runtimeArgsFn( formatterOrParser.runtimeArgs ); + }, + + resetCldrContent: function() { + Cldr._resolved = {}; + Cldr._raw = {}; + }, + + FakeDate: FakeDate +}; + +}); diff --git a/BeWoPlanerMobil/Scripts/devexpress-scripts/knockout-3.5.1.js b/BeWoPlanerMobil/Scripts/devexpress-scripts/knockout-3.5.1.js new file mode 100644 index 000000000..d7520e3b5 --- /dev/null +++ b/BeWoPlanerMobil/Scripts/devexpress-scripts/knockout-3.5.1.js @@ -0,0 +1,139 @@ +/*! + * Knockout JavaScript library v3.5.1 + * (c) The Knockout.js team - http://knockoutjs.com/ + * License: MIT (http://www.opensource.org/licenses/mit-license.php) + */ + +(function() {(function(n){var A=this||(0,eval)("this"),w=A.document,R=A.navigator,v=A.jQuery,H=A.JSON;v||"undefined"===typeof jQuery||(v=jQuery);(function(n){"function"===typeof define&&define.amd?define(["exports","require"],n):"object"===typeof exports&&"object"===typeof module?n(module.exports||exports):n(A.ko={})})(function(S,T){function K(a,c){return null===a||typeof a in W?a===c:!1}function X(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function Y(b,c){var d;return function(){clearTimeout(d); +d=a.a.setTimeout(b,c)}}function Z(a,c){c&&"change"!==c?"beforeChange"===c?this.pc(a):this.gb(a,c):this.qc(a)}function aa(a,c){null!==c&&c.s&&c.s()}function ba(a,c){var d=this.qd,e=d[r];e.ra||(this.Qb&&this.mb[c]?(d.uc(c,a,this.mb[c]),this.mb[c]=null,--this.Qb):e.I[c]||d.uc(c,a,e.J?{da:a}:d.$c(a)),a.Ja&&a.gd())}var a="undefined"!==typeof S?S:{};a.b=function(b,c){for(var d=b.split("."),e=a,f=0;fa.a.A(c,b)&&c.push(b)});return c},Mb:function(a, +b,c){var d=[];if(a)for(var e=0,l=a.length;ee?d&&b.push(c):d||b.splice(e,1)},Ba:g,extend:c,setPrototypeOf:d,Ab:g?d:c,P:b,Ga:function(a,b,c){if(!a)return a;var d={},e;for(e in a)f.call(a,e)&&(d[e]= +b.call(c,a[e],e,a));return d},Tb:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},Yb:function(b){b=a.a.la(b);for(var c=(b[0]&&b[0].ownerDocument||w).createElement("div"),d=0,e=b.length;dp?a.setAttribute("selected",b):a.selected=b},Db:function(a){return null===a||a===n?"":a.trim? +a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},vd:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(1!==a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},Sb:function(b){return a.a.vd(b,b.ownerDocument.documentElement)},kd:function(b){return!!a.a.Lb(b,a.a.Sb)},R:function(a){return a&& +a.tagName&&a.tagName.toLowerCase()},Ac:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Ac(b),c)},Gc:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},B:function(b,c,d){var e=a.a.Ac(d);d=l[c];if(a.options.useOnlyNativeEvents||d||!v)if(d||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var k=function(a){e.call(b,a)},f="on"+c;b.attachEvent(f, +k);a.a.K.za(b,function(){b.detachEvent(f,k)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else b.addEventListener(c,e,!1);else t||(t="function"==typeof v(b).on?"on":"bind"),v(b)[t](c,e)},Fb:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var d;"input"===a.a.R(b)&&b.type&&"click"==c.toLowerCase()?(d=b.type,d="checkbox"==d||"radio"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if("function"==typeof w.createEvent)if("function"== +typeof b.dispatchEvent)d=w.createEvent(k[c]||"HTMLEvents"),d.initEvent(c,!0,!0,A,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error("The supplied element doesn't support dispatchEvent");else if(d&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");else v(b).trigger(c)},f:function(b){return a.O(b)?b():b},bc:function(b){return a.O(b)?b.v():b},Eb:function(b,c,d){var l;c&&("object"===typeof b.classList? +(l=b.classList[d?"add":"remove"],a.a.D(c.match(q),function(a){l.call(b.classList,a)})):"string"===typeof b.className.baseVal?e(b.className,"baseVal",c,d):e(b,"className",c,d))},Bb:function(b,c){var d=a.a.f(c);if(null===d||d===n)d="";var e=a.h.firstChild(b);!e||3!=e.nodeType||a.h.nextSibling(e)?a.h.va(b,[b.ownerDocument.createTextNode(d)]):e.data=d;a.a.Ad(b)},Yc:function(a,b){a.name=b;if(7>=p)try{var c=a.name.replace(/[&<>'"]/g,function(a){return"&#"+a.charCodeAt(0)+";"});a.mergeAttributes(w.createElement(""),!1)}catch(d){}},Ad:function(a){9<=p&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},wd:function(a){if(p){var b=a.style.width;a.style.width=0;a.style.width=b}},Pd:function(b,c){b=a.a.f(b);c=a.a.f(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},la:function(a){for(var b=[],c=0,d=a.length;c",""],d=[3,"","
"],e=[1,""],f={thead:c,tbody:c,tfoot:c,tr:[2,"","
"],td:d,th:d,option:e,optgroup:e},g=8>=a.a.W;a.a.ua=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var l=e[0];l.parentNode&&11!==l.parentNode.nodeType;)l=l.parentNode; +l.parentNode&&l.parentNode.removeChild(l)}}else{(e=d)||(e=w);var l=e.parentWindow||e.defaultView||A,p=a.a.Db(c).toLowerCase(),q=e.createElement("div"),t;t=(p=p.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&f[p[1]]||b;p=t[0];t="ignored
"+t[1]+c+t[2]+"
";"function"==typeof l.innerShiv?q.appendChild(l.innerShiv(t)):(g&&e.body.appendChild(q),q.innerHTML=t,g&&q.parentNode.removeChild(q));for(;p--;)q=q.lastChild;e=a.a.la(q.lastChild.childNodes)}return e};a.a.Md=function(b,c){var d=a.a.ua(b, +c);return d.length&&d[0].parentElement||a.a.Yb(d)};a.a.fc=function(b,c){a.a.Tb(b);c=a.a.f(c);if(null!==c&&c!==n)if("string"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.ua(c,b.ownerDocument),e=0;eb){if(5E3<= +++c){h=f;a.a.Gc(Error("'Too much recursion' after processing "+c+" task groups."));break}b=f}try{d()}catch(p){a.a.Gc(p)}}}function c(){b();h=f=e.length=0}var d,e=[],f=0,g=1,h=0;A.MutationObserver?d=function(a){var b=w.createElement("div");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle("foo")}}(c):d=w&&"onreadystatechange"in w.createElement("script")?function(a){var b=w.createElement("script");b.onreadystatechange=function(){b.onreadystatechange=null;w.documentElement.removeChild(b); +b=null;a()};w.documentElement.appendChild(b)}:function(a){setTimeout(a,0)};return{scheduler:d,zb:function(b){f||a.na.scheduler(c);e[f++]=b;return g++},cancel:function(a){a=a-(g-f);a>=h&&ad[0]?p+d[0]: +d[0]),p);for(var p=1===g?p:Math.min(c+(d[1]||0),p),g=c+g-2,h=Math.max(p,g),U=[],L=[],n=2;cc;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.ad(b);return a.a.hc(b,c,d)};d.prototype={constructor:d,save:function(b,c){var d=a.a.A(this.keys, +b);0<=d?this.values[d]=c:(this.keys.push(b),this.values.push(c))},get:function(b){b=a.a.A(this.keys,b);return 0<=b?this.values[b]:n}}})();a.b("toJS",a.ad);a.b("toJSON",a.toJSON);a.Wd=function(b,c,d){function e(c){var e=a.xb(b,d).extend({ma:"always"}),h=e.subscribe(function(a){a&&(h.s(),c(a))});e.notifySubscribers(e.v());return h}return"function"!==typeof Promise||c?e(c.bind(d)):new Promise(e)};a.b("when",a.Wd);(function(){a.w={M:function(b){switch(a.a.R(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__? +a.a.g.get(b,a.c.options.$b):7>=a.a.W?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex]):n;default:return b.value}},cb:function(b,c,d){switch(a.a.R(b)){case "option":"string"===typeof c?(a.a.g.set(b,a.c.options.$b,n),"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=c):(a.a.g.set(b,a.c.options.$b,c),b.__ko__hasDomDataOptionValue__=!0,b.value="number"=== +typeof c?c:"");break;case "select":if(""===c||null===c)c=n;for(var e=-1,f=0,g=b.options.length,h;f=h){c.push(p&&q.length?{key:p,value:q.join("")}:{unknown:p||q.join("")});p=h=0;q=[];continue}}else if(58===u){if(!h&&!p&&1===q.length){p=q.pop();continue}}else if(47===u&&1arguments.length){if(b=w.body,!b)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?"); +}else if(!b||1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");k(q(a,c),b)};a.Dc=function(b){return!b||1!==b.nodeType&&8!==b.nodeType?n:a.Td(b)};a.Ec=function(b){return(b=a.Dc(b))?b.$data:n};a.b("bindingHandlers",a.c);a.b("bindingEvent",a.i);a.b("bindingEvent.subscribe",a.i.subscribe);a.b("bindingEvent.startPossiblyAsyncContentBinding",a.i.Cb);a.b("applyBindings",a.vc);a.b("applyBindingsToDescendants",a.Oa); +a.b("applyBindingAccessorsToNode",a.ib);a.b("applyBindingsToNode",a.ld);a.b("contextFor",a.Dc);a.b("dataFor",a.Ec)})();(function(b){function c(c,e){var k=Object.prototype.hasOwnProperty.call(f,c)?f[c]:b,l;k?k.subscribe(e):(k=f[c]=new a.T,k.subscribe(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,Gd:e};delete f[c];l||e?k.notifySubscribers(b):a.na.zb(function(){k.notifySubscribers(b)})}),l=!0)}function d(a,b){e("getConfig",[a],function(c){c?e("loadComponent",[a,c],function(a){b(a, +c)}):b(null,null)})}function e(c,d,f,l){l||(l=a.j.loaders.slice(0));var g=l.shift();if(g){var q=g[c];if(q){var t=!1;if(q.apply(g,d.concat(function(a){t?f(null):null!==a?f(a):e(c,d,f,l)}))!==b&&(t=!0,!g.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else e(c,d,f,l)}else f(null)}var f={},g={};a.j={get:function(d,e){var f=Object.prototype.hasOwnProperty.call(g,d)?g[d]:b;f?f.Gd?a.u.G(function(){e(f.definition)}): +a.na.zb(function(){e(f.definition)}):c(d,e)},Bc:function(a){delete g[a]},oc:e};a.j.loaders=[];a.b("components",a.j);a.b("components.get",a.j.get);a.b("components.clearCachedDefinition",a.j.Bc)})();(function(){function b(b,c,d,e){function g(){0===--B&&e(h)}var h={},B=2,u=d.template;d=d.viewModel;u?f(c,u,function(c){a.j.oc("loadTemplate",[b,c],function(a){h.template=a;g()})}):g();d?f(c,d,function(c){a.j.oc("loadViewModel",[b,c],function(a){h[m]=a;g()})}):g()}function c(a,b,d){if("function"===typeof b)d(function(a){return new b(a)}); +else if("function"===typeof b[m])d(b[m]);else if("instance"in b){var e=b.instance;d(function(){return e})}else"viewModel"in b?c(a,b.viewModel,d):a("Unknown viewModel value: "+b)}function d(b){switch(a.a.R(b)){case "script":return a.a.ua(b.text);case "textarea":return a.a.ua(b.value);case "template":if(e(b.content))return a.a.Ca(b.content.childNodes)}return a.a.Ca(b.childNodes)}function e(a){return A.DocumentFragment?a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){"string"===typeof b.require? +T||A.require?(T||A.require)([b.require],function(a){a&&"object"===typeof a&&a.Xd&&a["default"]&&(a=a["default"]);c(a)}):a("Uses require, but no AMD loader is present"):c(b)}function g(a){return function(b){throw Error("Component '"+a+"': "+b);}}var h={};a.j.register=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.j.tb(b))throw Error("Component "+b+" is already registered");h[b]=c};a.j.tb=function(a){return Object.prototype.hasOwnProperty.call(h,a)};a.j.unregister=function(b){delete h[b]; +a.j.Bc(b)};a.j.Fc={getConfig:function(b,c){c(a.j.tb(b)?h[b]:null)},loadComponent:function(a,c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if("string"===typeof c)f(a.a.ua(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.la(c.childNodes));else if(c.element)if(c=c.element,A.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if("string"===typeof c){var h=w.getElementById(c);h?f(d(h)):b("Cannot find element with ID "+c)}else b("Unknown element type: "+ +c);else b("Unknown template value: "+c)},loadViewModel:function(a,b,d){c(g(a),b,d)}};var m="createViewModel";a.b("components.register",a.j.register);a.b("components.isRegistered",a.j.tb);a.b("components.unregister",a.j.unregister);a.b("components.defaultLoader",a.j.Fc);a.j.loaders.push(a.j.Fc);a.j.dd=h})();(function(){function b(b,e){var f=b.getAttribute("params");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ga(f,function(c){return a.o(c,null,{l:b})}),g=a.a.Ga(f, +function(c){var e=c.v();return c.ja()?a.o({read:function(){return a.a.f(c())},write:a.Za(e)&&function(a){c()(a)},l:b}):e});Object.prototype.hasOwnProperty.call(g,"$raw")||(g.$raw=f);return g}return{$raw:{}}}a.j.getComponentNameForNode=function(b){var c=a.a.R(b);if(a.j.tb(c)&&(-1!=c.indexOf("-")||"[object HTMLUnknownElement]"==""+b||8>=a.a.W&&b.tagName===c))return c};a.j.tc=function(c,e,f,g){if(1===e.nodeType){var h=a.j.getComponentNameForNode(e);if(h){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component'); +var m={name:h,params:b(e,f)};c.component=g?function(){return m}:m}}return c};var c=new a.ga;9>a.a.W&&(a.j.register=function(a){return function(b){return a.apply(this,arguments)}}(a.j.register),w.createDocumentFragment=function(b){return function(){var c=b(),f=a.j.dd,g;for(g in f);return c}}(w.createDocumentFragment))})();(function(){function b(b,c,d){c=c.template;if(!c)throw Error("Component '"+b+"' has no template");b=a.a.Ca(c);a.h.va(d,b)}function c(a,b,c){var d=a.createViewModel;return d?d.call(a, +b,c):b}var d=0;a.c.component={init:function(e,f,g,h,m){function k(){var a=l&&l.dispose;"function"===typeof a&&a.call(l);q&&q.s();p=l=q=null}var l,p,q,t=a.a.la(a.h.childNodes(e));a.h.Ea(e);a.a.K.za(e,k);a.o(function(){var g=a.a.f(f()),h,u;"string"===typeof g?h=g:(h=a.a.f(g.name),u=a.a.f(g.params));if(!h)throw Error("No component name specified");var n=a.i.Cb(e,m),z=p=++d;a.j.get(h,function(d){if(p===z){k();if(!d)throw Error("Unknown component '"+h+"'");b(h,d,e);var f=c(d,u,{element:e,templateNodes:t}); +d=n.createChildContext(f,{extend:function(a){a.$component=f;a.$componentTemplateNodes=t}});f&&f.koDescendantsComplete&&(q=a.i.subscribe(e,a.i.pa,f.koDescendantsComplete,f));l=f;a.Oa(d,e)}})},null,{l:e});return{controlsDescendantBindings:!0}}};a.h.ea.component=!0})();var V={"class":"className","for":"htmlFor"};a.c.attr={update:function(b,c){var d=a.a.f(c())||{};a.a.P(d,function(c,d){d=a.a.f(d);var g=c.indexOf(":"),g="lookupNamespaceURI"in b&&0=a.a.W&&c in V?(c=V[c],h?b.removeAttribute(c):b[c]=d):h||(g?b.setAttributeNS(g,c,d):b.setAttribute(c,d));"name"===c&&a.a.Yc(b,h?"":d)})}};(function(){a.c.checked={after:["value","attr"],init:function(b,c,d){function e(){var e=b.checked,f=g();if(!a.S.Ya()&&(e||!m&&!a.S.qa())){var k=a.u.G(c);if(l){var q=p?k.v():k,z=t;t=f;z!==f?e&&(a.a.Na(q,f,!0),a.a.Na(q,z,!1)):a.a.Na(q,f,e);p&&a.Za(k)&&k(q)}else h&&(f===n?f=e:e||(f=n)),a.m.eb(k, +d,"checked",f,!0)}}function f(){var d=a.a.f(c()),e=g();l?(b.checked=0<=a.a.A(d,e),t=e):b.checked=h&&e===n?!!d:g()===d}var g=a.xb(function(){if(d.has("checkedValue"))return a.a.f(d.get("checkedValue"));if(q)return d.has("value")?a.a.f(d.get("value")):b.value}),h="checkbox"==b.type,m="radio"==b.type;if(h||m){var k=c(),l=h&&a.a.f(k)instanceof Array,p=!(l&&k.push&&k.splice),q=m||l,t=l?g():n;m&&!b.name&&a.c.uniqueName.init(b,function(){return!0});a.o(e,null,{l:b});a.a.B(b,"click",e);a.o(f,null,{l:b}); +k=n}}};a.m.wa.checked=!0;a.c.checkedValue={update:function(b,c){b.value=a.a.f(c())}}})();a.c["class"]={update:function(b,c){var d=a.a.Db(a.a.f(c()));a.a.Eb(b,b.__ko__cssValue,!1);b.__ko__cssValue=d;a.a.Eb(b,d,!0)}};a.c.css={update:function(b,c){var d=a.a.f(c());null!==d&&"object"==typeof d?a.a.P(d,function(c,d){d=a.a.f(d);a.a.Eb(b,c,d)}):a.c["class"].update(b,c)}};a.c.enable={update:function(b,c){var d=a.a.f(c());d&&b.disabled?b.removeAttribute("disabled"):d||b.disabled||(b.disabled=!0)}};a.c.disable= +{update:function(b,c){a.c.enable.update(b,function(){return!a.a.f(c())})}};a.c.event={init:function(b,c,d,e,f){var g=c()||{};a.a.P(g,function(g){"string"==typeof g&&a.a.B(b,g,function(b){var k,l=c()[g];if(l){try{var p=a.a.la(arguments);e=f.$data;p.unshift(e);k=l.apply(e,p)}finally{!0!==k&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===d.get(g+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.c.foreach={Rc:function(b){return function(){var c=b(),d=a.a.bc(c); +if(!d||"number"==typeof d.length)return{foreach:c,templateEngine:a.ba.Ma};a.a.f(c);return{foreach:d.data,as:d.as,noChildContext:d.noChildContext,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.ba.Ma}}},init:function(b,c){return a.c.template.init(b,a.c.foreach.Rc(c))},update:function(b,c,d,e,f){return a.c.template.update(b,a.c.foreach.Rc(c),d,e,f)}};a.m.Ra.foreach=!1;a.h.ea.foreach= +!0;a.c.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if("activeElement"in f){var g;try{g=f.activeElement}catch(l){g=f.body}e=g===b}f=c();a.m.eb(f,d,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.B(b,"focus",f);a.a.B(b,"focusin",f);a.a.B(b,"blur",g);a.a.B(b,"focusout",g);b.__ko_hasfocusLastValue=!1},update:function(b,c){var d=!!a.a.f(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue=== +d||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.u.G(a.a.Fb,null,[b,d?"focusin":"focusout"]))}};a.m.wa.hasfocus=!0;a.c.hasFocus=a.c.hasfocus;a.m.wa.hasFocus="hasfocus";a.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.fc(b,c())}};(function(){function b(b,d,e){a.c[b]={init:function(b,c,h,m,k){var l,p,q={},t,x,n;if(d){m=h.get("as");var u=h.get("noChildContext");n=!(m&&u);q={as:m,noChildContext:u,exportDependencies:n}}x=(t= +"render"==h.get("completeOn"))||h.has(a.i.pa);a.o(function(){var h=a.a.f(c()),m=!e!==!h,u=!p,r;if(n||m!==l){x&&(k=a.i.Cb(b,k));if(m){if(!d||n)q.dataDependency=a.S.o();r=d?k.createChildContext("function"==typeof h?h:c,q):a.S.qa()?k.extend(null,q):k}u&&a.S.qa()&&(p=a.a.Ca(a.h.childNodes(b),!0));m?(u||a.h.va(b,a.a.Ca(p)),a.Oa(r,b)):(a.h.Ea(b),t||a.i.ma(b,a.i.H));l=m}},null,{l:b});return{controlsDescendantBindings:!0}}};a.m.Ra[b]=!1;a.h.ea[b]=!0}b("if");b("ifnot",!1,!0);b("with",!0)})();a.c.let={init:function(b, +c,d,e,f){c=f.extend(c);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.let=!0;var Q={};a.c.options={init:function(b){if("select"!==a.a.R(b))throw Error("options binding applies only to SELECT elements");for(;0g)var m=a.a.g.Z(),k=a.a.g.Z(),l=function(b){var c=this.activeElement;(c=c&&a.a.g.get(c,k))&&c(b)},p=function(b,c){var d=b.ownerDocument;a.a.g.get(d,m)||(a.a.g.set(d,m,!0),a.a.B(d,"selectionchange",l));a.a.g.set(b,k,c)};a.c.textInput={init:function(b,c,k){function l(c,d){a.a.B(b,c,d)}function m(){var d=a.a.f(c());if(null===d||d===n)d="";L!==n&&d===L?a.a.setTimeout(m,4):b.value!==d&&(y=!0,b.value=d,y=!1,v=b.value)}function r(){w||(L=b.value,w=a.a.setTimeout(z, +4))}function z(){clearTimeout(w);L=w=n;var d=b.value;v!==d&&(v=d,a.m.eb(c(),k,"textInput",d))}var v=b.value,w,L,A=9==a.a.W?r:z,y=!1;g&&l("keypress",z);11>g&&l("propertychange",function(a){y||"value"!==a.propertyName||A(a)});8==g&&(l("keyup",z),l("keydown",z));p&&(p(b,A),l("dragend",r));(!g||9<=g)&&l("input",A);5>e&&"textarea"===a.a.R(b)?(l("keydown",r),l("paste",r),l("cut",r)):11>d?l("keydown",r):4>f?(l("DOMAutoComplete",z),l("dragdrop",z),l("drop",z)):h&&"number"===b.type&&l("keydown",r);l("change", +z);l("blur",z);a.o(m,null,{l:b})}};a.m.wa.textInput=!0;a.c.textinput={preprocess:function(a,b,c){c("textInput",a)}}})();a.c.uniqueName={init:function(b,c){if(c()){var d="ko_unique_"+ ++a.c.uniqueName.rd;a.a.Yc(b,d)}}};a.c.uniqueName.rd=0;a.c.using={init:function(b,c,d,e,f){var g;d.has("as")&&(g={as:d.get("as"),noChildContext:d.get("noChildContext")});c=f.createChildContext(c,g);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.using=!0;a.c.value={init:function(b,c,d){var e=a.a.R(b),f="input"== +e;if(!f||"checkbox"!=b.type&&"radio"!=b.type){var g=[],h=d.get("valueUpdate"),m=!1,k=null;h&&("string"==typeof h?g=[h]:g=a.a.wc(h),a.a.Pa(g,"change"));var l=function(){k=null;m=!1;var e=c(),f=a.w.M(b);a.m.eb(e,d,"value",f)};!a.a.W||!f||"text"!=b.type||"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.A(g,"propertychange")||(a.a.B(b,"propertychange",function(){m=!0}),a.a.B(b,"focus",function(){m=!1}),a.a.B(b,"blur",function(){m&&l()}));a.a.D(g,function(c){var d=l;a.a.Ud(c,"after")&& +(d=function(){k=a.w.M(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.B(b,c,d)});var p;p=f&&"file"==b.type?function(){var d=a.a.f(c());null===d||d===n||""===d?b.value="":a.u.G(l)}:function(){var f=a.a.f(c()),g=a.w.M(b);if(null!==k&&f===k)a.a.setTimeout(p,0);else if(f!==g||g===n)"select"===e?(g=d.get("valueAllowUnset"),a.w.cb(b,f,g),g||f===a.w.M(b)||a.u.G(l)):a.w.cb(b,f)};if("select"===e){var q;a.i.subscribe(b,a.i.H,function(){q?d.get("valueAllowUnset")?p():l():(a.a.B(b,"change",l),q=a.o(p,null,{l:b}))}, +null,{notifyImmediately:!0})}else a.a.B(b,"change",l),a.o(p,null,{l:b})}else a.ib(b,{checkedValue:c})},update:function(){}};a.m.wa.value=!0;a.c.visible={update:function(b,c){var d=a.a.f(c()),e="none"!=b.style.display;d&&!e?b.style.display="":!d&&e&&(b.style.display="none")}};a.c.hidden={update:function(b,c){a.c.visible.update(b,function(){return!a.a.f(c())})}};(function(b){a.c[b]={init:function(c,d,e,f,g){return a.c.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})("click"); +a.ca=function(){};a.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource");};a.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock");};a.ca.prototype.makeTemplateSource=function(b,c){if("string"==typeof b){c=c||w;var d=c.getElementById(b);if(!d)throw Error("Cannot find template with ID "+b);return new a.C.F(d)}if(1==b.nodeType||8==b.nodeType)return new a.C.ia(b);throw Error("Unknown template type: "+b);};a.ca.prototype.renderTemplate= +function(a,c,d,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,c,d,e)};a.ca.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data("isRewritten")};a.ca.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data("isRewritten",!0)};a.b("templateEngine",a.ca);a.kc=function(){function b(b,c,d,h){b=a.m.ac(b);for(var m=a.m.Ra,k=0;k]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi, +d=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.kc.Ld(b,c)},d)},Ld:function(a,f){return a.replace(c,function(a,c,d,e,l){return b(l,c,d,f)}).replace(d,function(a,c){return b(c,"\x3c!-- ko --\x3e","#comment",f)})},md:function(b,c){return a.aa.Xb(function(d,h){var m=d.nextSibling;m&&m.nodeName.toLowerCase()===c&&a.ib(m,b,h)})}}}();a.b("__tr_ambtns",a.kc.md);(function(){a.C={};a.C.F=function(b){if(this.F=b){var c= +a.a.R(b);this.ab="script"===c?1:"textarea"===c?2:"template"==c&&b.content&&11===b.content.nodeType?3:4}};a.C.F.prototype.text=function(){var b=1===this.ab?"text":2===this.ab?"value":"innerHTML";if(0==arguments.length)return this.F[b];var c=arguments[0];"innerHTML"===b?a.a.fc(this.F,c):this.F[b]=c};var b=a.a.g.Z()+"_";a.C.F.prototype.data=function(c){if(1===arguments.length)return a.a.g.get(this.F,b+c);a.a.g.set(this.F,b+c,arguments[1])};var c=a.a.g.Z();a.C.F.prototype.nodes=function(){var b=this.F; +if(0==arguments.length){var e=a.a.g.get(b,c)||{},f=e.lb||(3===this.ab?b.content:4===this.ab?b:n);if(!f||e.jd){var g=this.text();g&&g!==e.bb&&(f=a.a.Md(g,b.ownerDocument),a.a.g.set(b,c,{lb:f,bb:g,jd:!0}))}return f}e=arguments[0];this.ab!==n&&this.text("");a.a.g.set(b,c,{lb:e})};a.C.ia=function(a){this.F=a};a.C.ia.prototype=new a.C.F;a.C.ia.prototype.constructor=a.C.ia;a.C.ia.prototype.text=function(){if(0==arguments.length){var b=a.a.g.get(this.F,c)||{};b.bb===n&&b.lb&&(b.bb=b.lb.innerHTML);return b.bb}a.a.g.set(this.F, +c,{bb:arguments[0]})};a.b("templateSources",a.C);a.b("templateSources.domElement",a.C.F);a.b("templateSources.anonymousTemplate",a.C.ia)})();(function(){function b(b,c,d){var e;for(c=a.h.nextSibling(c);b&&(e=b)!==c;)b=a.h.nextSibling(e),d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,h=a.ga.instance,m=h.preprocessNode;if(m){b(e,f,function(a,b){var c=a.previousSibling,d=m.call(h,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e): +(c.push(e,f),a.a.Ua(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.vc(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.aa.cd(b,[d])});a.a.Ua(c,g)}}function d(a){return a.nodeType?a:0a.a.W?0:b.nodes)?b.nodes():null)return a.a.la(c.cloneNode(!0).childNodes);b=b.text();return a.a.ua(b,e)};a.ba.Ma=new a.ba;a.gc(a.ba.Ma);a.b("nativeTemplateEngine",a.ba);(function(){a.$a=function(){var a=this.Hd=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}(); +this.renderTemplateSource=function(b,e,f,g){g=g||w;f=f||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var h=b.data("precompiled");h||(h=b.text()||"",h=v.template(null,"{{ko_with $item.koBindingContext}}"+h+"{{/ko_with}}"),b.data("precompiled",h));b=[e.$data];e=v.extend({koBindingContext:e},f.templateOptions);e=v.tmpl(h,b,e);e.appendTo(g.createElement("div"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+ +a+" })()) }}"};this.addTemplate=function(a,b){w.write(" - + @**@ + + @Html.DevExpress().GetStyleSheets( + new StyleSheet { ExtensionSuite = ExtensionSuite.NavigationAndLayout }, + new StyleSheet { ExtensionSuite = ExtensionSuite.Editors }, + new StyleSheet { ExtensionSuite = ExtensionSuite.HtmlEditor }, + new StyleSheet { ExtensionSuite = ExtensionSuite.GridView }, + new StyleSheet { ExtensionSuite = ExtensionSuite.PivotGrid }, + new StyleSheet { ExtensionSuite = ExtensionSuite.Chart }, + new StyleSheet { ExtensionSuite = ExtensionSuite.Report }, + new StyleSheet { ExtensionSuite = ExtensionSuite.Scheduler }, + new StyleSheet { ExtensionSuite = ExtensionSuite.TreeList }, + new StyleSheet { ExtensionSuite = ExtensionSuite.Spreadsheet }, + new StyleSheet { ExtensionSuite = ExtensionSuite.SpellChecker } + ) + + @Html.DevExpress().GetScripts( + new Script { ExtensionSuite = ExtensionSuite.NavigationAndLayout }, + new Script { ExtensionSuite = ExtensionSuite.HtmlEditor }, + new Script { ExtensionSuite = ExtensionSuite.GridView }, + new Script { ExtensionSuite = ExtensionSuite.PivotGrid }, + new Script { ExtensionSuite = ExtensionSuite.Editors }, + new Script { ExtensionSuite = ExtensionSuite.Chart }, + new Script { ExtensionSuite = ExtensionSuite.Report }, + new Script { ExtensionSuite = ExtensionSuite.Scheduler }, + new Script { ExtensionSuite = ExtensionSuite.TreeList }, + new Script { ExtensionSuite = ExtensionSuite.Spreadsheet }, + new Script { ExtensionSuite = ExtensionSuite.SpellChecker } + ) + @@ -34,6 +63,18 @@ +