diff --git a/gradle.properties b/gradle.properties index ffe5704..d8ef817 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ kotlin.code.style=official # Artifact metadata GROUP=ch.admin.bag.covidcertificate POM_ARTIFACT_ID=sdk-core -VERSION_NAME=3.2.1 +VERSION_NAME=3.3.0 # POM metadata POM_NAME=sdk-core diff --git a/src/main/java/ch/admin/bag/covidcertificate/sdk/core/models/trustlist/RevokedCertificatesInMemoryImpl.kt b/src/main/java/ch/admin/bag/covidcertificate/sdk/core/models/trustlist/RevokedCertificatesInMemoryImpl.kt index fc92c8d..19228b7 100644 --- a/src/main/java/ch/admin/bag/covidcertificate/sdk/core/models/trustlist/RevokedCertificatesInMemoryImpl.kt +++ b/src/main/java/ch/admin/bag/covidcertificate/sdk/core/models/trustlist/RevokedCertificatesInMemoryImpl.kt @@ -20,4 +20,8 @@ class RevokedCertificatesInMemoryImpl(private var revokedCertificates: List) + + fun getPrepopulatedSinceHeader(isProd: Boolean): String } \ No newline at end of file diff --git a/src/test/java/ch/admin/bag/covidcertificate/sdk/core/verifier/nationalrules/EOLBannerTests.kt b/src/test/java/ch/admin/bag/covidcertificate/sdk/core/verifier/nationalrules/EOLBannerTests.kt index 8552465..d918407 100644 --- a/src/test/java/ch/admin/bag/covidcertificate/sdk/core/verifier/nationalrules/EOLBannerTests.kt +++ b/src/test/java/ch/admin/bag/covidcertificate/sdk/core/verifier/nationalrules/EOLBannerTests.kt @@ -47,88 +47,6 @@ class EOLBannerTests { utcClock = Clock.systemUTC() } - - @Test - fun testinvalidInThreeWeeks() { - val clockToday = Clock.fixed(Instant.parse("2022-01-20T12:00:00Z"), ZoneId.systemDefault()) - val clockFirstFeb = Clock.fixed(Instant.parse("2022-02-01T12:00:00Z"), ZoneId.systemDefault()) - var vaccinationDate = LocalDate.now(clockFirstFeb).atStartOfDay().minusDays(270 - 1L) - - var vaccine = Vaccine.BIONTECH - var vaccination = TestDataGenerator.generateVaccineCert( - 2, - 2, - vaccine.manufacturer, - vaccine.identifier, - AcceptanceCriteriasConstants.TARGET_DISEASE, - vaccine.prophylaxis, - vaccinationDate, - ) - var data = getJsonNodeData(vaccination, null, clockToday) - var bannerID = displayValidityCalculator.getEolBannerIdentifier(nationalRuleSet.displayRules, data) - Assertions.assertEquals(bannerID, "invalidInThreeWeeks") - - - vaccinationDate = LocalDate.now(clockFirstFeb).atStartOfDay().minusDays(270).minusDays(21).plusDays(1) - vaccine = Vaccine.JANSSEN - vaccination = TestDataGenerator.generateVaccineCert( - 1, - 1, - vaccine.manufacturer, - vaccine.identifier, - AcceptanceCriteriasConstants.TARGET_DISEASE, - vaccine.prophylaxis, - vaccinationDate, - ) - data = getJsonNodeData(vaccination, null, clockToday) - bannerID = displayValidityCalculator.getEolBannerIdentifier(nationalRuleSet.displayRules, data) - Assertions.assertEquals(bannerID, "invalidInThreeWeeks") - - //recovery - val firstTestResult = LocalDate.now(clockFirstFeb).minusDays(180).plusDays(1) - val validFrom = firstTestResult.plusDays(10) - val validUntil = firstTestResult.plusDays(179) - val recovery = TestDataGenerator.generateRecoveryCertFromDate( - validFrom.atStartOfDay(), - validUntil.atStartOfDay(), - firstTestResult.atStartOfDay(), - AcceptanceCriteriasConstants.TARGET_DISEASE - - ) - - data = getJsonNodeData(recovery, null, clockToday) - bannerID = displayValidityCalculator.getEolBannerIdentifier(nationalRuleSet.displayRules, data) - Assertions.assertEquals(bannerID, "invalidInThreeWeeks") - - //antigen - var now = OffsetDateTime.now(clockFirstFeb).minusDays(180).plusDays(1) - var sampleCollectionTime = now - var test = TestDataGenerator.generateTestCertFromDate( - TestType.RAT.code, - AcceptanceCriteriasConstants.POSITIVE_CODE, - "Nucleic acid amplification with probe detection", - AcceptanceCriteriasConstants.TARGET_DISEASE, - sampleCollectionTime - ) - data = getJsonNodeData(test, null, clockToday) - bannerID = displayValidityCalculator.getEolBannerIdentifier(nationalRuleSet.displayRules, data) - Assertions.assertEquals(bannerID, "invalidInThreeWeeks") - - now = OffsetDateTime.now(clockFirstFeb).minusDays(365).plusDays(1) - sampleCollectionTime = now - test = TestDataGenerator.generateTestCertFromDate( - TestType.MEDICAL_EXEMPTION.code, - AcceptanceCriteriasConstants.NEGATIVE_CODE, - "Ausnahme", - AcceptanceCriteriasConstants.TARGET_DISEASE, - sampleCollectionTime - ) - - data = getJsonNodeData(test, null, clockToday) - bannerID = displayValidityCalculator.getEolBannerIdentifier(nationalRuleSet.displayRules, data) - Assertions.assertEquals(bannerID, "invalidInThreeWeeks") - } - @Test fun testNotInvalid() { val clockFirstFeb = Clock.fixed(Instant.parse("2022-02-01T12:00:00Z"), ZoneId.systemDefault()) diff --git a/src/test/resources/nationalrules.json b/src/test/resources/nationalrules.json index 94a558a..16e32f7 100644 --- a/src/test/resources/nationalrules.json +++ b/src/test/resources/nationalrules.json @@ -9,7 +9,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "GR-CH-0001", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "General", "logic": { "and": [ @@ -93,7 +93,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "RR-CH-0000", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Recovery", "logic": { "if": [ @@ -156,7 +156,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "RR-CH-0001", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Recovery", "logic": { "if": [ @@ -197,7 +197,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "RR-CH-0002", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Recovery", "logic": { "if": [ @@ -249,7 +249,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "RR-CH-0003", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Recovery", "logic": { "if": [ @@ -301,7 +301,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0000", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -364,7 +364,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0001", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -417,7 +417,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0002", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -460,7 +460,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0004", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -501,7 +501,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0005", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -553,7 +553,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0006", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -623,7 +623,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0007", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -680,7 +680,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0008", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -734,7 +734,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0009", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -791,7 +791,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0010", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -848,7 +848,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0011", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -918,7 +918,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "TR-CH-0012", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Test", "logic": { "if": [ @@ -988,7 +988,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "VR-CH-0000", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Vaccination", "logic": { "if": [ @@ -1051,7 +1051,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "VR-CH-0001", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Vaccination", "logic": { "if": [ @@ -1092,7 +1092,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "VR-CH-0002", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Vaccination", "logic": { "if": [ @@ -1120,7 +1120,9 @@ "Covovax", "BBIBP-CorV_T", "CoronaVac_T", - "Covaxin_T" + "Covaxin_T", + "VLA2001", + "Convidecia" ] ] }, @@ -1147,7 +1149,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "VR-CH-0003", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Vaccination", "logic": { "if": [ @@ -1188,7 +1190,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "VR-CH-0004", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Vaccination", "logic": { "if": [ @@ -1217,7 +1219,8 @@ "Covovax", "BBIBP-CorV_T", "CoronaVac_T", - "Covaxin_T" + "Covaxin_T", + "VLA2001" ] ] } @@ -1269,7 +1272,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "VR-CH-0005", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Vaccination", "logic": { "if": [ @@ -1286,7 +1289,8 @@ "var": "payload.v.0.mp" }, [ - "EU/1/20/1525" + "EU/1/20/1525", + "Convidecia" ] ] }, @@ -1350,7 +1354,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "VR-CH-0006", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Vaccination", "logic": { "if": [ @@ -1379,7 +1383,8 @@ "Covovax", "BBIBP-CorV_T", "CoronaVac_T", - "Covaxin_T" + "Covaxin_T", + "VLA2001" ] ] } @@ -1431,7 +1436,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "VR-CH-0007", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Vaccination", "logic": { "if": [ @@ -1448,7 +1453,8 @@ "var": "payload.v.0.mp" }, [ - "EU/1/20/1525" + "EU/1/20/1525", + "Convidecia" ] ] }, @@ -1538,7 +1544,7 @@ "validTo": "2031-01-01T00:00:00Z", "identifier": "VR-CH-0008", "version": "1.0.12", - "validFrom": "2022-03-06T00:00:00Z", + "validFrom": "2022-09-08T00:00:00Z", "certificateType": "Vaccination", "logic": { "if": [ @@ -1555,7 +1561,8 @@ "var": "payload.v.0.mp" }, [ - "EU/1/20/1525" + "EU/1/20/1525", + "Convidecia" ] ] }, @@ -2263,7 +2270,8 @@ "var": "payload.v.0.mp" }, [ - "EU/1/20/1525" + "EU/1/20/1525", + "Convidecia" ] ] }, @@ -2426,7 +2434,8 @@ "var": "payload.v.0.mp" }, [ - "EU/1/20/1525" + "EU/1/20/1525", + "Convidecia" ] ] }, @@ -2459,7 +2468,8 @@ "var": "payload.v.0.mp" }, [ - "EU/1/20/1525" + "EU/1/20/1525", + "Convidecia" ] ] }, @@ -2615,7 +2625,8 @@ "Covovax", "BBIBP-CorV_T", "CoronaVac_T", - "Covaxin_T" + "Covaxin_T", + "VLA2001" ] ] }, @@ -2789,63 +2800,57 @@ } }, { - "id": "refresh-banner", + "id": "renew-banner", "logic": { "if": [ { - "var": "payload.h.exp" - }, - { - "if": [ + "and": [ { - "before": [ - { - "var": "payload.h.exp" - }, - { - "plusTime": [ - { - "var": "external.validationClock" - }, - 90, - "day" - ] - } - ] + "var": "payload.h.exp" }, - "showRefreshBanner", { - "var": "undefined" + "var": "payload.v.0" + }, + { + "var": "payload.h.iss" } ] }, - { - "var": "undefined" - } - ] - } - }, - { - "id": "renew-banner", - "logic": { - "if": [ - { - "var": "payload.h.exp" - }, { "if": [ { - "before": [ + "and": [ { - "var": "payload.h.exp" + "before": [ + { + "plusTime": [ + { + "var": "payload.h.exp" + }, + 0, + "day" + ] + }, + { + "plusTime": [ + { + "var": "external.validationClock" + }, + 90, + "day" + ] + } + ] }, { - "plusTime": [ + "in": [ { - "var": "external.validationClock" + "var": "payload.h.iss" }, - 90, - "day" + [ + "CH", + "CH BAG" + ] ] } ] @@ -2865,505 +2870,123 @@ { "id": "eol-banner", "logic": { - "if": [ - { - "var": "payload.v.0" - }, + "var": "undefined" + } + }, + { + "id": "is-only-valid-in-ch", + "logic": { + "!": [ { - "if": [ + "and": [ { - "and": [ + "!": [ { - "in": [ + "if": [ { - "var": "payload.v.0.mp" + "var": "payload.t.0" }, - [ - "EU/1/20/1525" - ] - ] - }, - { - "===": [ { - "var": "payload.v.0.dn" + "in": [ + { + "var": "payload.t.0.tt" + }, + [ + "medical-exemption" + ] + ] }, - 1 + false ] } ] }, { - "if": [ + "!": [ { - "not-after": [ + "if": [ { - "plusTime": [ - { - "var": "payload.v.0.dt" - }, - 291, - "day" - ] + "var": "payload.t.0" }, { - "plusTime": [ + "and": [ { - "var": "external.validationClock" + "in": [ + { + "var": "payload.t.0.tt" + }, + [ + "LP217198-3" + ] + ] }, - 21, - "day" - ] - } - ] - }, - { - "if": [ - { - "after": [ { - "plusTime": [ + "===": [ { - "var": "payload.v.0.dt" + "var": "payload.t.0.tr" }, - 291, - "day" + "260373001" ] }, { - "plusTime": [ + "in": [ { - "var": "external.validationClock" + "var": "payload.t.0.co" }, - 0, - "day" + [ + "CH" + ] ] } ] }, - "invalidInThreeWeeks", - { - "var": "undefined" - } + false ] - }, - { - "var": "undefined" } ] }, { - "if": [ + "!": [ { - "not-after": [ + "if": [ { - "plusTime": [ - { - "var": "payload.v.0.dt" - }, - 270, - "day" - ] + "var": "payload.t.0" }, { - "plusTime": [ - { - "var": "external.validationClock" - }, - 21, - "day" - ] - } - ] - }, - { - "if": [ - { - "after": [ + "in": [ { - "plusTime": [ - { - "var": "payload.v.0.dt" - }, - 270, - "day" - ] + "var": "payload.t.0.tt" }, - { - "plusTime": [ - { - "var": "external.validationClock" - }, - 0, - "day" - ] - } + [ + "94504-8" + ] ] }, - "invalidInThreeWeeks", - { - "var": "undefined" - } + false ] - }, - { - "var": "undefined" } ] - } - ] - }, - { - "if": [ - { - "var": "payload.r.0" }, { - "if": [ + "!": [ { - "not-after": [ + "if": [ { - "plusTime": [ - { - "var": "payload.r.0.fr" - }, - 180, - "day" - ] + "var": "payload.v.0" }, { - "plusTime": [ - { - "var": "external.validationClock" - }, - 21, - "day" - ] - } - ] - }, - { - "if": [ - { - "after": [ + "in": [ { - "plusTime": [ - { - "var": "payload.r.0.fr" - }, - 180, - "day" - ] + "var": "payload.v.0.mp" }, - { - "plusTime": [ - { - "var": "external.validationClock" - }, - 0, - "day" - ] - } + [ + "BBIBP-CorV_T", + "CoronaVac_T", + "Covaxin_T" + ] ] }, - "invalidInThreeWeeks", - { - "var": "undefined" - } - ] - }, - { - "var": "undefined" - } - ] - }, - { - "if": [ - { - "var": "payload.t.0" - }, - { - "if": [ - { - "and": [ - { - "in": [ - { - "var": "payload.t.0.tt" - }, - [ - "LP217198-3" - ] - ] - }, - { - "===": [ - { - "var": "payload.t.0.tr" - }, - "260373001" - ] - } - ] - }, - { - "if": [ - { - "not-after": [ - { - "plusTime": [ - { - "var": "payload.t.0.sc" - }, - 180, - "day" - ] - }, - { - "plusTime": [ - { - "var": "external.validationClock" - }, - 21, - "day" - ] - } - ] - }, - { - "if": [ - { - "after": [ - { - "plusTime": [ - { - "var": "payload.t.0.sc" - }, - 180, - "day" - ] - }, - { - "plusTime": [ - { - "var": "external.validationClock" - }, - 0, - "day" - ] - } - ] - }, - "invalidInThreeWeeks", - { - "var": "undefined" - } - ] - }, - { - "var": "undefined" - } - ] - }, - { - "if": [ - { - "and": [ - { - "in": [ - { - "var": "payload.t.0.tt" - }, - [ - "medical-exemption" - ] - ] - }, - { - "not-after": [ - { - "plusTime": [ - { - "var": "payload.t.0.sc" - }, - 365, - "day" - ] - }, - { - "plusTime": [ - { - "var": "external.validationClock" - }, - 21, - "day" - ] - } - ] - } - ] - }, - { - "if": [ - { - "after": [ - { - "plusTime": [ - { - "var": "payload.t.0.sc" - }, - 365, - "day" - ] - }, - { - "plusTime": [ - { - "var": "external.validationClock" - }, - 0, - "day" - ] - } - ] - }, - "invalidInThreeWeeks", - { - "var": "undefined" - } - ] - }, - { - "var": "undefined" - } - ] - } - ] - }, - { - "var": "undefined" - } - ] - } - ] - } - ] - } - }, - { - "id": "is-only-valid-in-ch", - "logic": { - "!": [ - { - "and": [ - { - "!": [ - { - "if": [ - { - "var": "payload.t.0" - }, - { - "in": [ - { - "var": "payload.t.0.tt" - }, - [ - "medical-exemption" - ] - ] - }, - false - ] - } - ] - }, - { - "!": [ - { - "if": [ - { - "var": "payload.t.0" - }, - { - "and": [ - { - "in": [ - { - "var": "payload.t.0.tt" - }, - [ - "LP217198-3" - ] - ] - }, - { - "===": [ - { - "var": "payload.t.0.tr" - }, - "260373001" - ] - }, - { - "in": [ - { - "var": "payload.t.0.co" - }, - [ - "CH" - ] - ] - } - ] - }, - false - ] - } - ] - }, - { - "!": [ - { - "if": [ - { - "var": "payload.t.0" - }, - { - "in": [ - { - "var": "payload.t.0.tt" - }, - [ - "94504-8" - ] - ] - }, - false - ] - } - ] - }, - { - "!": [ - { - "if": [ - { - "var": "payload.v.0" - }, - { - "in": [ - { - "var": "payload.v.0.mp" - }, - [ - "BBIBP-CorV_T", - "CoronaVac_T", - "Covaxin_T" - ] - ] - }, - false + false ] } ] @@ -3657,7 +3280,8 @@ "NVSI", "Yisheng-Biopharma", "ORG-100026614", - "ORG-100008549" + "ORG-100008549", + "Finlay-Institute" ], "disease-agent-targeted": [ "840539006" @@ -3708,240 +3332,262 @@ "YS-SC2-010", "SCTV01C", "Covifenz", - "AZD2816" + "AZD2816", + "Soberana-02", + "Soberana-Plus" ], "covid-19-lab-test-type": [ "LP6464-4", "LP217198-3" ], "covid-19-lab-test-manufacturer-and-name": [ - "1341", - "1065", - "1581", - "2031", - "1180", - "1216", - "2029", - "1215", + "1833", + "1232", + "2374", + "1982", + "2579", "1457", - "1456", - "1610", - "1333", - "2147", - "1574", - "1331", - "1739", - "1618", - "1736", - "1218", - "1190", - "1197", - "1501", + "1865", "1468", - "1225", - "1466", - "1465", - "1223", - "1343", - "1906", - "768", - "1747", - "1919", - "1363", - "1242", - "1484", - "1481", - "1360", - "2052", - "770", - "1357", - "1236", - "1599", - "1114", - "1199", - "2200", - "1870", - "1232", - "1495", - "1253", - "2067", - "1494", - "1097", - "1490", - "2183", - "1767", - "1800", - "1920", - "1489", - "1764", - "1884", - "1763", - "1365", - "1244", - "1243", - "1485", - "308", - "1769", - "1768", - "2078", - "1263", - "2074", - "2072", "2108", - "2228", - "2107", - "1775", - "1654", - "2104", - "1257", - "1773", - "2103", - "1375", - "2101", - "1815", - "1934", - "2109", - "2243", - "1271", - "1392", - "1822", - "1304", - "1820", - "2116", - "1268", - "1267", - "1420", - "1266", - "1144", - "2079", - "2090", - "2012", - "2098", - "2010", - "1162", "2130", - "1437", - "1833", - "2128", - "2006", - "1278", - "1957", - "1319", - "1296", - "1295", - "1173", - "1844", - "2139", - "2017", - "344", - "1324", - "345", - "1443", - "1201", - "1606", - "1967", - "1604", + "1304", + "1822", + "1736", + "1815", + "2089", + "2079", + "2078", + "768", + "1926", + "1618", + "1654", + "770", "2350", + "2010", + "1800", + "2101", + "1906", + "2282", + "1065", + "1870", + "2807", + "2072", + "1778", + "1331", + "2494", + "1485", + "1484", + "2031", "2247", "1286", + "2230", + "2519", "2035", + "1599", + "1242", + "2858", + "2380", + "1223", + "1494", + "2067", "2013", "1989", - "2242", - "1855", - "2317", - "1759", - "2241", - "1762", - "2290", - "1178", - "2374", - "2579", - "2089", - "2494", + "1236", + "1647", + "2691", + "1173", + "2696", + "2746", + "2588", "1691", "2150", + "2449", + "1919", + "1581", + "1225", + "1375", "1960", + "2242", + "2756", "2273", "2533", - "1929", - "1801", - "2278", - "2419", - "2144", - "2156", - "2415", - "2414", - "1813", - "2026", - "2297", - "2143", - "1902", - "2282", - "2506", - "1880", - "2230", + "1243", + "1739", + "2724", + "2147", + "2124", + "1855", + "1144", + "1244", "2642", + "2012", + "1253", + "2853", + "1820", + "2183", + "2695", + "1197", + "1747", + "1216", + "1360", + "1324", + "1437", + "2319", + "2325", + "1257", + "2302", + "2257", "1876", + "1363", + "1610", + "1365", + "2629", + "2862", + "2885", + "1844", + "2317", + "2979", + "1215", + "2139", "1945", + "1952", + "1392", + "2942", + "1767", + "1929", + "1759", + "1263", "2555", + "1791", + "1801", + "2278", + "2419", + "1783", + "1988", + "2107", + "1920", + "1899", + "2006", "2586", + "2144", + "2963", + "2151", + "1333", + "1764", + "2038", + "1266", + "2866", + "1592", + "1353", + "2128", + "1267", + "1268", + "1180", + "2029", + "1775", + "1190", "2640", + "1481", + "2260", + "2104", + "1162", "2301", + "2506", + "2164", + "1420", + "2200", + "1573", + "2678", + "2608", + "2241", + "1501", + "1880", + "1762", + "1199", + "1200", + "1593", + "2741", "2271", + "308", + "2243", + "2116", + "2672", + "1271", + "2685", + "1495", + "1341", + "2754", + "1097", + "2290", + "1606", + "1604", + "2228", + "2156", + "1489", + "1490", + "2097", + "2763", + "1201", + "344", + "345", + "2052", + "1319", + "1357", "2152", + "2415", + "2812", + "2414", + "2941", + "1813", + "2109", + "1967", + "1178", "1228", + "2026", + "2017", + "1769", + "1768", "1347", + "1574", + "1218", "2256", - "2684", - "1778", - "2696", - "2746", - "2695", - "2629", - "1353", - "2741", - "2754", - "2097", - "2584", - "2100", - "2807", - "2380", - "2756", - "2164", - "2763", + "1780", + "1114", + "2297", "1942", + "3015", + "3093", + "1466", + "1934", + "2074", + "1465", + "2584", "1751", "1689", "1722", - "1865", - "2853", - "1899", - "2151", - "2260", - "1573", - "2608", - "1200", - "2519", - "2724", - "2257", - "1988", - "2672", + "1443", + "2111", + "2100", + "2103", + "1276", + "2098", "2742", - "2201", - "1926", - "2302", - "2862", - "2979", - "1783", - "2963", - "2685", - "2941", - "2942", - "1791", - "2866", - "2812", - "3015" + "1773", + "2090", + "2143", + "1763", + "1278", + "1456", + "1884", + "2687", + "1296", + "1295", + "2684", + "1343", + "1902", + "1957", + "2201" ] } }