diff --git a/src/Metrics/HrTimeInZone.cpp b/src/Metrics/HrTimeInZone.cpp index 8f7e0543f..037575cd2 100644 --- a/src/Metrics/HrTimeInZone.cpp +++ b/src/Metrics/HrTimeInZone.cpp @@ -32,9 +32,6 @@ class HrZoneTime : public RideMetric { int level; double seconds; - QList lo; - QList hi; - public: HrZoneTime() : level(0), seconds(0.0) @@ -741,7 +738,336 @@ class HrZonePTime10 : public RideMetric { MetricValidity validity() const { return Unknown; } RideMetric *clone() const { return new HrZonePTime10(*this); } }; + +// Time in Zones I, II and III +class HrZoneTimeI : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(HrZoneTimeI) + double seconds; + +public: + + HrZoneTimeI() : seconds(0.0) + { + setType(RideMetric::Total); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setPrecision(0); + setConversion(1.0); + setSymbol("time_in_zone_HI"); + setInternalName("HI Time in Zone"); + } + + void initialize () + { + setName(tr("HI Time in Zone")); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setDescription(tr("Time in Heart Rate Zone I - Below AeT")); + } + + bool isTime() const { return true; } + + void compute(RideItem *item, Specification spec, const QHash &) { + + // no ride or no samples + if (spec.isEmpty(item->ride())) { + setValue(RideFile::NIL); + setCount(0); + return; + } + + double totalSecs = 0.0; + seconds = 0; + + // get zone ranges + if (item->context->athlete->hrZones(item->isRun) && item->hrZoneRange >= 0 && item->ride()->areDataPresent()->hr) { + + int AeT = item->context->athlete->hrZones(item->isRun)->getAeT(item->hrZoneRange); + + // iterate and compute + RideFileIterator it(item->ride(), spec); + while (it.hasNext()) { + struct RideFilePoint *point = it.next(); + totalSecs += item->ride()->recIntSecs(); + if (point->hr < AeT) + seconds += item->ride()->recIntSecs(); + } + } + setValue(seconds); + setCount(totalSecs); + } + + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new HrZoneTimeI(*this); } +}; + +class HrZoneTimeII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(HrZoneTimeII) + double seconds; + +public: + + HrZoneTimeII() : seconds(0.0) + { + setType(RideMetric::Total); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setPrecision(0); + setConversion(1.0); + setSymbol("time_in_zone_HII"); + setInternalName("HII Time in Zone"); + } + + void initialize () + { + setName(tr("HII Time in Zone")); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setDescription(tr("Time in Heart Rate Zone II - Between AeT and LT")); + } + + bool isTime() const { return true; } + + void compute(RideItem *item, Specification spec, const QHash &) { + + // no ride or no samples + if (spec.isEmpty(item->ride())) { + setValue(RideFile::NIL); + setCount(0); + return; + } + + double totalSecs = 0.0; + seconds = 0; + + // get zone ranges + if (item->context->athlete->hrZones(item->isRun) && item->hrZoneRange >= 0 && item->ride()->areDataPresent()->hr) { + + int AeT = item->context->athlete->hrZones(item->isRun)->getAeT(item->hrZoneRange); + int LT = item->context->athlete->hrZones(item->isRun)->getLT(item->hrZoneRange); + + // iterate and compute + RideFileIterator it(item->ride(), spec); + while (it.hasNext()) { + struct RideFilePoint *point = it.next(); + totalSecs += item->ride()->recIntSecs(); + if (point->hr >= AeT && point->hr < LT) + seconds += item->ride()->recIntSecs(); + } + } + setValue(seconds); + setCount(totalSecs); + } + + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new HrZoneTimeII(*this); } +}; + +class HrZoneTimeIII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(HrZoneTimeIII) + double seconds; + +public: + + HrZoneTimeIII() : seconds(0.0) + { + setType(RideMetric::Total); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setPrecision(0); + setConversion(1.0); + setSymbol("time_in_zone_HIII"); + setInternalName("HIII Time in Zone"); + } + + void initialize () + { + setName(tr("HIII Time in Zone")); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setDescription(tr("Time in Heart Rate Zone III - Above LT")); + } + + bool isTime() const { return true; } + + void compute(RideItem *item, Specification spec, const QHash &) { + + // no ride or no samples + if (spec.isEmpty(item->ride())) { + setValue(RideFile::NIL); + setCount(0); + return; + } + + double totalSecs = 0.0; + seconds = 0; + + // get zone ranges + if (item->context->athlete->hrZones(item->isRun) && item->hrZoneRange >= 0 && item->ride()->areDataPresent()->hr) { + + int LT = item->context->athlete->hrZones(item->isRun)->getLT(item->hrZoneRange); + + // iterate and compute + RideFileIterator it(item->ride(), spec); + while (it.hasNext()) { + struct RideFilePoint *point = it.next(); + totalSecs += item->ride()->recIntSecs(); + if (point->hr >= LT) + seconds += item->ride()->recIntSecs(); + } + } + setValue(seconds); + setCount(totalSecs); + } + + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new HrZoneTimeIII(*this); } +}; + +// Now for Time In Zone as a Percentage of Ride Time +class HrZonePTimeI : public RideMetric { + + Q_DECLARE_TR_FUNCTIONS(HrZonePTimeI) + + public: + + HrZonePTimeI() + { + setSymbol("percent_in_zone_HI"); + setInternalName("HI Percent in Zone"); + setType(RideMetric::Average); + setMetricUnits("%"); + setImperialUnits("%"); + setPrecision(0); + setConversion(1.0); + } + + void initialize () + { + setName(tr("HI Percent in Zone")); + setDescription(tr("Percent of Time in Heart Rate Zone I - Below AeT")); + } + + void compute(RideItem *, Specification, const QHash &deps) { + + assert(deps.contains("time_in_zone_HI")); + + // compute + double time = deps.value("time_in_zone_HI")->count(); + double inzone = deps.value("time_in_zone_HI")->value(true); + + if (time && inzone) setValue((inzone / time) * 100.00); + else setValue(0); + setCount(time); + } + + bool aggregateZero() const { return true; } + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new HrZonePTimeI(*this); } +}; + +class HrZonePTimeII : public RideMetric { + + Q_DECLARE_TR_FUNCTIONS(HrZonePTimeII) + + public: + + HrZonePTimeII() + { + setSymbol("percent_in_zone_HII"); + setInternalName("HII Percent in Zone"); + setType(RideMetric::Average); + setMetricUnits("%"); + setImperialUnits("%"); + setPrecision(0); + setConversion(1.0); + } + + void initialize () + { + setName(tr("HII Percent in Zone")); + setDescription(tr("Percent of Time in Heart Rate Zone II - Between AeT and LT")); + } + + void compute(RideItem *, Specification, const QHash &deps) { + + assert(deps.contains("time_in_zone_HII")); + + // compute + double time = deps.value("time_in_zone_HII")->count(); + double inzone = deps.value("time_in_zone_HII")->value(true); + + if (time && inzone) setValue((inzone / time) * 100.00); + else setValue(0); + setCount(time); + } + + bool aggregateZero() const { return true; } + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new HrZonePTimeII(*this); } +}; + +class HrZonePTimeIII : public RideMetric { + + Q_DECLARE_TR_FUNCTIONS(HrZonePTimeIII) + + public: + + HrZonePTimeIII() + { + setSymbol("percent_in_zone_HIII"); + setInternalName("HIII Percent in Zone"); + setType(RideMetric::Average); + setMetricUnits("%"); + setImperialUnits("%"); + setPrecision(0); + setConversion(1.0); + } + + void initialize () + { + setName(tr("HIII Percent in Zone")); + setDescription(tr("Percent of Time in Heart Rate Zone III - Above LT")); + } + + void compute(RideItem *, Specification, const QHash &deps) { + + assert(deps.contains("time_in_zone_HIII")); + + // compute + double time = deps.value("time_in_zone_HIII")->count(); + double inzone = deps.value("time_in_zone_HIII")->value(true); + + if (time && inzone) setValue((inzone / time) * 100.00); + else setValue(0); + setCount(time); + } + + bool aggregateZero() const { return true; } + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new HrZonePTimeIII(*this); } +}; + static bool addAllHrZones() { + RideMetricFactory::instance().addMetric(HrZoneTime1()); RideMetricFactory::instance().addMetric(HrZoneTime2()); RideMetricFactory::instance().addMetric(HrZoneTime3()); @@ -752,6 +1078,7 @@ static bool addAllHrZones() { RideMetricFactory::instance().addMetric(HrZoneTime8()); RideMetricFactory::instance().addMetric(HrZoneTime9()); RideMetricFactory::instance().addMetric(HrZoneTime10()); + QVector deps; deps.append("time_in_zone_H1"); RideMetricFactory::instance().addMetric(HrZonePTime1(), &deps); @@ -782,6 +1109,21 @@ static bool addAllHrZones() { deps.clear(); deps.append("time_in_zone_H10"); RideMetricFactory::instance().addMetric(HrZonePTime10(), &deps); + + RideMetricFactory::instance().addMetric(HrZoneTimeI()); + RideMetricFactory::instance().addMetric(HrZoneTimeII()); + RideMetricFactory::instance().addMetric(HrZoneTimeIII()); + + deps.clear(); + deps.append("time_in_zone_HI"); + RideMetricFactory::instance().addMetric(HrZonePTimeI(), &deps); + deps.clear(); + deps.append("time_in_zone_HII"); + RideMetricFactory::instance().addMetric(HrZonePTimeII(), &deps); + deps.clear(); + deps.append("time_in_zone_HIII"); + RideMetricFactory::instance().addMetric(HrZonePTimeIII(), &deps); + return true; } diff --git a/src/Metrics/PaceTimeInZone.cpp b/src/Metrics/PaceTimeInZone.cpp index eb8193a05..6c8f72051 100644 --- a/src/Metrics/PaceTimeInZone.cpp +++ b/src/Metrics/PaceTimeInZone.cpp @@ -33,9 +33,6 @@ class PaceZoneTime : public RideMetric { int level; double seconds; - QList lo; - QList hi; - public: PaceZoneTime() : level(0), seconds(0.0) @@ -53,9 +50,9 @@ class PaceZoneTime : public RideMetric { void compute(RideItem *item, Specification spec, const QHash &) { // no ride or no samples - if (spec.isEmpty(item->ride()) && + if (spec.isEmpty(item->ride()) || // pace only makes sense for running or swimming - !item->isRun && !item->isSwim) { + (!item->isRun && !item->isSwim)) { setValue(RideFile::NIL); setCount(0); return; @@ -752,7 +749,347 @@ class PaceZonePTime10 : public RideMetric { RideMetric *clone() const { return new PaceZonePTime10(*this); } }; +// Time in Zones I, II and III +class PaceZoneTimeI : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(PaceZoneTimeI) + double seconds; + + public: + + PaceZoneTimeI() : seconds(0.0) + { + setType(RideMetric::Total); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setPrecision(0); + setConversion(1.0); + setSymbol("time_in_zone_PI"); + setInternalName("PI Time in Pace Zone"); + } + + void initialize () + { + setName(tr("PI Time in Pace Zone")); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setDescription(tr("Time in Pace Zone I - Below AeT")); + } + + bool isTime() const { return true; } + + void compute(RideItem *item, Specification spec, const QHash &) + { + // no ride or no samples + if (spec.isEmpty(item->ride()) || + // pace only makes sense for running or swimming + (!item->isRun && !item->isSwim)) { + setValue(RideFile::NIL); + setCount(0); + return; + } + + double totalSecs = 0.0; + seconds = 0; + + const PaceZones *zone = item->context->athlete->paceZones(item->isSwim); + int zoneRange = item->paceZoneRange; + + // get zone ranges + if (zone && zoneRange >= 0) { + + double AeT = zone->getAeT(zoneRange); + + // iterate and compute + RideFileIterator it(item->ride(), spec); + while (it.hasNext()) { + struct RideFilePoint *point = it.next(); + totalSecs += item->ride()->recIntSecs(); + if (point->kph < AeT) + seconds += item->ride()->recIntSecs(); + } + } + setValue(seconds); + setCount(totalSecs); + } + + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new PaceZoneTimeI(*this); } +}; + +class PaceZoneTimeII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(PaceZoneTimeII) + double seconds; + + public: + + PaceZoneTimeII() : seconds(0.0) + { + setType(RideMetric::Total); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setPrecision(0); + setConversion(1.0); + setSymbol("time_in_zone_PII"); + setInternalName("PII Time in Pace Zone"); + } + + void initialize () + { + setName(tr("PII Time in Pace Zone")); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setDescription(tr("Time in Pace Zone II - Between AeT and CV")); + } + + bool isTime() const { return true; } + + void compute(RideItem *item, Specification spec, const QHash &) + { + // no ride or no samples + if (spec.isEmpty(item->ride()) || + // pace only makes sense for running or swimming + (!item->isRun && !item->isSwim)) { + setValue(RideFile::NIL); + setCount(0); + return; + } + + double totalSecs = 0.0; + seconds = 0; + + const PaceZones *zone = item->context->athlete->paceZones(item->isSwim); + int zoneRange = item->paceZoneRange; + + // get zone ranges + if (zone && zoneRange >= 0) { + + double AeT = zone->getAeT(zoneRange); + double CV = zone->getCV(zoneRange); + + // iterate and compute + RideFileIterator it(item->ride(), spec); + while (it.hasNext()) { + struct RideFilePoint *point = it.next(); + totalSecs += item->ride()->recIntSecs(); + if (point->kph >= AeT && point->kph < CV) + seconds += item->ride()->recIntSecs(); + } + } + setValue(seconds); + setCount(totalSecs); + } + + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new PaceZoneTimeII(*this); } +}; + +class PaceZoneTimeIII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(PaceZoneTimeIII) + double seconds; + + public: + + PaceZoneTimeIII() : seconds(0.0) + { + setType(RideMetric::Total); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setPrecision(0); + setConversion(1.0); + setSymbol("time_in_zone_PIII"); + setInternalName("PIII Time in Pace Zone"); + } + + void initialize () + { + setName(tr("PIII Time in Pace Zone")); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setDescription(tr("Time in Pace Zone III - Above CV")); + } + + bool isTime() const { return true; } + + void compute(RideItem *item, Specification spec, const QHash &) + { + // no ride or no samples + if (spec.isEmpty(item->ride()) || + // pace only makes sense for running or swimming + (!item->isRun && !item->isSwim)) { + setValue(RideFile::NIL); + setCount(0); + return; + } + + double totalSecs = 0.0; + seconds = 0; + + const PaceZones *zone = item->context->athlete->paceZones(item->isSwim); + int zoneRange = item->paceZoneRange; + + // get zone ranges + if (zone && zoneRange >= 0) { + + double CV = zone->getCV(zoneRange); + + // iterate and compute + RideFileIterator it(item->ride(), spec); + while (it.hasNext()) { + struct RideFilePoint *point = it.next(); + totalSecs += item->ride()->recIntSecs(); + if (point->kph >= CV) + seconds += item->ride()->recIntSecs(); + } + } + setValue(seconds); + setCount(totalSecs); + } + + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new PaceZoneTimeIII(*this); } +}; + +// Now for Time In Zone as a Percentage of Ride Time +class PaceZonePTimeI : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(PaceZonePTimeI) + + public: + + PaceZonePTimeI() + { + setSymbol("percent_in_zone_PI"); + setInternalName("PI Percent in Pace Zone"); + setType(RideMetric::Average); + setMetricUnits("%"); + setImperialUnits("%"); + setPrecision(0); + setConversion(1.0); + } + + void initialize () + { + setName(tr("PI Percent in Pace Zone")); + setDescription(tr("Percent of Time in Pace Zone I - Below AeT")); + } + + void compute(RideItem *, Specification, const QHash &deps) + { + assert(deps.contains("time_in_zone_PI")); + + // compute + double time = deps.value("time_in_zone_PI")->count(); + double inzone = deps.value("time_in_zone_PI")->value(true); + + if (time && inzone) setValue((inzone / time) * 100.00); + else setValue(0); + setCount(time); + } + + bool aggregateZero() const { return true; } + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new PaceZonePTimeI(*this); } +}; + +class PaceZonePTimeII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(PaceZonePTimeII) + + public: + + PaceZonePTimeII() + { + setSymbol("percent_in_zone_PII"); + setInternalName("PII Percent in Pace Zone"); + setType(RideMetric::Average); + setMetricUnits("%"); + setImperialUnits("%"); + setPrecision(0); + setConversion(1.0); + } + + void initialize () + { + setName(tr("PII Percent in Pace Zone")); + setDescription(tr("Percent of Time in Pace Zone II - Between AeT and CV")); + } + + void compute(RideItem *, Specification, const QHash &deps) + { + assert(deps.contains("time_in_zone_PII")); + + // compute + double time = deps.value("time_in_zone_PII")->count(); + double inzone = deps.value("time_in_zone_PII")->value(true); + + if (time && inzone) setValue((inzone / time) * 100.00); + else setValue(0); + setCount(time); + } + + bool aggregateZero() const { return true; } + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new PaceZonePTimeII(*this); } +}; + +class PaceZonePTimeIII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(PaceZonePTimeIII) + + public: + + PaceZonePTimeIII() + { + setSymbol("percent_in_zone_PIII"); + setInternalName("PIII Percent in Pace Zone"); + setType(RideMetric::Average); + setMetricUnits("%"); + setImperialUnits("%"); + setPrecision(0); + setConversion(1.0); + } + + void initialize () + { + setName(tr("PIII Percent in Pace Zone")); + setDescription(tr("Percent of Time in Pace Zone III - Above CV")); + } + + void compute(RideItem *, Specification, const QHash &deps) + { + assert(deps.contains("time_in_zone_PIII")); + + // compute + double time = deps.value("time_in_zone_PIII")->count(); + double inzone = deps.value("time_in_zone_PIII")->value(true); + + if (time && inzone) setValue((inzone / time) * 100.00); + else setValue(0); + setCount(time); + } + + bool aggregateZero() const { return true; } + bool canAggregate() { return false; } + void aggregateWith(const RideMetric &) {} + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new PaceZonePTimeIII(*this); } +}; + static bool addAllZones() { + RideMetricFactory::instance().addMetric(PaceZoneTime1()); RideMetricFactory::instance().addMetric(PaceZoneTime2()); RideMetricFactory::instance().addMetric(PaceZoneTime3()); @@ -763,6 +1100,7 @@ static bool addAllZones() { RideMetricFactory::instance().addMetric(PaceZoneTime8()); RideMetricFactory::instance().addMetric(PaceZoneTime9()); RideMetricFactory::instance().addMetric(PaceZoneTime10()); + QVector deps; deps.append("time_in_zone_P1"); RideMetricFactory::instance().addMetric(PaceZonePTime1(), &deps); @@ -793,6 +1131,21 @@ static bool addAllZones() { deps.clear(); deps.append("time_in_zone_P10"); RideMetricFactory::instance().addMetric(PaceZonePTime10(), &deps); + + RideMetricFactory::instance().addMetric(PaceZoneTimeI()); + RideMetricFactory::instance().addMetric(PaceZoneTimeII()); + RideMetricFactory::instance().addMetric(PaceZoneTimeIII()); + + deps.clear(); + deps.append("time_in_zone_PI"); + RideMetricFactory::instance().addMetric(PaceZonePTimeI(), &deps); + deps.clear(); + deps.append("time_in_zone_PII"); + RideMetricFactory::instance().addMetric(PaceZonePTimeII(), &deps); + deps.clear(); + deps.append("time_in_zone_PIII"); + RideMetricFactory::instance().addMetric(PaceZonePTimeIII(), &deps); + return true; } diff --git a/src/Metrics/RideMetric.cpp b/src/Metrics/RideMetric.cpp index 3dd654f87..c97ec838f 100644 --- a/src/Metrics/RideMetric.cpp +++ b/src/Metrics/RideMetric.cpp @@ -163,8 +163,9 @@ // 153 8 Dec 2019 Mark Liversedge Regenerate after v3.5 RC2/RC2X re-issue // 154 18 Apr 2020 Mark Liversedge Added PeakPowerIndex (only for full rides) // 155 27 Jun 2020 Mark Liversedge Added Ride Date as days since 1900,01,01 +// 156 18 Mar 2021 Ale Martinez Added Time and % in Zones I, II and III -int DBSchemaVersion = 155; +int DBSchemaVersion = 156; RideMetricFactory *RideMetricFactory::_instance; QVector RideMetricFactory::noDeps; diff --git a/src/Metrics/TimeInZone.cpp b/src/Metrics/TimeInZone.cpp index 632fa5e49..8ecc398ab 100644 --- a/src/Metrics/TimeInZone.cpp +++ b/src/Metrics/TimeInZone.cpp @@ -32,9 +32,6 @@ class ZoneTime : public RideMetric { int level; double seconds; - QList lo; - QList hi; - public: ZoneTime() : level(0), seconds(0.0) @@ -723,7 +720,311 @@ class ZonePTime10 : public RideMetric { RideMetric *clone() const { return new ZonePTime10(*this); } }; +// Time in Zones I, II and III +class ZoneTimeI : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(ZoneTimeI) + double seconds; + + public: + + ZoneTimeI() : seconds(0.0) + { + setType(RideMetric::Total); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setPrecision(0); + setConversion(1.0); + setSymbol("time_in_zone_LI"); + setInternalName("LI Time in Zone"); + } + + void initialize () + { + setName(tr("LI Time in Zone")); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setDescription(tr("Time in Power Zone I - Below AeT")); + } + + bool isTime() const { return true; } + + void compute(RideItem *item, Specification spec, const QHash &) { + + // no ride or no samples + if (spec.isEmpty(item->ride()) || + item->context->athlete->zones(item->isRun) == NULL || item->zoneRange < 0 || + !item->ride()->areDataPresent()->watts) { + setValue(RideFile::NIL); + setCount(0); + return; + } + + int AeT = item->context->athlete->zones(item->isRun)->getAeT(item->zoneRange); + double totalSecs = 0.0; + seconds = 0; + + // iterate and compute + RideFileIterator it(item->ride(), spec); + while (it.hasNext()) { + struct RideFilePoint *point = it.next(); + totalSecs += item->ride()->recIntSecs(); + if (point->watts < AeT) + seconds += item->ride()->recIntSecs(); + } + setValue(seconds); + setCount(totalSecs); + } + + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new ZoneTimeI(*this); } +}; + +class ZoneTimeII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(ZoneTimeII) + double seconds; + + public: + + ZoneTimeII() : seconds(0.0) + { + setType(RideMetric::Total); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setPrecision(0); + setConversion(1.0); + setSymbol("time_in_zone_LII"); + setInternalName("LII Time in Zone"); + } + + void initialize () + { + setName(tr("LII Time in Zone")); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setDescription(tr("Time in Power Zone II - Between AeT and CP")); + } + + bool isTime() const { return true; } + + void compute(RideItem *item, Specification spec, const QHash &) { + + // no ride or no samples + if (spec.isEmpty(item->ride()) || + item->context->athlete->zones(item->isRun) == NULL || item->zoneRange < 0 || + !item->ride()->areDataPresent()->watts) { + setValue(RideFile::NIL); + setCount(0); + return; + } + + int AeT = item->context->athlete->zones(item->isRun)->getAeT(item->zoneRange); + int CP = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); + double totalSecs = 0.0; + seconds = 0; + + // iterate and compute + RideFileIterator it(item->ride(), spec); + while (it.hasNext()) { + struct RideFilePoint *point = it.next(); + totalSecs += item->ride()->recIntSecs(); + if (point->watts >= AeT && point->watts < CP) + seconds += item->ride()->recIntSecs(); + } + setValue(seconds); + setCount(totalSecs); + } + + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new ZoneTimeII(*this); } +}; + +class ZoneTimeIII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(ZoneTimeIII) + double seconds; + + public: + + ZoneTimeIII() : seconds(0.0) + { + setType(RideMetric::Total); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setPrecision(0); + setConversion(1.0); + setSymbol("time_in_zone_LIII"); + setInternalName("LIII Time in Zone"); + } + + void initialize () + { + setName(tr("LIII Time in Zone")); + setMetricUnits(tr("seconds")); + setImperialUnits(tr("seconds")); + setDescription(tr("Time in Power Zone III - Above CP")); + } + + bool isTime() const { return true; } + + void compute(RideItem *item, Specification spec, const QHash &) { + + // no ride or no samples + if (spec.isEmpty(item->ride()) || + item->context->athlete->zones(item->isRun) == NULL || item->zoneRange < 0 || + !item->ride()->areDataPresent()->watts) { + setValue(RideFile::NIL); + setCount(0); + return; + } + + int CP = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); + double totalSecs = 0.0; + seconds = 0; + + // iterate and compute + RideFileIterator it(item->ride(), spec); + while (it.hasNext()) { + struct RideFilePoint *point = it.next(); + totalSecs += item->ride()->recIntSecs(); + if (point->watts >= CP) + seconds += item->ride()->recIntSecs(); + } + setValue(seconds); + setCount(totalSecs); + } + + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new ZoneTimeIII(*this); } +}; + +// Now for Time In Zones as a Percentage of Ride Time +class ZonePTimeI : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(ZonePTimeI) + + public: + + ZonePTimeI() + { + setSymbol("percent_in_zone_LI"); + setInternalName("LI Percent in Zone"); + setType(RideMetric::Average); + setMetricUnits("%"); + setImperialUnits("%"); + setPrecision(0); + setConversion(1.0); + } + + void initialize () + { + setName(tr("LI Percent in Zone")); + setDescription(tr("Percent of Time in Power Zone I - Below AeT")); + } + + void compute(RideItem *, Specification, const QHash &deps) + { + assert(deps.contains("time_in_zone_LI")); + + // compute + double time = deps.value("time_in_zone_LI")->count(); + double inzone = deps.value("time_in_zone_LI")->value(true); + + if (time && inzone) setValue((inzone / time) * 100.00); + else setValue(0); + setCount(time); + } + + bool aggregateZero() const { return true; } + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new ZonePTimeI(*this); } +}; + +class ZonePTimeII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(ZonePTimeII) + + public: + + ZonePTimeII() + { + setSymbol("percent_in_zone_LII"); + setInternalName("LII Percent in Zone"); + setType(RideMetric::Average); + setMetricUnits("%"); + setImperialUnits("%"); + setPrecision(0); + setConversion(1.0); + } + + void initialize () + { + setName(tr("LII Percent in Zone")); + setDescription(tr("Percent of Time in Power Zone II - Between AeT and CP")); + } + + void compute(RideItem *, Specification, const QHash &deps) + { + assert(deps.contains("time_in_zone_LII")); + + // compute + double time = deps.value("time_in_zone_LII")->count(); + double inzone = deps.value("time_in_zone_LII")->value(true); + + if (time && inzone) setValue((inzone / time) * 100.00); + else setValue(0); + setCount(time); + } + + bool aggregateZero() const { return true; } + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new ZonePTimeII(*this); } +}; + +class ZonePTimeIII : public RideMetric { + Q_DECLARE_TR_FUNCTIONS(ZonePTimeIII) + + public: + + ZonePTimeIII() + { + setSymbol("percent_in_zone_LIII"); + setInternalName("LIII Percent in Zone"); + setType(RideMetric::Average); + setMetricUnits("%"); + setImperialUnits("%"); + setPrecision(0); + setConversion(1.0); + } + + void initialize () + { + setName(tr("LIII Percent in Zone")); + setDescription(tr("Percent of Time in Power Zone III - Above CP")); + } + + void compute(RideItem *, Specification, const QHash &deps) + { + assert(deps.contains("time_in_zone_LIII")); + + // compute + double time = deps.value("time_in_zone_LIII")->count(); + double inzone = deps.value("time_in_zone_LIII")->value(true); + + if (time && inzone) setValue((inzone / time) * 100.00); + else setValue(0); + setCount(time); + } + + bool aggregateZero() const { return true; } + MetricClass classification() const { return Undefined; } + MetricValidity validity() const { return Unknown; } + RideMetric *clone() const { return new ZonePTimeIII(*this); } +}; + static bool addAllZones() { + RideMetricFactory::instance().addMetric(ZoneTime1()); RideMetricFactory::instance().addMetric(ZoneTime2()); RideMetricFactory::instance().addMetric(ZoneTime3()); @@ -734,6 +1035,7 @@ static bool addAllZones() { RideMetricFactory::instance().addMetric(ZoneTime8()); RideMetricFactory::instance().addMetric(ZoneTime9()); RideMetricFactory::instance().addMetric(ZoneTime10()); + QVector deps; deps.append("time_in_zone_L1"); RideMetricFactory::instance().addMetric(ZonePTime1(), &deps); @@ -764,6 +1066,21 @@ static bool addAllZones() { deps.clear(); deps.append("time_in_zone_L10"); RideMetricFactory::instance().addMetric(ZonePTime10(), &deps); + + RideMetricFactory::instance().addMetric(ZoneTimeI()); + RideMetricFactory::instance().addMetric(ZoneTimeII()); + RideMetricFactory::instance().addMetric(ZoneTimeIII()); + + deps.clear(); + deps.append("time_in_zone_LI"); + RideMetricFactory::instance().addMetric(ZonePTimeI(), &deps); + deps.clear(); + deps.append("time_in_zone_LII"); + RideMetricFactory::instance().addMetric(ZonePTimeII(), &deps); + deps.clear(); + deps.append("time_in_zone_LIII"); + RideMetricFactory::instance().addMetric(ZonePTimeIII(), &deps); + return true; } diff --git a/src/Resources/xml/charts.xml b/src/Resources/xml/charts.xml index 0b58a1798..ef3bf0150 100644 --- a/src/Resources/xml/charts.xml +++ b/src/Resources/xml/charts.xml @@ -9,12 +9,12 @@ "AAAAHABQAE0AQwAgACgAVAByAGkAUwBjAG8AcgBlACkAAAAeANoAbAB0AGkAbQBvAHMAIAAzACAAbQBlAHMAZQBzACV9EwAAAAD/ACV+iQAAAAD/AAAAAQAB////////////////AAAAFQAAAAQAAAAHAAAAABAAdAByAGkAcwBjAG8AcgBlAAAAEABUAHIAaQBTAGMAbwByAGUAAAAGAEEAVABMAAAAEABUAHIAaQBTAGMAbwByAGUAAAAAAAEAAAAAAAAAAAAAAAABFWyo+GHfHk4VbKj4AAAAARVsqPj//////////wH/////AAD//wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEAAAABgAdAByAGkAcwBjAG8AcgBlAF8AbAB0AHMAAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAPnAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAABwAAAAAQAHQAcgBpAHMAYwBvAHIAZQAAABAAVAByAGkAUwBjAG8AcgBlAAAABgBDAFQATAAAABAAVAByAGkAUwBjAG8AcgBlAAAAAAABAAAAAAAAAAAAAAAAARVsqPhh3x5OFWyo+AAAAAEVbKj4//////////8B//9VVQAA//8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhAAAAAYAHQAcgBpAHMAYwBvAHIAZQBfAHMAdABzAAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAD5wAADhAAAQAAAAH//////////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAcAAAAAEAB0AHIAaQBzAGMAbwByAGUAAAAQAFQAcgBpAFMAYwBvAHIAZQAAAAYAVABTAEIAAAAQAFQAcgBpAFMAYwBvAHIAZQAAAAAAAAAAAAAAAAAAAAAAAAEVbKj4Yd8eThVsqPgAAAABFWyo+P//////////Af///////39/AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAAAAAA4QAAAAFgB0AHIAaQBzAGMAbwByAGUAXwBzAGIAAAAKAAAAAAAAAAABAAAADAAyACAAUABhAHIAbQAAAAAAAAPnAAAOEAABAAAAAv//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAABwAAAAAQAHQAcgBpAHMAYwBvAHIAZQAAABAAVAByAGkAUwBjAG8AcgBlAAAABABSAFIAAAAQAFQAcgBpAFMAYwBvAHIAZQAAAAAAAwAAAAAAAAAAAAAAAAEVbKj4Yd8eThVsqPgAAAABFWyo+P//////////Af//VVX//wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAQAAA+cAAA4QAAAAFgB0AHIAaQBzAGMAbwByAGUAXwByAHIAAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAAAAAAOEAABAAAAA///////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAAAD" "AAAAFgBQAE0AQwAgACgAVABSAEkATQBQACkAAAAWAFAATQBDACAAKABUAFIASQBNAFAAKQAlfRMAAAAA/wAlfrMAAAAA/wAAAAEAAP///////////////wAAABUAAAADAAAAAgAAAAASAHQAcgBpAG0AcABfAHMAdABzAAAALgBUAFIASQBNAFAAIABTAGgAbwByAHQAIABUAGUAcgBtACAAUwB0AHIAZQBzAHMAAAAuAFQAUgBJAE0AUAAgAFMAaABvAHIAdAAgAFQAZQByAG0AIABTAHQAcgBlAHMAcwAAAAwAUwB0AHIAZQBzAHMAAAAAAAEAAAAAAAAAAAAAAAABAAAAAQAAAAEFrZAAAAB//1+/qXD//////////wH/////xMT//wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAACAAAOEP////8AAAAK/////wAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAPnAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAgAAAAASAHQAcgBpAG0AcABfAGwAdABzAAAALABUAFIASQBNAFAAIABMAG8AbgBnACAAVABlAHIAbQAgAFMAdAByAGUAcwBzAAAALABUAFIASQBNAFAAIABMAG8AbgBnACAAVABlAHIAbQAgAFMAdAByAGUAcwBzAAAADABTAHQAcgBlAHMAcwAAAAAAAQAAAAAAAAAAAAAAAAEAAH//AAB//1+/0sAAAH//X7/OMP//////////Af//qqr/////AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAAIAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAMADIAIABQAGEAcgBtAAAAAAAAA+cAAA4QAAEAAAAA//////////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAACAAAAABAAdAByAGkAbQBwAF8AcwBiAAAAKABUAFIASQBNAFAAIABTAHQAcgBlAHMAcwAgAEIAYQBsAGEAbgBjAGUAAAAoAFQAUgBJAE0AUAAgAFMAdAByAGUAcwBzACAAQgBhAGwAYQBuAGMAZQAAAAwAUwB0AHIAZQBzAHMAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wH///////8AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAOEP////8AAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAPnAAAOEAABAAAAAAAAABwAUwB0AHIAZQBzAHMAIABCAGEAbABhAG4AYwBl/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAg==" "AAAAIgBQAE0AQwAgACgAUwBlAHMAcwBpAG8AbgAgAFIAUABFACkAAAAiAFAATQBDACAAKABTAGUAcwBzAGkAbwBuACAAUgBQAEUAKQAlfjYAAAAA/wAlfpEAAAAA/wAAAAEAAf///////////////wAAABUAAAAEAAAABwAAAAAWAHMAZQBzAHMAaQBvAG4AXwByAHAAZQAAABYAUwBlAHMAcwBpAG8AbgAgAFIAUABFAAAABgBBAFQATAAAABYAUwBlAHMAcwBpAG8AbgAgAFIAUABFAAAAAAABAAAAAAAAAAAAAAAAAQpN9wBh3x5OCk33AAAAAAEKTfcA//////////8B/////wAA//8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhAAAAAeAHMAZQBzAHMAaQBvAG4AXwByAHAAZQBfAGwAdABzAAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAD5wAADhAAAQAAAAAAAAAA/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAcAAAAAFgBzAGUAcwBzAGkAbwBuAF8AcgBwAGUAAAAWAFMAZQBzAHMAaQBvAG4AIABSAFAARQAAAAYAQwBUAEwAAAAWAFMAZQBzAHMAaQBvAG4AIABSAFAARQAAAAAAAQAAAAAAAAAAAAAAAAEKTfcAYd8eTgpN9wAAAAABCk33AP//////////Af//VVUAAP//AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4QAAAAHgBzAGUAcwBzAGkAbwBuAF8AcgBwAGUAXwBzAHQAcwAAAAoAAAAAAAAAAAAAAAAMADIAIABQAGEAcgBtAAAAAAAAA+cAAA4QAAEAAAABAAAAAP////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAHAAAAABYAcwBlAHMAcwBpAG8AbgBfAHIAcABlAAAAFgBTAGUAcwBzAGkAbwBuACAAUgBQAEUAAAAGAFQAUwBCAAAAFgBTAGUAcwBzAGkAbwBuACAAUgBQAEUAAAAAAAEAAAAAAAAAAAAAAAABCk33AGHfHk4KTfcAAAAAAQpN9wD//////////wH///////9/fwAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAOEAAAABwAcwBlAHMAcwBpAG8AbgBfAHIAcABlAF8AcwBiAAAACgAAAAAAAAAAAQAAAAwAMgAgAFAAYQByAG0AAAAAAAAD5wAADhAAAQAAAAIAAAAA/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAcAAAAAFgBzAGUAcwBzAGkAbwBuAF8AcgBwAGUAAAAWAFMAZQBzAHMAaQBvAG4AIABSAFAARQAAAAQAUgBSAAAAFgBTAGUAcwBzAGkAbwBuACAAUgBQAEUAAAAAAAMAAAAAAAAAAAAAAAABCk33AGHfHk4KTfcAAAAAAQpN9wD//////////wH//6qq//9/fwAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAEAAAPnAAAOEAAAABwAcwBlAHMAcwBpAG8AbgBfAHIAcABlAF8AcgByAAAACgAAAAAAAAAAAwAAAAwAMgAgAFAAYQByAG0AAAAAAAAAAAAADhAAAQAAAAMAAAAA/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAw==" - "AAAAFABDAFAAIABIAGkAcwB0AG8AcgB5AAAACAAyADAAMAA5ACV0mAAAAAD/ACV2QQAAAAD/AAAAAQAB////////////////AAAAFQAAAAQAAAAGAAAAABAAQwBQAF8AKABFAHgAdAApAAAAAAAAABAAQwBQACAAKABFAHgAdAApAAAACgBXAGEAdAB0AHMAAAAAAAEAAAAAAAAAAAAAAAABAAAAAAAAf//0gZauAAB/////qLD//////////wH/////9fUAAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEP////8AAAAKAAAAAAAAAAABAAAABgBFAHgAdAAAAAEAAAPnAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAQAAAAAUAGMAcABfAHMAZQB0AHQAaQBuAGcAAAAcAEMAcgBpAHQAaQBjAGEAbAAgAFAAbwB3AGUAcgAAABwAQwByAGkAdABpAGMAYQBsACAAUABvAHcAZQByAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAEAAH/dAAAAAAAAATgAAAAABLvJMP//////////Af////9MzQAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAAAAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAMADIAIABQAGEAcgBtAAAAAAAAAAEAAA4QAAEAAAAAAAAAAP////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAGAAAAABAAVwAnAF8AKABFAHgAdAApAAAAAAAAABAAVwAnACAAKABFAHgAdAApAAAADABKAG8AdQBsAGUAcwAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAALlbUAAAAAAAAAAGP//////////Af//AAD/////AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAAAAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAEUAeAB0AAAAAAAAAAEAAA4QAAEAAAAA//////////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAGAAAAABYAcAAtAE0AYQB4AF8AKABFAHgAdAApAAAAAAAAABYAcAAtAE0AYQB4ACAAKABFAHgAdAApAAAACgBXAGEAdAB0AHMAAAAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABj//////////wH//1VV//8AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAHAAAAOEP////8AAAAKAAAAAAAAAAABAAAABgBFAHgAdAAAAAMAAAABAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAAAD" + "AAAAFABDAFAAIABIAGkAcwB0AG8AcgB5AAAAFABDAFAAIABIAGkAcwB0AG8AcgB5ACWCCAAAAAD/ACWDdAAAAAD/AAAAAQAB////////////////AAAAFQAAAAQAAAAGAAAAABAAQwBQAF8AKABlAHgAdAApAAAAAAAAABAAQwBQACAAKABlAHgAdAApAAAACgBXAGEAdAB0AHMAAAAAAAEAAAAAAAAAAAAAAAABAAAAAAAAf//0gZauAAB/////qLD//////////wH/////9fUAAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEP////8AAAAKAAAAAAAAAAABAAAABgBlAHgAdAAAAAEAAAPnAAAOEAABAAAAAP////8AAAEEACMAIAB0AHkAcABlACAAaQBuACAAYQAgAGYAbwByAG0AdQBsAGEAIAB0AG8AIAB1AHMAZQAKACMAIABmAG8AcgAgAGUALgBnAC4AIABCAGkAawBlAFMAdAByAGUAcwBzACAALwAgAEQAdQByAGEAdABpAG8AbgAKACMAIABhAHMAIAB5AG8AdQAgAHQAeQBwAGUAIAB0AGgAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAbQBlAHQAcgBpAGMAcwAKACMAIAB3AGkAbABsACAAYgBlACAAbwBmAGYAZQByAGUAZAAgAGIAeQAgAGEAdQB0AG8AYwBvAG0AcABsAGUAdABlAAoAAAABAAAADgBzAGUAYQByAGMAaAA6AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAEAAAAAFABjAHAAXwBzAGUAdAB0AGkAbgBnAAAAHABDAHIAaQB0AGkAYwBhAGwAIABQAG8AdwBlAHIAAAAcAEMAcgBpAHQAaQBjAGEAbAAgAFAAbwB3AGUAcgAAAAAAAAAAAAEAAAAAAAAAAAAAAAABAAB/3QAAAAAAAAE4AAAAAAS7yTD//////////wH/////TM0AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAOEP////8AAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAABAAAOEAABAAAAAAAAAAD/////AAAAAf////8AAAAAAAAAAAEBAAAA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" @@ -32,4 +32,10 @@ "AAAAHgBUAGkAbQBlACAAJgAgAEQAaQBzAHQAYQBuAGMAZf////8AAAAA//////8AAAAA//////8BYM1AAAD///////////////8AAAAVAAAAAwAAAAEAAAAAGAB3AG8AcgBrAG8AdQB0AF8AdABpAG0AZQAAABAARAB1AHIAYQB0AGkAbwBuAAAAEABEAHUAcgBhAHQAaQBvAG4AAAAOAHMAZQBjAG8AbgBkAHMAAAAAAAUAAAAAAAAAAAAAAAABAAB//wAAAAABR+EIAAAAAAFgqHgAAAABAAAAAAH//wAA/////wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAADjvxtAAAB///////8BR+EIAAAAAAAAAAAAAAAAAAAAAEAAAAAABnsOCQEBAAAAAAAAAA4AcwBlAGMAbwBuAGQAc/////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAABwAdABvAHQAYQBsAF8AZABpAHMAdABhAG4AYwBlAAAAEABEAGkAcwB0AGEAbgBjAGUAAAAQAEQAaQBzAHQAYQBuAGMAZQAAAAQAawBtAAAAAAAFAAAAAAAAAAAAAAAAAQAAf/8AAAAAAUfhCAAAAAABYKh4/////wAAAAEB//+qqgAAAAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAACDq4XAAAf5n/////AAAAAgAAAAAAAAAAAAAAAAABTkhQAAAAAAFg1UAAAQAAAAAAAAAEAGsAbf////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAABYAdABpAG0AZQBfAHIAaQBkAGkAbgBnAAAAFgBUAGkAbQBlACAATQBvAHYAaQBuAGcAAAAWAFQAaQBtAGUAIABNAG8AdgBpAG4AZwAAAA4AcwBlAGMAbwBuAGQAcwAAAAAABQAAAAAAAAAAAAAAAAEAAH//AAAAAAFH4QgAAAAAAWCoeAAAAAEAAAAAAf//AABVVX9/AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAg6uFwAAH+Z/////wAAAAIAAAAAAAAAAAAAAAAAAU5IUAAAAAABYNVAAAEAAAAAAAAADgBzAGUAYwBvAG4AZABz/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAABAAAAAA==" "AAAAJgBTAHQAcgBlAHMAcwAgAGEAbgBkACAARABpAHMAdABhAG4AYwBl/////wAAAAD//////wAAAAD//////wFk08AAAP///////////////wAAABUAAAACAAAAAQAAAAAUAGMAbwBnAGcAYQBuAF8AdABzAHMAAAAUAEIAaQBrAGUAUwB0AHIAZQBzAHMAAAAGAFQAUwBT/////wAAAAAAAAAAAAAAAAAAAAAAAAEAAH//AAAAAAFH4QgAAAAAAWDz+AAAAAEAAAAAAf///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAOO/G0AAAH///////wFH4QgAAAAAAAAAAAAAAAAAAAAAQAAAAAAGew4JAQEAAAAA//////////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAABwAdABvAHQAYQBsAF8AZABpAHMAdABhAG4AYwBlAAAAEABEAGkAcwB0AGEAbgBjAGUAAAAQAEQAaQBzAHQAYQBuAGMAZQAAAAQAawBtAAAAAAAAAAAAAAAAAAAAAAAAAQAAf/8AAAAAAUfhCAAAAAABYPP4AAAAAgAAAAIB/////wAAAAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAACDq4XAAAf5n/////AAAAAgAAAAAAAAAAAAAAAAABTkhQAAAAAAFg1UAAAQAAAAAAAAAEAGsAbf////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAQAAAAA=" "AAAAKABDAGEAbABvAHIAaQBlAHMAIAB2AHMAIABEAHUAcgBhAHQAaQBvAG7/////AAAAAP//////AAAAAP//////AWDLcAAA////////////////AAAAFQAAAAIAAAABAAAAABQAdABvAHQAYQBsAF8AdwBvAHIAawAAAAgAVwBvAHIAawAAAAgAVwBvAHIAawAAAAQAawBKAAAAAAAAAAAAAAAAAAAAAAAAAQAAf/8AAAAAAUfhCAAAAAABYMLI/////wAAAAAB//8AAAAAf38AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAA478bQAAAf///////AUfhCAAAAAAAAAAAAAAAAAAAAABAAAAAAAZ7DgkBAQAAAAAAAAAEAGsASv////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAABgAdwBvAHIAawBvAHUAdABfAHQAaQBtAGUAAAAQAEQAdQByAGEAdABpAG8AbgAAABAARAB1AHIAYQB0AGkAbwBuAAAADgBzAGUAYwBvAG4AZABzAAAAAAACAAAAAAAAAAAAAAAAAQAAf/8AAAAAAUfhCAAAAAABYMLIAAAAAQAAAAAB//9OTpub//8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAACDq4XAAAf5n/////AAAAAgAAAAAAAAAAAAAAAAABTkhQAAAAAAFg1UAAAQAAAAAAAAAOAHMAZQBjAG8AbgBkAHP/////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAEAAAAA" + "AAAAMgBUAGkAbQBlACAAaQBuACAASABSACAAWgBvAG4AZQBzACAASQAtAEkASQAtAEkASQBJAAAAMgBUAGkAbQBlACAAaQBuACAASABSACAAWgBvAG4AZQBzACAASQAtAEkASQAtAEkASQBJACWCCAAAAAD/ACWDdAAAAAD/AAAAAQAA////////////////AAAAFQAAAAMAAAABAAAAAB4AdABpAG0AZQBfAGkAbgBfAHoAbwBuAGUAXwBIAEkAAAAeAEgASQAgAFQAaQBtAGUAIABpAG4AIABaAG8AbgBlAAAAHgBIAEkAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAAA4AcwBlAGMAbwBuAGQAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af//VVX//wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAAAAAAA4QAAAAAAAAAAAADgBzAGUAYwBvAG4AZABzAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAACAAdABpAG0AZQBfAGkAbgBfAHoAbwBuAGUAXwBIAEkASQAAACAASABJAEkAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAACAASABJAEkAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAAA4AcwBlAGMAbwBuAGQAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAADgBzAGUAYwBvAG4AZABzAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAACIAdABpAG0AZQBfAGkAbgBfAHoAbwBuAGUAXwBIAEkASQBJAAAAIgBIAEkASQBJACAAVABpAG0AZQAgAGkAbgAgAFoAbwBuAGUAAAAiAEgASQBJAEkAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAAA4AcwBlAGMAbwBuAGQAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af////8NDQAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAADgBzAGUAYwBvAG4AZABzAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAAAAM=" + "AAAAOABQAGUAcgBjAGUAbgB0ACAAaQBuACAASABSACAAWgBvAG4AZQBzACAASQAtAEkASQAtAEkASQBJAAAAOABQAGUAcgBjAGUAbgB0ACAAaQBuACAASABSACAAWgBvAG4AZQBzACAASQAtAEkASQAtAEkASQBJACWCCAAAAAD/ACWDdAAAAAD/AAAAAQAA////////////////AAAAFQAAAAMAAAABAQAAACQAcABlAHIAYwBlAG4AdABfAGkAbgBfAHoAbwBuAGUAXwBIAEkAAAAkAEgASQAgAFAAZQByAGMAZQBuAHQAIABpAG4AIABaAG8AbgBlAAAAJABIAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAWgBvAG4AZQAAAAIAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af//AAD//wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAAAAAAA4QAAAAAAAAAAAAAgAlAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAQAAACYAcABlAHIAYwBlAG4AdABfAGkAbgBfAHoAbwBuAGUAXwBIAEkASQAAACYASABJAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAWgBvAG4AZQAAACYASABJAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAWgBvAG4AZQAAAAIAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAAAgAlAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAQAAACgAcABlAHIAYwBlAG4AdABfAGkAbgBfAHoAbwBuAGUAXwBIAEkASQBJAAAAKABIAEkASQBJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFoAbwBuAGUAAAAoAEgASQBJAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAWgBvAG4AZQAAAAIAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af////8zMwAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAAAgAlAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAAAAM=" + "AAAAOABUAGkAbQBlACAAaQBuACAAUABvAHcAZQByACAAWgBvAG4AZQBzACAASQAtAEkASQAtAEkASQBJAAAAOABUAGkAbQBlACAAaQBuACAAUABvAHcAZQByACAAWgBvAG4AZQBzACAASQAtAEkASQAtAEkASQBJACWCCAAAAAD/ACWDdAAAAAD/AAAAAQAA////////////////AAAAFQAAAAMAAAABAAAAAB4AdABpAG0AZQBfAGkAbgBfAHoAbwBuAGUAXwBMAEkAAAAeAEwASQAgAFQAaQBtAGUAIABpAG4AIABaAG8AbgBlAAAAHgBMAEkAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAAA4AcwBlAGMAbwBuAGQAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af//AAD//wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAAAAAAA4QAAAAAAAAAAAADgBzAGUAYwBvAG4AZABzAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEBAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAACAAdABpAG0AZQBfAGkAbgBfAHoAbwBuAGUAXwBMAEkASQAAACAATABJAEkAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAACAATABJAEkAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAAA4AcwBlAGMAbwBuAGQAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAADgBzAGUAYwBvAG4AZABzAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEBAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAACIAdABpAG0AZQBfAGkAbgBfAHoAbwBuAGUAXwBMAEkASQBJAAAAIgBMAEkASQBJACAAVABpAG0AZQAgAGkAbgAgAFoAbwBuAGUAAAAiAEwASQBJAEkAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAAA4AcwBlAGMAbwBuAGQAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af////8AAAAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAAAAAAA4QAAAAAAAAAAAADgBzAGUAYwBvAG4AZABzAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEBAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAAAAM=" + "AAAAPgBQAGUAcgBjAGUAbgB0ACAAaQBuACAAUABvAHcAZQByACAAWgBvAG4AZQBzACAASQAtAEkASQAtAEkASQBJAAAAPgBQAGUAcgBjAGUAbgB0ACAAaQBuACAAUABvAHcAZQByACAAWgBvAG4AZQBzACAASQAtAEkASQAtAEkASQBJACWCCAAAAAD/ACWDdAAAAAD/AAAAAQAA////////////////AAAAFQAAAAMAAAABAQAAACQAcABlAHIAYwBlAG4AdABfAGkAbgBfAHoAbwBuAGUAXwBMAEkAAAAkAEwASQAgAFAAZQByAGMAZQBuAHQAIABpAG4AIABaAG8AbgBlAAAAJABMAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAWgBvAG4AZQAAAAIAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af//AAD//wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAAAAAAA4QAAAAAAAAAAAAAgAlAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEBAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAQAAACYAcABlAHIAYwBlAG4AdABfAGkAbgBfAHoAbwBuAGUAXwBMAEkASQAAACYATABJAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAWgBvAG4AZQAAACYATABJAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAWgBvAG4AZQAAAAIAJQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAAAgAlAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEBAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAQAAACgAcABlAHIAYwBlAG4AdABfAGkAbgBfAHoAbwBuAGUAXwBMAEkASQBJAAAAKABMAEkASQBJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFoAbwBuAGUAAAAoAEwASQBJAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAWgBvAG4AZQAAAAIAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af////8mZgAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAAAAAAA4QAAAAAAAAAAAAAgAlAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEBAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAAAAM=" + "AAAANgBUAGkAbQBlACAAaQBuACAAUABhAGMAZQAgAFoAbwBuAGUAcwAgAEkALQBJAEkALQBJAEkASQAAADYAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAHMAIABJAC0ASQBJAC0ASQBJAEkAJYIIAAAAAP8AJYN0AAAAAP8AAAABAAD///////////////8AAAAVAAAAAwAAAAEAAAAAHgB0AGkAbQBlAF8AaQBuAF8AegBvAG4AZQBfAFAASQAAACgAUABJACAAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAKABQAEkAIABUAGkAbQBlACAAaQBuACAAUABhAGMAZQAgAFoAbwBuAGUAAAAOAHMAZQBjAG8AbgBkAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAFsAAAAB/////wH//wAA//8AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEP////8AAAAKAAAAAAAAAAAAAAAABgBjAHAAMgAAAAAAAAAAAAAOEAAAAAAAAAAAAA4AcwBlAGMAbwBuAGQAcwAAAQQAIwAgAHQAeQBwAGUAIABpAG4AIABhACAAZgBvAHIAbQB1AGwAYQAgAHQAbwAgAHUAcwBlAAoAIwAgAGYAbwByACAAZQAuAGcALgAgAEIAaQBrAGUAUwB0AHIAZQBzAHMAIAAvACAARAB1AHIAYQB0AGkAbwBuAAoAIwAgAGEAcwAgAHkAbwB1ACAAdAB5AHAAZQAgAHQAaABlACAAYQB2AGEAaQBsAGEAYgBsAGUAIABtAGUAdAByAGkAYwBzAAoAIwAgAHcAaQBsAGwAIABiAGUAIABvAGYAZgBlAHIAZQBkACAAYgB5ACAAYQB1AHQAbwBjAG8AbQBwAGwAZQB0AGUACgAAAAEAAAAOAHMAZQBhAHIAYwBoADoAAAAAAAAAAAEBAQAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAQAAAAAgAHQAaQBtAGUAXwBpAG4AXwB6AG8AbgBlAF8AUABJAEkAAAAqAFAASQBJACAAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAKgBQAEkASQAgAFQAaQBtAGUAIABpAG4AIABQAGEAYwBlACAAWgBvAG4AZQAAAA4AcwBlAGMAbwBuAGQAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAADgBzAGUAYwBvAG4AZABzAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEBAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAACIAdABpAG0AZQBfAGkAbgBfAHoAbwBuAGUAXwBQAEkASQBJAAAALABQAEkASQBJACAAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAALABQAEkASQBJACAAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAADgBzAGUAYwBvAG4AZABzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG4AAABbAAAAAf////8B/////zMzAAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAAAAAAAAAAAAAYAYwBwADIAAAAAAAAD5wAADhAAAAAAAAAAAAAOAHMAZQBjAG8AbgBkAHMAAAEEACMAIAB0AHkAcABlACAAaQBuACAAYQAgAGYAbwByAG0AdQBsAGEAIAB0AG8AIAB1AHMAZQAKACMAIABmAG8AcgAgAGUALgBnAC4AIABCAGkAawBlAFMAdAByAGUAcwBzACAALwAgAEQAdQByAGEAdABpAG8AbgAKACMAIABhAHMAIAB5AG8AdQAgAHQAeQBwAGUAIAB0AGgAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAbQBlAHQAcgBpAGMAcwAKACMAIAB3AGkAbABsACAAYgBlACAAbwBmAGYAZQByAGUAZAAgAGIAeQAgAGEAdQB0AG8AYwBvAG0AcABsAGUAdABlAAoAAAABAAAADgBzAGUAYQByAGMAaAA6AAAAAAAAAAABAQEAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAw==" + "AAAAPABQAGUAcgBjAGUAbgB0ACAAaQBuACAAUABhAGMAZQAgAFoAbwBuAGUAcwAgAEkALQBJAEkALQBJAEkASQAAADwAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAHMAIABJAC0ASQBJAC0ASQBJAEkAJYIIAAAAAP8AJYN0AAAAAP8AAAABAAD///////////////8AAAAVAAAAAwAAAAEBAAAAJABwAGUAcgBjAGUAbgB0AF8AaQBuAF8AegBvAG4AZQBfAFAASQAAAC4AUABJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAALgBQAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAUABhAGMAZQAgAFoAbwBuAGUAAAACACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAFsAAAAB/////wH//wAA//8AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEP////8AAAAKAAAAAAAAAAAAAAAABgBjAHAAMgAAAAAAAAAAAAAOEAAAAAAAAAAAAAIAJQAAAQQAIwAgAHQAeQBwAGUAIABpAG4AIABhACAAZgBvAHIAbQB1AGwAYQAgAHQAbwAgAHUAcwBlAAoAIwAgAGYAbwByACAAZQAuAGcALgAgAEIAaQBrAGUAUwB0AHIAZQBzAHMAIAAvACAARAB1AHIAYQB0AGkAbwBuAAoAIwAgAGEAcwAgAHkAbwB1ACAAdAB5AHAAZQAgAHQAaABlACAAYQB2AGEAaQBsAGEAYgBsAGUAIABtAGUAdAByAGkAYwBzAAoAIwAgAHcAaQBsAGwAIABiAGUAIABvAGYAZgBlAHIAZQBkACAAYgB5ACAAYQB1AHQAbwBjAG8AbQBwAGwAZQB0AGUACgAAAAEAAAAOAHMAZQBhAHIAYwBoADoAAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAQEAAAAmAHAAZQByAGMAZQBuAHQAXwBpAG4AXwB6AG8AbgBlAF8AUABJAEkAAAAwAFAASQBJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAMABQAEkASQAgAFAAZQByAGMAZQBuAHQAIABpAG4AIABQAGEAYwBlACAAWgBvAG4AZQAAAAIAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAAAgAlAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAQAAACgAcABlAHIAYwBlAG4AdABfAGkAbgBfAHoAbwBuAGUAXwBQAEkASQBJAAAAMgBQAEkASQBJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAMgBQAEkASQBJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAAgAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG4AAABbAAAAAf////8B/////wzNAAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAAAAAAAAAAAAAYAYwBwADIAAAAAAAAAAAAADhAAAAAAAAAAAAACACUAAAEEACMAIAB0AHkAcABlACAAaQBuACAAYQAgAGYAbwByAG0AdQBsAGEAIAB0AG8AIAB1AHMAZQAKACMAIABmAG8AcgAgAGUALgBnAC4AIABCAGkAawBlAFMAdAByAGUAcwBzACAALwAgAEQAdQByAGEAdABpAG8AbgAKACMAIABhAHMAIAB5AG8AdQAgAHQAeQBwAGUAIAB0AGgAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAbQBlAHQAcgBpAGMAcwAKACMAIAB3AGkAbABsACAAYgBlACAAbwBmAGYAZQByAGUAZAAgAGIAeQAgAGEAdQB0AG8AYwBvAG0AcABsAGUAdABlAAoAAAABAAAADgBzAGUAYQByAGMAaAA6AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAw=="