1
0
mirror of https://github.com/google/nomulus synced 2026-05-25 09:10:51 +00:00

Compare commits

..

25 Commits

Author SHA1 Message Date
Ben McIlwain
75851399ba Remove "letter G with stroke" from Extended Latin IDN table (#1938)
ICANN doesn't like this character because it's confusable with a normal G (the
stroke tends to get lost in the visual clutter of the descender), and .com's
Extended Latin table doesn't use it either. Best to get rid of it.
2023-02-23 16:27:15 -05:00
Lai Jiang
6d54c8d113 Add allowed license for json (#1942)
For some reason `./gradlew clean build` on master is failing for me on
multiple machines due to a new org.json:json version triggering license
violations, even though the lock files are not changing.

Note that the old versions are still present because if I remove
"The JSON license", which the old versions use, the check also fails...
2023-02-23 11:37:31 -05:00
Lai Jiang
34dfa2760e Add a table to record EPP resources needing DNS refresh (#1940) 2023-02-22 14:18:28 -05:00
Lai Jiang
ff39a4a763 Change default beam job region (#1937)
For reasons that I cannot explain, the same expand recurring billing
event pipeline would fail in us-east1 but succeed in us-central1.

See:

https://pantheon.corp.google.com/dataflow/jobs/us-central1/2023-02-09_14_52_24-162498476138221714;graphView=0?project=domain-registry

https://pantheon.corp.google.com/dataflow/jobs/us-east1/2023-02-09_14_26_07-4564782062878841960;graphView=1?project=domain-registry

Also improved how the accuracy of the metrics:

It is observed that both counters are consistently higher for the same
start and end times when running in dry run mode. There is no way to
test for consistency when not running in dry run, for obviously reasons.

I can make the recurrings in scope counter consistent by not updating it
in a side-effect-causing transaction, but there is no way around the
other counter. It can only be trusted when running in dry run mode,
unfortunately.
2023-02-13 15:57:32 -05:00
gbrodman
b1cd8c5a6f Add a frontend endpoint for retrieving a domain in JSON form (#1916)
We might (likely will) modify some of the fiddly bits around this (maybe
the GSON serialization, where we do the actual authorization, etc) but
this should be a decent basic shell structure for endpoints that the new
registrar console can call to retrieve JSON results.
2023-02-09 15:09:42 -05:00
gbrodman
28c7bc3085 Generate and use an IAP-enabled ID token in the proxy (#1926)
This is only generated and used if "iapClientId" is set in the proxy
config. If so, we use code similar to
https://cloud.google.com/iap/docs/authentication-howto#obtaining_an_oidc_token_for_the_default_service_account
to generate an ID token that is valid for IAP. We set the token on the
Proxy-Authorization header so that we can keep using the pre-existing
access token as well -- IAP allows for us to use either the
Authorization header or the Proxy-Authorization header.
2023-02-09 14:50:35 -05:00
gbrodman
f36d22f4b1 Allow null GAIA IDs for User objects (#1933)
We were under the mistaken impression before that there was a reliable
way to, out-of-band, get a GAIA ID for a particular email address.
Unfortunately, that isn't the case (at least, not in a scalable way or
one that support agents could use). As a result, we have to allow null
GAIA IDs in the database.

When we (or the support team) create new users, we will only specify the
email address and not the GAIA ID. Then, when the user logs in for the
first time, we will have the GAIA ID from the provided ID token, and we
can populate it then.
2023-02-08 16:10:34 -05:00
Lai Jiang
ef3ce79b8a Install procps in schema-deployer image (#1934)
It turns out this one uses pgrep and pkill as well, go figure...

<!-- Reviewable:start -->
- - -
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/google/nomulus/1934)
<!-- Reviewable:end -->
2023-02-08 09:59:47 -05:00
Lai Jiang
85317e3982 Update TMCH root certificate (#1918)
See b/260945047.

Also refactored the corresponding tests, which should future updates easier.

This change should be deployed at or around 2023-02-15T16:00:00Z.
2023-02-06 22:39:54 -05:00
Lai Jiang
a53b71ecd5 Install procps (#1932)
The schema verifier script needs pgrep and pkill, which do not come with
Debian.
2023-02-06 19:45:04 -05:00
Lai Jiang
fc9446876f Install curl (#1931)
Tested by running "docker build .".
2023-02-06 16:45:52 -05:00
dependabot[bot]
654b165dff Bump http-cache-semantics from 4.1.0 to 4.1.1 in /console-webapp (#1929)
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-06 13:22:50 -05:00
Lai Jiang
14d68d4cb2 Change base image for schema-verifier and schema-deployer (#1930)
Ubuntu 18.04 is entering EOL and the Cloud Build jobs are failing,
seemingly due to connection error to 18.04 repos:

https://pantheon.corp.google.com/cloud-build/builds;region=global/126a7c90-4322-41f1-ba1c-a10e38a32dab;step=5?project=domain-registry-dev

We use Debian 10 for the main builder, so it's better to keep everything
on the same schedule:

https://cs.opensource.google/nomulus/nomulus/+/master:release/builder/Dockerfile

Debian 10 is supported till June 2024:

https://wiki.debian.org/LTS
2023-02-06 13:09:37 -05:00
Lai Jiang
bbf405d566 Fix expand recurring billing event pipeline (#1928) 2023-02-06 11:33:57 -05:00
sarahcaseybot
356f7d0099 Modify DomainCreateFlow to check for an applicable defaultPromoToken (#1904)
* Modify DomainCreateFlow to check for an applicable defaultPromoToken

* Add handling for deleted tokens

* Change cache to allocation token cache

* Abstract away cache methods

* Use AllocationToken.getAll in create flow

* Filter out empty tokens
2023-02-01 14:53:51 -05:00
dependabot[bot]
70509cfe46 Bump ua-parser-js from 0.7.31 to 0.7.33 in /console-webapp (#1924)
Bumps [ua-parser-js](https://github.com/faisalman/ua-parser-js) from 0.7.31 to 0.7.33.
- [Release notes](https://github.com/faisalman/ua-parser-js/releases)
- [Changelog](https://github.com/faisalman/ua-parser-js/blob/master/changelog.md)
- [Commits](https://github.com/faisalman/ua-parser-js/compare/0.7.31...0.7.33)

---
updated-dependencies:
- dependency-name: ua-parser-js
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Lai Jiang <jianglai@google.com>
2023-01-31 14:52:26 -05:00
sarahcaseybot
5e081f4692 Prevent ending package tokens with active domains (#1919)
* Prevent ending package tokens with active domains

* Fix bad formatting in comments

* Fix lots of nits
2023-01-30 16:13:23 -05:00
Lai Jiang
07b87bbb4d Remove @IdAllocation annotation from repoId (#1923)
This annotation only works for Long or long field.
2023-01-30 15:40:40 -05:00
gbrodman
6fabbb62d2 Use the Proxy-Authorization header when using nomulus + IAP (#1921) 2023-01-26 15:16:32 -05:00
Lai Jiang
d8a882daa0 Add fields needed to implement pull queue alternative (#1915) 2023-01-25 15:26:00 -05:00
Pavlo Tkach
de8c6fd316 Add a condition update precaution to validateNewState (#1920) 2023-01-25 14:53:12 -05:00
Weimin Yu
ae68917bdd Upgrade to Gradle 7.3.2 (#1922)
This is an 'easy' upgrade that requires a minor change in
common/build.gradle and the removal of an unnecessary import in buildSrc.

Gradle 7.4 and above has breaking changes that break the latest nebula lint plugin. We may have to wait a while.
2023-01-25 12:47:35 -05:00
Lai Jiang
0736137a22 Update ExpandRecurringBillingEventsAction to use the beam pipeline (#1907)
Due to the way the beam pipeline is designed, it will expand an
recurring billing event when its event time is in scope for expansion,
instead of billing time. This means that the one time will be generated
45 days earlier. This would negate the need to check if the expansion is
finished when generating monthly invoices.

We will need to backfill the past 45 days of onetimes before the new
code is deployed. As an illustration, with the old code, a cursor time
of 2023-01-17 means that all auto-renewals whose billing time is before
2023-01-17 were created, which corresponds to an effective cursor time
of 2022-12-03 (45 days before 2023-01-17) for event time. This cursor
will need to be brought to 2023-01-17 to ensure that there is no gap in
generated event times when switching to use the new code.
2023-01-23 19:08:04 -05:00
Pavlo Tkach
c4b7929506 Remove not null constraint request_log_id column (#1917) 2023-01-23 09:37:20 -05:00
Lai Jiang
e6974a98bc Add columns needed to implement pull queue alternative (#1914) 2023-01-20 14:17:06 -05:00
275 changed files with 15658 additions and 14326 deletions

View File

@@ -10,25 +10,25 @@ com.github.ben-manes.caffeine:caffeine:2.7.0=annotationProcessor,testAnnotationP
com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,testAnnotationProcessor
com.google.android:annotations:4.1.1.4=testRuntimeClasspath
com.google.api-client:google-api-client:2.1.2=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:gapic-google-cloud-storage-v2:2.17.0-alpha=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-storage-v2:2.17.0-alpha=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-storage-v2:2.17.0-alpha=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-common-protos:2.12.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-iam-v1:1.7.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:api-common:2.4.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax-grpc:2.21.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax-httpjson:0.106.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax:2.21.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:gapic-google-cloud-storage-v2:2.17.2-alpha=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-storage-v2:2.17.2-alpha=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-storage-v2:2.17.2-alpha=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-common-protos:2.13.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-iam-v1:1.8.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:api-common:2.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax-grpc:2.22.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax-httpjson:0.107.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax:2.22.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-storage:v1-rev20220705-2.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.auth:google-auth-library-credentials:1.14.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.auth:google-auth-library-oauth2-http:1.14.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.auto.value:auto-value-annotations:1.10.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.auto.value:auto-value:1.10.1=annotationProcessor,compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.auto:auto-common:0.10=annotationProcessor,testAnnotationProcessor
com.google.cloud:google-cloud-core-grpc:2.9.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core-http:2.9.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core:2.9.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-storage:2.17.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core-grpc:2.9.4=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core-http:2.9.4=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core:2.9.4=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-storage:2.17.2=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.google.code.findbugs:jFormatString:3.0.0=annotationProcessor,testAnnotationProcessor
com.google.code.findbugs:jsr305:3.0.2=annotationProcessor,checkstyle,compileClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
com.google.code.gson:gson:2.10.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
@@ -71,19 +71,19 @@ commons-codec:commons-codec:1.15=compileClasspath,testCompileClasspath,testRunti
commons-collections:commons-collections:3.2.2=checkstyle
commons-logging:commons-logging:1.2=compileClasspath,testCompileClasspath,testRuntimeClasspath
info.picocli:picocli:4.5.2=checkstyle
io.grpc:grpc-alts:1.51.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-api:1.51.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-auth:1.51.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-context:1.51.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-core:1.51.1=testRuntimeClasspath
io.grpc:grpc-googleapis:1.51.1=testRuntimeClasspath
io.grpc:grpc-grpclb:1.51.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-netty-shaded:1.51.1=testRuntimeClasspath
io.grpc:grpc-protobuf-lite:1.51.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-protobuf:1.51.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-services:1.51.1=testRuntimeClasspath
io.grpc:grpc-stub:1.51.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-xds:1.51.1=testRuntimeClasspath
io.grpc:grpc-alts:1.52.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-api:1.52.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-auth:1.52.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-context:1.52.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-core:1.52.1=testRuntimeClasspath
io.grpc:grpc-googleapis:1.52.1=testRuntimeClasspath
io.grpc:grpc-grpclb:1.52.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-netty-shaded:1.52.1=testRuntimeClasspath
io.grpc:grpc-protobuf-lite:1.52.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-protobuf:1.52.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-services:1.52.1=testRuntimeClasspath
io.grpc:grpc-stub:1.52.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-xds:1.52.1=testRuntimeClasspath
io.opencensus:opencensus-api:0.31.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.opencensus:opencensus-contrib-http-util:0.31.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
io.opencensus:opencensus-proto:0.2.0=testRuntimeClasspath
@@ -92,8 +92,8 @@ javax.annotation:javax.annotation-api:1.3.2=compileClasspath,testCompileClasspat
javax.annotation:jsr250-api:1.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
javax.inject:javax.inject:1=compileClasspath,testCompileClasspath,testRuntimeClasspath
junit:junit:4.13.2=testCompileClasspath,testRuntimeClasspath
net.bytebuddy:byte-buddy-agent:1.12.19=testCompileClasspath,testRuntimeClasspath
net.bytebuddy:byte-buddy:1.12.19=testCompileClasspath,testRuntimeClasspath
net.bytebuddy:byte-buddy-agent:1.12.22=testCompileClasspath,testRuntimeClasspath
net.bytebuddy:byte-buddy:1.12.22=testCompileClasspath,testRuntimeClasspath
net.sf.saxon:Saxon-HE:10.3=checkstyle
org.antlr:antlr4-runtime:4.8-1=checkstyle
org.apache.commons:commons-lang3:3.12.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
@@ -110,10 +110,10 @@ org.codehaus.mojo:animal-sniffer-annotations:1.17=annotationProcessor,testAnnota
org.codehaus.mojo:animal-sniffer-annotations:1.22=testRuntimeClasspath
org.conscrypt:conscrypt-openjdk-uber:2.5.2=compileClasspath,testCompileClasspath,testRuntimeClasspath
org.hamcrest:hamcrest-core:1.3=testCompileClasspath,testRuntimeClasspath
org.jacoco:org.jacoco.agent:0.8.6=jacocoAgent,jacocoAnt
org.jacoco:org.jacoco.ant:0.8.6=jacocoAnt
org.jacoco:org.jacoco.core:0.8.6=jacocoAnt
org.jacoco:org.jacoco.report:0.8.6=jacocoAnt
org.jacoco:org.jacoco.agent:0.8.7=jacocoAgent,jacocoAnt
org.jacoco:org.jacoco.ant:0.8.7=jacocoAnt
org.jacoco:org.jacoco.core:0.8.7=jacocoAnt
org.jacoco:org.jacoco.report:0.8.7=jacocoAnt
org.javassist:javassist:3.26.0-GA=checkstyle
org.json:json:20160212=compileClasspath,testCompileClasspath,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.9.2=testCompileClasspath,testRuntimeClasspath
@@ -121,19 +121,18 @@ org.junit.jupiter:junit-jupiter-engine:5.9.2=testCompileClasspath,testRuntimeCla
org.junit.platform:junit-platform-commons:1.9.2=testCompileClasspath,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.9.2=testCompileClasspath,testRuntimeClasspath
org.junit:junit-bom:5.9.2=testCompileClasspath,testRuntimeClasspath
org.mockito:mockito-core:4.11.0=testCompileClasspath,testRuntimeClasspath
org.mockito:mockito-core:5.0.0=testCompileClasspath,testRuntimeClasspath
org.objenesis:objenesis:3.3=testRuntimeClasspath
org.opentest4j:opentest4j:1.2.0=testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-analysis:7.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-analysis:8.0.1=jacocoAnt
org.ow2.asm:asm-analysis:9.1=jacocoAnt
org.ow2.asm:asm-commons:7.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-commons:8.0.1=jacocoAnt
org.ow2.asm:asm-commons:9.1=jacocoAnt
org.ow2.asm:asm-tree:7.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-tree:8.0.1=jacocoAnt
org.ow2.asm:asm-tree:9.1=jacocoAnt
org.ow2.asm:asm-util:7.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm:7.0=compileClasspath
org.ow2.asm:asm:8.0.1=jacocoAnt
org.ow2.asm:asm:9.1=testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm:9.1=jacocoAnt,testCompileClasspath,testRuntimeClasspath
org.pcollections:pcollections:2.1.2=annotationProcessor,testAnnotationProcessor
org.plumelib:plume-util:1.0.6=annotationProcessor,testAnnotationProcessor
org.plumelib:reflection-util:0.0.2=annotationProcessor,testAnnotationProcessor

View File

@@ -17,7 +17,6 @@ package google.registry.gradle.plugin;
import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import google.registry.gradle.plugin.ProjectData.TaskData;
import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;

View File

@@ -38,6 +38,7 @@ configurations {
// All testing util classes. Other projects may declare dependency as:
// testImplementation project(path: 'common', configuration: 'testing')
create("testing")
testing.extendsFrom testingCompileOnly
}

View File

@@ -45,10 +45,10 @@ org.checkerframework:dataflow:3.0.0=annotationProcessor,errorprone,testAnnotatio
org.checkerframework:javacutil:3.0.0=annotationProcessor,errorprone,testAnnotationProcessor,testingAnnotationProcessor
org.codehaus.mojo:animal-sniffer-annotations:1.17=annotationProcessor,errorprone,testAnnotationProcessor,testingAnnotationProcessor
org.hamcrest:hamcrest-core:1.3=default,testCompileClasspath,testRuntimeClasspath,testing,testingCompileClasspath
org.jacoco:org.jacoco.agent:0.8.6=jacocoAgent,jacocoAnt
org.jacoco:org.jacoco.ant:0.8.6=jacocoAnt
org.jacoco:org.jacoco.core:0.8.6=jacocoAnt
org.jacoco:org.jacoco.report:0.8.6=jacocoAnt
org.jacoco:org.jacoco.agent:0.8.7=jacocoAgent,jacocoAnt
org.jacoco:org.jacoco.ant:0.8.7=jacocoAnt
org.jacoco:org.jacoco.core:0.8.7=jacocoAnt
org.jacoco:org.jacoco.report:0.8.7=jacocoAnt
org.javassist:javassist:3.26.0-GA=checkstyle
org.junit.jupiter:junit-jupiter-api:5.9.2=testCompileClasspath,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.9.2=testCompileClasspath,testRuntimeClasspath
@@ -56,11 +56,10 @@ org.junit.platform:junit-platform-commons:1.9.2=testCompileClasspath,testRuntime
org.junit.platform:junit-platform-engine:1.9.2=testCompileClasspath,testRuntimeClasspath
org.junit:junit-bom:5.9.2=testCompileClasspath,testRuntimeClasspath
org.opentest4j:opentest4j:1.2.0=testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-analysis:8.0.1=jacocoAnt
org.ow2.asm:asm-commons:8.0.1=jacocoAnt
org.ow2.asm:asm-tree:8.0.1=jacocoAnt
org.ow2.asm:asm:8.0.1=jacocoAnt
org.ow2.asm:asm:9.1=compileClasspath,default,deploy_jar,runtimeClasspath,testCompileClasspath,testRuntimeClasspath,testing,testingCompileClasspath
org.ow2.asm:asm-analysis:9.1=jacocoAnt
org.ow2.asm:asm-commons:9.1=jacocoAnt
org.ow2.asm:asm-tree:9.1=jacocoAnt
org.ow2.asm:asm:9.1=compileClasspath,default,deploy_jar,jacocoAnt,runtimeClasspath,testCompileClasspath,testRuntimeClasspath,testing,testingCompileClasspath
org.pcollections:pcollections:2.1.2=annotationProcessor,errorprone,testAnnotationProcessor,testingAnnotationProcessor
org.plumelib:plume-util:1.0.6=annotationProcessor,errorprone,testAnnotationProcessor,testingAnnotationProcessor
org.plumelib:reflection-util:0.0.2=annotationProcessor,errorprone,testAnnotationProcessor,testingAnnotationProcessor

View File

@@ -270,6 +270,10 @@
"moduleLicense": "Public Domain",
"moduleName": "org.tukaani:xz"
},
{
"moduleLicense": "Public Domain",
"moduleName": "org.json:json"
},
{
// "Apache License, Version 2.0".
"moduleLicense": null,

View File

@@ -31,15 +31,15 @@ org.checkerframework:checker-qual:3.0.0=annotationProcessor,errorprone,testAnnot
org.checkerframework:dataflow:3.0.0=annotationProcessor,errorprone,testAnnotationProcessor
org.checkerframework:javacutil:3.0.0=annotationProcessor,errorprone,testAnnotationProcessor
org.codehaus.mojo:animal-sniffer-annotations:1.17=annotationProcessor,errorprone,testAnnotationProcessor
org.jacoco:org.jacoco.agent:0.8.6=jacocoAgent,jacocoAnt
org.jacoco:org.jacoco.ant:0.8.6=jacocoAnt
org.jacoco:org.jacoco.core:0.8.6=jacocoAnt
org.jacoco:org.jacoco.report:0.8.6=jacocoAnt
org.jacoco:org.jacoco.agent:0.8.7=jacocoAgent,jacocoAnt
org.jacoco:org.jacoco.ant:0.8.7=jacocoAnt
org.jacoco:org.jacoco.core:0.8.7=jacocoAnt
org.jacoco:org.jacoco.report:0.8.7=jacocoAnt
org.javassist:javassist:3.26.0-GA=checkstyle
org.ow2.asm:asm-analysis:8.0.1=jacocoAnt
org.ow2.asm:asm-commons:8.0.1=jacocoAnt
org.ow2.asm:asm-tree:8.0.1=jacocoAnt
org.ow2.asm:asm:8.0.1=jacocoAnt
org.ow2.asm:asm-analysis:9.1=jacocoAnt
org.ow2.asm:asm-commons:9.1=jacocoAnt
org.ow2.asm:asm-tree:9.1=jacocoAnt
org.ow2.asm:asm:9.1=jacocoAnt
org.pcollections:pcollections:2.1.2=annotationProcessor,errorprone,testAnnotationProcessor
org.plumelib:plume-util:1.0.6=annotationProcessor,errorprone,testAnnotationProcessor
org.plumelib:reflection-util:0.0.2=annotationProcessor,errorprone,testAnnotationProcessor

View File

@@ -6824,9 +6824,9 @@
"dev": true
},
"node_modules/http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
"integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
"integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
"dev": true
},
"node_modules/http-deceiver": {
@@ -11362,9 +11362,9 @@
}
},
"node_modules/ua-parser-js": {
"version": "0.7.31",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
"integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==",
"version": "0.7.33",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz",
"integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==",
"dev": true,
"funding": [
{
@@ -17202,9 +17202,9 @@
"dev": true
},
"http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
"integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
"integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
"dev": true
},
"http-deceiver": {
@@ -20623,9 +20623,9 @@
"dev": true
},
"ua-parser-js": {
"version": "0.7.31",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
"integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==",
"version": "0.7.33",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz",
"integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==",
"dev": true
},
"unicode-canonical-property-names-ecmascript": {

View File

@@ -37,49 +37,45 @@ com.google.api-client:google-api-client-jackson2:1.32.2=compileClasspath,default
com.google.api-client:google-api-client-java6:1.35.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api-client:google-api-client-servlet:1.35.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api-client:google-api-client:1.35.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:gapic-google-cloud-storage-v2:2.16.0-alpha=testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:gapic-google-cloud-storage-v2:2.17.0-alpha=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.23.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.147.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.147.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:gapic-google-cloud-storage-v2:2.17.2-alpha=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.25.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.149.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.149.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.14.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.102.20=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.7.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.31.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.31.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.31.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-storage-v2:2.16.0-alpha=testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-storage-v2:2.17.0-alpha=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath
com.google.api.grpc:grpc-google-common-protos:2.9.6=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-iam-v1:1.6.22=testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.23.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.147.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.147.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.14.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.14.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-datastore-v1:0.102.5=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-firestore-v1:3.6.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.16.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.103.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.33.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.33.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.33.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-cloud-storage-v2:2.17.2-alpha=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:grpc-google-common-protos:2.10.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.25.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.149.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.149.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.16.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.16.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-datastore-v1:0.103.5=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-firestore-v1:3.7.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0=compileClasspath,nonprodCompileClasspath,testCompileClasspath
com.google.api.grpc:proto-google-cloud-monitoring-v3:3.4.6=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.102.20=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.7.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.8.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.8.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.31.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.31.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-spanner-v1:6.31.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-storage-v2:2.16.0-alpha=testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-storage-v2:2.17.0-alpha=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath
com.google.api.grpc:proto-google-cloud-tasks-v2:2.8.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.98.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.98.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-common-protos:2.12.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-iam-v1:1.7.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:api-common:2.4.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax-grpc:2.21.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax-httpjson:0.106.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax:2.21.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-monitoring-v3:3.6.0=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.103.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.33.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.33.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-spanner-v1:6.33.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-storage-v2:2.17.2-alpha=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-tasks-v2:2.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.99.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.99.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-common-protos:2.13.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api.grpc:proto-google-iam-v1:1.8.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:api-common:2.5.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax-grpc:2.22.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax-httpjson:0.107.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.api:gax:2.22.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-appengine:v1-rev20230109-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-bigquery:v2-rev20220924-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
@@ -91,10 +87,10 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0=compileClasspath,defa
com.google.apis:google-api-services-groupssettings:v1-rev20210624-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-healthcare:v1-rev20220818-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-monitoring:v3-rev20221205-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-monitoring:v3-rev20230123-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-pubsub:v1-rev20220904-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-sheets:v4-rev20221216-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-sqladmin:v1beta4-rev20221209-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-sqladmin:v1beta4-rev20230111-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.apis:google-api-services-storage:v1-rev20220705-2.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.appengine:appengine-api-1.0-sdk:1.9.86=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath
com.google.appengine:appengine-api-1.0-sdk:2.0.10=testCompileClasspath,testRuntimeClasspath
@@ -114,30 +110,26 @@ com.google.cloud.bigdataoss:util:2.2.6=compileClasspath,default,deploy_jar,nonpr
com.google.cloud.bigtable:bigtable-client-core:1.26.3=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud.datastore:datastore-v1-proto-client:2.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud.sql:jdbc-socket-factory-core:1.8.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud.sql:postgres-socket-factory:1.8.1=default,deploy_jar,runtimeClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-bigquerystorage:2.23.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-bigtable-stats:2.14.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-bigtable:2.14.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core-grpc:2.9.0=testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core-grpc:2.9.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath
com.google.cloud:google-cloud-core-http:2.9.0=testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core-http:2.9.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath
com.google.cloud:google-cloud-core:2.9.0=testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core:2.9.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath
com.google.cloud:google-cloud-firestore:3.6.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud.sql:jdbc-socket-factory-core:1.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud.sql:postgres-socket-factory:1.9.0=default,deploy_jar,runtimeClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-bigquerystorage:2.25.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-bigtable-stats:2.16.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-bigtable:2.16.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core-grpc:2.9.4=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core-http:2.9.4=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-core:2.9.4=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-firestore:3.7.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-monitoring:1.82.0=compileClasspath,nonprodCompileClasspath,testCompileClasspath
com.google.cloud:google-cloud-monitoring:3.4.6=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-nio:0.126.0=testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-pubsub:1.120.20=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-pubsublite:1.7.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-secretmanager:2.8.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-spanner:6.31.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-storage:2.16.0=testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-storage:2.17.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath
com.google.cloud:google-cloud-tasks:2.8.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:grpc-gcp:1.2.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.6.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-monitoring:3.6.0=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-nio:0.126.3=testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-pubsub:1.121.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-pubsublite:1.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-secretmanager:2.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-spanner:6.33.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-storage:2.17.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:google-cloud-tasks:2.9.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:grpc-gcp:1.3.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.7.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.code.findbugs:jFormatString:3.0.0=annotationProcessor,errorprone,nonprodAnnotationProcessor,testAnnotationProcessor
com.google.code.findbugs:jsr305:3.0.1=css
com.google.code.findbugs:jsr305:3.0.2=annotationProcessor,checkstyle,compileClasspath,default,deploy_jar,errorprone,nonprodAnnotationProcessor,nonprodCompileClasspath,nonprodRuntime,nonprodRuntimeClasspath,runtime,runtimeClasspath,soy,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
@@ -248,37 +240,37 @@ io.confluent:kafka-schema-registry-client:5.3.2=compileClasspath,default,deploy_
io.dropwizard.metrics:metrics-core:3.1.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.github.classgraph:classgraph:4.8.104=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.github.java-diff-utils:java-diff-utils:4.12=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-alts:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-api:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-auth:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-census:1.49.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-context:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-core:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-googleapis:1.51.1=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.grpc:grpc-grpclb:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-netty-shaded:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-netty:1.49.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-protobuf-lite:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-protobuf:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-rls:1.49.2=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.grpc:grpc-services:1.49.2=compileClasspath,nonprodCompileClasspath,testCompileClasspath
io.grpc:grpc-services:1.51.1=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.grpc:grpc-stub:1.51.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-xds:1.49.2=compileClasspath,nonprodCompileClasspath,testCompileClasspath
io.grpc:grpc-xds:1.51.1=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.netty:netty-buffer:4.1.77.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-codec-http2:4.1.77.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-codec-http:4.1.77.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-codec-socks:4.1.77.Final=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.netty:netty-codec:4.1.77.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-common:4.1.77.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-handler-proxy:4.1.77.Final=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.netty:netty-handler:4.1.77.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-resolver:4.1.77.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-alts:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-api:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-auth:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-census:1.50.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-context:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-core:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-googleapis:1.52.1=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.grpc:grpc-grpclb:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-netty-shaded:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-netty:1.50.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-protobuf-lite:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-protobuf:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-rls:1.50.2=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.grpc:grpc-services:1.50.2=compileClasspath,nonprodCompileClasspath,testCompileClasspath
io.grpc:grpc-services:1.52.1=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.grpc:grpc-stub:1.52.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.grpc:grpc-xds:1.50.2=compileClasspath,nonprodCompileClasspath,testCompileClasspath
io.grpc:grpc-xds:1.52.1=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.netty:netty-buffer:4.1.79.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-codec-http2:4.1.79.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-codec-http:4.1.79.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-codec-socks:4.1.79.Final=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.netty:netty-codec:4.1.79.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-common:4.1.79.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-handler-proxy:4.1.79.Final=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.netty:netty-handler:4.1.79.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-resolver:4.1.79.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-tcnative-boringssl-static:2.0.52.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-tcnative-classes:2.0.52.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-transport-native-unix-common:4.1.77.Final=default,deploy_jar,nonprodRuntimeClasspath,runtimeClasspath,testRuntimeClasspath
io.netty:netty-transport:4.1.77.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-transport-native-unix-common:4.1.79.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.netty:netty-transport:4.1.79.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.opencensus:opencensus-api:0.31.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.opencensus:opencensus-contrib-exemplar-util:0.31.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
@@ -310,9 +302,9 @@ jline:jline:1.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonp
joda-time:joda-time:2.10.10=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
junit:junit:4.13.2=default,nonprodCompileClasspath,nonprodRuntimeClasspath,testCompileClasspath,testRuntimeClasspath
net.arnx:nashorn-promise:0.1.1=nonprodRuntime,runtime,testRuntimeClasspath
net.bytebuddy:byte-buddy-agent:1.12.19=testCompileClasspath,testRuntimeClasspath
net.bytebuddy:byte-buddy-agent:1.12.22=testCompileClasspath,testRuntimeClasspath
net.bytebuddy:byte-buddy:1.12.18=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath
net.bytebuddy:byte-buddy:1.12.19=testCompileClasspath,testRuntimeClasspath
net.bytebuddy:byte-buddy:1.12.22=testCompileClasspath,testRuntimeClasspath
net.java.dev.javacc:javacc:4.1=css
net.java.dev.jna:jna:5.8.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
net.ltgt.gradle.incap:incap:0.2=annotationProcessor,testAnnotationProcessor
@@ -322,22 +314,22 @@ org.apache.arrow:arrow-format:5.0.0=compileClasspath,default,deploy_jar,nonprodC
org.apache.arrow:arrow-memory-core:5.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.arrow:arrow-vector:5.0.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.avro:avro:1.8.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-model-fn-execution:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-model-job-management:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-model-pipeline:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-core-construction-java:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-core-java:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-direct-java:2.43.0=testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-java-fn-execution:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-core:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-expansion-service:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-extensions-arrow:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-extensions-protobuf:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-fn-execution:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-io-kafka:2.43.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-model-fn-execution:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-model-job-management:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-model-pipeline:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-core-construction-java:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-core-java:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-direct-java:2.44.0=testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-runners-java-fn-execution:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-core:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-expansion-service:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-extensions-arrow:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-extensions-protobuf:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-fn-execution:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-sdks-java-io-kafka:2.44.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-vendor-grpc-1_48_1:0.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.beam:beam-vendor-guava-26_0-jre:0.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.apache.commons:commons-compress:1.22=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
@@ -381,7 +373,7 @@ org.eclipse.jetty:jetty-server:9.4.49.v20220914=compileClasspath,default,deploy_
org.eclipse.jetty:jetty-servlet:9.4.49.v20220914=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.eclipse.jetty:jetty-util-ajax:9.4.49.v20220914=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.eclipse.jetty:jetty-util:9.4.49.v20220914=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.flywaydb:flyway-core:9.11.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.flywaydb:flyway-core:9.12.0=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.glassfish.jaxb:jaxb-core:4.0.1=nonprodRuntime,runtime
org.glassfish.jaxb:jaxb-runtime:2.3.1=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.glassfish.jaxb:jaxb-runtime:4.0.1=nonprodRuntime,runtime
@@ -397,10 +389,10 @@ org.hamcrest:hamcrest:2.2=testCompileClasspath,testRuntimeClasspath
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.hibernate:hibernate-core:5.6.14.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.hibernate:hibernate-hikaricp:5.6.14.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jacoco:org.jacoco.agent:0.8.6=jacocoAgent,jacocoAnt
org.jacoco:org.jacoco.ant:0.8.6=jacocoAnt
org.jacoco:org.jacoco.core:0.8.6=jacocoAnt
org.jacoco:org.jacoco.report:0.8.6=jacocoAnt
org.jacoco:org.jacoco.agent:0.8.7=jacocoAgent,jacocoAnt
org.jacoco:org.jacoco.ant:0.8.7=jacocoAnt
org.jacoco:org.jacoco.core:0.8.7=jacocoAnt
org.jacoco:org.jacoco.report:0.8.7=jacocoAnt
org.javassist:javassist:3.26.0-GA=checkstyle
org.jboss.logging:jboss-logging:3.4.3.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
@@ -431,26 +423,26 @@ org.junit.platform:junit-platform-suite-commons:1.9.2=testRuntimeClasspath
org.junit:junit-bom:5.9.2=testCompileClasspath,testRuntimeClasspath
org.jvnet.staxex:stax-ex:1.8=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.mockito:mockito-core:1.10.19=css
org.mockito:mockito-core:4.11.0=testCompileClasspath,testRuntimeClasspath
org.mockito:mockito-junit-jupiter:4.11.0=testCompileClasspath,testRuntimeClasspath
org.mockito:mockito-core:5.0.0=testCompileClasspath,testRuntimeClasspath
org.mockito:mockito-junit-jupiter:5.0.0=testCompileClasspath,testRuntimeClasspath
org.mortbay.jetty:jetty-util:6.1.26=testCompileClasspath,testRuntimeClasspath
org.mortbay.jetty:jetty:6.1.26=testCompileClasspath,testRuntimeClasspath
org.objenesis:objenesis:2.1=css
org.objenesis:objenesis:3.3=testRuntimeClasspath
org.opentest4j:opentest4j:1.2.0=testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-analysis:7.0=soy
org.ow2.asm:asm-analysis:8.0.1=jacocoAnt
org.ow2.asm:asm-analysis:9.1=jacocoAnt
org.ow2.asm:asm-analysis:9.4=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-commons:7.0=soy
org.ow2.asm:asm-commons:8.0.1=jacocoAnt
org.ow2.asm:asm-commons:9.1=jacocoAnt
org.ow2.asm:asm-commons:9.2=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-tree:7.0=soy
org.ow2.asm:asm-tree:8.0.1=jacocoAnt
org.ow2.asm:asm-tree:9.1=jacocoAnt
org.ow2.asm:asm-tree:9.4=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-util:7.0=soy
org.ow2.asm:asm-util:9.4=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm:7.0=soy
org.ow2.asm:asm:8.0.1=jacocoAnt
org.ow2.asm:asm:9.1=jacocoAnt
org.ow2.asm:asm:9.4=compileClasspath,default,deploy_jar,nonprodCompileClasspath,nonprodRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.pcollections:pcollections:2.1.2=annotationProcessor,errorprone,nonprodAnnotationProcessor,testAnnotationProcessor
org.plumelib:plume-util:1.0.6=annotationProcessor,errorprone,nonprodAnnotationProcessor,testAnnotationProcessor

View File

@@ -105,10 +105,22 @@ public class BatchModule {
}
@Provides
@Parameter(ExpandRecurringBillingEventsAction.PARAM_CURSOR_TIME)
static Optional<DateTime> provideCursorTime(HttpServletRequest req) {
@Parameter(ExpandRecurringBillingEventsAction.PARAM_START_TIME)
static Optional<DateTime> provideStartTime(HttpServletRequest req) {
return extractOptionalDatetimeParameter(
req, ExpandRecurringBillingEventsAction.PARAM_CURSOR_TIME);
req, ExpandRecurringBillingEventsAction.PARAM_START_TIME);
}
@Provides
@Parameter(ExpandRecurringBillingEventsAction.PARAM_END_TIME)
static Optional<DateTime> provideEndTime(HttpServletRequest req) {
return extractOptionalDatetimeParameter(req, ExpandRecurringBillingEventsAction.PARAM_END_TIME);
}
@Provides
@Parameter(ExpandRecurringBillingEventsAction.PARAM_ADVANCE_CURSOR)
static boolean provideAdvanceCursor(HttpServletRequest req) {
return extractBooleanParameter(req, ExpandRecurringBillingEventsAction.PARAM_ADVANCE_CURSOR);
}
@Provides

View File

@@ -15,58 +15,39 @@
package google.registry.batch;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.ImmutableSet.toImmutableSet;
import static com.google.common.collect.Sets.difference;
import static com.google.common.collect.Sets.newHashSet;
import static google.registry.batch.BatchModule.PARAM_DRY_RUN;
import static google.registry.beam.BeamUtils.createJobName;
import static google.registry.model.common.Cursor.CursorType.RECURRING_BILLING;
import static google.registry.model.domain.Period.Unit.YEARS;
import static google.registry.model.reporting.HistoryEntry.Type.DOMAIN_AUTORENEW;
import static google.registry.persistence.transaction.QueryComposer.Comparator.EQ;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.util.CollectionUtils.union;
import static google.registry.util.DateTimeUtils.START_OF_TIME;
import static google.registry.util.DateTimeUtils.earliestOf;
import static google.registry.util.DomainNameUtils.getTldFromDomainName;
import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Range;
import com.google.common.collect.Streams;
import com.google.api.services.dataflow.Dataflow;
import com.google.api.services.dataflow.model.LaunchFlexTemplateParameter;
import com.google.api.services.dataflow.model.LaunchFlexTemplateRequest;
import com.google.api.services.dataflow.model.LaunchFlexTemplateResponse;
import com.google.common.collect.ImmutableMap;
import com.google.common.flogger.FluentLogger;
import google.registry.beam.billing.ExpandRecurringBillingEventsPipeline;
import google.registry.config.RegistryConfig.Config;
import google.registry.flows.domain.DomainPricingLogic;
import google.registry.model.ImmutableObject;
import google.registry.model.billing.BillingEvent;
import google.registry.model.billing.BillingEvent.Flag;
import google.registry.config.RegistryEnvironment;
import google.registry.model.billing.BillingEvent.OneTime;
import google.registry.model.billing.BillingEvent.Recurring;
import google.registry.model.common.Cursor;
import google.registry.model.domain.Domain;
import google.registry.model.domain.DomainHistory;
import google.registry.model.domain.Period;
import google.registry.model.reporting.DomainTransactionRecord;
import google.registry.model.reporting.DomainTransactionRecord.TransactionReportField;
import google.registry.model.tld.Registry;
import google.registry.persistence.VKey;
import google.registry.request.Action;
import google.registry.request.Parameter;
import google.registry.request.Response;
import google.registry.request.auth.Auth;
import google.registry.util.Clock;
import java.util.List;
import java.io.IOException;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import org.joda.time.DateTime;
/**
* An action that expands {@link Recurring} billing events into synthetic {@link OneTime} events.
*
* <p>The cursor used throughout this action (overridden if necessary using the parameter {@code
* cursorTime}) represents the inclusive lower bound on the range of billing times that will be
* expanded as a result of the job (the exclusive upper bound being the execution time of the job).
* An action that kicks off a {@link ExpandRecurringBillingEventsPipeline} dataflow job to expand
* {@link Recurring} billing events into synthetic {@link OneTime} events.
*/
@Action(
service = Action.Service.BACKEND,
@@ -74,303 +55,109 @@ import org.joda.time.DateTime;
auth = Auth.AUTH_INTERNAL_OR_ADMIN)
public class ExpandRecurringBillingEventsAction implements Runnable {
public static final String PARAM_CURSOR_TIME = "cursorTime";
public static final String PARAM_START_TIME = "startTime";
public static final String PARAM_END_TIME = "endTime";
public static final String PARAM_ADVANCE_CURSOR = "advanceCursor";
private static final String PIPELINE_NAME = "expand_recurring_billing_events_pipeline";
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
@Inject Clock clock;
@Inject
@Config("jdbcBatchSize")
int batchSize;
@Parameter(PARAM_DRY_RUN)
boolean isDryRun;
@Inject @Parameter(PARAM_DRY_RUN) boolean isDryRun;
@Inject @Parameter(PARAM_CURSOR_TIME) Optional<DateTime> cursorTimeParam;
@Inject
@Parameter(PARAM_ADVANCE_CURSOR)
boolean advanceCursor;
@Inject
@Parameter(PARAM_START_TIME)
Optional<DateTime> startTimeParam;
@Inject
@Parameter(PARAM_END_TIME)
Optional<DateTime> endTimeParam;
@Inject
@Config("projectId")
String projectId;
@Inject
@Config("defaultJobRegion")
String jobRegion;
@Inject
@Config("beamStagingBucketUrl")
String stagingBucketUrl;
@Inject Dataflow dataflow;
@Inject DomainPricingLogic domainPricingLogic;
@Inject Response response;
@Inject ExpandRecurringBillingEventsAction() {}
@Inject
ExpandRecurringBillingEventsAction() {}
@Override
public void run() {
DateTime executeTime = clock.nowUtc();
DateTime persistedCursorTime =
tm().transact(
() ->
tm().loadByKeyIfPresent(Cursor.createGlobalVKey(RECURRING_BILLING))
.orElse(Cursor.createGlobal(RECURRING_BILLING, START_OF_TIME))
.getCursorTime());
DateTime cursorTime = cursorTimeParam.orElse(persistedCursorTime);
checkArgument(!(isDryRun && advanceCursor), "Cannot advance the cursor in a dry run.");
DateTime endTime = endTimeParam.orElse(clock.nowUtc());
checkArgument(
cursorTime.isBefore(executeTime), "Cursor time must be earlier than execution time.");
logger.atInfo().log(
"Running Recurring billing event expansion for billing time range [%s, %s).",
cursorTime, executeTime);
expandSqlBillingEventsInBatches(executeTime, cursorTime, persistedCursorTime);
}
private void expandSqlBillingEventsInBatches(
DateTime executeTime, DateTime cursorTime, DateTime persistedCursorTime) {
int totalBillingEventsSaved = 0;
long maxProcessedRecurrenceId = 0;
SqlBatchResults sqlBatchResults;
do {
final long prevMaxProcessedRecurrenceId = maxProcessedRecurrenceId;
sqlBatchResults =
tm().transact(
() -> {
Set<String> expandedDomains = newHashSet();
int batchBillingEventsSaved = 0;
long maxRecurrenceId = prevMaxProcessedRecurrenceId;
List<Recurring> recurrings =
tm().query(
"FROM BillingRecurrence "
+ "WHERE eventTime <= :executeTime "
+ "AND eventTime < recurrenceEndTime "
+ "AND id > :maxProcessedRecurrenceId "
+ "AND recurrenceEndTime > :adjustedCursorTime "
+ "ORDER BY id ASC",
Recurring.class)
.setParameter("executeTime", executeTime)
.setParameter("maxProcessedRecurrenceId", prevMaxProcessedRecurrenceId)
.setParameter(
"adjustedCursorTime",
cursorTime.minus(Registry.DEFAULT_AUTO_RENEW_GRACE_PERIOD))
.setMaxResults(batchSize)
.getResultList();
for (Recurring recurring : recurrings) {
if (expandedDomains.contains(recurring.getTargetId())) {
// On the off chance this batch contains multiple recurrences for the same
// domain (which is actually possible if a given domain is quickly renewed
// multiple times in a row), then short-circuit after the first one is
// processed that involves actually expanding a billing event. This is
// necessary because otherwise we get an "Inserted/updated object reloaded"
// error from Hibernate when those billing events would be loaded
// inside a transaction where they were already written. Note, there is no
// actual further work to be done in this case anyway, not unless it has
// somehow been over a year since this action last ran successfully (and if
// that were somehow true, the remaining billing events would still be
// expanded on subsequent runs).
continue;
}
int billingEventsSaved =
expandBillingEvent(
recurring, executeTime, cursorTime, isDryRun, domainPricingLogic);
batchBillingEventsSaved += billingEventsSaved;
if (billingEventsSaved > 0) {
expandedDomains.add(recurring.getTargetId());
}
maxRecurrenceId = Math.max(maxRecurrenceId, recurring.getId());
}
return SqlBatchResults.create(
batchBillingEventsSaved,
maxRecurrenceId,
maxRecurrenceId > prevMaxProcessedRecurrenceId);
});
totalBillingEventsSaved += sqlBatchResults.batchBillingEventsSaved();
maxProcessedRecurrenceId = sqlBatchResults.maxProcessedRecurrenceId();
if (sqlBatchResults.batchBillingEventsSaved() > 0) {
logger.atInfo().log(
"Saved %d billing events in batch (%d total) with max recurrence id %d.",
sqlBatchResults.batchBillingEventsSaved(),
totalBillingEventsSaved,
maxProcessedRecurrenceId);
} else {
// If we're churning through a lot of no-op recurrences that don't need expanding (yet?),
// then only log one no-op every so often as a good balance between letting the user track
// that the action is still running while also not spamming the logs incessantly.
logger.atInfo().atMostEvery(3, TimeUnit.MINUTES).log(
"Processed up to max recurrence id %d (no billing events saved recently).",
maxProcessedRecurrenceId);
}
} while (sqlBatchResults.shouldContinue());
if (!isDryRun) {
logger.atInfo().log("Saved %d total OneTime billing events.", totalBillingEventsSaved);
} else {
logger.atInfo().log(
"Generated %d total OneTime billing events (dry run).", totalBillingEventsSaved);
}
logger.atInfo().log(
"Recurring event expansion %s complete for billing event range [%s, %s).",
isDryRun ? "(dry run) " : "", cursorTime, executeTime);
tm().transact(
() -> {
// Check for the unlikely scenario where the cursor has been altered during the
// expansion.
DateTime currentCursorTime =
tm().loadByKeyIfPresent(Cursor.createGlobalVKey(RECURRING_BILLING))
.orElse(Cursor.createGlobal(RECURRING_BILLING, START_OF_TIME))
.getCursorTime();
if (!currentCursorTime.equals(persistedCursorTime)) {
throw new IllegalStateException(
!endTime.isAfter(clock.nowUtc()), "End time (%s) must be at or before now", endTime);
DateTime startTime =
startTimeParam.orElse(
tm().transact(
() ->
tm().loadByKeyIfPresent(Cursor.createGlobalVKey(RECURRING_BILLING))
.orElse(Cursor.createGlobal(RECURRING_BILLING, START_OF_TIME))
.getCursorTime()));
checkArgument(
startTime.isBefore(endTime),
String.format("Start time (%s) must be before end time (%s)", startTime, endTime));
LaunchFlexTemplateParameter launchParameter =
new LaunchFlexTemplateParameter()
.setJobName(
createJobName(
String.format(
"Current cursor position %s does not match persisted cursor position %s.",
currentCursorTime, persistedCursorTime));
}
if (!isDryRun) {
tm().put(Cursor.createGlobal(RECURRING_BILLING, executeTime));
}
});
}
@AutoValue
abstract static class SqlBatchResults {
abstract int batchBillingEventsSaved();
abstract long maxProcessedRecurrenceId();
abstract boolean shouldContinue();
static SqlBatchResults create(
int batchBillingEventsSaved, long maxProcessedRecurrenceId, boolean shouldContinue) {
return new AutoValue_ExpandRecurringBillingEventsAction_SqlBatchResults(
batchBillingEventsSaved, maxProcessedRecurrenceId, shouldContinue);
"expand-billing-%s", startTime.toString("yyyy-MM-dd't'HH-mm-ss'z'")),
clock))
.setContainerSpecGcsPath(
String.format("%s/%s_metadata.json", stagingBucketUrl, PIPELINE_NAME))
.setParameters(
new ImmutableMap.Builder<String, String>()
.put("registryEnvironment", RegistryEnvironment.get().name())
.put("startTime", startTime.toString("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
.put("endTime", endTime.toString("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
.put("isDryRun", Boolean.toString(isDryRun))
.put("advanceCursor", Boolean.toString(advanceCursor))
.build());
logger.atInfo().log(
"Launching recurring billing event expansion pipeline for event time range [%s, %s)%s.",
startTime,
endTime,
isDryRun ? " in dry run mode" : advanceCursor ? "" : " without advancing the cursor");
try {
LaunchFlexTemplateResponse launchResponse =
dataflow
.projects()
.locations()
.flexTemplates()
.launch(
projectId,
jobRegion,
new LaunchFlexTemplateRequest().setLaunchParameter(launchParameter))
.execute();
logger.atInfo().log("Got response: %s", launchResponse.getJob().toPrettyString());
response.setStatus(SC_OK);
response.setPayload(
String.format(
"Launched recurring billing event expansion pipeline: %s",
launchResponse.getJob().getId()));
} catch (IOException e) {
logger.atWarning().withCause(e).log("Pipeline Launch failed");
response.setStatus(SC_INTERNAL_SERVER_ERROR);
response.setPayload(String.format("Pipeline launch failed: %s", e.getMessage()));
}
}
private static int expandBillingEvent(
Recurring recurring,
DateTime executeTime,
DateTime cursorTime,
boolean isDryRun,
DomainPricingLogic domainPricingLogic) {
ImmutableSet.Builder<OneTime> syntheticOneTimesBuilder = new ImmutableSet.Builder<>();
final Registry tld = Registry.get(getTldFromDomainName(recurring.getTargetId()));
// Determine the complete set of times at which this recurring event should
// occur (up to and including the runtime of the action).
Iterable<DateTime> eventTimes =
recurring
.getRecurrenceTimeOfYear()
.getInstancesInRange(
Range.closed(
recurring.getEventTime(),
earliestOf(recurring.getRecurrenceEndTime(), executeTime)));
// Convert these event times to billing times
final ImmutableSet<DateTime> billingTimes =
getBillingTimesInScope(eventTimes, cursorTime, executeTime, tld);
VKey<Domain> domainKey = VKey.create(Domain.class, recurring.getDomainRepoId());
Iterable<OneTime> oneTimesForDomain;
oneTimesForDomain =
tm().createQueryComposer(OneTime.class)
.where("domainRepoId", EQ, recurring.getDomainRepoId())
.list();
// Determine the billing times that already have OneTime events persisted.
ImmutableSet<DateTime> existingBillingTimes =
getExistingBillingTimes(oneTimesForDomain, recurring);
ImmutableSet.Builder<DomainHistory> historyEntriesBuilder = new ImmutableSet.Builder<>();
// Create synthetic OneTime events for all billing times that do not yet have
// an event persisted.
for (DateTime billingTime : difference(billingTimes, existingBillingTimes)) {
// Construct a new HistoryEntry that parents over the OneTime
DomainHistory historyEntry =
new DomainHistory.Builder()
.setBySuperuser(false)
.setRegistrarId(recurring.getRegistrarId())
.setModificationTime(tm().getTransactionTime())
.setDomain(tm().loadByKey(domainKey))
.setPeriod(Period.create(1, YEARS))
.setReason("Domain autorenewal by ExpandRecurringBillingEventsAction")
.setRequestedByRegistrar(false)
.setType(DOMAIN_AUTORENEW)
// Note: the following statement seems to not be entirely correct as manual renewal
// during the autorenew grace period also closes out the existing recurrence, but in
// that instance the autorenew history entry should still have the transaction records
// for obvious reasons. It can be argued the history entry should always have the
// transaction record, regardless of what happens afterward. If the domain is deleted
// later during the autorenew grace period, another history entry for the delete would
// record that mutation separately, but the previous autorenew should not have its
// history entry retroactively altered, or in this case have the transaction records
// omitted when its created belatedly (when billing time is in scope). However, since
// we will be rewriting this action and only want to do the absolute minimum change to
// fix it for now, we will leave the current logic in place to avoid any unnecessary
// complications.
//
// Don't write a domain transaction record if the recurrence was
// ended prior to the billing time (i.e. a domain was deleted
// during the autorenew grace period).
.setDomainTransactionRecords(
recurring.getRecurrenceEndTime().isBefore(billingTime)
? ImmutableSet.of()
: ImmutableSet.of(
DomainTransactionRecord.create(
tld.getTldStr(),
// We report this when the autorenew grace period
// ends
billingTime,
TransactionReportField.netRenewsFieldFromYears(1),
1)))
.build();
historyEntriesBuilder.add(historyEntry);
DateTime eventTime = billingTime.minus(tld.getAutoRenewGracePeriodLength());
syntheticOneTimesBuilder.add(
new OneTime.Builder()
.setBillingTime(billingTime)
.setRegistrarId(recurring.getRegistrarId())
// Determine the cost for a one-year renewal.
.setCost(
domainPricingLogic
.getRenewPrice(tld, recurring.getTargetId(), eventTime, 1, recurring)
.getRenewCost())
.setEventTime(eventTime)
.setFlags(union(recurring.getFlags(), Flag.SYNTHETIC))
.setDomainHistory(historyEntry)
.setPeriodYears(1)
.setReason(recurring.getReason())
.setSyntheticCreationTime(executeTime)
.setCancellationMatchingBillingEvent(recurring)
.setTargetId(recurring.getTargetId())
.build());
}
Set<DomainHistory> historyEntries = historyEntriesBuilder.build();
Set<OneTime> syntheticOneTimes = syntheticOneTimesBuilder.build();
if (!isDryRun) {
ImmutableSet<ImmutableObject> entitiesToSave =
new ImmutableSet.Builder<ImmutableObject>()
.addAll(historyEntries)
.addAll(syntheticOneTimes)
.build();
tm().putAll(entitiesToSave);
}
return syntheticOneTimes.size();
}
/**
* Filters a set of {@link DateTime}s down to event times that are in scope for a particular
* action run, given the cursor time and the action execution time.
*/
protected static ImmutableSet<DateTime> getBillingTimesInScope(
Iterable<DateTime> eventTimes,
DateTime cursorTime,
DateTime executeTime,
final Registry tld) {
return Streams.stream(eventTimes)
.map(eventTime -> eventTime.plus(tld.getAutoRenewGracePeriodLength()))
.filter(Range.closedOpen(cursorTime, executeTime))
.collect(toImmutableSet());
}
/**
* Determines an {@link ImmutableSet} of {@link DateTime}s that have already been persisted for a
* given recurring billing event.
*/
private static ImmutableSet<DateTime> getExistingBillingTimes(
Iterable<BillingEvent.OneTime> oneTimesForDomain,
final BillingEvent.Recurring recurringEvent) {
return Streams.stream(oneTimesForDomain)
.filter(
billingEvent ->
recurringEvent
.createVKey()
.equals(billingEvent.getCancellationMatchingBillingEvent()))
.map(OneTime::getBillingTime)
.collect(toImmutableSet());
}
}

View File

@@ -138,9 +138,15 @@ public class ExpandRecurringBillingEventsPipeline implements Serializable {
private final boolean isDryRun;
private final boolean advanceCursor;
private final Counter recurringsInScopeCounter =
Metrics.counter("ExpandBilling", "RecurringsInScope");
private final Counter expandedOneTimeCounter =
Metrics.counter("ExpandBilling", "ExpandedOneTime");
Metrics.counter("ExpandBilling", "Recurrings in scope for expansion");
// Note that this counter is only accurate when running in dry run mode. Because SQL persistence
// is a side effect and not idempotent, a transaction to save OneTimes could be successful but the
// transform that contains it could be still be retried, rolling back the counter increment. The
// same transform, when retried, would skip the already expanded OneTime, causing this counter to
// be lower than it should be when not in dry run mode.
// See: https://beam.apache.org/documentation/programming-guide/#user-code-idempotence
private final Counter oneTimesToExpandCounter =
Metrics.counter("ExpandBilling", "OneTimes that would be expanded");
ExpandRecurringBillingEventsPipeline(
ExpandRecurringBillingEventsPipelineOptions options, Clock clock) {
@@ -148,7 +154,7 @@ public class ExpandRecurringBillingEventsPipeline implements Serializable {
endTime = DateTime.parse(options.getEndTime());
checkArgument(
!endTime.isAfter(clock.nowUtc()),
String.format("End time %s must be on or before now.", endTime));
String.format("End time %s must be at or before now.", endTime));
checkArgument(
startTime.isBefore(endTime),
String.format("[%s, %s) is not a valid window of operation.", startTime, endTime));
@@ -182,7 +188,7 @@ public class ExpandRecurringBillingEventsPipeline implements Serializable {
+ "AND event_Time < :endTime "
// Recurrence should not close before start time.
+ "AND :startTime < recurrence_end_time "
// Last expansion should happen at least one year before start time.
// Last expansion should happen at least one year before end time.
+ "AND recurrence_last_expansion < :oneYearAgo "
// The recurrence should not close before next expansion time.
+ "AND recurrence_last_expansion + INTERVAL '1 YEAR' < recurrence_end_time",
@@ -195,6 +201,7 @@ public class ExpandRecurringBillingEventsPipeline implements Serializable {
endTime.minusYears(1)),
true,
(BigInteger id) -> {
recurringsInScopeCounter.inc();
// Note that because all elements are mapped to the same dummy key, the next
// batching transform will effectively be serial. This however does not matter for
// our use case because the elements were obtained from a SQL read query, which
@@ -239,20 +246,40 @@ public class ExpandRecurringBillingEventsPipeline implements Serializable {
private void expandOneRecurring(Long recurringId, ImmutableSet.Builder<ImmutableObject> results) {
Recurring recurring = tm().loadByKey(Recurring.createVKey(recurringId));
recurringsInScopeCounter.inc();
Domain domain = tm().loadByKey(Domain.createVKey(recurring.getDomainRepoId()));
Registry tld = Registry.get(domain.getTld());
// Determine the complete set of EventTimes this recurring event should expand to within
// [max(recurrenceLastExpansion + 1 yr, startTime), min(recurrenceEndTime, endTime)).
ImmutableSet<DateTime> eventTimes =
ImmutableSet.copyOf(
recurring
.getRecurrenceTimeOfYear()
.getInstancesInRange(
Range.closedOpen(
latestOf(recurring.getRecurrenceLastExpansion().plusYears(1), startTime),
earliestOf(recurring.getRecurrenceEndTime(), endTime))));
//
// This range should always be legal for recurrings that are returned from the query. However,
// it is possible that the recurring has changed between when the read transformation occurred
// and now. This could be caused by some out-of-process mutations (such as a domain deletion
// closing out a previously open-ended recurrence), or more subtly, Beam could execute the same
// work multiple times due to transient communication issues between workers and the scheduler.
// Such opportunistic retries are OK for pure functional transformations, but can cause
// unexpected behavior when side effects are executed more than once. For example, the
// recurrence_last_expansion field could be updated by a worker after a success expansion, which
// failed to report the status to the scheduler in time, which in turn scheduled another worker
// to work on the same batch. The second worker would see a new recurrence_last_expansion that
// causes the range to be illegal.
//
// The best way to handle any unexpected behavior is to simply drop the recurring from
// expansion, if its new state still calls for an expansion, it would be picked up the next time
// the pipeline runs.
ImmutableSet<DateTime> eventTimes;
try {
eventTimes =
ImmutableSet.copyOf(
recurring
.getRecurrenceTimeOfYear()
.getInstancesInRange(
Range.closedOpen(
latestOf(recurring.getRecurrenceLastExpansion().plusYears(1), startTime),
earliestOf(recurring.getRecurrenceEndTime(), endTime))));
} catch (IllegalArgumentException e) {
return;
}
Domain domain = tm().loadByKey(Domain.createVKey(recurring.getDomainRepoId()));
Registry tld = Registry.get(domain.getTld());
// Find the times for which the OneTime billing event are already created, making this expansion
// idempotent. There is no need to match to the domain repo ID as the cancellation matching
@@ -277,7 +304,7 @@ public class ExpandRecurringBillingEventsPipeline implements Serializable {
// Create new OneTime and DomainHistory for EventTimes that needs to be expanded.
for (DateTime eventTime : eventTimesToExpand) {
recurrenceLastExpansionTime = latestOf(recurrenceLastExpansionTime, eventTime);
expandedOneTimeCounter.inc();
oneTimesToExpandCounter.inc();
DateTime billingTime = eventTime.plus(tld.getAutoRenewGracePeriodLength());
// Note that the DomainHistory is created as of transaction time, as opposed to event time.
// This might be counterintuitive because other DomainHistories are created at the time

View File

@@ -427,7 +427,7 @@ misc:
beam:
# The default region to run Apache Beam (Cloud Dataflow) jobs in.
defaultJobRegion: us-east1
defaultJobRegion: us-central1
# The GCE machine type to use when a job is CPU-intensive (e. g. RDE). Be sure
# to check the VM CPU quota for the job region. In a massively parallel
# pipeline this quota can be easily reached and needs to be raised, otherwise

View File

@@ -35,7 +35,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchDnl&runInEmpty]]></url>
<description>
This job downloads the latest DNL from MarksDB and inserts it into the database.
(See: TmchDnlServlet, ClaimsList)
(See: TmchDnlAction, ClaimsList)
</description>
<schedule>every 12 hours synchronized</schedule>
<target>backend</target>
@@ -45,7 +45,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchSmdrl&runInEmpty]]></url>
<description>
This job downloads the latest SMDRL from MarksDB and inserts it into the database.
(See: TmchSmdrlServlet, SignedMarkRevocationList)
(See: TmchSmdrlAction, SignedMarkRevocationList)
</description>
<schedule>every 12 hours from 00:15 to 12:15</schedule>
<target>backend</target>
@@ -55,7 +55,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchCrl&runInEmpty]]></url>
<description>
This job downloads the latest CRL from MarksDB and inserts it into the database.
(See: TmchCrlServlet)
(See: TmchCrlAction)
</description>
<schedule>every 12 hours synchronized</schedule>
<target>backend</target>
@@ -89,7 +89,7 @@
</cron>
<cron>
<url><![CDATA[/_dr/task/expandRecurringBillingEvents]]></url>
<url><![CDATA[/_dr/task/expandRecurringBillingEvents?advanceCursor]]></url>
<description>
This job runs an action that creates synthetic OneTime billing events from Recurring billing
events. Events are created for all instances of Recurring billing events that should exist

View File

@@ -94,6 +94,12 @@
<url-pattern>/registry-lock-verify</url-pattern>
</servlet-mapping>
<!-- Registrar console endpoints -->
<servlet-mapping>
<servlet-name>frontend-servlet</servlet-name>
<url-pattern>/console-api/*</url-pattern>
</servlet-mapping>
<!-- Security config -->
<security-constraint>
<web-resource-collection>

View File

@@ -58,7 +58,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchDnl&runInEmpty]]></url>
<description>
This job downloads the latest DNL from MarksDB and inserts it into the database.
(See: TmchDnlServlet, ClaimsList)
(See: TmchDnlAction, ClaimsList)
</description>
<schedule>every 12 hours synchronized</schedule>
<target>backend</target>
@@ -68,7 +68,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchSmdrl&runInEmpty]]></url>
<description>
This job downloads the latest SMDRL from MarksDB and inserts it into the database.
(See: TmchSmdrlServlet, SignedMarkRevocationList)
(See: TmchSmdrlAction, SignedMarkRevocationList)
</description>
<schedule>every 12 hours from 00:15 to 12:15</schedule>
<target>backend</target>
@@ -78,7 +78,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchCrl&runInEmpty]]></url>
<description>
This job downloads the latest CRL from MarksDB and inserts it into the database.
(See: TmchCrlServlet)
(See: TmchCrlAction)
</description>
<schedule>every 12 hours synchronized</schedule>
<target>backend</target>

View File

@@ -58,7 +58,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchDnl&runInEmpty]]></url>
<description>
This job downloads the latest DNL from MarksDB and inserts it into the database.
(See: TmchDnlServlet, ClaimsList)
(See: TmchDnlAction, ClaimsList)
</description>
<schedule>every 12 hours synchronized</schedule>
<target>backend</target>
@@ -68,7 +68,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchSmdrl&runInEmpty]]></url>
<description>
This job downloads the latest SMDRL from MarksDB and inserts it into the database.
(See: TmchSmdrlServlet, SignedMarkRevocationList)
(See: TmchSmdrlAction, SignedMarkRevocationList)
</description>
<schedule>every 12 hours from 00:15 to 12:15</schedule>
<target>backend</target>
@@ -78,7 +78,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchCrl&runInEmpty]]></url>
<description>
This job downloads the latest CRL from MarksDB and inserts it into the database.
(See: TmchCrlServlet)
(See: TmchCrlAction)
</description>
<schedule>every 12 hours synchronized</schedule>
<target>backend</target>
@@ -132,7 +132,7 @@
</cron>
<cron>
<url><![CDATA[/_dr/task/expandRecurringBillingEvents]]></url>
<url><![CDATA[/_dr/task/expandRecurringBillingEvents?advanceCursor]]></url>
<description>
This job runs an action that creates synthetic OneTime billing events from Recurring billing
events. Events are created for all instances of Recurring billing events that should exist

View File

@@ -42,7 +42,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchDnl&runInEmpty]]></url>
<description>
This job downloads the latest DNL from MarksDB and inserts it into the database.
(See: TmchDnlServlet, ClaimsList)
(See: TmchDnlAction, ClaimsList)
</description>
<schedule>every 12 hours synchronized</schedule>
<target>backend</target>
@@ -52,7 +52,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchSmdrl&runInEmpty]]></url>
<description>
This job downloads the latest SMDRL from MarksDB and inserts it into the database.
(See: TmchSmdrlServlet, SignedMarkRevocationList)
(See: TmchSmdrlAction, SignedMarkRevocationList)
</description>
<schedule>every 12 hours from 00:15 to 12:15</schedule>
<target>backend</target>
@@ -62,7 +62,7 @@
<url><![CDATA[/_dr/cron/fanout?queue=marksdb&endpoint=/_dr/task/tmchCrl&runInEmpty]]></url>
<description>
This job downloads the latest CRL from MarksDB and inserts it into the database.
(See: TmchCrlServlet)
(See: TmchCrlAction)
</description>
<schedule>every 12 hours synchronized</schedule>
<target>backend</target>
@@ -107,7 +107,7 @@
</cron>
<cron>
<url><![CDATA[/_dr/task/expandRecurringBillingEvents]]></url>
<url><![CDATA[/_dr/task/expandRecurringBillingEvents?advanceCursor]]></url>
<description>
This job runs an action that creates synthetic OneTime billing events from Recurring billing
events. Events are created for all instances of Recurring billing events that should exist

View File

@@ -15,6 +15,8 @@
package google.registry.flows.domain;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.common.collect.ImmutableSet.toImmutableSet;
import static google.registry.flows.FlowUtils.persistEntityChanges;
import static google.registry.flows.FlowUtils.validateRegistrarIsLoggedIn;
@@ -52,6 +54,7 @@ import static google.registry.model.tld.Registry.TldState.QUIET_PERIOD;
import static google.registry.model.tld.Registry.TldState.START_DATE_SUNRISE;
import static google.registry.model.tld.label.ReservationType.NAME_COLLISION;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.util.CollectionUtils.isNullOrEmpty;
import static google.registry.util.DateTimeUtils.END_OF_TIME;
import static google.registry.util.DateTimeUtils.leapSafeAddYears;
@@ -61,6 +64,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.net.InternetDomainName;
import google.registry.dns.DnsQueue;
import google.registry.flows.EppException;
import google.registry.flows.EppException.AssociationProhibitsOperationException;
import google.registry.flows.EppException.CommandUseErrorException;
import google.registry.flows.EppException.ParameterValuePolicyErrorException;
import google.registry.flows.ExtensionManager;
@@ -117,7 +121,9 @@ import google.registry.model.tld.Registry.TldType;
import google.registry.model.tld.label.ReservationType;
import google.registry.model.tmch.ClaimsList;
import google.registry.model.tmch.ClaimsListDao;
import google.registry.persistence.VKey;
import google.registry.tmch.LordnTaskUtils;
import java.util.Map;
import java.util.Optional;
import javax.annotation.Nullable;
import javax.inject.Inject;
@@ -156,6 +162,7 @@ import org.joda.time.Duration;
* @error {@link DomainFlowTmchUtils.NoMarksFoundMatchingDomainException}
* @error {@link DomainFlowTmchUtils.FoundMarkNotYetValidException}
* @error {@link DomainFlowTmchUtils.FoundMarkExpiredException}
* @error {@link DomainFlowTmchUtils.SignedMarkRevokedErrorException}
* @error {@link DomainFlowUtils.NotAuthorizedForTldException}
* @error {@link DomainFlowUtils.AcceptedTooLongAgoException}
* @error {@link DomainFlowUtils.BadDomainNameCharacterException}
@@ -270,6 +277,9 @@ public final class DomainCreateFlow implements TransactionalFlow {
registrarId,
now,
eppInput.getSingleExtension(AllocationTokenExtension.class));
if (!allocationToken.isPresent() && !registry.getDefaultPromoTokens().isEmpty()) {
allocationToken = checkForDefaultToken(registry, command);
}
boolean isAnchorTenant =
isAnchorTenant(
domainName, allocationToken, eppInput.getSingleExtension(MetadataExtension.class));
@@ -434,6 +444,36 @@ public final class DomainCreateFlow implements TransactionalFlow {
.build();
}
private Optional<AllocationToken> checkForDefaultToken(
Registry registry, DomainCommand.Create command) throws EppException {
Map<VKey<AllocationToken>, Optional<AllocationToken>> tokens =
AllocationToken.getAll(registry.getDefaultPromoTokens());
ImmutableList<Optional<AllocationToken>> tokenList =
registry.getDefaultPromoTokens().stream()
.map(tokens::get)
.filter(Optional::isPresent)
.collect(toImmutableList());
checkState(
!isNullOrEmpty(tokenList),
"Failure while loading default TLD promotions from the database");
// Check if any of the tokens are valid for this domain registration
for (Optional<AllocationToken> token : tokenList) {
try {
AllocationTokenFlowUtils.validateToken(
InternetDomainName.from(command.getDomainName()),
token.get(),
registrarId,
tm().getTransactionTime());
} catch (AssociationProhibitsOperationException e) {
// Allocation token was not valid for this registration, continue to check the next token in
// the list
continue;
}
// Only use the first valid token in the list
return token;
}
return Optional.empty();
}
/**
* Verifies that signed marks are only sent during sunrise.
*

View File

@@ -307,6 +307,13 @@ public final class DomainUpdateFlow implements TransactionalFlow {
}
}
/**
* Checks whether the new state of the domain is valid.
*
* <p>Note: Before adding or amending conditions, existing data has to be verified for being
* compliant with the additions or amendments, otherwise existing data can become invalid and
* cause Domain update failure.
*/
private void validateNewState(Domain newDomain) throws EppException {
validateRequiredContactsPresent(newDomain.getRegistrant(), newDomain.getContacts());
validateDsData(newDomain.getDsData());

View File

@@ -108,7 +108,7 @@ public class AllocationTokenFlowUtils {
*
* @throws EppException if the token is invalid in any way
*/
private static void validateToken(
public static void validateToken(
InternetDomainName domainName, AllocationToken token, String registrarId, DateTime now)
throws EppException {

View File

@@ -68,7 +68,6 @@ U+011F # LATIN SMALL LETTER G WITH BREVE
U+01E7 # LATIN SMALL LETTER G WITH CARON
U+0121 # LATIN SMALL LETTER G WITH DOT ABOVE
U+0123 # LATIN SMALL LETTER G WITH CEDILLA
U+01E5 # LATIN SMALL LETTER G WITH STROKE
U+0068 # LATIN SMALL LETTER H
U+0127 # LATIN SMALL LETTER H WITH STROKE
U+0069 # LATIN SMALL LETTER I

View File

@@ -16,6 +16,7 @@ package google.registry.model;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import com.google.gson.annotations.Expose;
import javax.annotation.Nullable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@@ -28,6 +29,7 @@ import org.joda.time.DateTime;
public class CreateAutoTimestamp extends ImmutableObject implements UnsafeSerializable {
@Column(nullable = false)
@Expose
DateTime creationTime;
@PrePersist

View File

@@ -31,8 +31,9 @@ import com.github.benmanes.caffeine.cache.LoadingCache;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.gson.annotations.Expose;
import google.registry.config.RegistryConfig;
import google.registry.model.annotations.IdAllocation;
import google.registry.dns.RefreshDnsAction;
import google.registry.model.eppcommon.StatusValue;
import google.registry.model.transfer.TransferData;
import google.registry.persistence.VKey;
@@ -41,6 +42,7 @@ import java.time.Duration;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import javax.annotation.Nullable;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.AttributeOverride;
@@ -66,7 +68,7 @@ public abstract class EppResource extends UpdateAutoTimestampEntity implements B
*
* @see <a href="https://tools.ietf.org/html/rfc5730">RFC 5730</a>
*/
@IdAllocation @Transient String repoId;
@Expose @Transient String repoId;
/**
* The ID of the registrar that is currently sponsoring this resource.
@@ -74,7 +76,7 @@ public abstract class EppResource extends UpdateAutoTimestampEntity implements B
* <p>This can be null in the case of pre-Registry-3.0-migration history objects with null
* resource fields.
*/
String currentSponsorRegistrarId;
@Expose String currentSponsorRegistrarId;
/**
* The ID of the registrar that created this resource.
@@ -82,7 +84,7 @@ public abstract class EppResource extends UpdateAutoTimestampEntity implements B
* <p>This can be null in the case of pre-Registry-3.0-migration history objects with null
* resource fields.
*/
String creationRegistrarId;
@Expose String creationRegistrarId;
/**
* The ID of the registrar that last updated this resource.
@@ -91,7 +93,7 @@ public abstract class EppResource extends UpdateAutoTimestampEntity implements B
* edits; it only includes EPP-visible modifications such as {@literal <update>}. Can be null if
* the resource has never been modified.
*/
String lastEppUpdateRegistrarId;
@Expose String lastEppUpdateRegistrarId;
/**
* The time when this resource was created.
@@ -105,6 +107,7 @@ public abstract class EppResource extends UpdateAutoTimestampEntity implements B
*/
// Need to override the default non-null column attribute.
@AttributeOverride(name = "creationTime", column = @Column)
@Expose
CreateAutoTimestamp creationTime = CreateAutoTimestamp.create(null);
/**
@@ -129,10 +132,27 @@ public abstract class EppResource extends UpdateAutoTimestampEntity implements B
* edits; it only includes EPP-visible modifications such as {@literal <update>}. Can be null if
* the resource has never been modified.
*/
DateTime lastEppUpdateTime;
@Expose DateTime lastEppUpdateTime;
/** Status values associated with this resource. */
Set<StatusValue> statuses;
@Expose Set<StatusValue> statuses;
/**
* When this domain/host's DNS was requested to be refreshed, or null if its DNS is up-to-date.
*
* <p>This will almost always be null except in the couple of minutes' interval between when a
* DNS-affecting create or update operation takes place and when the {@link RefreshDnsAction}
* runs, which resets this back to null upon completion of the DNS refresh task. This is a {@link
* DateTime} rather than a simple dirty boolean so that the DNS refresh action can order by the
* DNS refresh request time and take action on the oldest ones first.
*
* <p>Note that in the {@code DomainHistory}/{@code HostHistory} table this value means something
* slightly different: It means that the given domain/host action requested a DNS update. Unlike
* on the {@code Domain}/{code Host} table, this value is not then subsequently nulled out once
* the DNS refresh is complete; rather, it remains as a permanent record of which actions were
* DNS-affecting and which were not.
*/
@Transient @Nullable protected DateTime dnsRefreshRequestTime;
public String getRepoId() {
return repoId;
@@ -185,6 +205,19 @@ public abstract class EppResource extends UpdateAutoTimestampEntity implements B
return deletionTime;
}
/**
* Returns the DNS refresh request time iff this domain/host's DNS needs refreshing, otherwise
* absent.
*/
public Optional<DateTime> getDnsRefreshRequestTime() {
return Optional.ofNullable(dnsRefreshRequestTime);
}
@SuppressWarnings("unused")
private void setInternalDnsRefreshRequestTime(DateTime time) {
dnsRefreshRequestTime = time;
}
/** Return a clone of the resource with timed status values modified using the given time. */
public abstract EppResource cloneProjectedAtTime(DateTime now);
@@ -338,6 +371,11 @@ public abstract class EppResource extends UpdateAutoTimestampEntity implements B
return thisCastToDerived();
}
public B setDnsRefreshRequestTime(Optional<DateTime> dnsRefreshRequestTime) {
getInstance().dnsRefreshRequestTime = dnsRefreshRequestTime.orElse(null);
return thisCastToDerived();
}
/** Build the resource, nullifying empty strings and sets and setting defaults. */
@Override
public T build() {

View File

@@ -59,6 +59,7 @@ import org.joda.time.DateTime;
@Index(columnList = "tld"),
@Index(columnList = "registrantContact"),
@Index(columnList = "dnsRefreshRequestTime"),
@Index(columnList = "lordnPhase"),
@Index(columnList = "billing_recurrence_id"),
@Index(columnList = "transfer_billing_event_id"),
@Index(columnList = "transfer_billing_recurrence_id")
@@ -200,6 +201,7 @@ public class Domain extends DomainBase implements ForeignKeyedEppResource {
.setStatusValues(domainBase.getStatusValues())
.setTransferData(domainBase.getTransferData())
.setDnsRefreshRequestTime(domainBase.getDnsRefreshRequestTime())
.setLordnPhase(domainBase.getLordnPhase())
.setCurrentPackageToken(domainBase.getCurrentPackageToken().orElse(null));
}
}

View File

@@ -40,7 +40,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
import google.registry.dns.RefreshDnsAction;
import com.google.gson.annotations.Expose;
import google.registry.flows.ResourceFlowUtils;
import google.registry.model.EppResource;
import google.registry.model.EppResource.ResourceWithTransferData;
@@ -61,6 +61,8 @@ import google.registry.model.transfer.DomainTransferData;
import google.registry.model.transfer.TransferStatus;
import google.registry.persistence.VKey;
import google.registry.tldconfig.idn.IdnLabelValidator;
import google.registry.tmch.LordnTaskUtils.LordnPhase;
import google.registry.tmch.NordnUploadAction;
import google.registry.util.CollectionUtils;
import google.registry.util.DateTimeUtils;
import java.util.HashSet;
@@ -76,6 +78,8 @@ import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Embedded;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;
@@ -118,20 +122,20 @@ public class DomainBase extends EppResource
*
* @invariant domainName == domainName.toLowerCase(Locale.ENGLISH)
*/
String domainName;
@Expose String domainName;
/** The top level domain this is under, de-normalized from {@link #domainName}. */
String tld;
/** References to hosts that are the nameservers for the domain. */
@Transient Set<VKey<Host>> nsHosts;
@Expose @Transient Set<VKey<Host>> nsHosts;
/** Contacts. */
VKey<Contact> adminContact;
@Expose VKey<Contact> adminContact;
VKey<Contact> billingContact;
VKey<Contact> techContact;
VKey<Contact> registrantContact;
@Expose VKey<Contact> billingContact;
@Expose VKey<Contact> techContact;
@Expose VKey<Contact> registrantContact;
/** Authorization info (aka transfer secret) of the domain. */
@Embedded
@@ -172,10 +176,10 @@ public class DomainBase extends EppResource
String idnTableName;
/** Fully qualified host names of this domain's active subordinate hosts. */
Set<String> subordinateHosts;
@Expose Set<String> subordinateHosts;
/** When this domain's registration will expire. */
DateTime registrationExpirationTime;
@Expose DateTime registrationExpirationTime;
/**
* The poll message associated with this domain being deleted.
@@ -227,7 +231,7 @@ public class DomainBase extends EppResource
*
* <p>Can be null if the resource has never been transferred.
*/
DateTime lastTransferTime;
@Expose DateTime lastTransferTime;
/**
* When the domain's autorenewal status will expire.
@@ -247,34 +251,34 @@ public class DomainBase extends EppResource
DateTime autorenewEndTime;
/**
* When this domain's DNS was requested to be refreshed, or null if its DNS is up-to-date.
* Which Lordn phase the domain is in after it is created but before the Nordn upload has
* processed the domain.
*
* <p>This will almost always be null except in the couple of minutes' interval between when a
* DNS-affecting create or update operation takes place and when the {@link RefreshDnsAction}
* runs, which resets this back to null upon completion of the DNS refresh task. This is a {@link
* DateTime} rather than a simple dirty boolean so that the DNS refresh action can order by the
* DNS refresh request time and take action on the oldest ones first.
* <p>This will almost always be {@code NONE} except in the interval between when a domain that
* contains a signed mark or claims notice has been created, and when {@link NordnUploadAction}
* runs, which includes the domain in the CSV uploaded to TMCH and sets this back to {@code NONE}.
*
* <p>Note that this is a Cloud SQL-based replacement for the {@code dns-pull} task queue. The
* domains that have a non-null value for this field should be exactly the same as the tasks that
* would be in the {@code dns-pull} queue.
*
* <p>Note that in the {@link DomainHistory} table this value means something slightly different:
* It means that the given domain action requested a DNS update. Unlike on the {@code Domain}
* table, this value is not then subsequently nulled out once the DNS refresh is complete; rather,
* it remains as a permanent record of which actions were DNS-affecting and which were not.
* <p>Note that in the {@code DomainHistory} table this value means something slightly different:
* It means that the given domain was created with a signed mark ({@code SUNRISE} or a claims
* notice ({@code CLAIMS}. Unlike on the {@code Domain} table, this value is not then subsequently
* set back to {@code NONE} once the Nordn upload is complete; rather, it remains as a permanent
* record of when which phase the domain is in when created.
*/
// TODO(mcilwain): Start using this field once we are further along in the DB migration.
DateTime dnsRefreshRequestTime;
@Enumerated(EnumType.STRING)
LordnPhase lordnPhase = LordnPhase.NONE;
/** The {@link AllocationToken} for the package this domain is currently a part of. */
@Nullable VKey<AllocationToken> currentPackageToken;
/**
* Returns the DNS refresh request time iff this domain's DNS needs refreshing, otherwise absent.
*/
public Optional<DateTime> getDnsRefreshRequestTime() {
return Optional.ofNullable(dnsRefreshRequestTime);
public LordnPhase getLordnPhase() {
return lordnPhase;
}
@Access(AccessType.PROPERTY)
@SuppressWarnings("unused")
@Column(name = "dnsRefreshRequestTime")
private DateTime getInternalDnsRefreshRequestTime() {
return getDnsRefreshRequestTime().orElse(null);
}
public ImmutableSet<String> getSubordinateHosts() {
@@ -861,8 +865,8 @@ public class DomainBase extends EppResource
return thisCastToDerived();
}
public B setDnsRefreshRequestTime(Optional<DateTime> dnsRefreshRequestTime) {
getInstance().dnsRefreshRequestTime = dnsRefreshRequestTime.orElse(null);
public B setLordnPhase(LordnPhase lordnPhase) {
getInstance().lordnPhase = lordnPhase;
return thisCastToDerived();
}

View File

@@ -16,16 +16,22 @@ package google.registry.model.domain.token;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableMap.toImmutableMap;
import static google.registry.config.RegistryConfig.getSingletonCacheRefreshDuration;
import static google.registry.model.domain.token.AllocationToken.TokenStatus.CANCELLED;
import static google.registry.model.domain.token.AllocationToken.TokenStatus.ENDED;
import static google.registry.model.domain.token.AllocationToken.TokenStatus.NOT_STARTED;
import static google.registry.model.domain.token.AllocationToken.TokenStatus.VALID;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.util.CollectionUtils.forceEmptyToNull;
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
import static google.registry.util.PreconditionsUtils.checkArgumentNotNull;
import com.github.benmanes.caffeine.cache.CacheLoader;
import com.github.benmanes.caffeine.cache.LoadingCache;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
@@ -34,6 +40,7 @@ import com.google.common.collect.Range;
import google.registry.flows.EppException;
import google.registry.flows.domain.DomainFlowUtils;
import google.registry.model.Buildable;
import google.registry.model.CacheUtils;
import google.registry.model.CreateAutoTimestamp;
import google.registry.model.UpdateAutoTimestampEntity;
import google.registry.model.billing.BillingEvent.RenewalPriceBehavior;
@@ -41,6 +48,7 @@ import google.registry.model.common.TimedTransitionProperty;
import google.registry.model.reporting.HistoryEntry.HistoryEntryId;
import google.registry.persistence.VKey;
import google.registry.persistence.WithVKey;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import javax.annotation.Nullable;
@@ -267,6 +275,39 @@ public class AllocationToken extends UpdateAutoTimestampEntity implements Builda
return STATIC_TOKEN_BEHAVIORS.getOrDefault(token, TokenBehavior.DEFAULT);
}
public static Optional<AllocationToken> get(VKey<AllocationToken> key) {
return ALLOCATION_TOKENS_CACHE.get(key);
}
public static Map<VKey<AllocationToken>, Optional<AllocationToken>> getAll(
ImmutableList<VKey<AllocationToken>> keys) {
return ALLOCATION_TOKENS_CACHE.getAll(keys);
}
/** A cache that loads the {@link AllocationToken} object for a given AllocationToken VKey. */
private static final LoadingCache<VKey<AllocationToken>, Optional<AllocationToken>>
ALLOCATION_TOKENS_CACHE =
CacheUtils.newCacheBuilder(getSingletonCacheRefreshDuration())
.build(
new CacheLoader<VKey<AllocationToken>, Optional<AllocationToken>>() {
@Override
public Optional<AllocationToken> load(VKey<AllocationToken> key) {
return tm().transact(() -> tm().loadByKeyIfPresent(key));
}
@Override
public Map<VKey<AllocationToken>, Optional<AllocationToken>> loadAll(
Iterable<? extends VKey<AllocationToken>> keys) {
ImmutableSet<VKey<AllocationToken>> keySet = ImmutableSet.copyOf(keys);
return tm().transact(
() ->
keySet.stream()
.collect(
toImmutableMap(
key -> key, key -> tm().loadByKeyIfPresent(key))));
}
});
@Override
public VKey<AllocationToken> createVKey() {
if (!AllocationToken.TokenBehavior.DEFAULT.equals(getTokenBehavior())) {

View File

@@ -28,7 +28,7 @@ import javax.persistence.Table;
/**
* A persistable Host resource including mutable and non-mutable fields.
*
* <p>The {@link javax.persistence.Id} of the Host is the repoId.
* <p>The {@link Id} of the Host is the repoId.
*/
@Entity(name = "Host")
@Table(
@@ -48,7 +48,8 @@ import javax.persistence.Table;
@Index(columnList = "hostName"),
@Index(columnList = "creationTime"),
@Index(columnList = "deletionTime"),
@Index(columnList = "currentSponsorRegistrarId")
@Index(columnList = "currentSponsorRegistrarId"),
@Index(columnList = "dnsRefreshRequestTime")
})
@ExternalMessagingName("host")
@WithVKey(String.class)
@@ -81,7 +82,7 @@ public class Host extends HostBase implements ForeignKeyedEppResource {
}
public Builder copyFrom(HostBase hostBase) {
return this.setCreationRegistrarId(hostBase.getCreationRegistrarId())
return setCreationRegistrarId(hostBase.getCreationRegistrarId())
.setCreationTime(hostBase.getCreationTime())
.setDeletionTime(hostBase.getDeletionTime())
.setHostName(hostBase.getHostName())
@@ -93,6 +94,7 @@ public class Host extends HostBase implements ForeignKeyedEppResource {
.setPersistedCurrentSponsorRegistrarId(hostBase.getPersistedCurrentSponsorRegistrarId())
.setRepoId(hostBase.getRepoId())
.setSuperordinateDomain(hostBase.getSuperordinateDomain())
.setDnsRefreshRequestTime(hostBase.getDnsRefreshRequestTime())
.setStatusValues(hostBase.getStatusValues());
}
}

View File

@@ -32,6 +32,7 @@ import java.util.Set;
import javax.annotation.Nullable;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.MappedSuperclass;
import org.joda.time.DateTime;
@@ -85,6 +86,13 @@ public class HostBase extends EppResource {
*/
DateTime lastSuperordinateChange;
@Access(AccessType.PROPERTY)
@SuppressWarnings("unused")
@Column(name = "dnsRefreshRequestTime")
private DateTime getInternalDnsRefreshRequestTime() {
return getDnsRefreshRequestTime().orElse(null);
}
public String getHostName() {
return hostName;
}

View File

@@ -88,8 +88,7 @@ public class Lock extends ImmutableObject implements Serializable {
* <p>See {@link RequestStatusCheckerImpl#getLogId} for details about how it's created in
* practice.
*/
@Column(nullable = false)
String requestLogId;
@Column String requestLogId;
/** When the lock can be considered implicitly released. */
@Column(nullable = false)

View File

@@ -25,6 +25,7 @@ import google.registry.monitoring.whitebox.WhiteboxModule;
import google.registry.request.RequestComponentBuilder;
import google.registry.request.RequestModule;
import google.registry.request.RequestScope;
import google.registry.ui.server.console.ConsoleDomainGetAction;
import google.registry.ui.server.registrar.ConsoleOteSetupAction;
import google.registry.ui.server.registrar.ConsoleRegistrarCreatorAction;
import google.registry.ui.server.registrar.ConsoleUiAction;
@@ -61,6 +62,8 @@ interface FrontendRequestComponent {
RegistryLockVerifyAction registryLockVerifyAction();
ConsoleDomainGetAction consoleDomainGetAction();
@Subcomponent.Builder
abstract class Builder implements RequestComponentBuilder<FrontendRequestComponent> {
@Override public abstract Builder requestModule(RequestModule requestModule);

View File

@@ -22,6 +22,7 @@ import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.gson.annotations.Expose;
import google.registry.model.EppResource;
import google.registry.model.ImmutableObject;
import google.registry.model.contact.Contact;
@@ -52,7 +53,7 @@ public class VKey<T> extends ImmutableObject implements Serializable {
.collect(toImmutableMap(Class::getSimpleName, identity()));
// The primary key for the referenced entity.
Serializable key;
@Expose Serializable key;
Class<? extends T> kind;

View File

@@ -15,10 +15,7 @@
package google.registry.reporting.billing;
import static google.registry.beam.BeamUtils.createJobName;
import static google.registry.model.common.Cursor.CursorType.RECURRING_BILLING;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.request.Action.Method.POST;
import static google.registry.util.DateTimeUtils.START_OF_TIME;
import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
import static javax.servlet.http.HttpServletResponse.SC_OK;
@@ -32,7 +29,6 @@ import com.google.common.flogger.FluentLogger;
import com.google.common.net.MediaType;
import google.registry.config.RegistryConfig.Config;
import google.registry.config.RegistryEnvironment;
import google.registry.model.common.Cursor;
import google.registry.persistence.PersistenceModule;
import google.registry.reporting.ReportingModule;
import google.registry.request.Action;
@@ -44,7 +40,6 @@ import google.registry.util.Clock;
import google.registry.util.CloudTasksUtils;
import java.io.IOException;
import javax.inject.Inject;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.YearMonth;
@@ -113,19 +108,6 @@ public class GenerateInvoicesAction implements Runnable {
response.setContentType(MediaType.PLAIN_TEXT_UTF_8);
logger.atInfo().log("Launching invoicing pipeline for %s.", yearMonth);
try {
DateTime currentCursorTime =
tm().transact(
() ->
tm().loadByKeyIfPresent(Cursor.createGlobalVKey(RECURRING_BILLING))
.orElse(Cursor.createGlobal(RECURRING_BILLING, START_OF_TIME))
.getCursorTime());
if (!YearMonth.fromDateFields(currentCursorTime.toDate()).isAfter(yearMonth)) {
throw new IllegalStateException(
"Latest billing events expansion cycle hasn't finished yet, terminating invoicing"
+ " pipeline");
}
LaunchFlexTemplateParameter parameter =
new LaunchFlexTemplateParameter()
.setJobName(createJobName("invoicing", clock))

View File

@@ -49,7 +49,6 @@ U+011F # LATIN SMALL LETTER G WITH BREVE
U+01E7 # LATIN SMALL LETTER G WITH CARON
U+0121 # LATIN SMALL LETTER G WITH DOT ABOVE
U+0123 # LATIN SMALL LETTER G WITH CEDILLA
U+01E5 # LATIN SMALL LETTER G WITH STROKE
U+0068 # LATIN SMALL LETTER H
U+0127 # LATIN SMALL LETTER H WITH STROKE
U+0069 # LATIN SMALL LETTER I

View File

@@ -38,10 +38,11 @@ public final class LordnTaskUtils {
public static final String QUEUE_SUNRISE = "lordn-sunrise";
public static final String QUEUE_CLAIMS = "lordn-claims";
public static final String COLUMNS_CLAIMS = "roid,domain-name,notice-id,registrar-id,"
+ "registration-datetime,ack-datetime,application-datetime";
public static final String COLUMNS_SUNRISE = "roid,domain-name,SMD-id,registrar-id,"
+ "registration-datetime,application-datetime";
public static final String COLUMNS_CLAIMS =
"roid,domain-name,notice-id,registrar-id,"
+ "registration-datetime,ack-datetime,application-datetime";
public static final String COLUMNS_SUNRISE =
"roid,domain-name,SMD-id,registrar-id," + "registration-datetime,application-datetime";
/** Enqueues a task in the LORDN queue representing a line of CSV for LORDN export. */
public static void enqueueDomainTask(Domain domain) {
@@ -50,15 +51,17 @@ public final class LordnTaskUtils {
// isn't yet populated when this method is called during the resource flow.
String tld = domain.getTld();
if (domain.getLaunchNotice() == null) {
getQueue(QUEUE_SUNRISE).add(TaskOptions.Builder
.withTag(tld)
.method(Method.PULL)
.payload(getCsvLineForSunriseDomain(domain, tm().getTransactionTime())));
getQueue(QUEUE_SUNRISE)
.add(
TaskOptions.Builder.withTag(tld)
.method(Method.PULL)
.payload(getCsvLineForSunriseDomain(domain, tm().getTransactionTime())));
} else {
getQueue(QUEUE_CLAIMS).add(TaskOptions.Builder
.withTag(tld)
.method(Method.PULL)
.payload(getCsvLineForClaimsDomain(domain, tm().getTransactionTime())));
getQueue(QUEUE_CLAIMS)
.add(
TaskOptions.Builder.withTag(tld)
.method(Method.PULL)
.payload(getCsvLineForClaimsDomain(domain, tm().getTransactionTime())));
}
}
@@ -95,4 +98,18 @@ public final class LordnTaskUtils {
}
private LordnTaskUtils() {}
public enum LordnPhase {
SUNRISE(QUEUE_SUNRISE),
CLAIMS(QUEUE_CLAIMS),
NONE(null);
final String queue;
LordnPhase(String queue) {
this.queue = queue;
}
}
}

View File

@@ -27,8 +27,10 @@ import org.bouncycastle.openpgp.bc.BcPGPPublicKeyRing;
/** Helper class for common data loaded from the jar and SQL at runtime. */
public final class TmchData {
private static final String BEGIN_ENCODED_SMD = "-----BEGIN ENCODED SMD-----";
private static final String END_ENCODED_SMD = "-----END ENCODED SMD-----";
static final String BEGIN_ENCODED_SMD = "-----BEGIN ENCODED SMD-----";
static final String END_ENCODED_SMD = "-----END ENCODED SMD-----";
private TmchData() {}
static PGPPublicKey loadPublicKey(ByteSource pgpPublicKeyFile) {
try (InputStream input = pgpPublicKeyFile.openStream();

View File

@@ -1,26 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIEVjCCAz6gAwIBAgIgLrAbevoae52y3f6C2tB0Sn3p7XJm0T02FogxKCfNhXkw
DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxPDA6BgNVBAoTM0ludGVybmV0
IENvcnBvcmF0aW9uIGZvciBBc3NpZ25lZCBOYW1lcyBhbmQgTnVtYmVyczEvMC0G
A1UEAxMmSUNBTk4gVHJhZGVtYXJrIENsZWFyaW5naG91c2UgUGlsb3QgQ0EwHhcN
MTMwNjI2MDAwMDAwWhcNMjMwNjI1MjM1OTU5WjB8MQswCQYDVQQGEwJVUzE8MDoG
A1UEChMzSW50ZXJuZXQgQ29ycG9yYXRpb24gZm9yIEFzc2lnbmVkIE5hbWVzIGFu
ZCBOdW1iZXJzMS8wLQYDVQQDEyZJQ0FOTiBUcmFkZW1hcmsgQ2xlYXJpbmdob3Vz
ZSBQaWxvdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJiRqFg
iCoDF8zMJMKHPMEuSpjbEl9ZWII+1WawDyt+jw841HsTT+6MwZsqExbQvukgvnuS
lA3Rg3xTFxodMaVZWsVQJy2PXGHVFRLnCp05DYZsMGZabuN9mIekYwtjePo89Lz0
JtU3ibL3squGG3gg6TLtPjks7Txm18BYPOYLznui32GUz+1aIZuk2p5A/rSldsh3
bke68IX5WZhKuIxT0+BjS8yfLWI0HCUs71WVxzvlJ1v22/eMK0WEA6+ZhCbOKIav
VtGNJrwIYwhZmxqfiR1HzHTLvrV0SLlJ2bwNk/yzKm8IJfuFezQ5BBtQ2RS9opFX
X8ft3v+uQQQvi+MCAwEAAaOBwzCBwDASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1Ud
DgQWBBTDrT6m1hEARYBcOldKim3cMQ2ecTAOBgNVHQ8BAf8EBAMCAQYwNAYDVR0f
BC0wKzApoCegJYYjaHR0cDovL2NybC5pY2Fubi5vcmcvdG1jaF9waWxvdC5jcmww
RQYDVR0gBD4wPDA6BgMqAwQwMzAxBggrBgEFBQcCARYlaHR0cDovL3d3dy5pY2Fu
bi5vcmcvcGlsb3RfcmVwb3NpdG9yeTANBgkqhkiG9w0BAQsFAAOCAQEAKUfEJ5X6
QAttajjRVseJFQxRXGHTgCaDk8C/1nj1ielZAuZtgdUpWDUr0NnGCi+LHSsgdTYR
+vMrxir7EVYQevrBobELkxeTEfjF9FVqjBHInyPFLOFkz15zGG2IwPJps+vhAd/7
gT0ph1k2FEkJFGL5LwRf1ms4IX0vDkxTIX8Qxy1jczCiSsoV8pwlhh2NHAkpGQWN
/pTS0Uqi7uU5Bm/IoGvPBzUp5n5SjUMnTZx/+1zAuerSabt483sXBcWsjgl7MqFt
fONiAtNeMNfh60lTMu4zgVwLZTO4TQM5Q2uylPPmZtwnA88QvM2IL85cIYJHd0z9
jpUQMBGHXF2WQA==
-----END CERTIFICATE-----

View File

@@ -1,13 +0,0 @@
-----BEGIN X509 CRL-----
MIIB8DCB2QIBATANBgkqhkiG9w0BAQsFADB2MQswCQYDVQQGEwJVUzE8MDoGA1UE
ChMzSW50ZXJuZXQgQ29ycG9yYXRpb24gZm9yIEFzc2lnbmVkIE5hbWVzIGFuZCBO
dW1iZXJzMSkwJwYDVQQDEyBJQ0FOTiBUcmFkZW1hcmsgQ2xlYXJpbmdob3VzZSBD
QRcNMTgwMzAxMDAwMDAwWhcNMTgxMDA3MjM1OTU5WqAvMC0wHwYDVR0jBBgwFoAU
XMDxlizKTFsp8UB00xs2PkfUbgQwCgYDVR0UBAMCAQswDQYJKoZIhvcNAQELBQAD
ggEBAGhvQtqENy2Ga+nGg6kZRCzEWKy481v111Iycku/qL5aUlqSL5BkQst2Czaq
xdKRSxKHkMaTChoezSaw5huOTd0prdSXVHPg/tmjxyuuS2pqWpuAICkrG06FgXgh
AG5YCHt2DvCjeA9F3TMmbOkCMILQ/x+vsyg6Yv4Oiz8rFbFcUMntUKSrymt4dKpk
S78CTkHH/3M3YNxZCo8JPwaQohC3Rck4M30Pg8C0qC9jjSrudA6hCa4223U6aZwC
Kz3LNXdkqGWlDJPTf0YWwnT4ZyO7KKXVuEbPzg187htz3Jcr6b0x1UUoHGAkOv7i
W4IwhPbUJ14/7pUuUef6airQUw8=
-----END X509 CRL-----

View File

@@ -1,25 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIEQjCCAyqgAwIBAgIhAJNCMqhNjz3cXVJPj7yvcZvro1FKQR+dTC6tXazem5g+
MA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNVBAYTAlVTMTwwOgYDVQQKEzNJbnRlcm5l
dCBDb3Jwb3JhdGlvbiBmb3IgQXNzaWduZWQgTmFtZXMgYW5kIE51bWJlcnMxKTAn
BgNVBAMTIElDQU5OIFRyYWRlbWFyayBDbGVhcmluZ2hvdXNlIENBMB4XDTEzMDcy
NDAwMDAwMFoXDTIzMDcyMzIzNTk1OVowdjELMAkGA1UEBhMCVVMxPDA6BgNVBAoT
M0ludGVybmV0IENvcnBvcmF0aW9uIGZvciBBc3NpZ25lZCBOYW1lcyBhbmQgTnVt
YmVyczEpMCcGA1UEAxMgSUNBTk4gVHJhZGVtYXJrIENsZWFyaW5naG91c2UgQ0Ew
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5MX6qpRnqFzEXa9w3G0b8
LTEVZzpOpcSq2BXJO16+iuZ964mpay2hm2BdZk89hSmZhUy2ePBR6PdS0GMmzzXL
NiyTHJlDIPxxXTR39Iqs8QChJ8wle4pYUu8JUk2vJ0r7PhFweeCCQZ5gvHdCwopS
bXeolj4NCqsvzU8iROsLRHSZbE83i2pkL+qBoyzjny9MO2rvMNPo5WrDNrno6hvC
hlf8Pv77HTNCazI2MeW0ArfLin4pSe6nLnDsQA11SF9bbgwDgVMQFvmB8nEvUbZW
Atnp3auaWqaylC+G0p3frFvMCUJMPrghiPwBABl3bk1GLjXXVl7D8SubKd2Xwv63
AgMBAAGjgbowgbcwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUXMDxlizK
TFsp8UB00xs2PkfUbgQwDgYDVR0PAQH/BAQDAgEGMC4GA1UdHwQnMCUwI6AhoB+G
HWh0dHA6Ly9jcmwuaWNhbm4ub3JnL3RtY2guY3JsMEIGA1UdIAQ7MDkwBgYEVR0g
ADAvBggrBgEFBQcCATAjMCEGCCsGAQUFBwIBFhVodHRwczovL2NhLmljYW5uLm9y
Zy8wDQYJKoZIhvcNAQELBQADggEBAAM29FBdwQSAx8dD4ZYtCYjXxTonNCP2qveG
wrpMJcq/I3Jp/N4etsnj+K5ej5sSlDuo8sTMF7lgMkgjrc6zgJl0+Gct2RhbRNzN
5ittE9JwJZ3Us4vwiy6gqMO5Ie9YaKMZy2MYP2iFp6AhBKIc2Iz+8aFfnFzdSEx2
b3xc+t1A09dzpnzU6zvHWUUkTYq9fTg1er1npni9ZErvp0jEyHVWi5GXvWap68XH
pVF6TBmPW2UBEEnFgd3SxbMXLhaD/wzV12tlSYjxaNed+H5qbVVbSVwN9yBeWU29
/pkZu79TqFFxTd4CJTWOBq0+yLO1Ts2ZZ1l+GgU6e3hI1XERSNc=
-----END CERTIFICATE-----

View File

@@ -18,9 +18,11 @@ import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.ImmutableSet.toImmutableSet;
import static com.google.common.collect.Sets.difference;
import static google.registry.model.billing.BillingEvent.RenewalPriceBehavior.DEFAULT;
import static google.registry.model.domain.token.AllocationToken.TokenType.PACKAGE;
import static google.registry.model.domain.token.AllocationToken.TokenType.SINGLE_USE;
import static google.registry.model.domain.token.AllocationToken.TokenType.UNLIMITED_USE;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.util.CollectionUtils.isNullOrEmpty;
import static google.registry.util.CollectionUtils.nullToEmpty;
import static google.registry.util.StringGenerator.DEFAULT_PASSWORD_LENGTH;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -253,6 +255,22 @@ class GenerateAllocationTokensCommand implements Command {
!ImmutableList.of("").equals(allowedTlds),
"Either omit --allowed_tlds if all TLDs are allowed, or include a comma-separated list");
if (!isNullOrEmpty(tokenStatusTransitions)) {
// Don't allow package tokens to be created with a scheduled end time since this could allow
// future domains to be attributed to the package and never be billed. Package promotion
// tokens should only be scheduled to end with a brief time period before the status
// transition occurs so that no new domains are registered using that token between when the
// status is scheduled and when the transition occurs.
// TODO(@sarahbot): Create a cleaner way to handle ending packages once we actually have
// customers using them
boolean hasEnding =
tokenStatusTransitions.containsValue(TokenStatus.ENDED)
|| tokenStatusTransitions.containsValue(TokenStatus.CANCELLED);
checkArgument(
!(PACKAGE.equals(tokenType) && hasEnding),
"PACKAGE tokens should not be generated with ENDED or CANCELLED in their transition map");
}
if (tokenStrings != null) {
verifyTokenStringsDoNotExist();
}

View File

@@ -69,14 +69,15 @@ class RequestFactoryModule {
return new NetHttpTransport()
.createRequestFactory(
request -> {
// Use the standard credential initializer to set the Authorization header
credentialsBundle.getHttpRequestInitializer().initialize(request);
// If using IAP, use the refresh token to acquire an IAP-enabled ID token and use
// that for authentication.
if (iapClientId.isPresent()) {
String idToken = getIdToken(credentialsBundle, iapClientId.get());
request.getHeaders().setAuthorization("Bearer " + idToken);
} else {
// Otherwise, use the standard credential HTTP initializer
credentialsBundle.getHttpRequestInitializer().initialize(request);
// Set the Proxy-Authentication header so that IAP can read from it, see
// https://cloud.google.com/iap/docs/authentication-howto#authenticating_from_proxy-authorization_header
request.getHeaders().set("Proxy-Authorization", "Bearer " + idToken);
}
// GAE request times out after 10 min, so here we set the timeout to 10 min. This is
// needed to support some nomulus commands like updating premium lists that take

View File

@@ -14,6 +14,7 @@
package google.registry.tools;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.ImmutableMap.toImmutableMap;
import static com.google.common.collect.ImmutableSet.toImmutableSet;
import static com.google.common.collect.Iterables.partition;
@@ -31,6 +32,7 @@ import google.registry.model.billing.BillingEvent.RenewalPriceBehavior;
import google.registry.model.domain.token.AllocationToken;
import google.registry.model.domain.token.AllocationToken.RegistrationBehavior;
import google.registry.model.domain.token.AllocationToken.TokenStatus;
import google.registry.model.domain.token.AllocationToken.TokenType;
import google.registry.tools.params.TransitionListParameter.TokenStatusTransitions;
import java.util.List;
import java.util.Map;
@@ -114,6 +116,7 @@ final class UpdateAllocationTokensCommand extends UpdateOrDeleteAllocationTokens
private static final Joiner JOINER = Joiner.on(", ");
private ImmutableSet<AllocationToken> tokensToSave;
private boolean endToken = false;
@Override
public void init() {
@@ -126,6 +129,12 @@ final class UpdateAllocationTokensCommand extends UpdateOrDeleteAllocationTokens
allowedTlds = ImmutableList.of();
}
if (tokenStatusTransitions != null
&& (tokenStatusTransitions.containsValue(TokenStatus.ENDED)
|| tokenStatusTransitions.containsValue(TokenStatus.CANCELLED))) {
endToken = true;
}
tokensToSave =
tm().transact(
() ->
@@ -157,6 +166,19 @@ final class UpdateAllocationTokensCommand extends UpdateOrDeleteAllocationTokens
}
private AllocationToken updateToken(AllocationToken original) {
if (endToken && original.getTokenType().equals(TokenType.PACKAGE)) {
Long domainsInPackage =
tm().query("SELECT COUNT(*) FROM Domain WHERE currentPackageToken = :token", Long.class)
.setParameter("token", original.createVKey())
.getSingleResult();
checkArgument(
domainsInPackage == 0,
"Package token %s can not end its promotion because it still has %s domains in the"
+ " package",
original.getToken(),
domainsInPackage);
}
AllocationToken.Builder builder = original.asBuilder();
Optional.ofNullable(allowedClientIds)
.ifPresent(clientIds -> builder.setAllowedRegistrarIds(ImmutableSet.copyOf(clientIds)));

View File

@@ -0,0 +1,91 @@
// Copyright 2023 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.ui.server.console;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import com.google.api.client.http.HttpStatusCodes;
import com.google.gson.Gson;
import google.registry.model.EppResourceUtils;
import google.registry.model.console.ConsolePermission;
import google.registry.model.console.User;
import google.registry.model.domain.Domain;
import google.registry.request.Action;
import google.registry.request.Parameter;
import google.registry.request.Response;
import google.registry.request.auth.Auth;
import google.registry.request.auth.AuthResult;
import google.registry.request.auth.UserAuthInfo;
import google.registry.ui.server.registrar.JsonGetAction;
import java.util.Optional;
import javax.inject.Inject;
/** Returns a JSON representation of a domain to the registrar console. */
@Action(
service = Action.Service.DEFAULT,
path = ConsoleDomainGetAction.PATH,
auth = Auth.AUTH_PUBLIC_LOGGED_IN)
public class ConsoleDomainGetAction implements JsonGetAction {
public static final String PATH = "/console-api/domain";
private final AuthResult authResult;
private final Response response;
private final Gson gson;
private final String paramDomain;
@Inject
public ConsoleDomainGetAction(
AuthResult authResult,
Response response,
Gson gson,
@Parameter("domain") String paramDomain) {
this.authResult = authResult;
this.response = response;
this.gson = gson;
this.paramDomain = paramDomain;
}
@Override
public void run() {
if (!authResult.isAuthenticated() || !authResult.userAuthInfo().isPresent()) {
response.setStatus(HttpStatusCodes.STATUS_CODE_UNAUTHORIZED);
return;
}
UserAuthInfo authInfo = authResult.userAuthInfo().get();
if (!authInfo.consoleUser().isPresent()) {
response.setStatus(HttpStatusCodes.STATUS_CODE_UNAUTHORIZED);
return;
}
User user = authInfo.consoleUser().get();
Optional<Domain> possibleDomain =
tm().transact(
() ->
EppResourceUtils.loadByForeignKeyCached(
Domain.class, paramDomain, tm().getTransactionTime()));
if (!possibleDomain.isPresent()) {
response.setStatus(HttpStatusCodes.STATUS_CODE_NOT_FOUND);
return;
}
Domain domain = possibleDomain.get();
if (!user.getUserRoles()
.hasPermission(domain.getCurrentSponsorRegistrarId(), ConsolePermission.DOWNLOAD_DOMAINS)) {
response.setStatus(HttpStatusCodes.STATUS_CODE_NOT_FOUND);
return;
}
response.setStatus(HttpStatusCodes.STATUS_CODE_OK);
response.setPayload(gson.toJson(domain));
}
}

View File

@@ -156,4 +156,10 @@ public final class RegistrarConsoleModule {
static Boolean provideIsLock(HttpServletRequest req) {
return extractBooleanParameter(req, "isLock");
}
@Provides
@Parameter("domain")
static String provideDomain(HttpServletRequest req) {
return extractRequiredParameter(req, "domain");
}
}

View File

@@ -23,12 +23,6 @@
"helpText": "The exclusive upper bound of the operation window, in ISO 8601 format.",
"is_optional": false
},
{
"name": "shard",
"label": "The exclusive upper bound of the operation window.",
"helpText": "The exclusive upper bound of the operation window, in ISO 8601 format.",
"is_optional": true
},
{
"name": "isDryRun",
"label": "Whether this job is a dry run.",

View File

@@ -0,0 +1,20 @@
-----BEGIN X509 CRL-----
MIIDLjCCARYCAQEwDQYJKoZIhvcNAQENBQAwfDELMAkGA1UEBhMCVVMxPDA6BgNV
BAoMM0ludGVybmV0IENvcnBvcmF0aW9uIGZvciBBc3NpZ25lZCBOYW1lcyBhbmQg
TnVtYmVyczEvMC0GA1UEAwwmSUNBTk4gVHJhZGVtYXJrIENsZWFyaW5naG91c2Ug
UGlsb3QgQ0EXDTIyMTExNjEzMzIyN1oXDTIzMDQwNjEzMzIyN1owNTAzAhQc4zug
SmVXTpNkiBlOLRFSS6qBnhcNMjIxMTE2MTMzMjI3WjAMMAoGA1UdFQQDCgEAoC8w
LTAfBgNVHSMEGDAWgBRHe0+uelGRtdG/nTbphn82FgSpRTAKBgNVHRQEAwIBATAN
BgkqhkiG9w0BAQ0FAAOCAgEAD5pxGf7W2nxnCyoMhhRWclaBrY2VF+lYitpQdUIA
Li3nhCXDiXwHWNtiyGjKaWJFsCFAph0EejKTR1iHh/7t7fZ5T2KhiqyREGGs2VT5
AXTWTDZUdGtobmc9xmXowzF7YUWoZZenj1AwUt0/tDKth1ieZvoRWEKJ+0YCpIDQ
LyfJKBFM6NEyrYiKu1szcdT7+Meii4M8ulYHkUXEJXQBN5+LuESkRrqach6n6zSS
urvCG2I0ijqVj36TudwRrYU+sCpk8XR6//XyJbcjW5vuUd1/uYrJ+lSZCPaKfjIo
gLKK1UJ9wLZbg28Hqtb5KxYsLtlzMsNFCbVebatl6QdS+J4OaCGLE4SM2NnsheN/
qxErMS1eAzNVgpW+yY4JV47k54HDBZfgHmgA8lgyShn7w08dA2mWIYbmbKHcnh2N
QSQ5wjYbTEy3a251t32pR76W5k/uduoMXestJEXD7yViMz3pFzu97l1huAP8C0Hs
sMEysMomthMQChqNUZw19wakdxuCyiU+YrL7bHTTL2pAKYB0AKOGE1XgecnneC89
+K5vr5TUTWOpksUeuM5Oq2YYLicYuES1Nr/5GkszNCCY0J+fBL50AI0IItrfFjt1
Xu/mlbiJKQZXMppWfLJUhu/8Ur1VYeYLeCNR3ju7jfvm3DkVzmqSc0b01uz5POTz
Hak=
-----END X509 CRL-----

View File

@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF7DCCA9SgAwIBAgIUemptMV4lw+1QL1e648o+wvANH4wwDQYJKoZIhvcNAQEN
BQAwfDELMAkGA1UEBhMCVVMxPDA6BgNVBAoMM0ludGVybmV0IENvcnBvcmF0aW9u
IGZvciBBc3NpZ25lZCBOYW1lcyBhbmQgTnVtYmVyczEvMC0GA1UEAwwmSUNBTk4g
VHJhZGVtYXJrIENsZWFyaW5naG91c2UgUGlsb3QgQ0EwHhcNMjIxMTE1MTg1MDA5
WhcNNDIxMTE1MTg1MDA5WjB8MQswCQYDVQQGEwJVUzE8MDoGA1UECgwzSW50ZXJu
ZXQgQ29ycG9yYXRpb24gZm9yIEFzc2lnbmVkIE5hbWVzIGFuZCBOdW1iZXJzMS8w
LQYDVQQDDCZJQ0FOTiBUcmFkZW1hcmsgQ2xlYXJpbmdob3VzZSBQaWxvdCBDQTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQQS8gSAw6fsyqP+yWvfOtU
D2hCe/RvbKMG6cJ6yuCMscxIEPT0xrVTkGfzG8b6T4j8iD9mVHDxO19z+y0ALog/
IPeVLw/x/2QC5YTDlrQtbsT33BN+NFdp13mE324owiyVyYrPqN1B6MtdERQLkIFU
PIlhTopHfnMtRNzwt2gPpNwy2q5lqK20dKzrG9W1kLd26nFfnN5T9fnv21TtBhSJ
73qfoU8GuOZhytloJRmT/yvvZNH1JTHyvuG15Q6kDDf46E1d6PO1+tmBQnNIZBfp
FALrqN1QX1znaHkd1smgLEC1JV/2iAOtxNUL0d1vJcQfmjHXBtMF8Yx1ulpJjN1c
A6iLMJfO5znd8jQ9O6hkMUjYNRz+XTGHiCTZVkhlNeJiIQbBlILbsnuT4Q+Ywxu+
83W/ymqq/G2tIJdqXapUGEulYw/09y0TMyMnkA0VO9eDNf/B1AaQxBCEhpP6OufR
G/nEzbH/SknVhgeV8CkhZo4UeFOx5XFZVj1Y3vBsqVwQYTc0NG84Bv3HD6sDXQd0
DtW0gjqXg2caxQBoX8F40MCkik5TvnOT8RawvWKJjakEKSgeMceu9LnjRgFk+96Z
ig1vGVJi213rUgSv7oXcO3HgraHOLkzkMglqOBh7NrUnEdCrrDGKYZwxZ/46cofY
yyOb+9y/UOWa8MWvoam7AgMBAAGjZjBkMB0GA1UdDgQWBBRHe0+uelGRtdG/nTbp
hn82FgSpRTAfBgNVHSMEGDAWgBRHe0+uelGRtdG/nTbphn82FgSpRTASBgNVHRMB
Af8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQ0FAAOCAgEA
ElXV35T8rG25yyGzNTgI9lDntDy2D0c/WSPPn9LZQREddKEpMBSy8pztHLJurH7B
uKeb+j0KXw+0IMG5ZKxacUbLlW8NGIXqBRkRiDfBDw374dsLIeB7Gb3PKMWsnvg5
zZic/iW7Wrrur6xAjFsgFMz8KRuNseGFDZi3UF1O4xX6Wy2KV5HMvvbnzyQa4bN9
mbnCEf8tVXws2ZWC4e7yEkbLFqDh5czujVGq+g8VEl82wFTn0s+u6roI3vCrqZN9
Qh2/yOzhpnu+daDcIUqb8keNNIswE7n9A9Yl40xNfzZid8bP4fJXM2oVcXxqUnsD
Khwk9wgk30XVuKokoWYB3ExAVTYeR6j3jZPpDp3wYHXV23hgexPykKSE/7TMByII
K1egDjKLdUlReQ5Rca48IRRAa6f4igJoaSvmp3eEF4lmxgXMhHIDocUN0hVDDaPb
WGkr+sChXtftIUVhE2bi746dNhiBLWWPz8FX/uZzD1srJA8kPmf8YWdH2d6yJ8BN
2olV7QpDRpmCJwblyzLLeNWCQiwHQNN4MvtxJFFFZQfF6m6A6bZ5CKNM5GvJanRl
/aS1ehO/DhOkcGelxAjMtTPqKhI1j+SBZqPdumrQDFhfHN/sM9F4g+I8datpu/2P
Dop0Ki70evaFhD8jVE4z0zt59OUzEHjezWOTNoYU9GU=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,18 @@
-----BEGIN X509 CRL-----
MIIC8DCB2QIBATANBgkqhkiG9w0BAQ0FADB2MQswCQYDVQQGEwJVUzE8MDoGA1UE
CgwzSW50ZXJuZXQgQ29ycG9yYXRpb24gZm9yIEFzc2lnbmVkIE5hbWVzIGFuZCBO
dW1iZXJzMSkwJwYDVQQDDCBJQ0FOTiBUcmFkZW1hcmsgQ2xlYXJpbmdob3VzZSBD
QRcNMjIxMTE2MTMyNzU3WhcNMjMwNDA2MTMyNzU3WqAvMC0wHwYDVR0jBBgwFoAU
P/RCC1aVjbgjAjp0MnrSEivX8cYwCgYDVR0UBAMCAQEwDQYJKoZIhvcNAQENBQAD
ggIBAJkrxahXQDaniHHE+8/3GVSlXz2175xVfZ/zqq3twatKd4FWxXD5sr42595Z
5T9EP5XFii5o/j49qM6a+Qc3V++LEcTj+VHFxvhG2czYhiuZXzFu1WmdmtSCe2+C
9N7DgGl9VNRg14DKWoW5BPdmgy6/XZCEcxlQ6ft/caZ8G9pR+Q5i9rwCXDFXB1ni
kIuMKnp5rq95GzF8WnbEGfM0s5YY/UfSozF35oPGtRSyCWdGoTmmpnp3DXMvElMW
wMxtCRhdhxsS6YzeCPiORTzq08IiCJcVpud5ZdDdKzja1tF8iSc5MnMJ0pygT4ds
uZOHmj8/bAA9cf9PK/8N5fd7jZZlPDKKbhT+EoKZTXzNwBiGy68tXerWENFkR0tF
Sy9T45RcGve9L5nEV8bqawsxrmnuatSh/6fSTDiz4HO1/mW6/GAT1QPFYrU++p8o
BR7WcKCHvQpUt5tXhh1hAZba6j4aeWpXUquyTtrjgqThvvBIT5m76k19BcRaOroE
qf0WJOQcvn2hPBNEbSbbHOWaXpHbTI8R6gk+/utRc9/xkHF5vEQTfUPHTkjoK4dW
S4p4P6tRcNoxzSfh7bN9nts2VFKcvSaF10m2G1bCyJB2QjKMZG7aGVX+9Pvnoa1v
HgNDfKNZR1a/ZYcJm7QY5TRuQF+Evd/OcsVOdRhx804d08ms
-----END X509 CRL-----

View File

@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF4DCCA8igAwIBAgIUHTVZH/TadFNIiEBCJ/OdngKfZwwwDQYJKoZIhvcNAQEN
BQAwdjELMAkGA1UEBhMCVVMxPDA6BgNVBAoMM0ludGVybmV0IENvcnBvcmF0aW9u
IGZvciBBc3NpZ25lZCBOYW1lcyBhbmQgTnVtYmVyczEpMCcGA1UEAwwgSUNBTk4g
VHJhZGVtYXJrIENsZWFyaW5naG91c2UgQ0EwHhcNMjIxMTE1MTg0ODQxWhcNNDIx
MTE1MTg0ODQxWjB2MQswCQYDVQQGEwJVUzE8MDoGA1UECgwzSW50ZXJuZXQgQ29y
cG9yYXRpb24gZm9yIEFzc2lnbmVkIE5hbWVzIGFuZCBOdW1iZXJzMSkwJwYDVQQD
DCBJQ0FOTiBUcmFkZW1hcmsgQ2xlYXJpbmdob3VzZSBDQTCCAiIwDQYJKoZIhvcN
AQEBBQADggIPADCCAgoCggIBAMf5/4d2gaDgG0Tbx5ewIKZNlH/KxURjRqWj7vzc
SYnzszAcaTuwM1sHWTJtUUC0QP4QcG90e8Q7A7zhgYVm6POBV3U9hv/NVSZB6Set
DK5lxU/cubQrPhf2Bc7AkGvfnJV8+/0GI5x9AF8dlSUj3yvl9VWvI8Iuph4xHm0g
Fg6BHo4beUVsbdBwnBkSPEmsmNo0D0gf1rCIb/wYfWMZBqU8bduS36TUvHshMTB/
Luad3QYyPhqgomizVzEjXebuGlyCtwlGOHdI5t2WlM7XF3RPXZVxA+nsFwRWm9UT
r6ygGve3+9y1bjqudWu8mt9VevYCiesLPowUy9E8Vg8xKcsntUWs1KoZTQYxlohb
u3cHNxBdYGflQ8m8cbkDeAvWNOgMlhPzWBDFqQeVuBQhiuF9iKR3RZHFAHXJy81t
DKQgzR6YlMd3iCGfBVK/uUVr89UgJ1xv5hniSaFDYqtD5rZftvGb2YXsyeQjs0Pl
QkZyaynVS5P3Tax57fQUcJR3YqgeoeXQNTit+/ieZju1zGLutGikYujciPBIWoBl
S8YnOgPNyfjE+LrQG2RqsZOumqlN66ZjqYH4pCf6lI14PJUl4mUh2YpnIyjQd8Uq
QxZmrqDOJAawd2LVuHr4GR6Vbm/oAyyCdQ5HztvCbXOK6v+pMdrrbtb+IlvQ5hcu
FoqrAgMBAAGjZjBkMB0GA1UdDgQWBBQ/9EILVpWNuCMCOnQyetISK9fxxjAfBgNV
HSMEGDAWgBQ/9EILVpWNuCMCOnQyetISK9fxxjASBgNVHRMBAf8ECDAGAQH/AgEA
MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQ0FAAOCAgEAm8QZeNzTD52hZH3I
Vy9pti6NRcVSudtzZloVFJ4g9GbIx1uw8k61bgUX70jwk4pPbcOji8RoZoYG842p
3tgq50rlRYsKZZx24ZUVaQDz0WKTzjhs2qlk0pRM9XZukZ8SB2knhvJ3byxogxJ0
kIP4ysS5op90dcWsrS0O9HF8eBtHYvw2+MuA5KleWB4Qo94+GjmFJsiJiIQ6S+sG
M9PZbHSEWW64fNNsgeozlnY9vJ4qRF55tylrB+pXOxVcKDRD3l5GstobmC0waTv8
ZvMtR6SQ1QeHRcdznzWsASvDSxhv0vBauKbuBs1T/wgcDF9XXikTx8PbbCQUoCbC
4mX+ZNgIXyCbhSVnNBQKN+HBrddm/AqHRLLnfOOcGBqCQ5JLicLvnsRMVrpnoLPS
nMbq2QT7J7F5i+q2v2TqeKEwmj4zzh/hX1PbppS8IA/MujivFjLdn1SL0halidYN
ywqEF6gUJMoImJ9YWvGRnyv7pm+kgrF83MPbD43AX6Hq8zidYOIzwT4ZnCMlBWJ2
iZWciK3/nPe6YH8P5cPddLxRAWBstd5tbDmdPkIMZ0vHccmfIMhlMrCO/IB8N2tv
7QJR8V0nE3BIE9RfIa4BrfY5nQpGHWAdpXJH9WTXgcwWUB3JQcxD64c3GhVvp7e4
Jwz/ypzBX6WYeSrb3OZWylJ4sWE=
-----END CERTIFICATE-----

View File

@@ -126,7 +126,7 @@ public class ExpandRecurringBillingEventsPipelineTest {
assertThrows(IllegalArgumentException.class, this::runPipeline);
assertThat(thrown)
.hasMessageThat()
.contains("End time 2021-02-02T00:00:05.001Z must be on or before now");
.contains("End time 2021-02-02T00:00:05.001Z must be at or before now");
}
@Test

View File

@@ -49,6 +49,8 @@ import google.registry.model.tld.Registry.TldState;
import google.registry.persistence.transaction.JpaTestExtensions;
import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension;
import google.registry.testing.TaskQueueExtension;
import google.registry.tmch.TmchData;
import google.registry.tmch.TmchTestData;
import org.joda.money.Money;
import org.joda.time.DateTime;
import org.junit.jupiter.api.BeforeEach;
@@ -64,6 +66,9 @@ class EppLifecycleDomainTest extends EppTestCase {
"ACDATE", "2002-06-04T00:00:00Z",
"EXDATE", "2003-06-01T00:04:00Z");
private static final String ENCODED_SMD =
TmchData.readEncodedSignedMark(TmchTestData.loadFile("smd/active.smd")).getEncodedData();
@RegisterExtension
final JpaIntegrationTestExtension jpa =
new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension();
@@ -1184,8 +1189,8 @@ class EppLifecycleDomainTest extends EppTestCase {
*/
@Test
void testDomainCreation_startDateSunriseFull() throws Exception {
// The signed mark is valid between 2013 and 2017
DateTime sunriseDate = DateTime.parse("2014-09-08T09:09:09Z");
// The signed mark is valid between 2022-11-22 and 2027-10-18.
DateTime sunriseDate = DateTime.parse("2025-09-08T09:09:09Z");
DateTime gaDate = sunriseDate.plusDays(30);
createTld(
"example",
@@ -1201,7 +1206,7 @@ class EppLifecycleDomainTest extends EppTestCase {
createContactsAndHosts();
// During pre-delegation, any create should fail both with and without mark
assertThatCommand("domain_create_sunrise_encoded_mark.xml")
assertThatCommand("domain_create_sunrise_encoded_mark.xml", ImmutableMap.of("SMD", ENCODED_SMD))
.atTime(sunriseDate.minusDays(2))
.hasResponse(
"response_error.xml",
@@ -1219,7 +1224,9 @@ class EppLifecycleDomainTest extends EppTestCase {
"MSG", "The current registry phase does not allow for general registrations"));
// During sunrise, verify that the launch phase must be set to sunrise.
assertThatCommand("domain_create_start_date_sunrise_encoded_mark_wrong_phase.xml")
assertThatCommand(
"domain_create_start_date_sunrise_encoded_mark_wrong_phase.xml",
ImmutableMap.of("SMD", ENCODED_SMD))
.atTime(sunriseDate)
.hasResponse(
"response_error.xml",
@@ -1230,14 +1237,14 @@ class EppLifecycleDomainTest extends EppTestCase {
// During sunrise, create with mark will succeed but without will fail.
// We also test we can delete without a mark.
assertThatCommand("domain_create_sunrise_encoded_mark.xml")
assertThatCommand("domain_create_sunrise_encoded_mark.xml", ImmutableMap.of("SMD", ENCODED_SMD))
.atTime(sunriseDate.plusDays(1))
.hasResponse(
"domain_create_response.xml",
ImmutableMap.of(
"DOMAIN", "test-validate.example",
"CRDATE", "2014-09-09T09:09:09Z",
"EXDATE", "2015-09-09T09:09:09Z"));
"CRDATE", "2025-09-09T09:09:09Z",
"EXDATE", "2026-09-09T09:09:09Z"));
assertThatCommand("domain_delete.xml", ImmutableMap.of("DOMAIN", "test-validate.example"))
.atTime(sunriseDate.plusDays(1).plusMinutes(1))
@@ -1264,15 +1271,14 @@ class EppLifecycleDomainTest extends EppTestCase {
"Declared launch extension phase does not match the current registry phase"));
assertThatCommand(
"domain_create_no_hosts_or_dsdata.xml",
ImmutableMap.of("DOMAIN", "general.example"))
"domain_create_no_hosts_or_dsdata.xml", ImmutableMap.of("DOMAIN", "general.example"))
.atTime(gaDate.plusDays(2))
.hasResponse(
"domain_create_response.xml",
ImmutableMap.of(
"DOMAIN", "general.example",
"CRDATE", "2014-10-10T09:09:09Z",
"EXDATE", "2016-10-10T09:09:09Z"));
"CRDATE", "2025-10-10T09:09:09Z",
"EXDATE", "2027-10-10T09:09:09Z"));
assertThatLogoutSucceeds();
}
@@ -1280,8 +1286,8 @@ class EppLifecycleDomainTest extends EppTestCase {
/** Test that missing type= argument on launch create works in start-date sunrise. */
@Test
void testDomainCreation_startDateSunrise_noType() throws Exception {
// The signed mark is valid between 2013 and 2017
DateTime sunriseDate = DateTime.parse("2014-09-08T09:09:09Z");
// The signed mark is valid between 2022-11-22 and 2027-10-18.
DateTime sunriseDate = DateTime.parse("2025-09-08T09:09:09Z");
DateTime gaDate = sunriseDate.plusDays(30);
createTld(
"example",
@@ -1306,14 +1312,16 @@ class EppLifecycleDomainTest extends EppTestCase {
"CODE", "2303",
"MSG", "The domain with given ID (test-validate.example) doesn't exist."));
assertThatCommand("domain_create_start_date_sunrise_encoded_mark_no_type.xml")
assertThatCommand(
"domain_create_start_date_sunrise_encoded_mark_no_type.xml",
ImmutableMap.of("SMD", ENCODED_SMD))
.atTime(sunriseDate.plusDays(1).plusMinutes(1))
.hasResponse(
"domain_create_response.xml",
ImmutableMap.of(
"DOMAIN", "test-validate.example",
"CRDATE", "2014-09-09T09:10:09Z",
"EXDATE", "2015-09-09T09:10:09Z"));
"CRDATE", "2025-09-09T09:10:09Z",
"EXDATE", "2026-09-09T09:10:09Z"));
assertThatCommand("domain_info.xml", ImmutableMap.of("DOMAIN", "test-validate.example"))
.atTime(sunriseDate.plusDays(1).plusMinutes(2))
@@ -1321,8 +1329,8 @@ class EppLifecycleDomainTest extends EppTestCase {
"domain_info_response_ok_wildcard.xml",
ImmutableMap.of(
"DOMAIN", "test-validate.example",
"CRDATE", "2014-09-09T09:10:09Z",
"EXDATE", "2015-09-09T09:10:09Z"));
"CRDATE", "2025-09-09T09:10:09Z",
"EXDATE", "2026-09-09T09:10:09Z"));
assertThatLogoutSucceeds();
}

View File

@@ -14,6 +14,7 @@
package google.registry.flows.domain;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.common.io.BaseEncoding.base16;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth8.assertThat;
@@ -25,6 +26,7 @@ import static google.registry.model.billing.BillingEvent.RenewalPriceBehavior.DE
import static google.registry.model.billing.BillingEvent.RenewalPriceBehavior.NONPREMIUM;
import static google.registry.model.billing.BillingEvent.RenewalPriceBehavior.SPECIFIED;
import static google.registry.model.domain.fee.Fee.FEE_EXTENSION_URIS;
import static google.registry.model.domain.token.AllocationToken.TokenType.DEFAULT_PROMO;
import static google.registry.model.domain.token.AllocationToken.TokenType.PACKAGE;
import static google.registry.model.domain.token.AllocationToken.TokenType.SINGLE_USE;
import static google.registry.model.domain.token.AllocationToken.TokenType.UNLIMITED_USE;
@@ -71,7 +73,6 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Ordering;
import com.google.common.truth.Truth8;
import google.registry.config.RegistryConfig;
import google.registry.flows.EppException;
import google.registry.flows.EppException.UnimplementedExtensionException;
@@ -90,6 +91,7 @@ import google.registry.flows.domain.DomainCreateFlow.SignedMarksOnlyDuringSunris
import google.registry.flows.domain.DomainFlowTmchUtils.FoundMarkExpiredException;
import google.registry.flows.domain.DomainFlowTmchUtils.FoundMarkNotYetValidException;
import google.registry.flows.domain.DomainFlowTmchUtils.NoMarksFoundMatchingDomainException;
import google.registry.flows.domain.DomainFlowTmchUtils.SignedMarkRevokedErrorException;
import google.registry.flows.domain.DomainFlowUtils.AcceptedTooLongAgoException;
import google.registry.flows.domain.DomainFlowUtils.BadDomainNameCharacterException;
import google.registry.flows.domain.DomainFlowUtils.BadDomainNamePartsCountException;
@@ -180,6 +182,9 @@ import google.registry.persistence.VKey;
import google.registry.testing.DatabaseHelper;
import google.registry.testing.TaskQueueExtension;
import google.registry.testing.TaskQueueHelper.TaskMatcher;
import google.registry.tmch.SmdrlCsvParser;
import google.registry.tmch.TmchData;
import google.registry.tmch.TmchTestData;
import java.math.BigDecimal;
import java.util.Map;
import java.util.Optional;
@@ -190,6 +195,8 @@ import org.joda.time.Duration;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junitpioneer.jupiter.cartesian.CartesianTest;
import org.junitpioneer.jupiter.cartesian.CartesianTest.Values;
/** Unit tests for {@link DomainCreateFlow}. */
class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain> {
@@ -197,6 +204,18 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
@RegisterExtension TaskQueueExtension taskQueue = new TaskQueueExtension();
private static final String CLAIMS_KEY = "2013041500/2/6/9/rJ1NrDO92vDsAzf7EQzgjX4R0000000001";
// This is a time when SMD itself is not valid, but its signing certificates are. It will
// trigger a different exception than when any signing cert is not valid yet.
private static final DateTime SMD_NOT_YET_VALID_TIME = DateTime.parse("2022-11-20T12:34:56Z");
private static final DateTime SMD_VALID_TIME = DateTime.parse("2023-01-02T12:34:56Z");
// This is a time when the imtermediate certificate in the SMD signature chain has expired. The
// SMD itself has not expired yet. It will trigger a different exception than when the SMD itself
// has expired.
private static final DateTime SMD_CERT_EXPIRED_TIME = DateTime.parse("2027-11-02T12:34:56Z");
private static final String SMD_ID = "000000851669081693741-65535";
private static final String SMD_FILE_PATH = "smd/active.smd";
private static final String ENCODED_SMD =
TmchData.readEncodedSignedMark(TmchTestData.loadFile(SMD_FILE_PATH)).getEncodedData();
private AllocationToken allocationToken;
@@ -206,7 +225,7 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
}
@BeforeEach
void initCreateTest() {
void initCreateTest() throws Exception {
createTld("tld");
allocationToken =
persistResource(
@@ -378,13 +397,16 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
private void assertSunriseLordn(String domainName) throws Exception {
assertAboutDomains()
.that(reloadResourceByForeignKey())
.hasSmdId("0000001761376042759136-65535")
.hasSmdId(SMD_ID)
.and()
.hasLaunchNotice(null);
String expectedPayload =
String.format(
"%s,%s,0000001761376042759136-65535,1,2014-09-09T09:09:09.017Z",
reloadResourceByForeignKey().getRepoId(), domainName);
"%s,%s,%s,1,%s",
reloadResourceByForeignKey().getRepoId(),
domainName,
SMD_ID,
SMD_VALID_TIME.plusMillis(17));
assertTasksEnqueued(QUEUE_SUNRISE, new TaskMatcher().payload(expectedPayload));
}
@@ -631,7 +653,7 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
clock.setTo(DateTime.parse("2014-09-09T09:09:09Z"));
setEppInput(
"domain_create_registration_encoded_signed_mark.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld", "PHASE", "open"));
ImmutableMap.of("DOMAIN", "test-validate.tld", "PHASE", "open", "SMD", ENCODED_SMD));
persistContactsAndHosts();
EppException thrown = assertThrows(SignedMarksOnlyDuringSunriseException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
@@ -640,10 +662,10 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
@Test
void testFailure_generalAvailability_superuserMismatchedEncodedSignedMark() {
createTld("tld", GENERAL_AVAILABILITY);
clock.setTo(DateTime.parse("2014-09-09T09:09:09Z"));
clock.setTo(SMD_VALID_TIME);
setEppInput(
"domain_create_registration_encoded_signed_mark.xml",
ImmutableMap.of("DOMAIN", "wrong.tld", "PHASE", "open"));
ImmutableMap.of("DOMAIN", "wrong.tld", "PHASE", "open", "SMD", ENCODED_SMD));
persistContactsAndHosts();
EppException thrown =
assertThrows(NoMarksFoundMatchingDomainException.class, this::runFlowAsSuperuser);
@@ -1248,14 +1270,22 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
@Test
void testSuccess_anchorTenantInSunrise_withMetadataExtension_andSignedMark() throws Exception {
createTld("tld", START_DATE_SUNRISE);
setEppInput("domain_create_anchor_tenant_sunrise_metadata_extension_signed_mark.xml");
setEppInput(
"domain_create_anchor_tenant_sunrise_metadata_extension_signed_mark.xml",
ImmutableMap.of("SMD", ENCODED_SMD));
eppRequestSource = EppRequestSource.TOOL; // Only tools can pass in metadata.
persistContactsAndHosts();
clock.setTo(DateTime.parse("2014-09-09T09:09:09Z"));
clock.setTo(SMD_VALID_TIME);
runFlowAssertResponse(
loadFile(
"domain_create_response_encoded_signed_mark_name.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld")));
ImmutableMap.of(
"DOMAIN",
"test-validate.tld",
"CREATE_TIME",
SMD_VALID_TIME.toString(),
"EXPIRATION_TIME",
SMD_VALID_TIME.plusYears(2).toString())));
assertSuccessfulCreate("tld", ImmutableSet.of(SUNRISE, ANCHOR_TENANT));
}
@@ -1275,13 +1305,19 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
persistReservedList("anchor_tenants", "test-validate,RESERVED_FOR_ANCHOR_TENANT"))
.setTldStateTransitions(ImmutableSortedMap.of(START_OF_TIME, START_DATE_SUNRISE))
.build());
setEppInput("domain_create_anchor_tenant_signed_mark.xml");
clock.setTo(DateTime.parse("2014-09-09T09:09:09Z"));
setEppInput("domain_create_anchor_tenant_signed_mark.xml", ImmutableMap.of("SMD", ENCODED_SMD));
clock.setTo(SMD_VALID_TIME);
persistContactsAndHosts();
runFlowAssertResponse(
loadFile(
"domain_create_response_encoded_signed_mark_name.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld")));
ImmutableMap.of(
"DOMAIN",
"test-validate.tld",
"CREATE_TIME",
SMD_VALID_TIME.toString(),
"EXPIRATION_TIME",
SMD_VALID_TIME.plusYears(2).toString())));
assertSuccessfulCreate("tld", ImmutableSet.of(ANCHOR_TENANT, SUNRISE), allocationToken);
assertDnsTasksEnqueued("test-validate.tld");
assertSunriseLordn("test-validate.tld");
@@ -1363,7 +1399,7 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
.hasValue(getHistoryEntries(reloadResourceByForeignKey()).get(0).getHistoryEntryId());
}
private void assertAllocationTokenWasNotRedeemed(String token) {
private static void assertAllocationTokenWasNotRedeemed(String token) {
AllocationToken reloadedToken =
tm().transact(() -> tm().loadByKey(VKey.create(AllocationToken.class, token)));
assertThat(reloadedToken.isRedeemed()).isFalse();
@@ -1612,6 +1648,239 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
.marshalsToXml();
}
@Test
void testSuccess_usesDefaultToken() throws Exception {
persistContactsAndHosts();
AllocationToken defaultToken1 =
persistResource(
new AllocationToken.Builder()
.setToken("aaaaa")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("NewRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
AllocationToken defaultToken2 =
persistResource(
new AllocationToken.Builder()
.setToken("bbbbb")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("TheRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
persistResource(
Registry.get("tld")
.asBuilder()
.setDefaultPromoTokens(
ImmutableList.of(defaultToken1.createVKey(), defaultToken2.createVKey()))
.build());
runTest_defaultToken("bbbbb");
}
@Test
void testSuccess_doesNotUseDefaultTokenWhenTokenPassedIn() throws Exception {
persistContactsAndHosts();
persistResource(
new AllocationToken.Builder()
.setToken("abc123")
.setTokenType(UNLIMITED_USE)
.setDiscountFraction(0.5)
.build());
AllocationToken defaultToken1 =
persistResource(
new AllocationToken.Builder()
.setToken("aaaaa")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("NewRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
AllocationToken defaultToken2 =
persistResource(
new AllocationToken.Builder()
.setToken("bbbbb")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("TheRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
persistResource(
Registry.get("tld")
.asBuilder()
.setDefaultPromoTokens(
ImmutableList.of(defaultToken1.createVKey(), defaultToken2.createVKey()))
.build());
clock.advanceOneMilli();
setEppInput(
"domain_create_allocationtoken.xml",
ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2"));
runFlowAssertResponse(
loadFile("domain_create_response.xml", ImmutableMap.of("DOMAIN", "example.tld")));
BillingEvent.OneTime billingEvent =
Iterables.getOnlyElement(tm().transact(() -> tm().loadAllOf(BillingEvent.OneTime.class)));
assertThat(billingEvent.getTargetId()).isEqualTo("example.tld");
assertThat(billingEvent.getCost()).isEqualTo(Money.of(USD, BigDecimal.valueOf(19.5)));
assertThat(billingEvent.getAllocationToken().get().getKey()).isEqualTo("abc123");
}
@Test
void testSuccess_noValidDefaultToken() throws Exception {
persistContactsAndHosts();
AllocationToken defaultToken1 =
persistResource(
new AllocationToken.Builder()
.setToken("aaaaa")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("NewRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
AllocationToken defaultToken2 =
persistResource(
new AllocationToken.Builder()
.setToken("bbbbb")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("OtherRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
persistResource(
Registry.get("tld")
.asBuilder()
.setDefaultPromoTokens(
ImmutableList.of(defaultToken1.createVKey(), defaultToken2.createVKey()))
.build());
doSuccessfulTest();
}
void testSuccess_onlyUseFirstValidDefaultToken() throws Exception {
persistContactsAndHosts();
AllocationToken defaultToken1 =
persistResource(
new AllocationToken.Builder()
.setToken("aaaaa")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("NewRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
AllocationToken defaultToken2 =
persistResource(
new AllocationToken.Builder()
.setToken("bbbbb")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("NewRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
persistResource(
Registry.get("tld")
.asBuilder()
.setDefaultPromoTokens(
ImmutableList.of(defaultToken1.createVKey(), defaultToken2.createVKey()))
.build());
runTest_defaultToken("aaaaa");
}
void testSuccess_registryHasDeletedDefaultToken() throws Exception {
persistContactsAndHosts();
AllocationToken defaultToken1 =
persistResource(
new AllocationToken.Builder()
.setToken("aaaaa")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("NewRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
AllocationToken defaultToken2 =
persistResource(
new AllocationToken.Builder()
.setToken("bbbbb")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("TheRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
persistResource(
Registry.get("tld")
.asBuilder()
.setDefaultPromoTokens(
ImmutableList.of(defaultToken1.createVKey(), defaultToken2.createVKey()))
.build());
DatabaseHelper.deleteResource(defaultToken1);
runTest_defaultToken("bbbbb");
}
@Test
void testSuccess_defaultTokenAppliesCorrectPrice() throws Exception {
persistContactsAndHosts();
AllocationToken defaultToken1 =
persistResource(
new AllocationToken.Builder()
.setToken("aaaaa")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("NewRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
AllocationToken defaultToken2 =
persistResource(
new AllocationToken.Builder()
.setToken("bbbbb")
.setTokenType(DEFAULT_PROMO)
.setDiscountFraction(0.5)
.setAllowedRegistrarIds(ImmutableSet.of("TheRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
persistResource(
Registry.get("tld")
.asBuilder()
.setDefaultPromoTokens(
ImmutableList.of(defaultToken1.createVKey(), defaultToken2.createVKey()))
.build());
BillingEvent.OneTime billingEvent = runTest_defaultToken("bbbbb");
assertThat(billingEvent.getCost()).isEqualTo(Money.of(USD, BigDecimal.valueOf(19.5)));
}
@Test
void testSuccess_skipsOverMissingDefaultToken() throws Exception {
persistContactsAndHosts();
AllocationToken defaultToken1 =
persistResource(
new AllocationToken.Builder()
.setToken("aaaaa")
.setTokenType(DEFAULT_PROMO)
.setAllowedRegistrarIds(ImmutableSet.of("NewRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
AllocationToken defaultToken2 =
persistResource(
new AllocationToken.Builder()
.setToken("bbbbb")
.setTokenType(DEFAULT_PROMO)
.setDiscountFraction(0.5)
.setAllowedRegistrarIds(ImmutableSet.of("TheRegistrar"))
.setAllowedTlds(ImmutableSet.of("tld"))
.build());
persistResource(
Registry.get("tld")
.asBuilder()
.setDefaultPromoTokens(
ImmutableList.of(defaultToken1.createVKey(), defaultToken2.createVKey()))
.build());
DatabaseHelper.deleteResource(defaultToken1);
BillingEvent.OneTime billingEvent = runTest_defaultToken("bbbbb");
assertThat(billingEvent.getCost()).isEqualTo(Money.of(USD, BigDecimal.valueOf(19.5)));
}
BillingEvent.OneTime runTest_defaultToken(String token) throws Exception {
setEppInput("domain_create.xml", ImmutableMap.of("DOMAIN", "example.tld"));
runFlowAssertResponse(
loadFile(
"domain_create_response_wildcard.xml",
new ImmutableMap.Builder<String, String>()
.put("DOMAIN", "example.tld")
.put("CRDATE", "1999-04-03T22:00:00.0Z")
.put("EXDATE", "2001-04-03T22:00:00.0Z")
.build()));
BillingEvent.OneTime billingEvent =
Iterables.getOnlyElement(tm().transact(() -> tm().loadAllOf(BillingEvent.OneTime.class)));
assertThat(billingEvent.getTargetId()).isEqualTo("example.tld");
assertThat(billingEvent.getAllocationToken().get().getKey()).isEqualTo(token);
return billingEvent;
}
@Test
void testSuccess_superuserReserved() throws Exception {
setEppInput("domain_create_reserved.xml");
@@ -1629,15 +1898,21 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
.asBuilder()
.setTldStateTransitions(ImmutableSortedMap.of(START_OF_TIME, START_DATE_SUNRISE))
.build());
clock.setTo(DateTime.parse("2014-09-09T09:09:09Z"));
clock.setTo(SMD_VALID_TIME);
setEppInput(
"domain_create_registration_encoded_signed_mark.xml",
ImmutableMap.of("DOMAIN", "test-and-validate.tld", "PHASE", "sunrise"));
ImmutableMap.of("DOMAIN", "test-and-validate.tld", "PHASE", "sunrise", "SMD", ENCODED_SMD));
persistContactsAndHosts();
runFlowAssertResponse(
loadFile(
"domain_create_response_encoded_signed_mark_name.xml",
ImmutableMap.of("DOMAIN", "test-and-validate.tld")));
ImmutableMap.of(
"DOMAIN",
"test-and-validate.tld",
"CREATE_TIME",
SMD_VALID_TIME.toString(),
"EXPIRATION_TIME",
SMD_VALID_TIME.plusYears(2).toString())));
assertSunriseLordn("test-and-validate.tld");
@@ -2163,15 +2438,21 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
@Test
void testSuccess_startDateSunriseRegistration_withEncodedSignedMark() throws Exception {
createTld("tld", START_DATE_SUNRISE);
clock.setTo(DateTime.parse("2014-09-09T09:09:09Z"));
clock.setTo(SMD_VALID_TIME);
setEppInput(
"domain_create_registration_encoded_signed_mark.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld", "PHASE", "sunrise"));
ImmutableMap.of("DOMAIN", "test-validate.tld", "PHASE", "sunrise", "SMD", ENCODED_SMD));
persistContactsAndHosts();
runFlowAssertResponse(
loadFile(
"domain_create_response_encoded_signed_mark_name.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld")));
ImmutableMap.of(
"DOMAIN",
"test-validate.tld",
"CREATE_TIME",
SMD_VALID_TIME.toString(),
"EXPIRATION_TIME",
SMD_VALID_TIME.plusYears(2).toString())));
assertSuccessfulCreate("tld", ImmutableSet.of(SUNRISE));
assertSunriseLordn("test-validate.tld");
}
@@ -2180,13 +2461,21 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
@Test
void testSuccess_startDateSunriseRegistration_withEncodedSignedMark_noType() throws Exception {
createTld("tld", START_DATE_SUNRISE);
clock.setTo(DateTime.parse("2014-09-09T09:09:09Z"));
setEppInput("domain_create_sunrise_encoded_signed_mark_no_type.xml");
clock.setTo(SMD_VALID_TIME);
setEppInput(
"domain_create_sunrise_encoded_signed_mark_no_type.xml",
ImmutableMap.of("SMD", ENCODED_SMD));
persistContactsAndHosts();
runFlowAssertResponse(
loadFile(
"domain_create_response_encoded_signed_mark_name.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld")));
ImmutableMap.of(
"DOMAIN",
"test-validate.tld",
"CREATE_TIME",
SMD_VALID_TIME.toString(),
"EXPIRATION_TIME",
SMD_VALID_TIME.plusYears(2).toString())));
assertSuccessfulCreate("tld", ImmutableSet.of(SUNRISE));
assertSunriseLordn("test-validate.tld");
}
@@ -2194,23 +2483,66 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
@Test
void testFail_startDateSunriseRegistration_wrongEncodedSignedMark() {
createTld("tld", START_DATE_SUNRISE);
clock.setTo(DateTime.parse("2014-09-09T09:09:09Z"));
clock.setTo(SMD_VALID_TIME);
setEppInput(
"domain_create_registration_encoded_signed_mark.xml",
ImmutableMap.of("DOMAIN", "wrong.tld", "PHASE", "sunrise"));
ImmutableMap.of("DOMAIN", "wrong.tld", "PHASE", "sunrise", "SMD", ENCODED_SMD));
persistContactsAndHosts();
EppException thrown = assertThrows(NoMarksFoundMatchingDomainException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
void testFail_startDateSunriseRegistration_revokedSignedMark() throws Exception {
SmdrlCsvParser.parse(TmchTestData.loadFile("smd/smdrl.csv").lines().collect(toImmutableList()))
.save();
createTld("tld", START_DATE_SUNRISE);
clock.setTo(SMD_VALID_TIME);
String revokedSmd =
TmchData.readEncodedSignedMark(TmchTestData.loadFile("smd/revoked.smd")).getEncodedData();
setEppInput(
"domain_create_registration_encoded_signed_mark.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld", "PHASE", "sunrise", "SMD", revokedSmd));
persistContactsAndHosts();
EppException thrown = assertThrows(SignedMarkRevokedErrorException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@CartesianTest
void testFail_startDateSunriseRegistration_IdnRevokedSignedMark(
@Values(strings = {"Agent", "Holder"}) String contact,
@Values(strings = {"Court", "Trademark", "TreatyStatute"}) String type,
@Values(strings = {"Arab", "Chinese", "English", "French"}) String language)
throws Exception {
String filepath =
String.format("idn/%s-%s/%s-%s-%s-Revoked.smd", contact, language, type, contact, language);
ImmutableList<String> labels = TmchTestData.extractLabels(filepath);
if (labels.isEmpty()) {
return;
}
SmdrlCsvParser.parse(
TmchTestData.loadFile("idn/idn_smdrl.csv").lines().collect(toImmutableList()))
.save();
createTld("tld", START_DATE_SUNRISE);
clock.setTo(SMD_VALID_TIME);
String revokedSmd =
TmchData.readEncodedSignedMark(TmchTestData.loadFile(filepath)).getEncodedData();
setEppInput(
"domain_create_registration_encoded_signed_mark.xml",
ImmutableMap.of("DOMAIN", labels.get(0) + ".tld", "PHASE", "sunrise", "SMD", revokedSmd));
persistContactsAndHosts();
EppException thrown = assertThrows(SignedMarkRevokedErrorException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
void testFail_startDateSunriseRegistration_markNotYetValid() {
createTld("tld", START_DATE_SUNRISE);
// If we move now back in time a bit, the mark will not have gone into effect yet.
clock.setTo(DateTime.parse("2013-08-09T10:05:59Z").minusSeconds(1));
clock.setTo(SMD_NOT_YET_VALID_TIME);
setEppInput(
"domain_create_registration_encoded_signed_mark.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld", "PHASE", "sunrise"));
ImmutableMap.of("DOMAIN", "test-validate.tld", "PHASE", "sunrise", "SMD", ENCODED_SMD));
persistContactsAndHosts();
EppException thrown = assertThrows(FoundMarkNotYetValidException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
@@ -2220,10 +2552,10 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
void testFail_startDateSunriseRegistration_markExpired() {
createTld("tld", START_DATE_SUNRISE);
// Move time forward to the mark expiration time.
clock.setTo(DateTime.parse("2017-07-23T22:00:00.000Z"));
clock.setTo(SMD_CERT_EXPIRED_TIME);
setEppInput(
"domain_create_registration_encoded_signed_mark.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld", "PHASE", "sunrise"));
ImmutableMap.of("DOMAIN", "test-validate.tld", "PHASE", "sunrise", "SMD", ENCODED_SMD));
persistContactsAndHosts();
EppException thrown = assertThrows(FoundMarkExpiredException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
@@ -2931,10 +3263,10 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
@Test
void testSuccess_anchorTenant_inSunrise_trademarked_withSignedMark_viaToken() throws Exception {
createTld("tld", START_DATE_SUNRISE);
clock.setTo(DateTime.parse("2014-09-09T09:09:09Z"));
clock.setTo(SMD_VALID_TIME);
setEppInput(
"domain_create_registration_encoded_signed_mark_allocationtoken.xml",
ImmutableMap.of("DOMAIN", "test-validate.tld"));
ImmutableMap.of("DOMAIN", "test-validate.tld", "SMD", ENCODED_SMD));
persistResource(
allocationToken
.asBuilder()
@@ -3156,7 +3488,7 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
.build()));
Domain domain = reloadResourceByForeignKey();
assertThat(domain.getCurrentPackageToken()).isPresent();
Truth8.assertThat(domain.getCurrentPackageToken()).hasValue(token.createVKey());
assertThat(domain.getCurrentPackageToken()).hasValue(token.createVKey());
}
@Test

View File

@@ -15,8 +15,6 @@
package google.registry.reporting.billing;
import static com.google.common.truth.Truth.assertThat;
import static google.registry.model.common.Cursor.CursorType.RECURRING_BILLING;
import static google.registry.testing.DatabaseHelper.persistResource;
import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import static org.mockito.Mockito.mock;
@@ -26,7 +24,6 @@ import static org.mockito.Mockito.when;
import com.google.cloud.tasks.v2.HttpMethod;
import com.google.common.net.MediaType;
import google.registry.beam.BeamActionTestBase;
import google.registry.model.common.Cursor;
import google.registry.persistence.transaction.JpaTestExtensions;
import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension;
import google.registry.reporting.ReportingModule;
@@ -35,10 +32,8 @@ import google.registry.testing.CloudTasksHelper.TaskMatcher;
import google.registry.testing.FakeClock;
import google.registry.util.CloudTasksUtils;
import java.io.IOException;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.YearMonth;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -55,13 +50,6 @@ class GenerateInvoicesActionTest extends BeamActionTestBase {
private CloudTasksUtils cloudTasksUtils = cloudTasksHelper.getTestCloudTasksUtils();
private GenerateInvoicesAction action;
@BeforeEach
@Override
protected void beforeEach() throws Exception {
super.beforeEach();
persistResource(Cursor.createGlobal(RECURRING_BILLING, DateTime.parse("2017-11-30TZ")));
}
@Test
void testLaunchTemplateJob_withPublish() throws Exception {
action =
@@ -142,55 +130,4 @@ class GenerateInvoicesActionTest extends BeamActionTestBase {
verify(emailUtils).sendAlertEmail("Pipeline Launch failed due to Pipeline error");
cloudTasksHelper.assertNoTasksEnqueued("beam-reporting");
}
@Test
void testFailsToGenerateInvoicesNotExpandedBillingEvents() throws Exception {
persistResource(Cursor.createGlobal(RECURRING_BILLING, DateTime.parse("2017-10-30TZ")));
action =
new GenerateInvoicesAction(
"test-project",
"test-region",
"staging_bucket",
"billing_bucket",
"REG-INV",
false,
new YearMonth(2017, 10),
emailUtils,
cloudTasksUtils,
clock,
response,
dataflow);
action.run();
assertThat(response.getContentType()).isEqualTo(MediaType.PLAIN_TEXT_UTF_8);
assertThat(response.getStatus()).isEqualTo(SC_INTERNAL_SERVER_ERROR);
assertThat(response.getPayload())
.isEqualTo(
"Pipeline launch failed: Latest billing events expansion cycle hasn't finished yet,"
+ " terminating invoicing pipeline");
cloudTasksHelper.assertNoTasksEnqueued("beam-reporting");
}
@Test
void testSucceedsToGenerateInvoicesFirstDayOfTheYear() throws Exception {
persistResource(Cursor.createGlobal(RECURRING_BILLING, DateTime.parse("2017-01-01T13:15:00Z")));
action =
new GenerateInvoicesAction(
"test-project",
"test-region",
"staging_bucket",
"billing_bucket",
"REG-INV",
false,
new YearMonth(2016, 12),
emailUtils,
cloudTasksUtils,
clock,
response,
dataflow);
action.run();
assertThat(response.getContentType()).isEqualTo(MediaType.PLAIN_TEXT_UTF_8);
assertThat(response.getStatus()).isEqualTo(SC_OK);
assertThat(response.getPayload()).isEqualTo("Launched invoicing pipeline: jobid");
cloudTasksHelper.assertNoTasksEnqueued("beam-reporting");
}
}

View File

@@ -33,7 +33,7 @@ class SmdrlCsvParserTest {
private final FakeClock clock = new FakeClock();
private static final CharSource SMDRL_LATEST_CSV =
TmchTestData.loadBytes("smdrl-latest.csv").asCharSource(US_ASCII);
TmchTestData.loadBytes("smdrl/smdrl-latest.csv").asCharSource(US_ASCII);
@Test
void testParse() throws Exception {

View File

@@ -62,7 +62,8 @@ abstract class TmchActionTestCase {
@BeforeEach
public void beforeEachTmchActionTestCase() throws Exception {
marksdb.tmchMarksdbUrl = MARKSDB_URL;
marksdb.marksdbPublicKey = TmchData.loadPublicKey(TmchTestData.loadBytes("pubkey"));
marksdb.marksdbPublicKey =
TmchData.loadPublicKey(TmchTestData.loadBytes("crypto/marksdb-public-key-test.asc"));
marksdb.urlConnectionService = urlConnectionService;
when(httpUrlConnection.getResponseCode()).thenReturn(SC_OK);
}

View File

@@ -37,24 +37,31 @@ import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link TmchCertificateAuthority}. */
class TmchCertificateAuthorityTest {
private static final String GOOD_TEST_CERTIFICATE = loadFile("icann-tmch-test-good.crt");
private static final String REVOKED_TEST_CERTIFICATE = loadFile("icann-tmch-test-revoked.crt");
// This certificate is extracted from the SMD file smd/active.smd. It is the
// intermediate (TMV) certificate that was signed by the root (CA) cert and signed the SMD
// file.
private static final String GOOD_TMV_CERTIFICATE = loadFile("crypto/icann-tmv-test-good.crt");
// This certificate is extracted from the SMD file smd/tmv-cert-revoked.smd. It is the (revoked)
// intermediate (TMV) certificate that was signed by the root (CA) cert and signed the SMD
// file.
private static final String REVOKED_TMV_CERTIFICATE =
loadFile("crypto/icann-tmv-test-revoked.crt");
@RegisterExtension
public final JpaIntegrationTestExtension jpa =
new JpaTestExtensions.Builder().buildIntegrationTestExtension();
private final FakeClock clock = new FakeClock(DateTime.parse("2014-01-01T00:00:00Z"));
private final FakeClock clock = new FakeClock(DateTime.parse("2022-11-20T00:00:00Z"));
@Test
void testFailure_prodRootExpired() {
TmchCertificateAuthority tmchCertificateAuthority =
new TmchCertificateAuthority(PRODUCTION, clock);
clock.setTo(DateTime.parse("2024-01-01T00:00:00Z"));
clock.setTo(DateTime.parse("2500-01-01T00:00:00Z"));
CertificateExpiredException e =
assertThrows(
CertificateExpiredException.class, tmchCertificateAuthority::getAndValidateRoot);
assertThat(e).hasMessageThat().contains("NotAfter: Sun Jul 23 23:59:59 UTC 2023");
assertThat(e).hasMessageThat().contains("NotAfter");
}
@Test
@@ -65,7 +72,7 @@ class TmchCertificateAuthorityTest {
CertificateNotYetValidException e =
assertThrows(
CertificateNotYetValidException.class, tmchCertificateAuthority::getAndValidateRoot);
assertThat(e).hasMessageThat().contains("NotBefore: Wed Jul 24 00:00:00 UTC 2013");
assertThat(e).hasMessageThat().contains("NotBefore");
}
@Test
@@ -77,14 +84,14 @@ class TmchCertificateAuthorityTest {
SignatureException e =
assertThrows(
SignatureException.class,
() -> tmchCertificateAuthority.verify(loadCertificate(GOOD_TEST_CERTIFICATE)));
() -> tmchCertificateAuthority.verify(loadCertificate(GOOD_TMV_CERTIFICATE)));
assertThat(e).hasMessageThat().contains("Signature does not match");
}
@Test
void testSuccess_verify() throws Exception {
TmchCertificateAuthority tmchCertificateAuthority = new TmchCertificateAuthority(PILOT, clock);
tmchCertificateAuthority.verify(loadCertificate(GOOD_TEST_CERTIFICATE));
tmchCertificateAuthority.verify(loadCertificate(GOOD_TMV_CERTIFICATE));
}
@Test
@@ -94,7 +101,7 @@ class TmchCertificateAuthorityTest {
SignatureException e =
assertThrows(
SignatureException.class,
() -> tmchCertificateAuthority.verify(loadCertificate(GOOD_TEST_CERTIFICATE)));
() -> tmchCertificateAuthority.verify(loadCertificate(GOOD_TMV_CERTIFICATE)));
assertThat(e).hasMessageThat().contains("Signature does not match");
}
@@ -104,7 +111,7 @@ class TmchCertificateAuthorityTest {
CertificateRevokedException thrown =
assertThrows(
CertificateRevokedException.class,
() -> tmchCertificateAuthority.verify(loadCertificate(REVOKED_TEST_CERTIFICATE)));
assertThat(thrown).hasMessageThat().contains("revoked, reason: KEY_COMPROMISE");
() -> tmchCertificateAuthority.verify(loadCertificate(REVOKED_TMV_CERTIFICATE)));
assertThat(thrown).hasMessageThat().contains("revoked, reason: UNSPECIFIED");
}
}

View File

@@ -15,7 +15,7 @@
package google.registry.tmch;
import static com.google.common.truth.Truth.assertThat;
import static google.registry.testing.TestDataHelper.loadBytes;
import static google.registry.tmch.TmchTestData.loadBytes;
import static google.registry.util.ResourceUtils.readResourceBytes;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.verify;
@@ -29,6 +29,7 @@ import java.security.SignatureException;
import java.security.cert.CRLException;
import java.security.cert.CertificateNotYetValidException;
import org.joda.time.DateTime;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link TmchCrlAction}. */
@@ -38,29 +39,30 @@ class TmchCrlActionTest extends TmchActionTestCase {
TmchCrlAction action = new TmchCrlAction();
action.marksdb = marksdb;
action.tmchCertificateAuthority = new TmchCertificateAuthority(tmchCaMode, clock);
action.tmchCrlUrl = new URL("http://sloth.lol/tmch.crl");
action.tmchCrlUrl = new URL("https://sloth.lol/tmch.crl");
return action;
}
@BeforeEach
void before() {
clock.setTo(DateTime.parse("2023-03-24TZ"));
}
@Test
void testSuccess() throws Exception {
clock.setTo(DateTime.parse("2013-07-24TZ"));
when(httpUrlConnection.getInputStream())
.thenReturn(
new ByteArrayInputStream(
readResourceBytes(TmchCertificateAuthority.class, "icann-tmch.crl").read()));
newTmchCrlAction(TmchCaMode.PRODUCTION).run();
readResourceBytes(TmchCertificateAuthority.class, "icann-tmch-pilot.crl").read()));
newTmchCrlAction(TmchCaMode.PILOT).run();
verify(httpUrlConnection).getInputStream();
assertThat(connectedUrls).containsExactly(new URL("http://sloth.lol/tmch.crl"));
assertThat(connectedUrls).containsExactly(new URL("https://sloth.lol/tmch.crl"));
}
@Test
void testFailure_crlTooOld() throws Exception {
clock.setTo(DateTime.parse("2020-01-01TZ"));
when(httpUrlConnection.getInputStream())
.thenReturn(
new ByteArrayInputStream(
loadBytes(TmchCrlActionTest.class, "icann-tmch-pilot-old.crl").read()));
.thenReturn(new ByteArrayInputStream(loadBytes("crypto/icann-tmch-pilot-old.crl").read()));
TmchCrlAction action = newTmchCrlAction(TmchCaMode.PILOT);
Exception e = assertThrows(Exception.class, action::run);
assertThat(e).hasCauseThat().isInstanceOf(CRLException.class);
@@ -72,12 +74,11 @@ class TmchCrlActionTest extends TmchActionTestCase {
@Test
void testFailure_crlNotSignedByRoot() throws Exception {
clock.setTo(DateTime.parse("2013-07-24TZ"));
when(httpUrlConnection.getInputStream())
.thenReturn(
new ByteArrayInputStream(
readResourceBytes(TmchCertificateAuthority.class, "icann-tmch.crl").read()));
Exception e = assertThrows(Exception.class, newTmchCrlAction(TmchCaMode.PILOT)::run);
readResourceBytes(TmchCertificateAuthority.class, "icann-tmch-pilot.crl").read()));
Exception e = assertThrows(Exception.class, newTmchCrlAction(TmchCaMode.PRODUCTION)::run);
assertThat(e).hasCauseThat().isInstanceOf(SignatureException.class);
assertThat(e).hasCauseThat().hasMessageThat().isEqualTo("Signature does not match.");
}

View File

@@ -43,8 +43,8 @@ class TmchDnlActionTest extends TmchActionTestCase {
void testDnl() throws Exception {
assertThat(ClaimsListDao.get().getClaimKey("xn----7sbejwbn3axu3d")).isEmpty();
when(httpUrlConnection.getInputStream())
.thenReturn(new ByteArrayInputStream(TmchTestData.loadBytes("dnl-latest.csv").read()))
.thenReturn(new ByteArrayInputStream(TmchTestData.loadBytes("dnl-latest.sig").read()));
.thenReturn(new ByteArrayInputStream(TmchTestData.loadBytes("dnl/dnl-latest.csv").read()))
.thenReturn(new ByteArrayInputStream(TmchTestData.loadBytes("dnl/dnl-latest.sig").read()));
newTmchDnlAction().run();
verify(httpUrlConnection, times(2)).getInputStream();
assertThat(connectedUrls.stream().map(URL::toString).collect(toImmutableList()))

View File

@@ -46,8 +46,8 @@ class TmchSmdrlActionTest extends TmchActionTestCase {
assertThat(smdrl.isSmdRevoked("0000001681375789102250-65535", now)).isFalse();
assertThat(smdrl.isSmdRevoked("0000001681375789102250-65536", now)).isFalse();
when(httpUrlConnection.getInputStream())
.thenReturn(new ByteArrayInputStream(loadBytes("smdrl-latest.csv").read()))
.thenReturn(new ByteArrayInputStream(loadBytes("smdrl-latest.sig").read()));
.thenReturn(new ByteArrayInputStream(loadBytes("smdrl/smdrl-latest.csv").read()))
.thenReturn(new ByteArrayInputStream(loadBytes("smdrl/smdrl-latest.sig").read()));
newTmchSmdrlAction().run();
verify(httpUrlConnection, times(2)).getInputStream();
assertThat(connectedUrls.stream().map(URL::toString).collect(toImmutableList()))

View File

@@ -16,22 +16,33 @@ package google.registry.tmch;
import static com.google.common.base.CharMatcher.whitespace;
import static com.google.common.io.BaseEncoding.base64;
import static google.registry.tmch.TmchData.BEGIN_ENCODED_SMD;
import static google.registry.tmch.TmchData.END_ENCODED_SMD;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.io.ByteSource;
import com.google.re2j.Matcher;
import com.google.re2j.Pattern;
import google.registry.testing.TestDataHelper;
/** Utility class providing easy access to contents of the {@code testdata/} directory. */
/**
* Utility class providing easy access to contents of the {@code
* core/src/test/resources/google/registry/tmch/} directory.
*/
public final class TmchTestData {
private static final String BEGIN_ENCODED_SMD = "-----BEGIN ENCODED SMD-----";
private static final String END_ENCODED_SMD = "-----END ENCODED SMD-----";
private TmchTestData() {}
/** Returns {@link ByteSource} for file in {@code tmch/testdata/} directory. */
/**
* Returns {@link ByteSource} for file in {@code core/src/test/resources/google/registry/tmch/}
* directory.
*/
public static ByteSource loadBytes(String filename) {
return TestDataHelper.loadBytes(TmchTestData.class, filename);
}
/** Loads data from file in {@code tmch/testdata/} as a String. */
/** Loads data from file in {@code core/src/test/resources/google/registry/tmch/} as a String. */
public static String loadFile(String filename) {
return TestDataHelper.loadFile(TmchTestData.class, filename);
}
@@ -47,4 +58,15 @@ public final class TmchTestData {
data.indexOf(BEGIN_ENCODED_SMD) + BEGIN_ENCODED_SMD.length(),
data.indexOf(END_ENCODED_SMD))));
}
public static ImmutableList<String> extractLabels(String filepath) {
String pattern = "U-labels: ";
String content = loadFile(filepath);
Matcher matcher = Pattern.compile(pattern + ".*").matcher(content);
matcher.find();
String matchedString = matcher.group().replace(pattern, "");
return matchedString.isEmpty()
? ImmutableList.of()
: ImmutableList.copyOf(Splitter.on(',').trimResults().split(matchedString));
}
}

View File

@@ -42,9 +42,9 @@ class TmchTestDataExpirationTest {
* files and so that we can test various types of files, but this test will vail when the validity
* of the ICANN-provided file expires.
*
* <p>When this fails, check
* <a>https://newgtlds.icann.org/en/about/trademark-clearinghouse/registries-registrars</a> for a
* new updated SMD file.
* <p>When this fails, check <a
* href="https://newgtlds.icann.org/en/about/trademark-clearinghouse/registries-registrars">Signed
* Mark Data Files</a> for a new updated SMD file.
*/
@Test
void testActiveSignedMarkFiles_areValidAndNotExpired() throws Exception {
@@ -53,7 +53,7 @@ class TmchTestDataExpirationTest {
new TmchXmlSignature(
new TmchCertificateAuthority(TmchCaMode.PILOT, new SystemClock())));
String filePath = "active/smd-active-21aug20-en.smd";
String filePath = "smd/active.smd";
String tmchData = loadFile(TmchTestDataExpirationTest.class, filePath);
EncodedSignedMark smd = TmchData.readEncodedSignedMark(tmchData);
try {

View File

@@ -28,14 +28,18 @@ import java.security.cert.CertificateNotYetValidException;
import java.security.cert.CertificateRevokedException;
import javax.xml.crypto.dsig.XMLSignatureException;
import org.joda.time.DateTime;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.junitpioneer.jupiter.cartesian.CartesianTest;
import org.junitpioneer.jupiter.cartesian.CartesianTest.Values;
/**
* Unit tests for {@link TmchXmlSignature}.
*
* <p>This class does not test the {@code revoked/smd/} folder because it's not a crypto issue.
* <p>This class does not verify if the SMD itself is revoked, which is different from if the
* certificate signging the SMD is revoked, as it is not a crypto issue.
*/
class TmchXmlSignatureTest {
@@ -44,38 +48,54 @@ class TmchXmlSignatureTest {
new JpaTestExtensions.Builder().buildIntegrationTestExtension();
// This should be a date which falls within the validity range of the test files contained in the
// testdata/active directory. Note that test files claiming to be valid for a particular date
// smd/ directory. Note that test files claiming to be valid for a particular date
// range in the file header may not actually be valid the whole time, because they contain an
// embedded certificate which might have a shorter validity range.
// embedded (intermediate) certificate which might have a shorter validity range.
//
// New versions of the test files are published every few years by ICANN, and available at in the
// Signed Mark Data Files section of:
// "Signed Mark Data Files" section of:
//
// https://newgtlds.icann.org/en/about/trademark-clearinghouse/registries-registrars
//
// The link labeled "Set of IDN test-SMDs" leads to a .tar.gz file containing the test files which
// in our directory structure reside in testdata/active and testdata/revoked/smd (it is not clear
// where the files in testdata/invalid and testdata/revoked/tmv come from; we probably made them
// ourselves, since there aren't as many of them). For purposes of testing, we could probably keep
// using old test files forever, and keep a corresponding old date, but it seems like a good idea
// to keep up to date if possible.
//
// When updating this date, also update the dates below, which test to make sure that dates before
// and after the validity window result in rejection.
private final FakeClock clock = new FakeClock(DateTime.parse("2018-05-15T23:15:37.4Z"));
// When updating this date, also update the "time travel" dates in two tests below, which test to
// make sure that dates before and after the validity window result in rejection.
private final FakeClock clock = new FakeClock(DateTime.parse("2023-01-15T23:15:37.4Z"));
private byte[] smdData;
private TmchXmlSignature tmchXmlSignature =
new TmchXmlSignature(new TmchCertificateAuthority(TmchCaMode.PILOT, clock));
@BeforeEach
void beforeEach() {}
@Test
void testActive() throws Exception {
smdData = loadSmd("smd/active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testRevoked() throws Exception {
smdData = loadSmd("smd/revoked.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testInvalid() {
smdData = loadSmd("smd/invalid.smd");
assertThrows(XMLSignatureException.class, () -> tmchXmlSignature.verify(smdData));
}
@Test
void testTmvCertRevoked() {
smdData = loadSmd("smd/tmv-cert-revoked.smd");
CertificateRevokedException e =
assertThrows(CertificateRevokedException.class, () -> tmchXmlSignature.verify(smdData));
assertThat(e).hasMessageThat().contains("Certificate has been revoked");
}
@Test
void testWrongCertificateAuthority() {
tmchXmlSignature =
new TmchXmlSignature(new TmchCertificateAuthority(TmchCaMode.PRODUCTION, clock));
smdData = loadSmd("active/Court-Agent-Arab-Active.smd");
smdData = loadSmd("smd/active.smd");
CertificateSignatureException e =
assertThrows(CertificateSignatureException.class, () -> tmchXmlSignature.verify(smdData));
assertThat(e).hasMessageThat().contains("Signature does not match");
@@ -83,265 +103,40 @@ class TmchXmlSignatureTest {
@Test
void testTimeTravelBeforeCertificateWasCreated() {
smdData = loadSmd("active/Court-Agent-Arab-Active.smd");
clock.setTo(DateTime.parse("2013-05-01T00:00:00Z"));
smdData = loadSmd("smd/active.smd");
clock.setTo(DateTime.parse("2021-05-01T00:00:00Z"));
assertThrows(CertificateNotYetValidException.class, () -> tmchXmlSignature.verify(smdData));
}
@Test
void testTimeTravelAfterCertificateHasExpired() {
smdData = loadSmd("active/Court-Agent-Arab-Active.smd");
clock.setTo(DateTime.parse("2023-06-01T00:00:00Z"));
smdData = loadSmd("smd/active.smd");
clock.setTo(DateTime.parse("2028-06-01T00:00:00Z"));
assertThrows(CertificateExpiredException.class, () -> tmchXmlSignature.verify(smdData));
}
@Test
void testActiveCourtAgentArabActive() throws Exception {
smdData = loadSmd("active/Court-Agent-Arab-Active.smd");
@CartesianTest
void testInd(
@Values(strings = {"Agent", "Holder"}) String contact,
@Values(strings = {"Court", "Trademark", "TreatyStatute"}) String type,
@Values(strings = {"Arab", "Chinese", "English", "French"}) String language,
@Values(strings = {"Active", "Revoked"}) String status)
throws Exception {
smdData =
loadSmd(
String.format(
"idn/%s-%s/%s-%s-%s-%s.smd", contact, language, type, contact, language, status));
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveCourtAgentChineseActive() throws Exception {
smdData = loadSmd("active/Court-Agent-Chinese-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveCourtAgentEnglishActive() throws Exception {
smdData = loadSmd("active/Court-Agent-English-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveCourtAgentFrenchActive() throws Exception {
smdData = loadSmd("active/Court-Agent-French-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveCourtAgentRussianActive() throws Exception {
smdData = loadSmd("active/Court-Agent-Russian-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveCourtHolderArabActive() throws Exception {
smdData = loadSmd("active/Court-Holder-Arab-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveCourtHolderChineseActive() throws Exception {
smdData = loadSmd("active/Court-Holder-Chinese-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveCourtHolderEnglishActive() throws Exception {
smdData = loadSmd("active/Court-Holder-English-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveCourtHolderFrenchActive() throws Exception {
smdData = loadSmd("active/Court-Holder-French-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveCourtHolderRussianActive() throws Exception {
smdData = loadSmd("active/Court-Holder-Russian-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkAgentArabActive() throws Exception {
smdData = loadSmd("active/Trademark-Agent-Arab-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkAgentChineseActive() throws Exception {
smdData = loadSmd("active/Trademark-Agent-Chinese-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkAgentEnglishActive() throws Exception {
smdData = loadSmd("active/Trademark-Agent-English-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkAgentFrenchActive() throws Exception {
smdData = loadSmd("active/Trademark-Agent-French-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkAgentRussianActive() throws Exception {
smdData = loadSmd("active/Trademark-Agent-Russian-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkHolderArabActive() throws Exception {
smdData = loadSmd("active/Trademark-Holder-Arab-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkHolderChineseActive() throws Exception {
smdData = loadSmd("active/Trademark-Holder-Chinese-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkHolderEnglishActive() throws Exception {
smdData = loadSmd("active/Trademark-Holder-English-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkHolderFrenchActive() throws Exception {
smdData = loadSmd("active/Trademark-Holder-French-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTrademarkHolderRussianActive() throws Exception {
smdData = loadSmd("active/Trademark-Holder-Russian-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteAgentArabActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Agent-Arab-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteAgentChineseActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Agent-Chinese-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteAgentEnglishActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Agent-English-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteAgentFrenchActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Agent-French-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteAgentRussianActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Agent-Russian-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteHolderArabActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Holder-Arab-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteHolderChineseActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Holder-Chinese-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteHolderEnglishActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Holder-English-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteHolderFrenchActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Holder-French-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testActiveTreatystatuteHolderRussianActive() throws Exception {
smdData = loadSmd("active/TreatyStatute-Holder-Russian-Active.smd");
tmchXmlSignature.verify(smdData);
}
@Test
void testInvalidInvalidsignatureCourtAgentFrenchActive() {
smdData = loadSmd("invalid/InvalidSignature-Court-Agent-French-Active.smd");
assertThrows(XMLSignatureException.class, () -> tmchXmlSignature.verify(smdData));
}
@Test
void testInvalidInvalidsignatureTrademarkAgentEnglishActive() {
smdData = loadSmd("invalid/InvalidSignature-Trademark-Agent-English-Active.smd");
assertThrows(XMLSignatureException.class, () -> tmchXmlSignature.verify(smdData));
}
@Test
void testInvalidInvalidsignatureTrademarkAgentRussianActive() {
smdData = loadSmd("invalid/InvalidSignature-Trademark-Agent-Russian-Active.smd");
assertThrows(XMLSignatureException.class, () -> tmchXmlSignature.verify(smdData));
}
@Test
void testInvalidInvalidsignatureTreatystatuteAgentChineseActive() {
smdData = loadSmd("invalid/InvalidSignature-TreatyStatute-Agent-Chinese-Active.smd");
assertThrows(XMLSignatureException.class, () -> tmchXmlSignature.verify(smdData));
}
@Test
void testInvalidInvalidsignatureTreatystatuteAgentEnglishActive() {
smdData = loadSmd("invalid/InvalidSignature-TreatyStatute-Agent-English-Active.smd");
assertThrows(XMLSignatureException.class, () -> tmchXmlSignature.verify(smdData));
}
@Test
void testRevokedTmvTmvrevokedCourtAgentFrenchActive() {
smdData = loadSmd("revoked/tmv/TMVRevoked-Court-Agent-French-Active.smd");
CertificateRevokedException e =
assertThrows(CertificateRevokedException.class, () -> tmchXmlSignature.verify(smdData));
assertThat(e).hasMessageThat().contains("KEY_COMPROMISE");
}
@Test
void testRevokedTmvTmvrevokedTrademarkAgentEnglishActive() {
smdData = loadSmd("revoked/tmv/TMVRevoked-Trademark-Agent-English-Active.smd");
@ParameterizedTest
@ValueSource(strings = {"Arab", "Chinese", "English", "French"})
void testIndTmvRevoked(String language) {
smdData =
loadSmd(
String.format("idn/RevokedCert/TMVRevoked-Trademark-Agent-%s-Active.smd", language));
CertificateRevokedException e =
assertThrows(CertificateRevokedException.class, () -> tmchXmlSignature.verify(smdData));
assertThat(e).hasMessageThat().contains("Certificate has been revoked");
}
@Test
void testRevokedTmvTmvrevokedTrademarkAgentRussianActive() {
smdData = loadSmd("revoked/tmv/TMVRevoked-Trademark-Agent-Russian-Active.smd");
CertificateRevokedException e =
assertThrows(CertificateRevokedException.class, () -> tmchXmlSignature.verify(smdData));
assertThat(e).hasMessageThat().contains("Certificate has been revoked");
}
@Test
void testRevokedTmvTmvrevokedTreatystatuteAgentChineseActive() {
smdData = loadSmd("revoked/tmv/TMVRevoked-TreatyStatute-Agent-Chinese-Active.smd");
CertificateRevokedException e =
assertThrows(CertificateRevokedException.class, () -> tmchXmlSignature.verify(smdData));
assertThat(e).hasMessageThat().contains("KEY_COMPROMISE");
}
@Test
void testRevokedTmvTmvrevokedTreatystatuteAgentEnglishActive() {
smdData = loadSmd("revoked/tmv/TMVRevoked-TreatyStatute-Agent-English-Active.smd");
CertificateRevokedException e =
assertThrows(CertificateRevokedException.class, () -> tmchXmlSignature.verify(smdData));
assertThat(e).hasMessageThat().contains("KEY_COMPROMISE");
}
}

View File

@@ -395,6 +395,26 @@ class GenerateAllocationTokensCommandTest extends CommandTestCase<GenerateAlloca
.isInstanceOf(IllegalArgumentException.class);
}
@Test
void testFailure_invalidPackageTokenStatusTransition() {
assertThat(
assertThrows(
IllegalArgumentException.class,
() ->
runCommand(
"--number",
"999",
"--type",
"PACKAGE",
String.format(
"--token_status_transitions=\"%s=NOT_STARTED,%s=VALID,%s=ENDED\"",
START_OF_TIME, fakeClock.nowUtc(), fakeClock.nowUtc().plusDays(1)))))
.hasMessageThat()
.isEqualTo(
"PACKAGE tokens should not be generated with ENDED or CANCELLED in their transition"
+ " map");
}
@Test
void testFailure_lengthOfZero() {
IllegalArgumentException thrown =

View File

@@ -100,6 +100,7 @@ public class RequestFactoryModuleTest {
@Test
void test_provideHttpRequestFactory_remote_withIap() throws Exception {
when(credentialsBundle.getHttpRequestInitializer()).thenReturn(httpRequestInitializer);
// Mock the request/response to/from the IAP server requesting an ID token
UserCredentials mockUserCredentials = mock(UserCredentials.class);
when(credentialsBundle.getGoogleCredentials()).thenReturn(mockUserCredentials);
@@ -123,9 +124,10 @@ public class RequestFactoryModuleTest {
RequestFactoryModule.provideHttpRequestFactory(
credentialsBundle, Optional.of("iapClientId"));
HttpRequest request = factory.buildGetRequest(new GenericUrl("http://localhost"));
assertThat(request.getHeaders().getAuthorization()).isEqualTo("Bearer iapIdToken");
assertThat(request.getHeaders().get("Proxy-Authorization")).isEqualTo("Bearer iapIdToken");
assertThat(request.getConnectTimeout()).isEqualTo(REQUEST_TIMEOUT_MS);
assertThat(request.getReadTimeout()).isEqualTo(REQUEST_TIMEOUT_MS);
verify(httpRequestInitializer).initialize(request);
verifyNoMoreInteractions(httpRequestInitializer);
} finally {
RegistryConfig.CONFIG_SETTINGS.get().gcpProject.isLocal = origIsLocal;

View File

@@ -22,9 +22,12 @@ import static google.registry.model.domain.token.AllocationToken.TokenStatus.CAN
import static google.registry.model.domain.token.AllocationToken.TokenStatus.ENDED;
import static google.registry.model.domain.token.AllocationToken.TokenStatus.NOT_STARTED;
import static google.registry.model.domain.token.AllocationToken.TokenStatus.VALID;
import static google.registry.model.domain.token.AllocationToken.TokenType.PACKAGE;
import static google.registry.model.domain.token.AllocationToken.TokenType.SINGLE_USE;
import static google.registry.model.domain.token.AllocationToken.TokenType.UNLIMITED_USE;
import static google.registry.testing.DatabaseHelper.createTld;
import static google.registry.testing.DatabaseHelper.loadByEntity;
import static google.registry.testing.DatabaseHelper.persistActiveDomain;
import static google.registry.testing.DatabaseHelper.persistResource;
import static google.registry.util.DateTimeUtils.START_OF_TIME;
import static org.joda.time.DateTimeZone.UTC;
@@ -255,7 +258,7 @@ class UpdateAllocationTokensCommandTest extends CommandTestCase<UpdateAllocation
@Test
void testUpdateStatusTransitions() throws Exception {
DateTime now = DateTime.now(UTC);
DateTime now = fakeClock.nowUtc();
AllocationToken token = persistResource(builderWithPromo().build());
runCommandForced(
"--prefix",
@@ -270,7 +273,7 @@ class UpdateAllocationTokensCommandTest extends CommandTestCase<UpdateAllocation
@Test
void testUpdateStatusTransitions_badTransitions() {
DateTime now = DateTime.now(UTC);
DateTime now = fakeClock.nowUtc();
persistResource(builderWithPromo().build());
IllegalArgumentException thrown =
assertThrows(
@@ -288,6 +291,73 @@ class UpdateAllocationTokensCommandTest extends CommandTestCase<UpdateAllocation
.isEqualTo("tokenStatusTransitions map cannot transition from NOT_STARTED to ENDED.");
}
@Test
void testUpdateStatusTransitions_endPackageTokenNoDomains() throws Exception {
DateTime now = fakeClock.nowUtc();
AllocationToken token =
persistResource(
new AllocationToken.Builder()
.setToken("token")
.setTokenType(PACKAGE)
.setRenewalPriceBehavior(SPECIFIED)
.setAllowedRegistrarIds(ImmutableSet.of("TheRegistrar"))
.setTokenStatusTransitions(
ImmutableSortedMap.<DateTime, TokenStatus>naturalOrder()
.put(START_OF_TIME, NOT_STARTED)
.put(now.minusDays(1), VALID)
.build())
.build());
runCommandForced(
"--prefix",
"token",
"--token_status_transitions",
String.format(
"\"%s=NOT_STARTED,%s=VALID,%s=ENDED\"", START_OF_TIME, now.minusDays(1), now));
token = reloadResource(token);
assertThat(token.getTokenStatusTransitions().toValueMap())
.containsExactly(START_OF_TIME, NOT_STARTED, now.minusDays(1), VALID, now, ENDED);
}
@Test
void testUpdateStatusTransitions_endPackageTokenWithActiveDomainsFails() throws Exception {
DateTime now = fakeClock.nowUtc();
AllocationToken token =
persistResource(
new AllocationToken.Builder()
.setToken("token")
.setTokenType(PACKAGE)
.setRenewalPriceBehavior(SPECIFIED)
.setAllowedRegistrarIds(ImmutableSet.of("TheRegistrar"))
.setTokenStatusTransitions(
ImmutableSortedMap.<DateTime, TokenStatus>naturalOrder()
.put(START_OF_TIME, NOT_STARTED)
.put(now.minusDays(1), VALID)
.build())
.build());
createTld("tld");
persistResource(
persistActiveDomain("example.tld")
.asBuilder()
.setCurrentPackageToken(token.createVKey())
.build());
IllegalArgumentException thrown =
assertThrows(
IllegalArgumentException.class,
() ->
runCommandForced(
"--prefix",
"token",
"--token_status_transitions",
String.format(
"\"%s=NOT_STARTED,%s=VALID,%s=ENDED\"",
START_OF_TIME, now.minusDays(1), now)));
assertThat(thrown)
.hasMessageThat()
.isEqualTo(
"Package token token can not end its promotion because it still has 1 domains in the"
+ " package");
}
@Test
void testUpdate_onlyWithPrefix() throws Exception {
AllocationToken token =

View File

@@ -0,0 +1,139 @@
// Copyright 2023 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.ui.server.console;
import static com.google.common.truth.Truth.assertThat;
import static google.registry.testing.DatabaseHelper.createTld;
import static org.mockito.Mockito.mock;
import com.google.api.client.http.HttpStatusCodes;
import com.google.common.collect.ImmutableMap;
import com.google.gson.Gson;
import google.registry.model.console.RegistrarRole;
import google.registry.model.console.User;
import google.registry.model.console.UserRoles;
import google.registry.persistence.transaction.JpaTestExtensions;
import google.registry.request.auth.AuthLevel;
import google.registry.request.auth.AuthResult;
import google.registry.request.auth.UserAuthInfo;
import google.registry.testing.DatabaseHelper;
import google.registry.testing.FakeResponse;
import google.registry.util.UtilsModule;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Tests for {@link google.registry.ui.server.console.ConsoleDomainGetAction}. */
public class ConsoleDomainGetActionTest {
private static final Gson GSON = UtilsModule.provideGson();
private static final FakeResponse RESPONSE = new FakeResponse();
@RegisterExtension
final JpaTestExtensions.JpaIntegrationTestExtension jpa =
new JpaTestExtensions.Builder().buildIntegrationTestExtension();
@BeforeEach
void beforeEach() {
createTld("tld");
DatabaseHelper.persistActiveDomain("exists.tld");
}
@Test
void testSuccess_fullJsonRepresentation() {
ConsoleDomainGetAction action =
createAction(
AuthResult.create(
AuthLevel.USER,
UserAuthInfo.create(
createUser(
new UserRoles.Builder()
.setRegistrarRoles(
ImmutableMap.of("TheRegistrar", RegistrarRole.ACCOUNT_MANAGER))
.build()))),
"exists.tld");
action.run();
assertThat(RESPONSE.getStatus()).isEqualTo(HttpStatusCodes.STATUS_CODE_OK);
assertThat(RESPONSE.getPayload())
.isEqualTo(
"{\"domainName\":\"exists.tld\",\"adminContact\":{\"key\":\"3-ROID\"},\"techContact\":"
+ "{\"key\":\"3-ROID\"},\"registrantContact\":{\"key\":\"3-ROID\"},\"registrationExpirationTime\":"
+ "\"294247-01-10T04:00:54.775Z\",\"lastTransferTime\":\"null\",\"repoId\":\"2-TLD\","
+ "\"currentSponsorRegistrarId\":\"TheRegistrar\",\"creationRegistrarId\":\"TheRegistrar\","
+ "\"creationTime\":{\"creationTime\":\"1970-01-01T00:00:00.000Z\"},\"lastEppUpdateTime\":\"null\","
+ "\"statuses\":[\"INACTIVE\"]}");
}
@Test
void testFailure_emptyAuth() {
ConsoleDomainGetAction action = createAction(AuthResult.NOT_AUTHENTICATED, "exists.tld");
action.run();
assertThat(RESPONSE.getStatus()).isEqualTo(HttpStatusCodes.STATUS_CODE_UNAUTHORIZED);
}
@Test
void testFailure_appAuth() {
ConsoleDomainGetAction action = createAction(AuthResult.create(AuthLevel.APP), "exists.tld");
action.run();
assertThat(RESPONSE.getStatus()).isEqualTo(HttpStatusCodes.STATUS_CODE_UNAUTHORIZED);
}
@Test
void testFailure_wrongTypeOfUser() {
ConsoleDomainGetAction action =
createAction(
AuthResult.create(
AuthLevel.USER,
UserAuthInfo.create(mock(com.google.appengine.api.users.User.class), false)),
"exists.tld");
action.run();
assertThat(RESPONSE.getStatus()).isEqualTo(HttpStatusCodes.STATUS_CODE_UNAUTHORIZED);
}
@Test
void testFailure_noAccessToRegistrar() {
ConsoleDomainGetAction action =
createAction(
AuthResult.create(
AuthLevel.USER, UserAuthInfo.create(createUser(new UserRoles.Builder().build()))),
"exists.tld");
action.run();
assertThat(RESPONSE.getStatus()).isEqualTo(HttpStatusCodes.STATUS_CODE_NOT_FOUND);
}
@Test
void testFailure_nonexistentDomain() {
ConsoleDomainGetAction action =
createAction(
AuthResult.create(
AuthLevel.USER,
UserAuthInfo.create(createUser(new UserRoles.Builder().setIsAdmin(true).build()))),
"nonexistent.tld");
action.run();
assertThat(RESPONSE.getStatus()).isEqualTo(HttpStatusCodes.STATUS_CODE_NOT_FOUND);
}
private User createUser(UserRoles userRoles) {
return new User.Builder()
.setEmailAddress("email@email.com")
.setGaiaId("gaiaId")
.setUserRoles(userRoles)
.build();
}
private ConsoleDomainGetAction createAction(AuthResult authResult, String domain) {
return new ConsoleDomainGetAction(authResult, RESPONSE, GSON, domain);
}
}

View File

@@ -6,8 +6,8 @@
<resData>
<domain:creData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>%DOMAIN%</domain:name>
<domain:crDate>2014-09-09T09:09:09Z</domain:crDate>
<domain:exDate>2016-09-09T09:09:09Z</domain:exDate>
<domain:crDate>%CREATE_TIME%</domain:crDate>
<domain:exDate>%EXPIRATION_TIME%</domain:exDate>
</domain:creData>
</resData>
<trID>

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,6 @@
PATH CLASS METHODS OK AUTH_METHODS MIN USER_POLICY
/_dr/epp EppTlsAction POST n INTERNAL,API APP PUBLIC
/console-api/domain ConsoleDomainGetAction GET n API,LEGACY USER PUBLIC
/registrar ConsoleUiAction GET n INTERNAL,API,LEGACY NONE PUBLIC
/registrar-create ConsoleRegistrarCreatorAction POST,GET n INTERNAL,API,LEGACY NONE PUBLIC
/registrar-ote-setup ConsoleOteSetupAction POST,GET n INTERNAL,API,LEGACY NONE PUBLIC

View File

@@ -1,99 +0,0 @@
Marks: الاختبار &amp; لتقييم
smdID: 000000761526320373066-65535
U-labels: xn------nzeaagpf7azb2ppajr3fa, xn-----btdaafne4a7azpoaiq8ea, xn----ymcaaeld1a4a6onahp3ea, xn--mgbaadjcy1a8mmago8da
notBefore: 2018-05-14T17:52:53.066Z
notAfter: 2022-08-18T14:27:18.209Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il82MzZi
ZDEyYy02YzExLTRhOGYtYTVkZC01YmU0NzFhZGNiNWQiPjxzbWQ6aWQ+MDAwMDAwNzYxNTI2MzIw
MzczMDY2LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1Mjo1My4wNjZaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDoyNzoxOC4yMDlaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxNDQxNTAzMDY2MDIyMTUwMzA2NjAyMi0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPtin2YTYp9iu2KrYqNin2LEgJmFtcDsg2YTYqtmC2YrZitmFPC9tYXJrOm1hcmtO
YW1lPjxtYXJrOmhvbGRlciBlbnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm9yZz7ZiNmD2KfZhNip
PC9tYXJrOm9yZz48bWFyazphZGRyPjxtYXJrOnN0cmVldD7YrNi52YHYsSDYp9io2YYg2LPZitmG
2KfYoSA3NTwvbWFyazpzdHJlZXQ+PG1hcms6Y2l0eT7ZhdmD2YbYp9izPC9tYXJrOmNpdHk+PG1h
cms6cGM+MjkwMDwvbWFyazpwYz48bWFyazpjYz5NQTwvbWFyazpjYz48L21hcms6YWRkcj48L21h
cms6aG9sZGVyPjxtYXJrOmNvbnRhY3QgdHlwZT0iYWdlbnQiPjxtYXJrOm5hbWU+2YXZh9mG2K/Y
syDYp9mE2YXYudmE2YjZhdin2KrZitipPC9tYXJrOm5hbWU+PG1hcms6b3JnPtmI2YPYp9mE2Kk8
L21hcms6b3JnPjxtYXJrOmFkZHI+PG1hcms6c3RyZWV0Pti02KfYsdi5INis2LnZgdixINin2KjZ
hiDYs9mK2YbYp9ihIDc1PC9tYXJrOnN0cmVldD48bWFyazpjaXR5PtmF2YPZhtin2LM8L21hcms6
Y2l0eT48bWFyazpwYz4yOTAwPC9tYXJrOnBjPjxtYXJrOmNjPk1BPC9tYXJrOmNjPjwvbWFyazph
ZGRyPjxtYXJrOnZvaWNlPisyMTIuNTIyNTM5MDQwPC9tYXJrOnZvaWNlPjxtYXJrOmZheD4rMjEy
LjUyMjUzOTA0MTwvbWFyazpmYXg+PG1hcms6ZW1haWw+aW5mb0BhZ2VuY3ktbWFyb2Njby5jb208
L21hcms6ZW1haWw+PC9tYXJrOmNvbnRhY3Q+PG1hcms6bGFiZWw+eG4tLS0tLS1uemVhYWdwZjdh
emIycHBhanIzZmE8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLS0tLWJ0ZGFhZm5lNGE3YXpw
b2FpcThlYTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tLS15bWNhYWVsZDFhNGE2b25haHAz
ZWE8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLW1nYmFhZGpjeTFhOG1tYWdvOGRhPC9tYXJr
OmxhYmVsPjxtYXJrOmdvb2RzQW5kU2VydmljZXM+2LrZitiq2KfYscKnPC9tYXJrOmdvb2RzQW5k
U2VydmljZXM+PG1hcms6cmVmTnVtPjEyMzQ8L21hcms6cmVmTnVtPjxtYXJrOnByb0RhdGU+MjAx
NC0wOS0wOFQwMDowMDowMC4wMDBaPC9tYXJrOnByb0RhdGU+PG1hcms6Y2M+VVM8L21hcms6Y2M+
PG1hcms6Y291cnROYW1lPtin2YTYr9in2LEg2KfZhNio2YrYttin2KE8L21hcms6Y291cnROYW1l
PjwvbWFyazpjb3VydD48L21hcms6bWFyaz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJZD0iX2Y5YjhmY2I1LWIyNWMtNDEzOS1hZGE1
LTRjOGVhNjEwY2NkOSI+PGRzOlNpZ25lZEluZm8+PGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2Qg
QWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48ZHM6
U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxk
c2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxkczpSZWZlcmVuY2UgVVJJPSIjXzYzNmJkMTJjLTZjMTEt
NGE4Zi1hNWRkLTViZTQ3MWFkY2I1ZCI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdv
cml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0
dXJlIi8+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAv
eG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jtcz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRo
bT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZh
bHVlPnNzQldOUE1COFBFbVlPbGMzVlpNaFVlL1BZa2tmWm1tcCt1TXdWZGN4M3M9PC9kczpEaWdl
c3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI184OWIzYzk0YS0wMmE0
LTRhNTMtOWI5Yi03MjFiN2NkMjMzNTUiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxn
b3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRy
YW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5YcXNTbW1BZUZBTnJxaGtwTFlG
OE55UFZWUHFtcktYTmhmamFlUVVhRG9NPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+
PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZSBJZD0iXzQ3ZjgxY2I0LWNkMjktNDJj
Mi1iZTdjLTFhNzI0ZTVhY2I4NSI+dm5pVCtid2xTTDJBTVh1TFNrV0kzVFExdDEwR1p1TFJRL1Vr
bjZZNG9SUWRjc0RiTUlmcUFvRUdiT2FjbStvM2lEU1V4RTlwVGdzNwpjUDJaR1FsNk9zbmF3YzR0
dEZVdmZVVEx1TGhPR2U5d0cvdXFJR1h5Q3RrZUNWcTJUZitjOGRzZlU2OGFHSkdqVHptZEJVUVR2
ZWp6CkNFK2VzRjNFNTFUQ3RkUGxhek15Mm5uQ3Z1bWJzTHU1WnFRWlF2Q20xb25LMGRxMnF6a3k0
UWFYSDA0WFpiU2FHcFVaUmp1dDkrTHQKUW9KZm5VeFNOa1MrRC9aWVl5b3lpb2RoWVdPQ1Z1Mk1a
MUQvOGlHQUFWRGdmS1RwbXN6RXZsb1F1N2wxeUtIaU1SU2h1ZFY2RGRUKwpRRzBrdTRDbEhUWFdO
RFBMQ0J0TUJELzhUakdldFJncGtFaXNQdz09PC9kczpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5m
byBJZD0iXzg5YjNjOTRhLTAyYTQtNGE1My05YjliLTcyMWI3Y2QyMzM1NSI+PGRzOlg1MDlEYXRh
PjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRk96Q0NCQ09nQXdJQkFnSWdMckFiZXZvYWU1MnkzZjZD
MnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOaFpjd0RRWUpLb1pJaHZjTgpBUUVMQlFBd2ZERUxNQWtH
QTFVRUJoTUNWVk14UERBNkJnTlZCQW9UTTBsdWRHVnlibVYwSUVOdmNuQnZjbUYwYVc5dUlHWnZj
aUJCCmMzTnBaMjVsWkNCT1lXMWxjeUJoYm1RZ1RuVnRZbVZ5Y3pFdk1DMEdBMVVFQXhNbVNVTkJU
azRnVkhKaFpHVnRZWEpySUVOc1pXRnkKYVc1bmFHOTFjMlVnVUdsc2IzUWdRMEV3SGhjTk1UZ3dN
akk0TURBd01EQXdXaGNOTWpNd016QXhNak0xT1RVNVdqQ0JqekVMTUFrRwpBMVVFQmhNQ1FrVXhJ
REFlQmdOVkJBZ1RGMEp5ZFhOelpXeHpMVU5oY0dsMFlXd2dVbVZuYVc5dU1SRXdEd1lEVlFRSEV3
aENjblZ6CmMyVnNjekVSTUE4R0ExVUVDaE1JUkdWc2IybDBkR1V4T0RBMkJnTlZCQU1UTDBsRFFV
NU9JRlJOUTBnZ1FYVjBhRzl5YVhwbFpDQlUKY21Ga1pXMWhjbXNnVUdsc2IzUWdWbUZzYVdSaGRH
OXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQp4bHAzS3BZSFgz
V3lBc0ZoU2szTHdXZm5HbHhuVURGcUZaQTNVb3VNWWovWGlnYk1rTmVFWElqbGtST0tUNE9QR2ZS
eC9MQXlSbFFRCmpDTXY0cWhia2NYMXA3YXI2M2ZscTRTWk5WY2wxNWw3aDB1VDU4RnpTZm5sejB1
NXJrSGZKSW1ENDMrbWFQLzhndjM2RlIyN2pXOFIKOXdZNGhrK1dzNElCMGlGU2Q4U1h2MUtyOHcv
Sm1NUVNEa2l1RytSZklpdWJ3US9meTdFa2o1UVdoUFp3K21NeE5LbkhVTHkzeFl6MgpMd1ZmZnRq
d1V1ZWFjdnFOUkNrTVhsQ2xPQURxZlQ4b1Nab2VEWGVoSHZsUHNMQ2VtR0JvVEt1cnNrSVM2OUYw
eVBFSDVnemUwSCtmCjhGUk9zSW9LU3NWUTM0QjRTL2pvRTY3bnBzSlBUZEtzTlBKVHlRSURBUUFC
bzRJQmt6Q0NBWTh3REFZRFZSMFRBUUgvQkFJd0FEQWQKQmdOVkhRNEVGZ1FVb0ZwWTc2cDV5b05E
Ukd0UXB6VnVSODFVV1Ewd2djWUdBMVVkSXdTQnZqQ0J1NEFVdzYwK3B0WVJBRVdBWERwWApTb3B0
M0RFTm5uR2hnWUNrZmpCOE1Rc3dDUVlEVlFRR0V3SlZVekU4TURvR0ExVUVDaE16U1c1MFpYSnVa
WFFnUTI5eWNHOXlZWFJwCmIyNGdabTl5SUVGemMybG5ibVZrSUU1aGJXVnpJR0Z1WkNCT2RXMWla
WEp6TVM4d0xRWURWUVFERXlaSlEwRk9UaUJVY21Ga1pXMWgKY21zZ1EyeGxZWEpwYm1kb2IzVnpa
U0JRYVd4dmRDQkRRWUlnTHJBYmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTgpo
WGt3RGdZRFZSMFBBUUgvQkFRREFnZUFNRFFHQTFVZEh3UXRNQ3N3S2FBbm9DV0dJMmgwZEhBNkx5
OWpjbXd1YVdOaGJtNHViM0puCkwzUnRZMmhmY0dsc2IzUXVZM0pzTUZFR0ExVWRJQVJLTUVnd0VB
WU9Ld1lCQkFHQ3lSc0JCWU03REFvd05BWUlLd1lCQlFVSEFnRXcKS0RBbUJnZ3JCZ0VGQlFjQ0FS
WWFhSFIwY0hNNkx5OWpZUzVwWTJGdWJpNXZjbWN2Y0dsc2IzUXdEUVlKS29aSWh2Y05BUUVMQlFB
RApnZ0VCQUF1aloySWNSMkRWcnRhUnJBNTllTllDbDR4Y3NKTXU4RFFDSHYyOGZUZmkvQmlaWTRJ
cjdGOWtGeTk2RDdPWjhvTFk1empmCjRkSHhGd0hQcUg4RGg2Sldzelh1SFcxWmEzWG1sMFBhSHhD
V1JTMFhvbDhXc0hIcE55Z2pNQllmSjBvZFZNODg1VFoxRWw5U2l1RUgKbnluRkJnU21pRmM5OXVR
ZC9ZRFJadUd2L0EwSHl2N3lSOXRrTEVkRDNBMXVOSkJXNFArSEpHcGRLa1lMMVE1clU3K29IVlB0
TUtLSQozaUZrVUVzYk80NUFWZDd2UC9qLzdKdEFaUGI2a29PVjVsWmkySDFSTGNjR3d6ZGV6bmhK
Z2QwTjlvYmIwdm5FNDEvVVNXYWZkV1JaClZHa3dQdXFUaGw3c0N0enJKSDhYWTB4Y3VtK2NmTHgy
RUFJd1VuT2NhYjQ9PC9kczpYNTA5Q2VydGlmaWNhdGU+PC9kczpYNTA5RGF0YT48L2RzOktleUlu
Zm8+PC9kczpTaWduYXR1cmU+PC9zbWQ6c2lnbmVkTWFyaz4=
-----END ENCODED SMD-----

View File

@@ -1,97 +0,0 @@
Marks: 标记&amp;记录
smdID: 000000791526320378900-65535
U-labels: xn----kw3bu0xlr2bba, xn--and-vj3ft79a885cda, xn--w2t96qr64aa
notBefore: 2018-05-14T17:52:58.900Z
notAfter: 2022-08-18T14:36:50.931Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8yOTg3
MmViNi0xY2JiLTQzYjMtYmIzMy1kZjA2MzhmZmQ0MjciPjxzbWQ6aWQ+MDAwMDAwNzkxNTI2MzIw
Mzc4OTAwLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1Mjo1OC45MDBaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDozNjo1MC45MzFaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxNDYxNTAzMDY2NjMxMTUwMzA2NjYzMS0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPuagh+iusCZhbXA76K6w5b2VPC9tYXJrOm1hcmtOYW1lPjxtYXJrOmhvbGRlciBl
bnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm9yZz7lt6XnqIvlpIQ8L21hcms6b3JnPjxtYXJrOmFk
ZHI+PG1hcms6c3RyZWV0Pummmea4r+S4nOi3rzblj7fvvIw15Y+35qW877yMOOWPt+WupDwvbWFy
azpzdHJlZXQ+PG1hcms6Y2l0eT7pnZLlspvluII8L21hcms6Y2l0eT48bWFyazpwYz4zNTAwPC9t
YXJrOnBjPjxtYXJrOmNjPkNOPC9tYXJrOmNjPjwvbWFyazphZGRyPjwvbWFyazpob2xkZXI+PG1h
cms6Y29udGFjdCB0eXBlPSJhZ2VudCI+PG1hcms6bmFtZT7mnY7lsI/mlrk8L21hcms6bmFtZT48
bWFyazpvcmc+5bel56iL5aSEPC9tYXJrOm9yZz48bWFyazphZGRyPjxtYXJrOnN0cmVldD7pppnm
uK/kuJzot6825Y+377yMNeWPt+alvO+8jDjlj7flrqQ8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+
6Z2S5bKb5biCPC9tYXJrOmNpdHk+PG1hcms6cGM+MzUwMDwvbWFyazpwYz48bWFyazpjYz5DTjwv
bWFyazpjYz48L21hcms6YWRkcj48bWFyazp2b2ljZT4rODYuMTA4NDY1NzE3MzwvbWFyazp2b2lj
ZT48bWFyazpmYXg+Kzg2LjEwODQ2NTcxNzU8L21hcms6ZmF4PjxtYXJrOmVtYWlsPmluZm9AY2hp
bmVzZS1hZ2VuY3kuY29tPC9tYXJrOmVtYWlsPjwvbWFyazpjb250YWN0PjxtYXJrOmxhYmVsPnhu
LS0tLWt3M2J1MHhscjJiYmE8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLWFuZC12ajNmdDc5
YTg4NWNkYTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tdzJ0OTZxcjY0YWE8L21hcms6bGFi
ZWw+PG1hcms6Z29vZHNBbmRTZXJ2aWNlcz4g5ZCJ5LuWPC9tYXJrOmdvb2RzQW5kU2VydmljZXM+
PG1hcms6cmVmTnVtPjEyMzQ8L21hcms6cmVmTnVtPjxtYXJrOnByb0RhdGU+MjAxMy0wMS0wMVQw
MDowMDowMC4wMDBaPC9tYXJrOnByb0RhdGU+PG1hcms6Y2M+VVM8L21hcms6Y2M+PG1hcms6Y291
cnROYW1lPkhvdmU8L21hcms6Y291cnROYW1lPjwvbWFyazpjb3VydD48L21hcms6bWFyaz48ZHM6
U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJ
ZD0iXzI3ZDI4YTJhLTIyOGMtNDMxNS04YTQ0LTY5NDU1ODdhYjkwYSI+PGRzOlNpZ25lZEluZm8+
PGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxLzEwL3htbC1leGMtYzE0biMiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxkczpSZWZl
cmVuY2UgVVJJPSIjXzI5ODcyZWI2LTFjYmItNDNiMy1iYjMzLWRmMDYzOGZmZDQyNyI+PGRzOlRy
YW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
MDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jt
cz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94
bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZhbHVlPmYwdWNzMUZjM2VwSGxHaldVa3ZVaG4vM0p2
V0pMUjl3d2tWSjZkMXRSdXc9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVm
ZXJlbmNlIFVSST0iI19mMGVlZmI2NS00Zjg5LTQ4OTktYWQ3Ny04ZGI2MGY3M2UzMDAiPjxkczpU
cmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
LzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdv
cml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdl
c3RWYWx1ZT5WalVhVnhGM0dGNkwzYWUvNGJOUHl0VWRoVE1RZFNNS09mMURaY1lsN3VRPTwvZHM6
RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVW
YWx1ZSBJZD0iXzhmNzZhNTEwLThjYmUtNDI0OS05M2FjLTM4MTM2YTc5NTg2YyI+RUltei9JSWZ4
OG5zbVc3TExONXRCbi9NN2VYUDN3QXZVSmNyY2xJaTVCMVBXcldmd2lhbGVvd1lPVGFnWE15cnN5
RWMycklETEpQRAprNStZMWxjSnVRaWd6aTd4YlFkaTQveGswRUVJRjJ0TUNDYkgxU0Nua1VoRGkv
c096RVJKeXdncWlhbTN2bmE5UE5YaWEzaCs2bU5ICkpOVVZvWWQ3bW4xbHBHOTNkQzA5cVdIbWRT
MHRrRVZZQkgyTDlldHJFNjhBMEROWDRaa0NJL05YdzRvQVVlWGtUNUZIWlpJSHRRek4KTlNzUGRX
Ujl5a0hMRWZ4NFo5YThES0YzU2JtUnJKVktNbzNLRlhCNzQyVjFRcldsc2xsSmtHMGpBR3Freklw
UGxyTm52M2hWUlFrZgpEUUs5QXZ2QlhCSm94UEpFYTFDYzRBKysxQUFqZXBkVVp6ZlV6QT09PC9k
czpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iX2YwZWVmYjY1LTRmODktNDg5OS1hZDc3
LThkYjYwZjczZTMwMCI+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRk96Q0NC
Q09nQXdJQkFnSWdMckFiZXZvYWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOaFpjd0RR
WUpLb1pJaHZjTgpBUUVMQlFBd2ZERUxNQWtHQTFVRUJoTUNWVk14UERBNkJnTlZCQW9UTTBsdWRH
VnlibVYwSUVOdmNuQnZjbUYwYVc5dUlHWnZjaUJCCmMzTnBaMjVsWkNCT1lXMWxjeUJoYm1RZ1Ru
VnRZbVZ5Y3pFdk1DMEdBMVVFQXhNbVNVTkJUazRnVkhKaFpHVnRZWEpySUVOc1pXRnkKYVc1bmFH
OTFjMlVnVUdsc2IzUWdRMEV3SGhjTk1UZ3dNakk0TURBd01EQXdXaGNOTWpNd016QXhNak0xT1RV
NVdqQ0JqekVMTUFrRwpBMVVFQmhNQ1FrVXhJREFlQmdOVkJBZ1RGMEp5ZFhOelpXeHpMVU5oY0ds
MFlXd2dVbVZuYVc5dU1SRXdEd1lEVlFRSEV3aENjblZ6CmMyVnNjekVSTUE4R0ExVUVDaE1JUkdW
c2IybDBkR1V4T0RBMkJnTlZCQU1UTDBsRFFVNU9JRlJOUTBnZ1FYVjBhRzl5YVhwbFpDQlUKY21G
a1pXMWhjbXNnVUdsc2IzUWdWbUZzYVdSaGRHOXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9D
QVE4QU1JSUJDZ0tDQVFFQQp4bHAzS3BZSFgzV3lBc0ZoU2szTHdXZm5HbHhuVURGcUZaQTNVb3VN
WWovWGlnYk1rTmVFWElqbGtST0tUNE9QR2ZSeC9MQXlSbFFRCmpDTXY0cWhia2NYMXA3YXI2M2Zs
cTRTWk5WY2wxNWw3aDB1VDU4RnpTZm5sejB1NXJrSGZKSW1ENDMrbWFQLzhndjM2RlIyN2pXOFIK
OXdZNGhrK1dzNElCMGlGU2Q4U1h2MUtyOHcvSm1NUVNEa2l1RytSZklpdWJ3US9meTdFa2o1UVdo
UFp3K21NeE5LbkhVTHkzeFl6MgpMd1ZmZnRqd1V1ZWFjdnFOUkNrTVhsQ2xPQURxZlQ4b1Nab2VE
WGVoSHZsUHNMQ2VtR0JvVEt1cnNrSVM2OUYweVBFSDVnemUwSCtmCjhGUk9zSW9LU3NWUTM0QjRT
L2pvRTY3bnBzSlBUZEtzTlBKVHlRSURBUUFCbzRJQmt6Q0NBWTh3REFZRFZSMFRBUUgvQkFJd0FE
QWQKQmdOVkhRNEVGZ1FVb0ZwWTc2cDV5b05EUkd0UXB6VnVSODFVV1Ewd2djWUdBMVVkSXdTQnZq
Q0J1NEFVdzYwK3B0WVJBRVdBWERwWApTb3B0M0RFTm5uR2hnWUNrZmpCOE1Rc3dDUVlEVlFRR0V3
SlZVekU4TURvR0ExVUVDaE16U1c1MFpYSnVaWFFnUTI5eWNHOXlZWFJwCmIyNGdabTl5SUVGemMy
bG5ibVZrSUU1aGJXVnpJR0Z1WkNCT2RXMWlaWEp6TVM4d0xRWURWUVFERXlaSlEwRk9UaUJVY21G
a1pXMWgKY21zZ1EyeGxZWEpwYm1kb2IzVnpaU0JRYVd4dmRDQkRRWUlnTHJBYmV2b2FlNTJ5M2Y2
QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTgpoWGt3RGdZRFZSMFBBUUgvQkFRREFnZUFNRFFHQTFV
ZEh3UXRNQ3N3S2FBbm9DV0dJMmgwZEhBNkx5OWpjbXd1YVdOaGJtNHViM0puCkwzUnRZMmhmY0ds
c2IzUXVZM0pzTUZFR0ExVWRJQVJLTUVnd0VBWU9Ld1lCQkFHQ3lSc0JCWU03REFvd05BWUlLd1lC
QlFVSEFnRXcKS0RBbUJnZ3JCZ0VGQlFjQ0FSWWFhSFIwY0hNNkx5OWpZUzVwWTJGdWJpNXZjbWN2
Y0dsc2IzUXdEUVlKS29aSWh2Y05BUUVMQlFBRApnZ0VCQUF1aloySWNSMkRWcnRhUnJBNTllTllD
bDR4Y3NKTXU4RFFDSHYyOGZUZmkvQmlaWTRJcjdGOWtGeTk2RDdPWjhvTFk1empmCjRkSHhGd0hQ
cUg4RGg2Sldzelh1SFcxWmEzWG1sMFBhSHhDV1JTMFhvbDhXc0hIcE55Z2pNQllmSjBvZFZNODg1
VFoxRWw5U2l1RUgKbnluRkJnU21pRmM5OXVRZC9ZRFJadUd2L0EwSHl2N3lSOXRrTEVkRDNBMXVO
SkJXNFArSEpHcGRLa1lMMVE1clU3K29IVlB0TUtLSQozaUZrVUVzYk80NUFWZDd2UC9qLzdKdEFa
UGI2a29PVjVsWmkySDFSTGNjR3d6ZGV6bmhKZ2QwTjlvYmIwdm5FNDEvVVNXYWZkV1JaClZHa3dQ
dXFUaGw3c0N0enJKSDhYWTB4Y3VtK2NmTHgyRUFJd1VuT2NhYjQ9PC9kczpYNTA5Q2VydGlmaWNh
dGU+PC9kczpYNTA5RGF0YT48L2RzOktleUluZm8+PC9kczpTaWduYXR1cmU+PC9zbWQ6c2lnbmVk
TWFyaz4=
-----END ENCODED SMD-----

View File

@@ -1,100 +0,0 @@
Marks: Test &amp; Validate
smdID: 000000851526320390595-65535
U-labels: test---validate, test--validate, test-and-validate, test-andvalidate, test-validate, testand-validate, testandvalidate, testvalidate
notBefore: 2018-05-14T17:53:10.595Z
notAfter: 2022-08-18T14:57:36.681Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8wYjlj
YTI5My0yYjExLTQ4M2MtYjZjMi0xYTk5MGIyMTdlYjgiPjxzbWQ6aWQ+MDAwMDAwODUxNTI2MzIw
MzkwNTk1LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MzoxMC41OTVaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDo1NzozNi42ODFaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxMzcxNTAzMDY3ODY4MTUwMzA2Nzg2OC0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPlRlc3QgJmFtcDsgVmFsaWRhdGU8L21hcms6bWFya05hbWU+PG1hcms6aG9sZGVy
IGVudGl0bGVtZW50PSJvd25lciI+PG1hcms6bmFtZT5Ub255IEhvbGxhbmQ8L21hcms6bmFtZT48
bWFyazpvcmc+QWcgY29ycG9yYXRpb248L21hcms6b3JnPjxtYXJrOmFkZHI+PG1hcms6c3RyZWV0
PjEzMDUgQnJpZ2h0IEF2ZW51ZTwvbWFyazpzdHJlZXQ+PG1hcms6Y2l0eT5BcmNhZGlhPC9tYXJr
OmNpdHk+PG1hcms6cGM+OTAwMjg8L21hcms6cGM+PG1hcms6Y2M+VVM8L21hcms6Y2M+PC9tYXJr
OmFkZHI+PC9tYXJrOmhvbGRlcj48bWFyazpjb250YWN0IHR5cGU9ImFnZW50Ij48bWFyazpuYW1l
PlRvbnkgSG9sbGFuZDwvbWFyazpuYW1lPjxtYXJrOm9yZz5BZyBjb3Jwb3JhdGlvbjwvbWFyazpv
cmc+PG1hcms6YWRkcj48bWFyazpzdHJlZXQ+QnJpZ2h0IEF2ZW51ZSAxMzA1IDwvbWFyazpzdHJl
ZXQ+PG1hcms6Y2l0eT5BcmNhZGlhPC9tYXJrOmNpdHk+PG1hcms6c3A+Q0E8L21hcms6c3A+PG1h
cms6cGM+OTAwMjg8L21hcms6cGM+PG1hcms6Y2M+VVM8L21hcms6Y2M+PC9tYXJrOmFkZHI+PG1h
cms6dm9pY2U+KzEuMjAyNTU2MjMwMjwvbWFyazp2b2ljZT48bWFyazpmYXg+KzEuMjAyNTU2MjMw
MTwvbWFyazpmYXg+PG1hcms6ZW1haWw+aW5mb0BhZ2NvcnBvcmF0aW9uLmNvbTwvbWFyazplbWFp
bD48L21hcms6Y29udGFjdD48bWFyazpsYWJlbD50ZXN0LS0tdmFsaWRhdGU8L21hcms6bGFiZWw+
PG1hcms6bGFiZWw+dGVzdC0tdmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+dGVzdC1h
bmQtdmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+dGVzdC1hbmR2YWxpZGF0ZTwvbWFy
azpsYWJlbD48bWFyazpsYWJlbD50ZXN0LXZhbGlkYXRlPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVs
PnRlc3RhbmQtdmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+dGVzdGFuZHZhbGlkYXRl
PC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnRlc3R2YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazpn
b29kc0FuZFNlcnZpY2VzPmd1aXRhcjwvbWFyazpnb29kc0FuZFNlcnZpY2VzPjxtYXJrOnJlZk51
bT4xMjM0PC9tYXJrOnJlZk51bT48bWFyazpwcm9EYXRlPjIwMTMtMDEtMDFUMDA6MDA6MDAuMDAw
WjwvbWFyazpwcm9EYXRlPjxtYXJrOmNjPlVTPC9tYXJrOmNjPjxtYXJrOmNvdXJ0TmFtZT5Ib3Zl
PC9tYXJrOmNvdXJ0TmFtZT48L21hcms6Y291cnQ+PC9tYXJrOm1hcms+PGRzOlNpZ25hdHVyZSB4
bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIgSWQ9Il83NzViYTgx
YS1mMWYzLTQ3OTgtODE4NS1hODkzNmYyZTI4MTkiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmlj
YWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwt
ZXhjLWMxNG4jIi8+PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEyNTYiLz48ZHM6UmVmZXJlbmNlIFVSST0i
I18wYjljYTI5My0yYjExLTQ4M2MtYjZjMi0xYTk5MGIyMTdlYjgiPjxkczpUcmFuc2Zvcm1zPjxk
czpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcj
ZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2Vz
dE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1
NiIvPjxkczpEaWdlc3RWYWx1ZT5xYVZhY2gxNFNkbHd1R0JBNk0xV0ZFdUJuQnM1RW01QjExWDg5
YndGR1E4PTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PGRzOlJlZmVyZW5jZSBVUkk9
IiNfY2I3YjUxMWUtNjdiNC00ZTlhLTlmODAtZDdkYjg2MjY4ZGRmIj48ZHM6VHJhbnNmb3Jtcz48
ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhj
LWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+cEND
NVlpakJXUWFmM0J3VWVzbEh2TVNFNjcyZ1NUWVNqencxN3VLZDdmOD08L2RzOkRpZ2VzdFZhbHVl
PjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9Il84
MTkyMTFkOS02ZDUzLTQwMzgtOTBiYi01MDAxYTk5MDE0MDgiPmxZNjBKZEpoMGs1MElTWm4yYzAz
VFRGc1c4bURxaVNDTUFKeDkwNlVEb2FUM2tndUh6cXM0c1V5VXRobEdWOXhMMlNkNmQwNkVrcTUK
aVFnVnFKNGN2ZldlVjlJN2hxSk16NldjOHpNdXBFZ2ZlUGVLWkNYL2JlaGtGM3RSRHJ4NGdqbFBR
RDVhV0MveURjWEJjWGo1QU4xNwpMY0pnVjVDMmUxSzVNWjV6amFzWExTaHJnMEtuZ1Y5S094RXl3
Zm9LZWtTWWRzZWpJYTRCYjVnVzgzMG1uMEtKWjdOaUVqclB1TTU5CklqbTExYTNyY2Q1L2hGNGln
TTQ3RWI0YVg4WG1NRDU1N0xnVy9FWStHbGpKNWFFRlJrN1hMZ2ZTM2VPcGptUGlyNGpCZGIwSDBJ
NkYKRkNHM0pua0F6UWxUeFo3RUZ6L0Zqa2VnREVoSXhIMHBLTW1LM1E9PTwvZHM6U2lnbmF0dXJl
VmFsdWU+PGRzOktleUluZm8gSWQ9Il9jYjdiNTExZS02N2I0LTRlOWEtOWY4MC1kN2RiODYyNjhk
ZGYiPjxkczpYNTA5RGF0YT48ZHM6WDUwOUNlcnRpZmljYXRlPk1JSUZPekNDQkNPZ0F3SUJBZ0ln
THJBYmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTmhaY3dEUVlKS29aSWh2Y04K
QVFFTEJRQXdmREVMTUFrR0ExVUVCaE1DVlZNeFBEQTZCZ05WQkFvVE0wbHVkR1Z5Ym1WMElFTnZj
bkJ2Y21GMGFXOXVJR1p2Y2lCQgpjM05wWjI1bFpDQk9ZVzFsY3lCaGJtUWdUblZ0WW1WeWN6RXZN
QzBHQTFVRUF4TW1TVU5CVGs0Z1ZISmhaR1Z0WVhKcklFTnNaV0Z5CmFXNW5hRzkxYzJVZ1VHbHNi
M1FnUTBFd0hoY05NVGd3TWpJNE1EQXdNREF3V2hjTk1qTXdNekF4TWpNMU9UVTVXakNCanpFTE1B
a0cKQTFVRUJoTUNRa1V4SURBZUJnTlZCQWdURjBKeWRYTnpaV3h6TFVOaGNHbDBZV3dnVW1WbmFX
OXVNUkV3RHdZRFZRUUhFd2hDY25WegpjMlZzY3pFUk1BOEdBMVVFQ2hNSVJHVnNiMmwwZEdVeE9E
QTJCZ05WQkFNVEwwbERRVTVPSUZSTlEwZ2dRWFYwYUc5eWFYcGxaQ0JVCmNtRmtaVzFoY21zZ1VH
bHNiM1FnVm1Gc2FXUmhkRzl5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dL
Q0FRRUEKeGxwM0twWUhYM1d5QXNGaFNrM0x3V2ZuR2x4blVERnFGWkEzVW91TVlqL1hpZ2JNa05l
RVhJamxrUk9LVDRPUEdmUngvTEF5UmxRUQpqQ012NHFoYmtjWDFwN2FyNjNmbHE0U1pOVmNsMTVs
N2gwdVQ1OEZ6U2ZubHowdTVya0hmSkltRDQzK21hUC84Z3YzNkZSMjdqVzhSCjl3WTRoaytXczRJ
QjBpRlNkOFNYdjFLcjh3L0ptTVFTRGtpdUcrUmZJaXVid1EvZnk3RWtqNVFXaFBadyttTXhOS25I
VUx5M3hZejIKTHdWZmZ0andVdWVhY3ZxTlJDa01YbENsT0FEcWZUOG9TWm9lRFhlaEh2bFBzTENl
bUdCb1RLdXJza0lTNjlGMHlQRUg1Z3plMEgrZgo4RlJPc0lvS1NzVlEzNEI0Uy9qb0U2N25wc0pQ
VGRLc05QSlR5UUlEQVFBQm80SUJrekNDQVk4d0RBWURWUjBUQVFIL0JBSXdBREFkCkJnTlZIUTRF
RmdRVW9GcFk3NnA1eW9ORFJHdFFwelZ1UjgxVVdRMHdnY1lHQTFVZEl3U0J2akNCdTRBVXc2MCtw
dFlSQUVXQVhEcFgKU29wdDNERU5ubkdoZ1lDa2ZqQjhNUXN3Q1FZRFZRUUdFd0pWVXpFOE1Eb0dB
MVVFQ2hNelNXNTBaWEp1WlhRZ1EyOXljRzl5WVhScApiMjRnWm05eUlFRnpjMmxuYm1Wa0lFNWhi
V1Z6SUdGdVpDQk9kVzFpWlhKek1TOHdMUVlEVlFRREV5WkpRMEZPVGlCVWNtRmtaVzFoCmNtc2dR
MnhsWVhKcGJtZG9iM1Z6WlNCUWFXeHZkQ0JEUVlJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdY
Sm0wVDAyRm9neEtDZk4KaFhrd0RnWURWUjBQQVFIL0JBUURBZ2VBTURRR0ExVWRId1F0TUNzd0th
QW5vQ1dHSTJoMGRIQTZMeTlqY213dWFXTmhibTR1YjNKbgpMM1J0WTJoZmNHbHNiM1F1WTNKc01G
RUdBMVVkSUFSS01FZ3dFQVlPS3dZQkJBR0N5UnNCQllNN0RBb3dOQVlJS3dZQkJRVUhBZ0V3CktE
QW1CZ2dyQmdFRkJRY0NBUllhYUhSMGNITTZMeTlqWVM1cFkyRnViaTV2Y21jdmNHbHNiM1F3RFFZ
SktvWklodmNOQVFFTEJRQUQKZ2dFQkFBdWpaMkljUjJEVnJ0YVJyQTU5ZU5ZQ2w0eGNzSk11OERR
Q0h2MjhmVGZpL0JpWlk0SXI3RjlrRnk5NkQ3T1o4b0xZNXpqZgo0ZEh4RndIUHFIOERoNkpXc3pY
dUhXMVphM1htbDBQYUh4Q1dSUzBYb2w4V3NISHBOeWdqTUJZZkowb2RWTTg4NVRaMUVsOVNpdUVI
Cm55bkZCZ1NtaUZjOTl1UWQvWURSWnVHdi9BMEh5djd5Ujl0a0xFZEQzQTF1TkpCVzRQK0hKR3Bk
S2tZTDFRNXJVNytvSFZQdE1LS0kKM2lGa1VFc2JPNDVBVmQ3dlAvai83SnRBWlBiNmtvT1Y1bFpp
MkgxUkxjY0d3emRlem5oSmdkME45b2JiMHZuRTQxL1VTV2FmZFdSWgpWR2t3UHVxVGhsN3NDdHpy
Skg4WFkweGN1bStjZkx4MkVBSXdVbk9jYWI0PTwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUw
OURhdGE+PC9kczpLZXlJbmZvPjwvZHM6U2lnbmF0dXJlPjwvc21kOnNpZ25lZE1hcms+
-----END ENCODED SMD-----

View File

@@ -1,101 +0,0 @@
Marks: Essai &amp; évaluation
smdID: 000000821526320384749-65535
U-labels: xn--essai---valuation-itb, xn--essai--valuation-hqb, xn--essai-et-valuation-jwb, xn--essai-etvaluation-itb, xn--essai-valuation-gnb, xn--essaiet-valuation-itb, xn--essaietvaluation-hqb, xn--essaivaluation-fkb
notBefore: 2018-05-14T17:53:04.749Z
notAfter: 2022-08-18T14:46:53.013Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il84MGIx
NGY4MS1mODA0LTQwYjMtOGRjZC1iOTNhNjVhNTc5MTgiPjxzbWQ6aWQ+MDAwMDAwODIxNTI2MzIw
Mzg0NzQ5LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MzowNC43NDlaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDo0Njo1My4wMTNaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxMzkxNTAzMDY3MTg5MTUwMzA2NzE4OS0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPkVzc2FpICZhbXA7IMOpdmFsdWF0aW9uPC9tYXJrOm1hcmtOYW1lPjxtYXJrOmhv
bGRlciBlbnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm9yZz5BZ2VuY2UgZW4gRnJhbmNlPC9tYXJr
Om9yZz48bWFyazphZGRyPjxtYXJrOnN0cmVldD4xMCBBdmVudWUgUm91c3NlYXV4PC9tYXJrOnN0
cmVldD48bWFyazpjaXR5PlZlcnNhaWxsZXM8L21hcms6Y2l0eT48bWFyazpwYz4zMzA4MTwvbWFy
azpwYz48bWFyazpjYz5GUjwvbWFyazpjYz48L21hcms6YWRkcj48L21hcms6aG9sZGVyPjxtYXJr
OmNvbnRhY3QgdHlwZT0iYWdlbnQiPjxtYXJrOm5hbWU+RnJhbmMgTGVicnVuPC9tYXJrOm5hbWU+
PG1hcms6b3JnPkFnZW5jZSBlbiBGcmFuY2U8L21hcms6b3JnPjxtYXJrOmFkZHI+PG1hcms6c3Ry
ZWV0PkF2ZW51ZSBSb3Vzc2VhdXggMTAgPC9tYXJrOnN0cmVldD48bWFyazpjaXR5PlZlcnNhaWxs
ZXM8L21hcms6Y2l0eT48bWFyazpwYz4zMzA4MTwvbWFyazpwYz48bWFyazpjYz5GUjwvbWFyazpj
Yz48L21hcms6YWRkcj48bWFyazp2b2ljZT4rMzMuMTI1NzgxMjUwPC9tYXJrOnZvaWNlPjxtYXJr
OmZheD4rMzMuMTI1NzgxMjUxPC9tYXJrOmZheD48bWFyazplbWFpbD5pbmZvQGFnZW5jZS1lbi1m
cmFuY2UuZnI8L21hcms6ZW1haWw+PC9tYXJrOmNvbnRhY3Q+PG1hcms6bGFiZWw+eG4tLWVzc2Fp
LS0tdmFsdWF0aW9uLWl0YjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tZXNzYWktLXZhbHVh
dGlvbi1ocWI8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLWVzc2FpLWV0LXZhbHVhdGlvbi1q
d2I8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLWVzc2FpLWV0dmFsdWF0aW9uLWl0YjwvbWFy
azpsYWJlbD48bWFyazpsYWJlbD54bi0tZXNzYWktdmFsdWF0aW9uLWduYjwvbWFyazpsYWJlbD48
bWFyazpsYWJlbD54bi0tZXNzYWlldC12YWx1YXRpb24taXRiPC9tYXJrOmxhYmVsPjxtYXJrOmxh
YmVsPnhuLS1lc3NhaWV0dmFsdWF0aW9uLWhxYjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0t
ZXNzYWl2YWx1YXRpb24tZmtiPC9tYXJrOmxhYmVsPjxtYXJrOmdvb2RzQW5kU2VydmljZXM+Z3Vp
dGFyPC9tYXJrOmdvb2RzQW5kU2VydmljZXM+PG1hcms6cmVmTnVtPjEyMzQ8L21hcms6cmVmTnVt
PjxtYXJrOnByb0RhdGU+MjAxMy0wMS0wMVQwMDowMDowMC4wMDBaPC9tYXJrOnByb0RhdGU+PG1h
cms6Y2M+RlI8L21hcms6Y2M+PG1hcms6Y291cnROYW1lPmd1aXRhcmU8L21hcms6Y291cnROYW1l
PjwvbWFyazpjb3VydD48L21hcms6bWFyaz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJZD0iX2E0YTNhZTUyLTgwODQtNGVlYi04M2M5
LTc1ZTQ1ZDQzMDBhMiI+PGRzOlNpZ25lZEluZm8+PGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2Qg
QWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48ZHM6
U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxk
c2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxkczpSZWZlcmVuY2UgVVJJPSIjXzgwYjE0ZjgxLWY4MDQt
NDBiMy04ZGNkLWI5M2E2NWE1NzkxOCI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdv
cml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0
dXJlIi8+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAv
eG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jtcz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRo
bT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZh
bHVlPnpKaDgwMDVSTmtXL3F4YmNHZHUrVXlEaUFaQ1VNRWkwT0xnUW9jZ0FCc1E9PC9kczpEaWdl
c3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI18wNzdjNzM1OS03YWI2
LTQyNDUtOGJiNi0xOWUyNTdmNmU3MTciPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxn
b3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRy
YW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5CTzloVkJUa3dVbDBxZHhUNTl5
aXpjV3VDN1ZIMjIreGovRDZPZitVbnRZPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+
PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZSBJZD0iXzA2OTE3YzM0LTZiMmMtNDdi
ZS04YzA3LWNmMTJhZDkzZDYxNSI+bnRFbHMwT2h4bEFDL0MxVWZwemhRR2xkNHlXZkxRZTdFdDd1
b3JiY0dRTldOOERGZjBNbVpqUnFmaTZWVzYwM2Fwd3dZZWlaTTdDVwpvRi93REhsMkc2a0d1eTBG
QnoyakhPVnVQdG1RNGZJcVdQU24xZUUxQkZSbHpURDlPRm5VTWxPRW9ONDFxMHdGVzQwdTRnMVd0
bU5YCmpWVFJEY1BmejMwWUxCT29lSUFMUHhJSHEwTkRQRmpSNExTNWtzY2J2eGU4d0h3RWNHeGJq
b0tnU0xUTklNeDVTbkwwNFpYSHd0eGgKMGJ5eWRBanFnMU9ja2JhdEVaQ0U0MHFpZ0kwRmdRb0hm
M0tjVkY3UXEwbTFIdXlNS3lwRUVLSFBmejNWcmw1N24wUFVWU1FJd0VpTgpxaEVVMkxhRy8zQndp
YWw1M29GdVZpcTd3VUZyNzVmR2ZQcm14QT09PC9kczpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5m
byBJZD0iXzA3N2M3MzU5LTdhYjYtNDI0NS04YmI2LTE5ZTI1N2Y2ZTcxNyI+PGRzOlg1MDlEYXRh
PjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRk96Q0NCQ09nQXdJQkFnSWdMckFiZXZvYWU1MnkzZjZD
MnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOaFpjd0RRWUpLb1pJaHZjTgpBUUVMQlFBd2ZERUxNQWtH
QTFVRUJoTUNWVk14UERBNkJnTlZCQW9UTTBsdWRHVnlibVYwSUVOdmNuQnZjbUYwYVc5dUlHWnZj
aUJCCmMzTnBaMjVsWkNCT1lXMWxjeUJoYm1RZ1RuVnRZbVZ5Y3pFdk1DMEdBMVVFQXhNbVNVTkJU
azRnVkhKaFpHVnRZWEpySUVOc1pXRnkKYVc1bmFHOTFjMlVnVUdsc2IzUWdRMEV3SGhjTk1UZ3dN
akk0TURBd01EQXdXaGNOTWpNd016QXhNak0xT1RVNVdqQ0JqekVMTUFrRwpBMVVFQmhNQ1FrVXhJ
REFlQmdOVkJBZ1RGMEp5ZFhOelpXeHpMVU5oY0dsMFlXd2dVbVZuYVc5dU1SRXdEd1lEVlFRSEV3
aENjblZ6CmMyVnNjekVSTUE4R0ExVUVDaE1JUkdWc2IybDBkR1V4T0RBMkJnTlZCQU1UTDBsRFFV
NU9JRlJOUTBnZ1FYVjBhRzl5YVhwbFpDQlUKY21Ga1pXMWhjbXNnVUdsc2IzUWdWbUZzYVdSaGRH
OXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQp4bHAzS3BZSFgz
V3lBc0ZoU2szTHdXZm5HbHhuVURGcUZaQTNVb3VNWWovWGlnYk1rTmVFWElqbGtST0tUNE9QR2ZS
eC9MQXlSbFFRCmpDTXY0cWhia2NYMXA3YXI2M2ZscTRTWk5WY2wxNWw3aDB1VDU4RnpTZm5sejB1
NXJrSGZKSW1ENDMrbWFQLzhndjM2RlIyN2pXOFIKOXdZNGhrK1dzNElCMGlGU2Q4U1h2MUtyOHcv
Sm1NUVNEa2l1RytSZklpdWJ3US9meTdFa2o1UVdoUFp3K21NeE5LbkhVTHkzeFl6MgpMd1ZmZnRq
d1V1ZWFjdnFOUkNrTVhsQ2xPQURxZlQ4b1Nab2VEWGVoSHZsUHNMQ2VtR0JvVEt1cnNrSVM2OUYw
eVBFSDVnemUwSCtmCjhGUk9zSW9LU3NWUTM0QjRTL2pvRTY3bnBzSlBUZEtzTlBKVHlRSURBUUFC
bzRJQmt6Q0NBWTh3REFZRFZSMFRBUUgvQkFJd0FEQWQKQmdOVkhRNEVGZ1FVb0ZwWTc2cDV5b05E
Ukd0UXB6VnVSODFVV1Ewd2djWUdBMVVkSXdTQnZqQ0J1NEFVdzYwK3B0WVJBRVdBWERwWApTb3B0
M0RFTm5uR2hnWUNrZmpCOE1Rc3dDUVlEVlFRR0V3SlZVekU4TURvR0ExVUVDaE16U1c1MFpYSnVa
WFFnUTI5eWNHOXlZWFJwCmIyNGdabTl5SUVGemMybG5ibVZrSUU1aGJXVnpJR0Z1WkNCT2RXMWla
WEp6TVM4d0xRWURWUVFERXlaSlEwRk9UaUJVY21Ga1pXMWgKY21zZ1EyeGxZWEpwYm1kb2IzVnpa
U0JRYVd4dmRDQkRRWUlnTHJBYmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTgpo
WGt3RGdZRFZSMFBBUUgvQkFRREFnZUFNRFFHQTFVZEh3UXRNQ3N3S2FBbm9DV0dJMmgwZEhBNkx5
OWpjbXd1YVdOaGJtNHViM0puCkwzUnRZMmhmY0dsc2IzUXVZM0pzTUZFR0ExVWRJQVJLTUVnd0VB
WU9Ld1lCQkFHQ3lSc0JCWU03REFvd05BWUlLd1lCQlFVSEFnRXcKS0RBbUJnZ3JCZ0VGQlFjQ0FS
WWFhSFIwY0hNNkx5OWpZUzVwWTJGdWJpNXZjbWN2Y0dsc2IzUXdEUVlKS29aSWh2Y05BUUVMQlFB
RApnZ0VCQUF1aloySWNSMkRWcnRhUnJBNTllTllDbDR4Y3NKTXU4RFFDSHYyOGZUZmkvQmlaWTRJ
cjdGOWtGeTk2RDdPWjhvTFk1empmCjRkSHhGd0hQcUg4RGg2Sldzelh1SFcxWmEzWG1sMFBhSHhD
V1JTMFhvbDhXc0hIcE55Z2pNQllmSjBvZFZNODg1VFoxRWw5U2l1RUgKbnluRkJnU21pRmM5OXVR
ZC9ZRFJadUd2L0EwSHl2N3lSOXRrTEVkRDNBMXVOSkJXNFArSEpHcGRLa1lMMVE1clU3K29IVlB0
TUtLSQozaUZrVUVzYk80NUFWZDd2UC9qLzdKdEFaUGI2a29PVjVsWmkySDFSTGNjR3d6ZGV6bmhK
Z2QwTjlvYmIwdm5FNDEvVVNXYWZkV1JaClZHa3dQdXFUaGw3c0N0enJKSDhYWTB4Y3VtK2NmTHgy
RUFJd1VuT2NhYjQ9PC9kczpYNTA5Q2VydGlmaWNhdGU+PC9kczpYNTA5RGF0YT48L2RzOktleUlu
Zm8+PC9kczpTaWduYXR1cmU+PC9zbWQ6c2lnbmVkTWFyaz4=
-----END ENCODED SMD-----

View File

@@ -1,102 +0,0 @@
Marks: Марк &amp; записи
smdID: 000000731526320367222-65535
U-labels: xn------5cdd5bials4bfv, xn-----6kcc8ahakq0bft, xn---and--3vef9ckanw2cfz, xn---and-43de2cjamu8bfx, xn----7sbb1agajo6afr, xn--and--43de2cjamu8bfx, xn--and-5cdd5bials4bfv, xn--80aaufaim2afp
notBefore: 2018-05-14T17:52:47.222Z
notAfter: 2022-08-18T14:16:55.554Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il81ZWZi
ZWYxMy0zYjRkLTQ4NDctOGRkMi1hMGRkMzMwM2RkMDEiPjxzbWQ6aWQ+MDAwMDAwNzMxNTI2MzIw
MzY3MjIyLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1Mjo0Ny4yMjJaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDoxNjo1NS41NTRaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxNDExNTAzMDY1MzU1MTUwMzA2NTM1NS0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPtCc0LDRgNC6ICZhbXA7INC30LDQv9C40YHQuDwvbWFyazptYXJrTmFtZT48bWFy
azpob2xkZXIgZW50aXRsZW1lbnQ9Im93bmVyIj48bWFyazpvcmc+0JDQs9C10L3RgtGB0YLQstC+
PC9tYXJrOm9yZz48bWFyazphZGRyPjxtYXJrOnN0cmVldD7Qn9GA0L7RgdC/0LXQutGCINCS0LXR
gNC90LDQtNGB0LrQvtCz0L4gMTU8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+0JzQvtGB0LrQstCw
PC9tYXJrOmNpdHk+PG1hcms6cGM+MTE3NDg1PC9tYXJrOnBjPjxtYXJrOmNjPlJVPC9tYXJrOmNj
PjwvbWFyazphZGRyPjwvbWFyazpob2xkZXI+PG1hcms6Y29udGFjdCB0eXBlPSJhZ2VudCI+PG1h
cms6bmFtZT7QndCw0YLQsNC70YzRjyDQkNC90YLQvtC90L7QstCwPC9tYXJrOm5hbWU+PG1hcms6
b3JnPtCQ0LPQtdC90YLRgdGC0LLQvjwvbWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpzdHJlZXQ+
0J/RgNC+0YHQv9C10LrRgiDQktC10YDQvdCw0LTRgdC60L7Qs9C+IDE1PC9tYXJrOnN0cmVldD48
bWFyazpjaXR5PtCc0L7RgdC60LLQsDwvbWFyazpjaXR5PjxtYXJrOnBjPjExNzQ4NTwvbWFyazpw
Yz48bWFyazpjYz5SVTwvbWFyazpjYz48L21hcms6YWRkcj48bWFyazp2b2ljZT4rNy45MTg4MjIx
Njc0PC9tYXJrOnZvaWNlPjxtYXJrOmZheD4rNy45MTg4MjIxNjczPC9tYXJrOmZheD48bWFyazpl
bWFpbD5pbmZvQGFnZW5jeS5ydTwvbWFyazplbWFpbD48L21hcms6Y29udGFjdD48bWFyazpsYWJl
bD54bi0tLS0tLTVjZGQ1YmlhbHM0YmZ2PC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS0tLS02
a2NjOGFoYWtxMGJmdDwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tLWFuZC0tM3ZlZjlja2Fu
dzJjZno8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLS1hbmQtNDNkZTJjamFtdThiZng8L21h
cms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLS0tN3NiYjFhZ2FqbzZhZnI8L21hcms6bGFiZWw+PG1h
cms6bGFiZWw+eG4tLWFuZC0tNDNkZTJjamFtdThiZng8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+
eG4tLWFuZC01Y2RkNWJpYWxzNGJmdjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tODBhYXVm
YWltMmFmcDwvbWFyazpsYWJlbD48bWFyazpnb29kc0FuZFNlcnZpY2VzPtCz0LjRgtCw0YDQsCA8
L21hcms6Z29vZHNBbmRTZXJ2aWNlcz48bWFyazpyZWZOdW0+MTIzNDwvbWFyazpyZWZOdW0+PG1h
cms6cHJvRGF0ZT4yMDEzLTAxLTAxVDAwOjAwOjAwLjAwMFo8L21hcms6cHJvRGF0ZT48bWFyazpj
Yz5VUzwvbWFyazpjYz48bWFyazpjb3VydE5hbWU+SG92ZTwvbWFyazpjb3VydE5hbWU+PC9tYXJr
OmNvdXJ0PjwvbWFyazptYXJrPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvMDkveG1sZHNpZyMiIElkPSJfZmQyNjk0MDktMGVhMy00ODJiLWIyMDktMDNlZmFm
MTVhMTQ3Ij48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0
aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1
cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9y
ZSNyc2Etc2hhMjU2Ii8+PGRzOlJlZmVyZW5jZSBVUkk9IiNfNWVmYmVmMTMtM2I0ZC00ODQ3LThk
ZDItYTBkZDMzMDNkZDAxIj48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0i
aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48
ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhj
LWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+bEpl
RHVaWDVIalB1VGZZRm9iOXMxdXNTVU96d2cvUGVaaDc4cjQ1V1Bjaz08L2RzOkRpZ2VzdFZhbHVl
PjwvZHM6UmVmZXJlbmNlPjxkczpSZWZlcmVuY2UgVVJJPSIjXzM2ZmY4ODQ5LTAzMTQtNDgwZC1i
YTg4LWFiNWI4NGU2OGU2MiI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jt
cz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94
bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZhbHVlPlJGWmZtb3ZVeW9qaDJTSU0rQXI0Snl6bkgw
MGpPMkI0aGlNWnNyVFhtODA9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48L2RzOlNp
Z25lZEluZm8+PGRzOlNpZ25hdHVyZVZhbHVlIElkPSJfNTRiMmQ4MDctZGZmNC00MDY5LTg2NWQt
NWU1YjdiOGQ5OGVmIj5GK1o0V3RZcjlCYk5WWHJlViswSzBpWDVQbnFPWjg3OHRhU0xDNjdzQ1ht
OWFINVRDNFhHTnBxVjlUK2RrbU9tVUNJQ0lmTE5PVlZxCkhWMlNZNTR4T2U2NFNUaEtKK3pWOXJo
RUVBK1NvZVFLSHVib3VMY0dMK3BYUmpWMVBETnBWeHdrUE45QnhGT21HbEh6anVxTHhtcXQKSCtT
M1J4OFdmT0tXc3lURTdwMTJhd0g2dFVoYXBqV1A3U29PVTVxOExLUU9hdWJaaW4vYklPUHN1RTcy
bmZIOTRKZnQ5REdLb0doUgpSaE81bVRUcUdSQlJIQjFqbU5sK1hmUGdSNHM0OGc0Uk01WTEydnIx
NmRFMk14RDV4TEczZUVlVk9zS1p1OWpnVytPMXd3djZxbDZlClBYdFVyU0o4dTVKWjYrem5RNmdI
bm5oMVp6V0xYVGZYYlhYa293PT08L2RzOlNpZ25hdHVyZVZhbHVlPjxkczpLZXlJbmZvIElkPSJf
MzZmZjg4NDktMDMxNC00ODBkLWJhODgtYWI1Yjg0ZTY4ZTYyIj48ZHM6WDUwOURhdGE+PGRzOlg1
MDlDZXJ0aWZpY2F0ZT5NSUlGT3pDQ0JDT2dBd0lCQWdJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24z
cDdYSm0wVDAyRm9neEtDZk5oWmN3RFFZSktvWklodmNOCkFRRUxCUUF3ZkRFTE1Ba0dBMVVFQmhN
Q1ZWTXhQREE2QmdOVkJBb1RNMGx1ZEdWeWJtVjBJRU52Y25CdmNtRjBhVzl1SUdadmNpQkIKYzNO
cFoyNWxaQ0JPWVcxbGN5QmhibVFnVG5WdFltVnljekV2TUMwR0ExVUVBeE1tU1VOQlRrNGdWSEpo
WkdWdFlYSnJJRU5zWldGeQphVzVuYUc5MWMyVWdVR2xzYjNRZ1EwRXdIaGNOTVRnd01qSTRNREF3
TURBd1doY05Nak13TXpBeE1qTTFPVFU1V2pDQmp6RUxNQWtHCkExVUVCaE1DUWtVeElEQWVCZ05W
QkFnVEYwSnlkWE56Wld4ekxVTmhjR2wwWVd3Z1VtVm5hVzl1TVJFd0R3WURWUVFIRXdoQ2NuVnoK
YzJWc2N6RVJNQThHQTFVRUNoTUlSR1ZzYjJsMGRHVXhPREEyQmdOVkJBTVRMMGxEUVU1T0lGUk5R
MGdnUVhWMGFHOXlhWHBsWkNCVQpjbUZrWlcxaGNtc2dVR2xzYjNRZ1ZtRnNhV1JoZEc5eU1JSUJJ
akFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBCnhscDNLcFlIWDNXeUFzRmhT
azNMd1dmbkdseG5VREZxRlpBM1VvdU1Zai9YaWdiTWtOZUVYSWpsa1JPS1Q0T1BHZlJ4L0xBeVJs
UVEKakNNdjRxaGJrY1gxcDdhcjYzZmxxNFNaTlZjbDE1bDdoMHVUNThGelNmbmx6MHU1cmtIZkpJ
bUQ0MyttYVAvOGd2MzZGUjI3alc4Ugo5d1k0aGsrV3M0SUIwaUZTZDhTWHYxS3I4dy9KbU1RU0Rr
aXVHK1JmSWl1YndRL2Z5N0VrajVRV2hQWncrbU14TktuSFVMeTN4WXoyCkx3VmZmdGp3VXVlYWN2
cU5SQ2tNWGxDbE9BRHFmVDhvU1pvZURYZWhIdmxQc0xDZW1HQm9US3Vyc2tJUzY5RjB5UEVINWd6
ZTBIK2YKOEZST3NJb0tTc1ZRMzRCNFMvam9FNjducHNKUFRkS3NOUEpUeVFJREFRQUJvNElCa3pD
Q0FZOHdEQVlEVlIwVEFRSC9CQUl3QURBZApCZ05WSFE0RUZnUVVvRnBZNzZwNXlvTkRSR3RRcHpW
dVI4MVVXUTB3Z2NZR0ExVWRJd1NCdmpDQnU0QVV3NjArcHRZUkFFV0FYRHBYClNvcHQzREVObm5H
aGdZQ2tmakI4TVFzd0NRWURWUVFHRXdKVlV6RThNRG9HQTFVRUNoTXpTVzUwWlhKdVpYUWdRMjl5
Y0c5eVlYUnAKYjI0Z1ptOXlJRUZ6YzJsbmJtVmtJRTVoYldWeklHRnVaQ0JPZFcxaVpYSnpNUzh3
TFFZRFZRUURFeVpKUTBGT1RpQlVjbUZrWlcxaApjbXNnUTJ4bFlYSnBibWRvYjNWelpTQlFhV3h2
ZENCRFFZSWdMckFiZXZvYWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOCmhYa3dEZ1lE
VlIwUEFRSC9CQVFEQWdlQU1EUUdBMVVkSHdRdE1Dc3dLYUFub0NXR0kyaDBkSEE2THk5amNtd3Vh
V05oYm00dWIzSm4KTDNSdFkyaGZjR2xzYjNRdVkzSnNNRkVHQTFVZElBUktNRWd3RUFZT0t3WUJC
QUdDeVJzQkJZTTdEQW93TkFZSUt3WUJCUVVIQWdFdwpLREFtQmdnckJnRUZCUWNDQVJZYWFIUjBj
SE02THk5allTNXBZMkZ1Ymk1dmNtY3ZjR2xzYjNRd0RRWUpLb1pJaHZjTkFRRUxCUUFECmdnRUJB
QXVqWjJJY1IyRFZydGFSckE1OWVOWUNsNHhjc0pNdThEUUNIdjI4ZlRmaS9CaVpZNElyN0Y5a0Z5
OTZEN09aOG9MWTV6amYKNGRIeEZ3SFBxSDhEaDZKV3N6WHVIVzFaYTNYbWwwUGFIeENXUlMwWG9s
OFdzSEhwTnlnak1CWWZKMG9kVk04ODVUWjFFbDlTaXVFSApueW5GQmdTbWlGYzk5dVFkL1lEUlp1
R3YvQTBIeXY3eVI5dGtMRWREM0ExdU5KQlc0UCtISkdwZEtrWUwxUTVyVTcrb0hWUHRNS0tJCjNp
RmtVRXNiTzQ1QVZkN3ZQL2ovN0p0QVpQYjZrb09WNWxaaTJIMVJMY2NHd3pkZXpuaEpnZDBOOW9i
YjB2bkU0MS9VU1dhZmRXUloKVkdrd1B1cVRobDdzQ3R6ckpIOFhZMHhjdW0rY2ZMeDJFQUl3VW5P
Y2FiND08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2Rz
OlNpZ25hdHVyZT48L3NtZDpzaWduZWRNYXJrPg==
-----END ENCODED SMD-----

View File

@@ -1,95 +0,0 @@
Marks: الاختبار &amp; لتقييم
smdID: 000000911526320398360-65535
U-labels: xn------nzeaagpf7azb2ppajr3fa, xn-----btdaafne4a7azpoaiq8ea, xn----ymcaaeld1a4a6onahp3ea, xn--mgbaadjcy1a8mmago8da
notBefore: 2018-05-14T17:53:18.360Z
notAfter: 2022-08-21T08:59:34.305Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il9mN2Zm
YTA1ZC1lZTkwLTQ3OWMtOTkzNC1hZmI2MWY5MTMxNWUiPjxzbWQ6aWQ+MDAwMDAwOTExNTI2MzIw
Mzk4MzYwLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MzoxOC4zNjBaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODo1OTozNC4zMDVaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxNDIxNTAzMzA1NTg0MTUwMzMwNTU4NC0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPtin2YTYp9iu2KrYqNin2LEgJmFtcDsg2YTYqtmC2YrZitmFPC9tYXJrOm1hcmtO
YW1lPjxtYXJrOmhvbGRlciBlbnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm5hbWU+2YXZh9mG2K/Y
syDYp9mE2YXYudmE2YjZhdin2KrZitipPC9tYXJrOm5hbWU+PG1hcms6b3JnPtin2K7Yqtio2KfY
sTwvbWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpzdHJlZXQ+2KzYudmB2LEg2KfYqNmGINiz2YrZ
htin2KEgNzU8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+2YXZg9mG2KfYszwvbWFyazpjaXR5Pjxt
YXJrOnBjPjI5MDA8L21hcms6cGM+PG1hcms6Y2M+TUE8L21hcms6Y2M+PC9tYXJrOmFkZHI+PG1h
cms6dm9pY2U+KzIxMi41MjI1MzkwNDA8L21hcms6dm9pY2U+PG1hcms6ZmF4PisyMTIuNTIyNTM5
MDQxPC9tYXJrOmZheD48bWFyazplbWFpbD5pbmZvQGV4YW1wbGUuZXhhbXBsZTwvbWFyazplbWFp
bD48L21hcms6aG9sZGVyPjxtYXJrOmxhYmVsPnhuLS0tLS0tbnplYWFncGY3YXpiMnBwYWpyM2Zh
PC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS0tLS1idGRhYWZuZTRhN2F6cG9haXE4ZWE8L21h
cms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLS0teW1jYWFlbGQxYTRhNm9uYWhwM2VhPC9tYXJrOmxh
YmVsPjxtYXJrOmxhYmVsPnhuLS1tZ2JhYWRqY3kxYThtbWFnbzhkYTwvbWFyazpsYWJlbD48bWFy
azpnb29kc0FuZFNlcnZpY2VzPti62YrYqtin2LE8L21hcms6Z29vZHNBbmRTZXJ2aWNlcz48bWFy
azpyZWZOdW0+MTk4PC9tYXJrOnJlZk51bT48bWFyazpwcm9EYXRlPjIwMTUtMDktMTVUMDA6MDA6
MDAuMDAwWjwvbWFyazpwcm9EYXRlPjxtYXJrOmNjPk1BPC9tYXJrOmNjPjxtYXJrOmNvdXJ0TmFt
ZT7Yp9mE2K/Yp9ixINin2YTYqNmK2LbYp9ihPC9tYXJrOmNvdXJ0TmFtZT48L21hcms6Y291cnQ+
PC9tYXJrOm1hcms+PGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MC8wOS94bWxkc2lnIyIgSWQ9Il9jZjNkMjI3Yy1kNmU4LTQzZGEtYmM4NC02MGViNzRiOWQ5YjUi
PjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PGRzOlNpZ25hdHVyZU1ldGhv
ZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1z
aGEyNTYiLz48ZHM6UmVmZXJlbmNlIFVSST0iI19mN2ZmYTA1ZC1lZTkwLTQ3OWMtOTkzNC1hZmI2
MWY5MTMxNWUiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFu
c2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMi
Lz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT53UTFJeXFUMTdk
MStoTkg3aHBKUVQxUVRzS05QWHNUaC85TVJVb0E4a09nPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpS
ZWZlcmVuY2U+PGRzOlJlZmVyZW5jZSBVUkk9IiNfMjM4MDNmMTUtZWZiOS00NTM5LTg3ZjYtZGFj
MDNhYjg3NTZlIj48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDov
L3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpE
aWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNz
aGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+OGh2S3BCNkVLeEZMbWU5QThKMnJqVmVmU0FBcGpZcmdh
Y29ORm4wNnlFbz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5m
bz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9Il8zZWZkNjM4MS1hYTAxLTQ3ZDYtODZkNy0wNzIzYTJm
MDYxYTciPmd3NVA3OFY5Sm9acmFBWk5kMEpmVEo2d2s3Qnp0YXAyREJmSzl3cng4YStJT3c4MVNl
a3ZBZU9MTU5aRE84LzFBY0xjVjdZVXRxRDkKMG4yUC9BYzdiOG9FdmdMcHgyTlA5eWNLNHNVekJi
WUZRb2Y3VHIvZHIzZmRFN3J1Ymx1cStaRWR0QlFuck9KUk9rakZsMkxOU01JNQp6Nlk2NDZsVnVx
dy9IQWpPalB1ZithUVQ5S3VGTkFFMi9mTTg0cWFDNkx1ZE9EWmpHVlkreWRzUHo3eUlXa1ZWaUNl
OGtMV1h3cWYzCktXZWwyQ0dYSjg3c3FJb3dtV1EvQ3hKWnJ3SXRKRk43djhLNmlWTG1Tam1zQldq
QlE3UHNHaHR3bkk1ck1yaFVycXFkRE9JUzNGUmoKdlBCSDJlRktna0pEK1E5ZTFPaEtOQlZySGFU
WHZSTkRkUXlOdmc9PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8gSWQ9Il8yMzgwM2Yx
NS1lZmI5LTQ1MzktODdmNi1kYWMwM2FiODc1NmUiPjxkczpYNTA5RGF0YT48ZHM6WDUwOUNlcnRp
ZmljYXRlPk1JSUZPekNDQkNPZ0F3SUJBZ0lnTHJBYmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBU
MDJGb2d4S0NmTmhaY3dEUVlKS29aSWh2Y04KQVFFTEJRQXdmREVMTUFrR0ExVUVCaE1DVlZNeFBE
QTZCZ05WQkFvVE0wbHVkR1Z5Ym1WMElFTnZjbkJ2Y21GMGFXOXVJR1p2Y2lCQgpjM05wWjI1bFpD
Qk9ZVzFsY3lCaGJtUWdUblZ0WW1WeWN6RXZNQzBHQTFVRUF4TW1TVU5CVGs0Z1ZISmhaR1Z0WVhK
cklFTnNaV0Z5CmFXNW5hRzkxYzJVZ1VHbHNiM1FnUTBFd0hoY05NVGd3TWpJNE1EQXdNREF3V2hj
Tk1qTXdNekF4TWpNMU9UVTVXakNCanpFTE1Ba0cKQTFVRUJoTUNRa1V4SURBZUJnTlZCQWdURjBK
eWRYTnpaV3h6TFVOaGNHbDBZV3dnVW1WbmFXOXVNUkV3RHdZRFZRUUhFd2hDY25WegpjMlZzY3pF
Uk1BOEdBMVVFQ2hNSVJHVnNiMmwwZEdVeE9EQTJCZ05WQkFNVEwwbERRVTVPSUZSTlEwZ2dRWFYw
YUc5eWFYcGxaQ0JVCmNtRmtaVzFoY21zZ1VHbHNiM1FnVm1Gc2FXUmhkRzl5TUlJQklqQU5CZ2tx
aGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEKeGxwM0twWUhYM1d5QXNGaFNrM0x3V2Zu
R2x4blVERnFGWkEzVW91TVlqL1hpZ2JNa05lRVhJamxrUk9LVDRPUEdmUngvTEF5UmxRUQpqQ012
NHFoYmtjWDFwN2FyNjNmbHE0U1pOVmNsMTVsN2gwdVQ1OEZ6U2ZubHowdTVya0hmSkltRDQzK21h
UC84Z3YzNkZSMjdqVzhSCjl3WTRoaytXczRJQjBpRlNkOFNYdjFLcjh3L0ptTVFTRGtpdUcrUmZJ
aXVid1EvZnk3RWtqNVFXaFBadyttTXhOS25IVUx5M3hZejIKTHdWZmZ0andVdWVhY3ZxTlJDa01Y
bENsT0FEcWZUOG9TWm9lRFhlaEh2bFBzTENlbUdCb1RLdXJza0lTNjlGMHlQRUg1Z3plMEgrZgo4
RlJPc0lvS1NzVlEzNEI0Uy9qb0U2N25wc0pQVGRLc05QSlR5UUlEQVFBQm80SUJrekNDQVk4d0RB
WURWUjBUQVFIL0JBSXdBREFkCkJnTlZIUTRFRmdRVW9GcFk3NnA1eW9ORFJHdFFwelZ1UjgxVVdR
MHdnY1lHQTFVZEl3U0J2akNCdTRBVXc2MCtwdFlSQUVXQVhEcFgKU29wdDNERU5ubkdoZ1lDa2Zq
QjhNUXN3Q1FZRFZRUUdFd0pWVXpFOE1Eb0dBMVVFQ2hNelNXNTBaWEp1WlhRZ1EyOXljRzl5WVhS
cApiMjRnWm05eUlFRnpjMmxuYm1Wa0lFNWhiV1Z6SUdGdVpDQk9kVzFpWlhKek1TOHdMUVlEVlFR
REV5WkpRMEZPVGlCVWNtRmtaVzFoCmNtc2dRMnhsWVhKcGJtZG9iM1Z6WlNCUWFXeHZkQ0JEUVlJ
Z0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdYSm0wVDAyRm9neEtDZk4KaFhrd0RnWURWUjBQQVFI
L0JBUURBZ2VBTURRR0ExVWRId1F0TUNzd0thQW5vQ1dHSTJoMGRIQTZMeTlqY213dWFXTmhibTR1
YjNKbgpMM1J0WTJoZmNHbHNiM1F1WTNKc01GRUdBMVVkSUFSS01FZ3dFQVlPS3dZQkJBR0N5UnNC
QllNN0RBb3dOQVlJS3dZQkJRVUhBZ0V3CktEQW1CZ2dyQmdFRkJRY0NBUllhYUhSMGNITTZMeTlq
WVM1cFkyRnViaTV2Y21jdmNHbHNiM1F3RFFZSktvWklodmNOQVFFTEJRQUQKZ2dFQkFBdWpaMklj
UjJEVnJ0YVJyQTU5ZU5ZQ2w0eGNzSk11OERRQ0h2MjhmVGZpL0JpWlk0SXI3RjlrRnk5NkQ3T1o4
b0xZNXpqZgo0ZEh4RndIUHFIOERoNkpXc3pYdUhXMVphM1htbDBQYUh4Q1dSUzBYb2w4V3NISHBO
eWdqTUJZZkowb2RWTTg4NVRaMUVsOVNpdUVICm55bkZCZ1NtaUZjOTl1UWQvWURSWnVHdi9BMEh5
djd5Ujl0a0xFZEQzQTF1TkpCVzRQK0hKR3BkS2tZTDFRNXJVNytvSFZQdE1LS0kKM2lGa1VFc2JP
NDVBVmQ3dlAvai83SnRBWlBiNmtvT1Y1bFppMkgxUkxjY0d3emRlem5oSmdkME45b2JiMHZuRTQx
L1VTV2FmZFdSWgpWR2t3UHVxVGhsN3NDdHpySkg4WFkweGN1bStjZkx4MkVBSXdVbk9jYWI0PTwv
ZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjwvZHM6U2lnbmF0
dXJlPjwvc21kOnNpZ25lZE1hcms+
-----END ENCODED SMD-----

View File

@@ -1,93 +0,0 @@
Marks: 证明&amp;标志
smdID: 000000701526320361385-65535
U-labels: xn----z33bn7p06br59e, xn--and-qy3f87yx4cc34g, xn--m6t41lkubhz2e
notBefore: 2018-05-14T17:52:41.385Z
notAfter: 2022-08-21T08:12:01.925Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8yNDI5
NTA5NC0zN2U3LTQwOWQtODM1OS01ZTI1ZjFhNzkxYjQiPjxzbWQ6aWQ+MDAwMDAwNzAxNTI2MzIw
MzYxMzg1LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1Mjo0MS4zODVaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODoxMjowMS45MjVaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxNDUxNTAzMDY0NjA2MTUwMzA2NDYwNi0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPuivgeaYjiZhbXA75qCH5b+XPC9tYXJrOm1hcmtOYW1lPjxtYXJrOmhvbGRlciBl
bnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm5hbWU+5p2O5bCP5pa5PC9tYXJrOm5hbWU+PG1hcms6
b3JnPua1i+ivlTwvbWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpzdHJlZXQ+6aaZ5riv5Lic6Lev
NuWPt++8jDXlj7fmpbzvvIw45Y+35a6kIDwvbWFyazpzdHJlZXQ+PG1hcms6Y2l0eT7pnZLlspvl
uII8L21hcms6Y2l0eT48bWFyazpwYz4xMDAwPC9tYXJrOnBjPjxtYXJrOmNjPkNOPC9tYXJrOmNj
PjwvbWFyazphZGRyPjxtYXJrOnZvaWNlPis4Ni4xMDg0NjU3MTczPC9tYXJrOnZvaWNlPjxtYXJr
OmZheD4rODYuMTA4NDY1NzE3MzwvbWFyazpmYXg+PG1hcms6ZW1haWw+aW5mb0BleGFtcGxlLmV4
YW1wbGU8L21hcms6ZW1haWw+PC9tYXJrOmhvbGRlcj48bWFyazpsYWJlbD54bi0tLS16MzNibjdw
MDZicjU5ZTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tYW5kLXF5M2Y4N3l4NGNjMzRnPC9t
YXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1tNnQ0MWxrdWJoejJlPC9tYXJrOmxhYmVsPjxtYXJr
Omdvb2RzQW5kU2VydmljZXM+IOWQieS7ljwvbWFyazpnb29kc0FuZFNlcnZpY2VzPjxtYXJrOnJl
Zk51bT4xMjM0PC9tYXJrOnJlZk51bT48bWFyazpwcm9EYXRlPjIwMTMtMDEtMDFUMDA6MDA6MDAu
MDAwWjwvbWFyazpwcm9EYXRlPjxtYXJrOmNjPlVTPC9tYXJrOmNjPjxtYXJrOmNvdXJ0TmFtZT5U
ZXN0IENvdXJ0PC9tYXJrOmNvdXJ0TmFtZT48L21hcms6Y291cnQ+PC9tYXJrOm1hcms+PGRzOlNp
Z25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIgSWQ9
Il9hM2YzMjFiOC05OTQ3LTQ3OTItOWM4OS03ZTk5OTNkYTczNmIiPjxkczpTaWduZWRJbmZvPjxk
czpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS8xMC94bWwtZXhjLWMxNG4jIi8+PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6
Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEyNTYiLz48ZHM6UmVmZXJl
bmNlIFVSST0iI18yNDI5NTA5NC0zN2U3LTQwOWQtODM1OS01ZTI1ZjFhNzkxYjQiPjxkczpUcmFu
c2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5
L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+
PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1s
ZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT50Z1MwY293eFdGdTk4dVcrSjNydjd4WndXZVRC
cDdja0lsaUJodUtNY20wPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PGRzOlJlZmVy
ZW5jZSBVUkk9IiNfNTQ1MDk4N2YtNjYwYS00OTE3LWI3NTktM2ZhNDczYjhmNTBiIj48ZHM6VHJh
bnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8x
MC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3Jp
dGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0
VmFsdWU+UEZKUEN3ZGEraE9YYXl1ZStjbEM5VjYwaFNUS3Q1cDdNRGRzZzcram1Saz08L2RzOkRp
Z2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFs
dWUgSWQ9Il81ZjE3M2ZmNy1hY2JmLTRiM2MtOGUxYy1lNjNlYTFlODZjNDAiPlJKMWQ4L0V3Znd6
cFJPYytsNTVVY0lKb2wwUEZIZnBuVEZDeXE4Y3NkVng0TUJjN1AwNXVuazlSbU5wVVF0ejJTekQ3
NDArUWdGWnIKc2VUdTI4aWFqQTBNYnpDY2N3NThERlY0MkhBUkJMYjFJaVZnRHBBRWVtbVlRd3VO
eFpjQzE3eHg3QkIzeXhrTXd0TDNnSnBmQkd3TApYMEdTamRBQjRSWkVVMDgrQnl5ajdmMGErdkFB
NmZHdGU2MU1sUGhpdElic2JKMEZRUkVxSk1Mb28xTnRLSEM1ekJveENEc3dVQnFYClhmeDduamgy
UmFRWGRTNmt0bjdNcW5PQko1eFRmTTJ4a2V0d2R3emkzY1FlN2ZNOXkvQy8wbytaU1VZOWRucmh6
cUc5N2ZBL0R4UDgKY09Lekx3YTlrclVTOERXWVhQc1hUdTJjek5XNUdwcENrWlJPWWc9PTwvZHM6
U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8gSWQ9Il81NDUwOTg3Zi02NjBhLTQ5MTctYjc1OS0z
ZmE0NzNiOGY1MGIiPjxkczpYNTA5RGF0YT48ZHM6WDUwOUNlcnRpZmljYXRlPk1JSUZPekNDQkNP
Z0F3SUJBZ0lnTHJBYmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTmhaY3dEUVlK
S29aSWh2Y04KQVFFTEJRQXdmREVMTUFrR0ExVUVCaE1DVlZNeFBEQTZCZ05WQkFvVE0wbHVkR1Z5
Ym1WMElFTnZjbkJ2Y21GMGFXOXVJR1p2Y2lCQgpjM05wWjI1bFpDQk9ZVzFsY3lCaGJtUWdUblZ0
WW1WeWN6RXZNQzBHQTFVRUF4TW1TVU5CVGs0Z1ZISmhaR1Z0WVhKcklFTnNaV0Z5CmFXNW5hRzkx
YzJVZ1VHbHNiM1FnUTBFd0hoY05NVGd3TWpJNE1EQXdNREF3V2hjTk1qTXdNekF4TWpNMU9UVTVX
akNCanpFTE1Ba0cKQTFVRUJoTUNRa1V4SURBZUJnTlZCQWdURjBKeWRYTnpaV3h6TFVOaGNHbDBZ
V3dnVW1WbmFXOXVNUkV3RHdZRFZRUUhFd2hDY25WegpjMlZzY3pFUk1BOEdBMVVFQ2hNSVJHVnNi
MmwwZEdVeE9EQTJCZ05WQkFNVEwwbERRVTVPSUZSTlEwZ2dRWFYwYUc5eWFYcGxaQ0JVCmNtRmta
VzFoY21zZ1VHbHNiM1FnVm1Gc2FXUmhkRzl5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FR
OEFNSUlCQ2dLQ0FRRUEKeGxwM0twWUhYM1d5QXNGaFNrM0x3V2ZuR2x4blVERnFGWkEzVW91TVlq
L1hpZ2JNa05lRVhJamxrUk9LVDRPUEdmUngvTEF5UmxRUQpqQ012NHFoYmtjWDFwN2FyNjNmbHE0
U1pOVmNsMTVsN2gwdVQ1OEZ6U2ZubHowdTVya0hmSkltRDQzK21hUC84Z3YzNkZSMjdqVzhSCjl3
WTRoaytXczRJQjBpRlNkOFNYdjFLcjh3L0ptTVFTRGtpdUcrUmZJaXVid1EvZnk3RWtqNVFXaFBa
dyttTXhOS25IVUx5M3hZejIKTHdWZmZ0andVdWVhY3ZxTlJDa01YbENsT0FEcWZUOG9TWm9lRFhl
aEh2bFBzTENlbUdCb1RLdXJza0lTNjlGMHlQRUg1Z3plMEgrZgo4RlJPc0lvS1NzVlEzNEI0Uy9q
b0U2N25wc0pQVGRLc05QSlR5UUlEQVFBQm80SUJrekNDQVk4d0RBWURWUjBUQVFIL0JBSXdBREFk
CkJnTlZIUTRFRmdRVW9GcFk3NnA1eW9ORFJHdFFwelZ1UjgxVVdRMHdnY1lHQTFVZEl3U0J2akNC
dTRBVXc2MCtwdFlSQUVXQVhEcFgKU29wdDNERU5ubkdoZ1lDa2ZqQjhNUXN3Q1FZRFZRUUdFd0pW
VXpFOE1Eb0dBMVVFQ2hNelNXNTBaWEp1WlhRZ1EyOXljRzl5WVhScApiMjRnWm05eUlFRnpjMmxu
Ym1Wa0lFNWhiV1Z6SUdGdVpDQk9kVzFpWlhKek1TOHdMUVlEVlFRREV5WkpRMEZPVGlCVWNtRmta
VzFoCmNtc2dRMnhsWVhKcGJtZG9iM1Z6WlNCUWFXeHZkQ0JEUVlJZ0xyQWJldm9hZTUyeTNmNkMy
dEIwU24zcDdYSm0wVDAyRm9neEtDZk4KaFhrd0RnWURWUjBQQVFIL0JBUURBZ2VBTURRR0ExVWRI
d1F0TUNzd0thQW5vQ1dHSTJoMGRIQTZMeTlqY213dWFXTmhibTR1YjNKbgpMM1J0WTJoZmNHbHNi
M1F1WTNKc01GRUdBMVVkSUFSS01FZ3dFQVlPS3dZQkJBR0N5UnNCQllNN0RBb3dOQVlJS3dZQkJR
VUhBZ0V3CktEQW1CZ2dyQmdFRkJRY0NBUllhYUhSMGNITTZMeTlqWVM1cFkyRnViaTV2Y21jdmNH
bHNiM1F3RFFZSktvWklodmNOQVFFTEJRQUQKZ2dFQkFBdWpaMkljUjJEVnJ0YVJyQTU5ZU5ZQ2w0
eGNzSk11OERRQ0h2MjhmVGZpL0JpWlk0SXI3RjlrRnk5NkQ3T1o4b0xZNXpqZgo0ZEh4RndIUHFI
OERoNkpXc3pYdUhXMVphM1htbDBQYUh4Q1dSUzBYb2w4V3NISHBOeWdqTUJZZkowb2RWTTg4NVRa
MUVsOVNpdUVICm55bkZCZ1NtaUZjOTl1UWQvWURSWnVHdi9BMEh5djd5Ujl0a0xFZEQzQTF1TkpC
VzRQK0hKR3BkS2tZTDFRNXJVNytvSFZQdE1LS0kKM2lGa1VFc2JPNDVBVmQ3dlAvai83SnRBWlBi
NmtvT1Y1bFppMkgxUkxjY0d3emRlem5oSmdkME45b2JiMHZuRTQxL1VTV2FmZFdSWgpWR2t3UHVx
VGhsN3NDdHpySkg4WFkweGN1bStjZkx4MkVBSXdVbk9jYWI0PTwvZHM6WDUwOUNlcnRpZmljYXRl
PjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjwvZHM6U2lnbmF0dXJlPjwvc21kOnNpZ25lZE1h
cms+
-----END ENCODED SMD-----

View File

@@ -1,96 +0,0 @@
Marks: Test &amp; Validate
smdID: 000000501526320343199-65535
U-labels: test---validate, test--validate, test-and-validate, test-andvalidate, test-validate, testand-validate, testandvalidate, testvalidate
notBefore: 2018-05-14T17:52:23.199Z
notAfter: 2022-08-21T08:12:19.525Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il81NmY5
ZjZiMC1kZTAxLTQyYzctYTRlNS1mNTdiZmQ5M2Q5NDQiPjxzbWQ6aWQ+MDAwMDAwNTAxNTI2MzIw
MzQzMTk5LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MjoyMy4xOTlaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODoxMjoxOS41MjVaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxMzYxNTAzMDU2NDc0MTUwMzA1NjQ3NC0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPlRlc3QgJmFtcDsgVmFsaWRhdGU8L21hcms6bWFya05hbWU+PG1hcms6aG9sZGVy
IGVudGl0bGVtZW50PSJvd25lciI+PG1hcms6bmFtZT5GcmFuayBXaGl0ZTwvbWFyazpuYW1lPjxt
YXJrOm9yZz5UZXN0IE9yZ2FuaXphdGlvbjwvbWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpzdHJl
ZXQ+V2VzdCBBcnF1ZXMgQXZlbnVlIDEwMSA8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+U3Vubnl2
YWxlPC9tYXJrOmNpdHk+PG1hcms6c3A+Q0E8L21hcms6c3A+PG1hcms6cGM+MTAwMjMtMzI0MTwv
bWFyazpwYz48bWFyazpjYz5VUzwvbWFyazpjYz48L21hcms6YWRkcj48bWFyazp2b2ljZT4rMS4z
MDE0NTU2NjAwPC9tYXJrOnZvaWNlPjxtYXJrOmZheD4rMS4zMDE0NTU2NjAxPC9tYXJrOmZheD48
bWFyazplbWFpbD5pbmZvQGV4YW1wbGUuZXhhbXBsZTwvbWFyazplbWFpbD48L21hcms6aG9sZGVy
PjxtYXJrOmxhYmVsPnRlc3QtLS12YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0
LS12YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0LWFuZC12YWxpZGF0ZTwvbWFy
azpsYWJlbD48bWFyazpsYWJlbD50ZXN0LWFuZHZhbGlkYXRlPC9tYXJrOmxhYmVsPjxtYXJrOmxh
YmVsPnRlc3QtdmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+dGVzdGFuZC12YWxpZGF0
ZTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0YW5kdmFsaWRhdGU8L21hcms6bGFiZWw+PG1h
cms6bGFiZWw+dGVzdHZhbGlkYXRlPC9tYXJrOmxhYmVsPjxtYXJrOmdvb2RzQW5kU2VydmljZXM+
Z29sZDwvbWFyazpnb29kc0FuZFNlcnZpY2VzPjxtYXJrOnJlZk51bT4xMjM0PC9tYXJrOnJlZk51
bT48bWFyazpwcm9EYXRlPjIwMTMtMDEtMDFUMDA6MDA6MDAuMDAwWjwvbWFyazpwcm9EYXRlPjxt
YXJrOmNjPlVTPC9tYXJrOmNjPjxtYXJrOmNvdXJ0TmFtZT5Ib3ZlPC9tYXJrOmNvdXJ0TmFtZT48
L21hcms6Y291cnQ+PC9tYXJrOm1hcms+PGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIgSWQ9Il9mNTdiOTJiYi05ZjMzLTQ2MDAtODAwMi0z
ZmIyODY5MmFlOGYiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFs
Z29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PGRzOlNp
Z25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNp
Zy1tb3JlI3JzYS1zaGEyNTYiLz48ZHM6UmVmZXJlbmNlIFVSST0iI181NmY5ZjZiMC1kZTAxLTQy
YzctYTRlNS1mNTdiZmQ5M2Q5NDQiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3Jp
dGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVy
ZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3ht
bC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1
ZT5Qby90dDBlVzZzdVpBTjIyaWxocHc4YjZUdVVuNzJ1R0NGVFdnUm1OM21ZPTwvZHM6RGlnZXN0
VmFsdWU+PC9kczpSZWZlcmVuY2U+PGRzOlJlZmVyZW5jZSBVUkk9IiNfYmUyZjIxYTYtZDA3NC00
ZmI0LWE5NTktMmNhYmUxODMxY2Q1Ij48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29y
aXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFu
c2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
LzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+b3c1aVhYdHhlVW5QNEswWXdJa24y
M2JWa0tHOVU1Q1FzSVoxbUZPZGFsWT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwv
ZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9Il84N2U2NGVmMy1kODMxLTQyMzkt
Yjg3ZC05NjI2ZTIzNWQzNTUiPlUyWmgwR3Nnb1dtTUVkbEIvOTNDNmhKWUJ5Q3YyU3lKR0NEcDZw
NzhKWWxsajA1N200YlRFUllOYURCQzduTnNsUHI3UzYrakJHQTUKczBmSzNGZ0V3UkVMK2VjRWdp
WU1UMktaK1pza3VRMVIvQk0wMUZ3VTMvUDJZVzJtb1NEY0JGZ2VGNUgyaXFxeTdXY0N4NkI0OE5H
cgpmdE05NHJ5Vmc3SFhXVFBvWUhCejVmNWFZUU9sQWcwU1ZQeWhieWtaUnBIZHJ4aXhsTmRYM3JU
djArUDdSeks5clowbkpQdzdBTVI0CnZMZjNuY29RMVNpS2ZKMkVBRml4WmFLbTNoMFJUdStGNGZL
K2FRUk1CTnpmdERNeEY2WTVjTGt4andPMGJ6TnJvTlVpN0QyTjhseDgKYWxmY3N1QjkzbjBydmtN
UElEcW90YnZvM0ZDZ09FYXhMRlVFcFE9PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8g
SWQ9Il9iZTJmMjFhNi1kMDc0LTRmYjQtYTk1OS0yY2FiZTE4MzFjZDUiPjxkczpYNTA5RGF0YT48
ZHM6WDUwOUNlcnRpZmljYXRlPk1JSUZPekNDQkNPZ0F3SUJBZ0lnTHJBYmV2b2FlNTJ5M2Y2QzJ0
QjBTbjNwN1hKbTBUMDJGb2d4S0NmTmhaY3dEUVlKS29aSWh2Y04KQVFFTEJRQXdmREVMTUFrR0Ex
VUVCaE1DVlZNeFBEQTZCZ05WQkFvVE0wbHVkR1Z5Ym1WMElFTnZjbkJ2Y21GMGFXOXVJR1p2Y2lC
QgpjM05wWjI1bFpDQk9ZVzFsY3lCaGJtUWdUblZ0WW1WeWN6RXZNQzBHQTFVRUF4TW1TVU5CVGs0
Z1ZISmhaR1Z0WVhKcklFTnNaV0Z5CmFXNW5hRzkxYzJVZ1VHbHNiM1FnUTBFd0hoY05NVGd3TWpJ
NE1EQXdNREF3V2hjTk1qTXdNekF4TWpNMU9UVTVXakNCanpFTE1Ba0cKQTFVRUJoTUNRa1V4SURB
ZUJnTlZCQWdURjBKeWRYTnpaV3h6TFVOaGNHbDBZV3dnVW1WbmFXOXVNUkV3RHdZRFZRUUhFd2hD
Y25WegpjMlZzY3pFUk1BOEdBMVVFQ2hNSVJHVnNiMmwwZEdVeE9EQTJCZ05WQkFNVEwwbERRVTVP
SUZSTlEwZ2dRWFYwYUc5eWFYcGxaQ0JVCmNtRmtaVzFoY21zZ1VHbHNiM1FnVm1Gc2FXUmhkRzl5
TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEKeGxwM0twWUhYM1d5
QXNGaFNrM0x3V2ZuR2x4blVERnFGWkEzVW91TVlqL1hpZ2JNa05lRVhJamxrUk9LVDRPUEdmUngv
TEF5UmxRUQpqQ012NHFoYmtjWDFwN2FyNjNmbHE0U1pOVmNsMTVsN2gwdVQ1OEZ6U2ZubHowdTVy
a0hmSkltRDQzK21hUC84Z3YzNkZSMjdqVzhSCjl3WTRoaytXczRJQjBpRlNkOFNYdjFLcjh3L0pt
TVFTRGtpdUcrUmZJaXVid1EvZnk3RWtqNVFXaFBadyttTXhOS25IVUx5M3hZejIKTHdWZmZ0andV
dWVhY3ZxTlJDa01YbENsT0FEcWZUOG9TWm9lRFhlaEh2bFBzTENlbUdCb1RLdXJza0lTNjlGMHlQ
RUg1Z3plMEgrZgo4RlJPc0lvS1NzVlEzNEI0Uy9qb0U2N25wc0pQVGRLc05QSlR5UUlEQVFBQm80
SUJrekNDQVk4d0RBWURWUjBUQVFIL0JBSXdBREFkCkJnTlZIUTRFRmdRVW9GcFk3NnA1eW9ORFJH
dFFwelZ1UjgxVVdRMHdnY1lHQTFVZEl3U0J2akNCdTRBVXc2MCtwdFlSQUVXQVhEcFgKU29wdDNE
RU5ubkdoZ1lDa2ZqQjhNUXN3Q1FZRFZRUUdFd0pWVXpFOE1Eb0dBMVVFQ2hNelNXNTBaWEp1WlhR
Z1EyOXljRzl5WVhScApiMjRnWm05eUlFRnpjMmxuYm1Wa0lFNWhiV1Z6SUdGdVpDQk9kVzFpWlhK
ek1TOHdMUVlEVlFRREV5WkpRMEZPVGlCVWNtRmtaVzFoCmNtc2dRMnhsWVhKcGJtZG9iM1Z6WlNC
UWFXeHZkQ0JEUVlJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdYSm0wVDAyRm9neEtDZk4KaFhr
d0RnWURWUjBQQVFIL0JBUURBZ2VBTURRR0ExVWRId1F0TUNzd0thQW5vQ1dHSTJoMGRIQTZMeTlq
Y213dWFXTmhibTR1YjNKbgpMM1J0WTJoZmNHbHNiM1F1WTNKc01GRUdBMVVkSUFSS01FZ3dFQVlP
S3dZQkJBR0N5UnNCQllNN0RBb3dOQVlJS3dZQkJRVUhBZ0V3CktEQW1CZ2dyQmdFRkJRY0NBUllh
YUhSMGNITTZMeTlqWVM1cFkyRnViaTV2Y21jdmNHbHNiM1F3RFFZSktvWklodmNOQVFFTEJRQUQK
Z2dFQkFBdWpaMkljUjJEVnJ0YVJyQTU5ZU5ZQ2w0eGNzSk11OERRQ0h2MjhmVGZpL0JpWlk0SXI3
RjlrRnk5NkQ3T1o4b0xZNXpqZgo0ZEh4RndIUHFIOERoNkpXc3pYdUhXMVphM1htbDBQYUh4Q1dS
UzBYb2w4V3NISHBOeWdqTUJZZkowb2RWTTg4NVRaMUVsOVNpdUVICm55bkZCZ1NtaUZjOTl1UWQv
WURSWnVHdi9BMEh5djd5Ujl0a0xFZEQzQTF1TkpCVzRQK0hKR3BkS2tZTDFRNXJVNytvSFZQdE1L
S0kKM2lGa1VFc2JPNDVBVmQ3dlAvai83SnRBWlBiNmtvT1Y1bFppMkgxUkxjY0d3emRlem5oSmdk
ME45b2JiMHZuRTQxL1VTV2FmZFdSWgpWR2t3UHVxVGhsN3NDdHpySkg4WFkweGN1bStjZkx4MkVB
SXdVbk9jYWI0PTwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZv
PjwvZHM6U2lnbmF0dXJlPjwvc21kOnNpZ25lZE1hcms+
-----END ENCODED SMD-----

View File

@@ -1,99 +0,0 @@
Marks: Essai &amp; évaluation
smdID: 000000631526320349683-65535
U-labels: xn--essai---valuation-itb, xn--essai--valuation-hqb, xn--essai-and-valuation-kzb, xn--essai-andvaluation-jwb, xn--essai-valuation-gnb, xn--essaiand-valuation-jwb, xn--essaiandvaluation-itb, xn--essaiet-valuation-itb, xn--essaietvaluation-hqb, xn--essaivaluation-fkb
notBefore: 2018-05-14T17:52:29.683Z
notAfter: 2022-08-21T08:12:14.116Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8wNDQ1
ODM5Ni1hOTRlLTRlNzktYWQ1Zi1hZjMxYmE2NTIwNWEiPjxzbWQ6aWQ+MDAwMDAwNjMxNTI2MzIw
MzQ5NjgzLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MjoyOS42ODNaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODoxMjoxNC4xMTZaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxMzgxNTAzMDYwNDk2MTUwMzA2MDQ5Ni0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPkVzc2FpICZhbXA7IMOpdmFsdWF0aW9uPC9tYXJrOm1hcmtOYW1lPjxtYXJrOmhv
bGRlciBlbnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm5hbWU+SmVhbiBMZWJsYW5jPC9tYXJrOm5h
bWU+PG1hcms6b3JnPk9yYW5pc2F0aW9uIGRlIHRlc3Q8L21hcms6b3JnPjxtYXJrOmFkZHI+PG1h
cms6c3RyZWV0PlJVRSBST0dORSA0MCA8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+QVJUT0lTPC9t
YXJrOmNpdHk+PG1hcms6cGM+MjEzMDE8L21hcms6cGM+PG1hcms6Y2M+RlI8L21hcms6Y2M+PC9t
YXJrOmFkZHI+PG1hcms6dm9pY2U+KzMzLjI2NDk5NTAzMjwvbWFyazp2b2ljZT48bWFyazpmYXg+
KzMzLjI2NDk5NTAzMzwvbWFyazpmYXg+PG1hcms6ZW1haWw+aW5mb0BleGFtcGxlLmV4YW1wbGU8
L21hcms6ZW1haWw+PC9tYXJrOmhvbGRlcj48bWFyazpsYWJlbD54bi0tZXNzYWktLS12YWx1YXRp
b24taXRiPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1lc3NhaS0tdmFsdWF0aW9uLWhxYjwv
bWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tZXNzYWktYW5kLXZhbHVhdGlvbi1remI8L21hcms6
bGFiZWw+PG1hcms6bGFiZWw+eG4tLWVzc2FpLWFuZHZhbHVhdGlvbi1qd2I8L21hcms6bGFiZWw+
PG1hcms6bGFiZWw+eG4tLWVzc2FpLXZhbHVhdGlvbi1nbmI8L21hcms6bGFiZWw+PG1hcms6bGFi
ZWw+eG4tLWVzc2FpYW5kLXZhbHVhdGlvbi1qd2I8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4t
LWVzc2FpYW5kdmFsdWF0aW9uLWl0YjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tZXNzYWll
dC12YWx1YXRpb24taXRiPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1lc3NhaWV0dmFsdWF0
aW9uLWhxYjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tZXNzYWl2YWx1YXRpb24tZmtiPC9t
YXJrOmxhYmVsPjxtYXJrOmdvb2RzQW5kU2VydmljZXM+Z3VpdGFyZTwvbWFyazpnb29kc0FuZFNl
cnZpY2VzPjxtYXJrOnJlZk51bT4xMjM0PC9tYXJrOnJlZk51bT48bWFyazpwcm9EYXRlPjIwMTMt
MDEtMDFUMDA6MDA6MDAuMDAwWjwvbWFyazpwcm9EYXRlPjxtYXJrOmNjPlVTPC9tYXJrOmNjPjxt
YXJrOmNvdXJ0TmFtZT5Ib3ZlPC9tYXJrOmNvdXJ0TmFtZT48L21hcms6Y291cnQ+PC9tYXJrOm1h
cms+PGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxk
c2lnIyIgSWQ9Il9mZWEwOTIwMS1kMzQ0LTQzNjQtOGQwYS05NmQzNjJlYjZkMTciPjxkczpTaWdu
ZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53
My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0
aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEyNTYiLz48
ZHM6UmVmZXJlbmNlIFVSST0iI18wNDQ1ODM5Ni1hOTRlLTRlNzktYWQ1Zi1hZjMxYmE2NTIwNWEi
PjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxn
b3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRy
YW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT4vUjJRYUhFUEFDSzlvY3FJZ2Ri
UVFuUlM1YzBTc0h4RjZYTUpGb1p0SytVPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+
PGRzOlJlZmVyZW5jZSBVUkk9IiNfYWY4NmNiNmUtOTM0Yi00YTk3LThhYjgtNzBmNGU1NDI2OGNj
Ij48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRo
b2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48
ZHM6RGlnZXN0VmFsdWU+c1NkY0tlbmlMQU5TOEJFcFVCUVU2bHBGS0F2MFJBT2RNRncwRFdoYzZF
Yz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2ln
bmF0dXJlVmFsdWUgSWQ9Il9jODQ2YWY0Ny04NjAwLTQwNjUtYWI3Ni0xMjU0MzhiZmUzMGIiPmRP
Vm84amZMMS84YUdnQnhmTjVZeUNIZ240R3ByVFJyUFRqQVkzT2VkNnF6N2NNYmxFcTlUaU1aM2Nv
eWRwbmY4Mm04UGp1cVJmcFUKODhLenBmVnZMSVhXcUlCTlp1Mm5sVGg5SDFUUFZ1R0xjUDVGZ0M2
ZHVrV0VnQzJiUm1KZjhwazgzMWFHVElKOVJ3YkR0WHlvVmxRcQp3bWFGQzNLeDA0azlFaFFSdUs0
UldXdW13K3VXZGc1djFxZjhOWU5uaVhBTFo0SWx3RGZYczV2THhjMCt1RTNOM09tMS80dUNBMjE1
Cmlyb0Fzc2RqMm5nRk9ZUE1nVHNjanpuMGo3MnNIS3c4S0J4MUd6OUNOelpheFZpZFdiU1FxVnFV
T1VnSXJiSFNHQ25NZjVRV2ppZG0KOGRqZDV6SUZ0VHBXT1hQNUdjbmg2bEVWa3FqdDBWaTJvazBT
WWc9PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8gSWQ9Il9hZjg2Y2I2ZS05MzRiLTRh
OTctOGFiOC03MGY0ZTU0MjY4Y2MiPjxkczpYNTA5RGF0YT48ZHM6WDUwOUNlcnRpZmljYXRlPk1J
SUZPekNDQkNPZ0F3SUJBZ0lnTHJBYmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0Nm
TmhaY3dEUVlKS29aSWh2Y04KQVFFTEJRQXdmREVMTUFrR0ExVUVCaE1DVlZNeFBEQTZCZ05WQkFv
VE0wbHVkR1Z5Ym1WMElFTnZjbkJ2Y21GMGFXOXVJR1p2Y2lCQgpjM05wWjI1bFpDQk9ZVzFsY3lC
aGJtUWdUblZ0WW1WeWN6RXZNQzBHQTFVRUF4TW1TVU5CVGs0Z1ZISmhaR1Z0WVhKcklFTnNaV0Z5
CmFXNW5hRzkxYzJVZ1VHbHNiM1FnUTBFd0hoY05NVGd3TWpJNE1EQXdNREF3V2hjTk1qTXdNekF4
TWpNMU9UVTVXakNCanpFTE1Ba0cKQTFVRUJoTUNRa1V4SURBZUJnTlZCQWdURjBKeWRYTnpaV3h6
TFVOaGNHbDBZV3dnVW1WbmFXOXVNUkV3RHdZRFZRUUhFd2hDY25WegpjMlZzY3pFUk1BOEdBMVVF
Q2hNSVJHVnNiMmwwZEdVeE9EQTJCZ05WQkFNVEwwbERRVTVPSUZSTlEwZ2dRWFYwYUc5eWFYcGxa
Q0JVCmNtRmtaVzFoY21zZ1VHbHNiM1FnVm1Gc2FXUmhkRzl5TUlJQklqQU5CZ2txaGtpRzl3MEJB
UUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEKeGxwM0twWUhYM1d5QXNGaFNrM0x3V2ZuR2x4blVERnFG
WkEzVW91TVlqL1hpZ2JNa05lRVhJamxrUk9LVDRPUEdmUngvTEF5UmxRUQpqQ012NHFoYmtjWDFw
N2FyNjNmbHE0U1pOVmNsMTVsN2gwdVQ1OEZ6U2ZubHowdTVya0hmSkltRDQzK21hUC84Z3YzNkZS
MjdqVzhSCjl3WTRoaytXczRJQjBpRlNkOFNYdjFLcjh3L0ptTVFTRGtpdUcrUmZJaXVid1EvZnk3
RWtqNVFXaFBadyttTXhOS25IVUx5M3hZejIKTHdWZmZ0andVdWVhY3ZxTlJDa01YbENsT0FEcWZU
OG9TWm9lRFhlaEh2bFBzTENlbUdCb1RLdXJza0lTNjlGMHlQRUg1Z3plMEgrZgo4RlJPc0lvS1Nz
VlEzNEI0Uy9qb0U2N25wc0pQVGRLc05QSlR5UUlEQVFBQm80SUJrekNDQVk4d0RBWURWUjBUQVFI
L0JBSXdBREFkCkJnTlZIUTRFRmdRVW9GcFk3NnA1eW9ORFJHdFFwelZ1UjgxVVdRMHdnY1lHQTFV
ZEl3U0J2akNCdTRBVXc2MCtwdFlSQUVXQVhEcFgKU29wdDNERU5ubkdoZ1lDa2ZqQjhNUXN3Q1FZ
RFZRUUdFd0pWVXpFOE1Eb0dBMVVFQ2hNelNXNTBaWEp1WlhRZ1EyOXljRzl5WVhScApiMjRnWm05
eUlFRnpjMmxuYm1Wa0lFNWhiV1Z6SUdGdVpDQk9kVzFpWlhKek1TOHdMUVlEVlFRREV5WkpRMEZP
VGlCVWNtRmtaVzFoCmNtc2dRMnhsWVhKcGJtZG9iM1Z6WlNCUWFXeHZkQ0JEUVlJZ0xyQWJldm9h
ZTUyeTNmNkMydEIwU24zcDdYSm0wVDAyRm9neEtDZk4KaFhrd0RnWURWUjBQQVFIL0JBUURBZ2VB
TURRR0ExVWRId1F0TUNzd0thQW5vQ1dHSTJoMGRIQTZMeTlqY213dWFXTmhibTR1YjNKbgpMM1J0
WTJoZmNHbHNiM1F1WTNKc01GRUdBMVVkSUFSS01FZ3dFQVlPS3dZQkJBR0N5UnNCQllNN0RBb3dO
QVlJS3dZQkJRVUhBZ0V3CktEQW1CZ2dyQmdFRkJRY0NBUllhYUhSMGNITTZMeTlqWVM1cFkyRnVi
aTV2Y21jdmNHbHNiM1F3RFFZSktvWklodmNOQVFFTEJRQUQKZ2dFQkFBdWpaMkljUjJEVnJ0YVJy
QTU5ZU5ZQ2w0eGNzSk11OERRQ0h2MjhmVGZpL0JpWlk0SXI3RjlrRnk5NkQ3T1o4b0xZNXpqZgo0
ZEh4RndIUHFIOERoNkpXc3pYdUhXMVphM1htbDBQYUh4Q1dSUzBYb2w4V3NISHBOeWdqTUJZZkow
b2RWTTg4NVRaMUVsOVNpdUVICm55bkZCZ1NtaUZjOTl1UWQvWURSWnVHdi9BMEh5djd5Ujl0a0xF
ZEQzQTF1TkpCVzRQK0hKR3BkS2tZTDFRNXJVNytvSFZQdE1LS0kKM2lGa1VFc2JPNDVBVmQ3dlAv
ai83SnRBWlBiNmtvT1Y1bFppMkgxUkxjY0d3emRlem5oSmdkME45b2JiMHZuRTQxL1VTV2FmZFdS
WgpWR2t3UHVxVGhsN3NDdHpySkg4WFkweGN1bStjZkx4MkVBSXdVbk9jYWI0PTwvZHM6WDUwOUNl
cnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjwvZHM6U2lnbmF0dXJlPjwvc21k
OnNpZ25lZE1hcms+
-----END ENCODED SMD-----

View File

@@ -1,99 +0,0 @@
Marks: Сертификация &amp; логотип
smdID: 000000671526320355540-65535
U-labels: xn------5cdshvabepr3bbqcpum2a9b4n, xn-----6kcogsabdop0bbpcotl1a7b8m, xn---and--3ve0aj1aabgrv9bbscrwo4a3c9n, xn---and-43dwiyabfqt6bbrcqvn3a1c0o, xn----7sbkfpabcnn7abocnsk0a5bzn, xn--and--43dwiyabfqt6bbrcqvn3a1c0o, xn--and-5cdshvabepr3bbqcpum2a9b4n, xn--80agemabbml4abncmrjz3b2m
notBefore: 2018-05-14T17:52:35.540Z
notAfter: 2022-08-21T08:12:08.921Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il82MDE3
YWQxYy01NzE0LTRjMDEtOTg0OC1iZWYyZjVmYzc2NTUiPjxzbWQ6aWQ+MDAwMDAwNjcxNTI2MzIw
MzU1NTQwLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MjozNS41NDBaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODoxMjowOC45MjFaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxNDAxNTAzMDYzMjQ3MTUwMzA2MzI0Ny0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPtCh0LXRgNGC0LjRhNC40LrQsNGG0LjRjyAmYW1wOyDQu9C+0LPQvtGC0LjQvzwv
bWFyazptYXJrTmFtZT48bWFyazpob2xkZXIgZW50aXRsZW1lbnQ9Im93bmVyIj48bWFyazpuYW1l
PtCd0LDRgtCw0LvRjNGPINCQ0L3RgtC+0L3QvtCy0LA8L21hcms6bmFtZT48bWFyazpvcmc+0JDQ
vdGC0L7QvdC+0LLQsDwvbWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpzdHJlZXQ+0J/RgNC+0YHQ
v9C10LrRgiDQktC10YDQvdCw0LTRgdC60L7Qs9C+IDE1PC9tYXJrOnN0cmVldD48bWFyazpjaXR5
PtCc0L7RgdC60LLQsDwvbWFyazpjaXR5PjxtYXJrOnBjPjExNzQ4NTwvbWFyazpwYz48bWFyazpj
Yz5SVTwvbWFyazpjYz48L21hcms6YWRkcj48bWFyazp2b2ljZT4rNy45MTg4MjIxNjc0PC9tYXJr
OnZvaWNlPjxtYXJrOmVtYWlsPmluZm9AZXhhbXBsZS5leGFtcGxlPC9tYXJrOmVtYWlsPjwvbWFy
azpob2xkZXI+PG1hcms6bGFiZWw+eG4tLS0tLS01Y2RzaHZhYmVwcjNiYnFjcHVtMmE5YjRuPC9t
YXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS0tLS02a2NvZ3NhYmRvcDBiYnBjb3RsMWE3YjhtPC9t
YXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS0tYW5kLS0zdmUwYWoxYWFiZ3J2OWJic2Nyd280YTNj
OW48L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLS1hbmQtNDNkd2l5YWJmcXQ2YmJyY3F2bjNh
MWMwbzwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tLS03c2JrZnBhYmNubjdhYm9jbnNrMGE1
YnpuPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1hbmQtLTQzZHdpeWFiZnF0NmJicmNxdm4z
YTFjMG88L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLWFuZC01Y2RzaHZhYmVwcjNiYnFjcHVt
MmE5YjRuPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS04MGFnZW1hYmJtbDRhYm5jbXJqejNi
Mm08L21hcms6bGFiZWw+PG1hcms6Z29vZHNBbmRTZXJ2aWNlcz5ndWl0YXI8L21hcms6Z29vZHNB
bmRTZXJ2aWNlcz48bWFyazpyZWZOdW0+MTIzNDwvbWFyazpyZWZOdW0+PG1hcms6cHJvRGF0ZT4y
MDEzLTAxLTAxVDAwOjAwOjAwLjAwMFo8L21hcms6cHJvRGF0ZT48bWFyazpjYz5VUzwvbWFyazpj
Yz48bWFyazpjb3VydE5hbWU+SG92ZTwvbWFyazpjb3VydE5hbWU+PC9tYXJrOmNvdXJ0PjwvbWFy
azptYXJrPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkv
eG1sZHNpZyMiIElkPSJfZTU4ZDE5MzAtNjRjNi00N2EyLTk3ZDItMGU3ZGQ3ODY4NjUxIj48ZHM6
U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVNZXRob2QgQWxn
b3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2
Ii8+PGRzOlJlZmVyZW5jZSBVUkk9IiNfNjAxN2FkMWMtNTcxNC00YzAxLTk4NDgtYmVmMmY1ZmM3
NjU1Ij48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6VHJhbnNmb3Jt
IEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9k
czpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+T0NFUlcxYWVrdkhUWWZZ
UUZadVkwbUdpanlXYWwyQ09heklZRk9NTUZCTT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJl
bmNlPjxkczpSZWZlcmVuY2UgVVJJPSIjXzE5ODYwMmNjLWFiNGItNGEzNC04NjAzLTUzZGM0MzVk
YmVmNSI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jtcz48ZHM6RGlnZXN0
TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2
Ii8+PGRzOkRpZ2VzdFZhbHVlPlVNbW5uazB2MTM1NzJEN3FxMVYzZXI1eUtQcmNpbkRYcHNVUXVE
Z3lURDQ9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48L2RzOlNpZ25lZEluZm8+PGRz
OlNpZ25hdHVyZVZhbHVlIElkPSJfZTVmODNjZGItZTgxNi00NDRkLTg3NDktODZkODZiY2YyNjBh
Ij5xQ1I1VDFiamV1TVJSZWgvNTRSeEphTUdIdTNSNmJlVy94cWRiMUJ2bDN0Y3VXU3FtYVdEaGow
SXlWQVlibURQYS8ybHJoYmpMVTI2CnRacG9aWGRuU2lOdERkQ3F5NmN3WVdITlRpU1NTdDc2dzA4
cncrV21GOGQ3UklnOGdPQVdUUWxhM0RNdk4waFNsZHZDb3JjNjBPdlIKeWtrWFU3cGhPZVFnUHBH
VjcrNmY5a01nUndUQ0pGdy9TK25GZDI3ekR5c1Bwb01mbEZTVVdTTE44QXhZZkxsZThxUVdQdzVS
Y2ppdwoxV3JIeHBveFp0T3RFUms5YzZvRzFlUlNGclQ5ZEJMY0JoYWFnWEJPNkxOOHk4WE1IZzdn
dGQ3ZVozZUtJR3dHdVZPSTNPTmFML0dzCkdBNWljUnhYWDZaYVhUZUl4dXE4ZEV1Y2oxNVN0cExI
TjE4L0JRPT08L2RzOlNpZ25hdHVyZVZhbHVlPjxkczpLZXlJbmZvIElkPSJfMTk4NjAyY2MtYWI0
Yi00YTM0LTg2MDMtNTNkYzQzNWRiZWY1Ij48ZHM6WDUwOURhdGE+PGRzOlg1MDlDZXJ0aWZpY2F0
ZT5NSUlGT3pDQ0JDT2dBd0lCQWdJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdYSm0wVDAyRm9n
eEtDZk5oWmN3RFFZSktvWklodmNOCkFRRUxCUUF3ZkRFTE1Ba0dBMVVFQmhNQ1ZWTXhQREE2QmdO
VkJBb1RNMGx1ZEdWeWJtVjBJRU52Y25CdmNtRjBhVzl1SUdadmNpQkIKYzNOcFoyNWxaQ0JPWVcx
bGN5QmhibVFnVG5WdFltVnljekV2TUMwR0ExVUVBeE1tU1VOQlRrNGdWSEpoWkdWdFlYSnJJRU5z
WldGeQphVzVuYUc5MWMyVWdVR2xzYjNRZ1EwRXdIaGNOTVRnd01qSTRNREF3TURBd1doY05Nak13
TXpBeE1qTTFPVFU1V2pDQmp6RUxNQWtHCkExVUVCaE1DUWtVeElEQWVCZ05WQkFnVEYwSnlkWE56
Wld4ekxVTmhjR2wwWVd3Z1VtVm5hVzl1TVJFd0R3WURWUVFIRXdoQ2NuVnoKYzJWc2N6RVJNQThH
QTFVRUNoTUlSR1ZzYjJsMGRHVXhPREEyQmdOVkJBTVRMMGxEUVU1T0lGUk5RMGdnUVhWMGFHOXlh
WHBsWkNCVQpjbUZrWlcxaGNtc2dVR2xzYjNRZ1ZtRnNhV1JoZEc5eU1JSUJJakFOQmdrcWhraUc5
dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBCnhscDNLcFlIWDNXeUFzRmhTazNMd1dmbkdseG5V
REZxRlpBM1VvdU1Zai9YaWdiTWtOZUVYSWpsa1JPS1Q0T1BHZlJ4L0xBeVJsUVEKakNNdjRxaGJr
Y1gxcDdhcjYzZmxxNFNaTlZjbDE1bDdoMHVUNThGelNmbmx6MHU1cmtIZkpJbUQ0MyttYVAvOGd2
MzZGUjI3alc4Ugo5d1k0aGsrV3M0SUIwaUZTZDhTWHYxS3I4dy9KbU1RU0RraXVHK1JmSWl1YndR
L2Z5N0VrajVRV2hQWncrbU14TktuSFVMeTN4WXoyCkx3VmZmdGp3VXVlYWN2cU5SQ2tNWGxDbE9B
RHFmVDhvU1pvZURYZWhIdmxQc0xDZW1HQm9US3Vyc2tJUzY5RjB5UEVINWd6ZTBIK2YKOEZST3NJ
b0tTc1ZRMzRCNFMvam9FNjducHNKUFRkS3NOUEpUeVFJREFRQUJvNElCa3pDQ0FZOHdEQVlEVlIw
VEFRSC9CQUl3QURBZApCZ05WSFE0RUZnUVVvRnBZNzZwNXlvTkRSR3RRcHpWdVI4MVVXUTB3Z2NZ
R0ExVWRJd1NCdmpDQnU0QVV3NjArcHRZUkFFV0FYRHBYClNvcHQzREVObm5HaGdZQ2tmakI4TVFz
d0NRWURWUVFHRXdKVlV6RThNRG9HQTFVRUNoTXpTVzUwWlhKdVpYUWdRMjl5Y0c5eVlYUnAKYjI0
Z1ptOXlJRUZ6YzJsbmJtVmtJRTVoYldWeklHRnVaQ0JPZFcxaVpYSnpNUzh3TFFZRFZRUURFeVpK
UTBGT1RpQlVjbUZrWlcxaApjbXNnUTJ4bFlYSnBibWRvYjNWelpTQlFhV3h2ZENCRFFZSWdMckFi
ZXZvYWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOCmhYa3dEZ1lEVlIwUEFRSC9CQVFE
QWdlQU1EUUdBMVVkSHdRdE1Dc3dLYUFub0NXR0kyaDBkSEE2THk5amNtd3VhV05oYm00dWIzSm4K
TDNSdFkyaGZjR2xzYjNRdVkzSnNNRkVHQTFVZElBUktNRWd3RUFZT0t3WUJCQUdDeVJzQkJZTTdE
QW93TkFZSUt3WUJCUVVIQWdFdwpLREFtQmdnckJnRUZCUWNDQVJZYWFIUjBjSE02THk5allTNXBZ
MkZ1Ymk1dmNtY3ZjR2xzYjNRd0RRWUpLb1pJaHZjTkFRRUxCUUFECmdnRUJBQXVqWjJJY1IyRFZy
dGFSckE1OWVOWUNsNHhjc0pNdThEUUNIdjI4ZlRmaS9CaVpZNElyN0Y5a0Z5OTZEN09aOG9MWTV6
amYKNGRIeEZ3SFBxSDhEaDZKV3N6WHVIVzFaYTNYbWwwUGFIeENXUlMwWG9sOFdzSEhwTnlnak1C
WWZKMG9kVk04ODVUWjFFbDlTaXVFSApueW5GQmdTbWlGYzk5dVFkL1lEUlp1R3YvQTBIeXY3eVI5
dGtMRWREM0ExdU5KQlc0UCtISkdwZEtrWUwxUTVyVTcrb0hWUHRNS0tJCjNpRmtVRXNiTzQ1QVZk
N3ZQL2ovN0p0QVpQYjZrb09WNWxaaTJIMVJMY2NHd3pkZXpuaEpnZDBOOW9iYjB2bkU0MS9VU1dh
ZmRXUloKVkdrd1B1cVRobDdzQ3R6ckpIOFhZMHhjdW0rY2ZMeDJFQUl3VW5PY2FiND08L2RzOlg1
MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48
L3NtZDpzaWduZWRNYXJrPg==
-----END ENCODED SMD-----

View File

@@ -1,99 +0,0 @@
Marks: الاختبار &amp; لتقييم
smdID: 000000771526320375015-65535
U-labels: xn------nzeaagpf7azb2ppajr3fa, xn-----btdaafne4a7azpoaiq8ea, xn----ymcaaeld1a4a6onahp3ea, xn--mgbaadjcy1a8mmago8da
notBefore: 2018-05-14T17:52:55.015Z
notAfter: 2022-08-18T14:27:18.209Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il85NWNl
ZjgzNC0wZTkxLTQ1ODQtOGNiYy1iNmFiMDU1ZmFlOWYiPjxzbWQ6aWQ+MDAwMDAwNzcxNTI2MzIw
Mzc1MDE1LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1Mjo1NS4wMTVaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDoyNzoxOC4yMDlaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTQ0MTUwMzA2NjE5NTE1MDMwNjYxOTUtMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT7Yp9mE2KfYrtiq2KjYp9ixICZhbXA7INmE2KrZgtmK2YrZhTwvbWFyazpt
YXJrTmFtZT48bWFyazpob2xkZXIgZW50aXRsZW1lbnQ9Im93bmVyIj48bWFyazpuYW1lPtmF2YfZ
htiv2LMg2KfZhNmF2LnZhNmI2YXYp9iq2YrYqTwvbWFyazpuYW1lPjxtYXJrOmFkZHI+PG1hcms6
c3RyZWV0Ptis2LnZgdixINin2KjZhiDYs9mK2YbYp9ihIDc1PC9tYXJrOnN0cmVldD48bWFyazpj
aXR5PtmF2YPZhtin2LM8L21hcms6Y2l0eT48bWFyazpwYz4yOTAwPC9tYXJrOnBjPjxtYXJrOmNj
Pk1BPC9tYXJrOmNjPjwvbWFyazphZGRyPjwvbWFyazpob2xkZXI+PG1hcms6Y29udGFjdCB0eXBl
PSJhZ2VudCI+PG1hcms6bmFtZT7ZhdmH2YbYr9izINin2YTZhdi52YTZiNmF2KfYqtmK2Kk8L21h
cms6bmFtZT48bWFyazpvcmc+2YjZg9in2YTYqTwvbWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpz
dHJlZXQ+2LTYp9ix2Lkg2KzYudmB2LEg2KfYqNmGINiz2YrZhtin2KEgNzU8L21hcms6c3RyZWV0
PjxtYXJrOmNpdHk+2YXZg9mG2KfYszwvbWFyazpjaXR5PjxtYXJrOnBjPjI5MDA8L21hcms6cGM+
PG1hcms6Y2M+TUE8L21hcms6Y2M+PC9tYXJrOmFkZHI+PG1hcms6dm9pY2U+KzIxMi41MjI1Mzkw
NDA8L21hcms6dm9pY2U+PG1hcms6ZmF4PisyMTIuNTIyNTM5MDQxPC9tYXJrOmZheD48bWFyazpl
bWFpbD5pbmZvQGFnZW5jeS1tYXJvY2NvLmNvbTwvbWFyazplbWFpbD48L21hcms6Y29udGFjdD48
bWFyazpqdXJpc2RpY3Rpb24+VVM8L21hcms6anVyaXNkaWN0aW9uPjxtYXJrOmNsYXNzPjE1PC9t
YXJrOmNsYXNzPjxtYXJrOmxhYmVsPnhuLS0tLS0tbnplYWFncGY3YXpiMnBwYWpyM2ZhPC9tYXJr
OmxhYmVsPjxtYXJrOmxhYmVsPnhuLS0tLS1idGRhYWZuZTRhN2F6cG9haXE4ZWE8L21hcms6bGFi
ZWw+PG1hcms6bGFiZWw+eG4tLS0teW1jYWFlbGQxYTRhNm9uYWhwM2VhPC9tYXJrOmxhYmVsPjxt
YXJrOmxhYmVsPnhuLS1tZ2JhYWRqY3kxYThtbWFnbzhkYTwvbWFyazpsYWJlbD48bWFyazpnb29k
c0FuZFNlcnZpY2VzPti62YrYqtin2LE8L21hcms6Z29vZHNBbmRTZXJ2aWNlcz48bWFyazpyZWdO
dW0+MTIzNDwvbWFyazpyZWdOdW0+PG1hcms6cmVnRGF0ZT4yMDEzLTAxLTAxVDAwOjAwOjAwLjAw
MFo8L21hcms6cmVnRGF0ZT48L21hcms6dHJhZGVtYXJrPjwvbWFyazptYXJrPjxkczpTaWduYXR1
cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiIElkPSJfOGU0
ZGUzYTMtNjAyZC00ZWM2LThiOWYtODIxN2UzY2I4ZDY3Ij48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fu
b25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAv
eG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8+PGRzOlJlZmVyZW5jZSBV
Ukk9IiNfOTVjZWY4MzQtMGU5MS00NTg0LThjYmMtYjZhYjA1NWZhZTlmIj48ZHM6VHJhbnNmb3Jt
cz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxk
c2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDov
L3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpE
aWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNz
aGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+RFFpMjZGVVFsRW1WYU41TkFPN2VFUVIwVGhZa2d2Tit2
YzdKN0ZqV0FtUT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjxkczpSZWZlcmVuY2Ug
VVJJPSIjX2ZkZTI3NjYxLTI5ZWMtNDAxMS1hODlkLThjODc0M2ViZWE3MiI+PGRzOlRyYW5zZm9y
bXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1s
LWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jtcz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZhbHVl
PjVxSjR0Q2o5Slg0ZXQ5ZERpdEliNUVreUQrVlhCRFJ3bi9mQ3VtK1JjZEU9PC9kczpEaWdlc3RW
YWx1ZT48L2RzOlJlZmVyZW5jZT48L2RzOlNpZ25lZEluZm8+PGRzOlNpZ25hdHVyZVZhbHVlIElk
PSJfNTBmY2QzMDYtZGFkZi00M2M0LWI3MzMtNjFkNTMyZGI3NTZkIj5JeWpBZFgzMW5YOGN2bkov
dFFZRURFZ04rWGF1SWJPemlqTWV4R1ZPTEhIblpqaTgwb0Q0Mjg3VHNwWUt0b2ZVczM3ZURuenc1
ZVZ2CmdqazUvcnlleis3Wi8rVVYwVEpGeFhGc3ZDS3p1dHZyQkF3YzJvR3Z3Ni9XcjVtNW1SWkh6
eit2eTJ3SWhaYytIRmx5a1NNdm84a0IKaXVJUFUreHRXZ0FvSFRrNUtMRktYZDhPT3duOFdMbElh
WDlpMlVqYzdZemY0VEh5dlRJcGthSjZVS2U5Z2pIZ3VaN0NHME9TeFVqYgp5WTErZTBhMWFNZllU
cWFFVUVEb2ErbjVuMVorQkVRajlzR2ZkUWYwS0FraE1vQmVVVUZGazVWNDFPZTJlRngwN1EybXYv
ZG5HRzQyCmV5SzQ0czBhQWNtdUtMUEtDSlFkUHpsMlFBZUlMaVFCYTFQcVBnPT08L2RzOlNpZ25h
dHVyZVZhbHVlPjxkczpLZXlJbmZvIElkPSJfZmRlMjc2NjEtMjllYy00MDExLWE4OWQtOGM4NzQz
ZWJlYTcyIj48ZHM6WDUwOURhdGE+PGRzOlg1MDlDZXJ0aWZpY2F0ZT5NSUlGT3pDQ0JDT2dBd0lC
QWdJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdYSm0wVDAyRm9neEtDZk5oWmN3RFFZSktvWklo
dmNOCkFRRUxCUUF3ZkRFTE1Ba0dBMVVFQmhNQ1ZWTXhQREE2QmdOVkJBb1RNMGx1ZEdWeWJtVjBJ
RU52Y25CdmNtRjBhVzl1SUdadmNpQkIKYzNOcFoyNWxaQ0JPWVcxbGN5QmhibVFnVG5WdFltVnlj
ekV2TUMwR0ExVUVBeE1tU1VOQlRrNGdWSEpoWkdWdFlYSnJJRU5zWldGeQphVzVuYUc5MWMyVWdV
R2xzYjNRZ1EwRXdIaGNOTVRnd01qSTRNREF3TURBd1doY05Nak13TXpBeE1qTTFPVFU1V2pDQmp6
RUxNQWtHCkExVUVCaE1DUWtVeElEQWVCZ05WQkFnVEYwSnlkWE56Wld4ekxVTmhjR2wwWVd3Z1Vt
Vm5hVzl1TVJFd0R3WURWUVFIRXdoQ2NuVnoKYzJWc2N6RVJNQThHQTFVRUNoTUlSR1ZzYjJsMGRH
VXhPREEyQmdOVkJBTVRMMGxEUVU1T0lGUk5RMGdnUVhWMGFHOXlhWHBsWkNCVQpjbUZrWlcxaGNt
c2dVR2xzYjNRZ1ZtRnNhV1JoZEc5eU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJ
QkNnS0NBUUVBCnhscDNLcFlIWDNXeUFzRmhTazNMd1dmbkdseG5VREZxRlpBM1VvdU1Zai9YaWdi
TWtOZUVYSWpsa1JPS1Q0T1BHZlJ4L0xBeVJsUVEKakNNdjRxaGJrY1gxcDdhcjYzZmxxNFNaTlZj
bDE1bDdoMHVUNThGelNmbmx6MHU1cmtIZkpJbUQ0MyttYVAvOGd2MzZGUjI3alc4Ugo5d1k0aGsr
V3M0SUIwaUZTZDhTWHYxS3I4dy9KbU1RU0RraXVHK1JmSWl1YndRL2Z5N0VrajVRV2hQWncrbU14
TktuSFVMeTN4WXoyCkx3VmZmdGp3VXVlYWN2cU5SQ2tNWGxDbE9BRHFmVDhvU1pvZURYZWhIdmxQ
c0xDZW1HQm9US3Vyc2tJUzY5RjB5UEVINWd6ZTBIK2YKOEZST3NJb0tTc1ZRMzRCNFMvam9FNjdu
cHNKUFRkS3NOUEpUeVFJREFRQUJvNElCa3pDQ0FZOHdEQVlEVlIwVEFRSC9CQUl3QURBZApCZ05W
SFE0RUZnUVVvRnBZNzZwNXlvTkRSR3RRcHpWdVI4MVVXUTB3Z2NZR0ExVWRJd1NCdmpDQnU0QVV3
NjArcHRZUkFFV0FYRHBYClNvcHQzREVObm5HaGdZQ2tmakI4TVFzd0NRWURWUVFHRXdKVlV6RThN
RG9HQTFVRUNoTXpTVzUwWlhKdVpYUWdRMjl5Y0c5eVlYUnAKYjI0Z1ptOXlJRUZ6YzJsbmJtVmtJ
RTVoYldWeklHRnVaQ0JPZFcxaVpYSnpNUzh3TFFZRFZRUURFeVpKUTBGT1RpQlVjbUZrWlcxaApj
bXNnUTJ4bFlYSnBibWRvYjNWelpTQlFhV3h2ZENCRFFZSWdMckFiZXZvYWU1MnkzZjZDMnRCMFNu
M3A3WEptMFQwMkZvZ3hLQ2ZOCmhYa3dEZ1lEVlIwUEFRSC9CQVFEQWdlQU1EUUdBMVVkSHdRdE1D
c3dLYUFub0NXR0kyaDBkSEE2THk5amNtd3VhV05oYm00dWIzSm4KTDNSdFkyaGZjR2xzYjNRdVkz
SnNNRkVHQTFVZElBUktNRWd3RUFZT0t3WUJCQUdDeVJzQkJZTTdEQW93TkFZSUt3WUJCUVVIQWdF
dwpLREFtQmdnckJnRUZCUWNDQVJZYWFIUjBjSE02THk5allTNXBZMkZ1Ymk1dmNtY3ZjR2xzYjNR
d0RRWUpLb1pJaHZjTkFRRUxCUUFECmdnRUJBQXVqWjJJY1IyRFZydGFSckE1OWVOWUNsNHhjc0pN
dThEUUNIdjI4ZlRmaS9CaVpZNElyN0Y5a0Z5OTZEN09aOG9MWTV6amYKNGRIeEZ3SFBxSDhEaDZK
V3N6WHVIVzFaYTNYbWwwUGFIeENXUlMwWG9sOFdzSEhwTnlnak1CWWZKMG9kVk04ODVUWjFFbDlT
aXVFSApueW5GQmdTbWlGYzk5dVFkL1lEUlp1R3YvQTBIeXY3eVI5dGtMRWREM0ExdU5KQlc0UCtI
SkdwZEtrWUwxUTVyVTcrb0hWUHRNS0tJCjNpRmtVRXNiTzQ1QVZkN3ZQL2ovN0p0QVpQYjZrb09W
NWxaaTJIMVJMY2NHd3pkZXpuaEpnZDBOOW9iYjB2bkU0MS9VU1dhZmRXUloKVkdrd1B1cVRobDdz
Q3R6ckpIOFhZMHhjdW0rY2ZMeDJFQUl3VW5PY2FiND08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2Rz
Olg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48L3NtZDpzaWduZWRNYXJrPg==
-----END ENCODED SMD-----

View File

@@ -1,98 +0,0 @@
Marks: 审判&amp;错误
smdID: 000000801526320380861-65535
U-labels: xn----ke8al50aln4ceuj, xn--and-ui2eu74b9t4egon, xn--et-pg5cw37ax04dfrl, xn--fcr14u8t4bdxh
notBefore: 2018-05-14T17:53:00.861Z
notAfter: 2022-08-18T14:36:50.931Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8wMDE5
NmU0Ni1iYjE3LTQxNzgtYWU5MS1kMTNlZmM5MDU5YzEiPjxzbWQ6aWQ+MDAwMDAwODAxNTI2MzIw
MzgwODYxLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MzowMC44NjFaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDozNjo1MC45MzFaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTQ2MTUwMzA2Njc5NTE1MDMwNjY3OTUtMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT7lrqHliKQmYW1wO+mUmeivrzwvbWFyazptYXJrTmFtZT48bWFyazpob2xk
ZXIgZW50aXRsZW1lbnQ9Im93bmVyIj48bWFyazpvcmc+5bel56iL5aSEPC9tYXJrOm9yZz48bWFy
azphZGRyPjxtYXJrOnN0cmVldD7pppnmuK/kuJzot6825Y+377yMNeWPt+alvO+8jDjlj7flrqQ8
L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+6Z2S5bKb5biCPC9tYXJrOmNpdHk+PG1hcms6cGM+MzUw
MDwvbWFyazpwYz48bWFyazpjYz5DTjwvbWFyazpjYz48L21hcms6YWRkcj48L21hcms6aG9sZGVy
PjxtYXJrOmNvbnRhY3QgdHlwZT0iYWdlbnQiPjxtYXJrOm5hbWU+5p2O5bCP5pa5PC9tYXJrOm5h
bWU+PG1hcms6b3JnPuW3peeoi+WkhDwvbWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpzdHJlZXQ+
6aaZ5riv5Lic6LevNuWPt++8jDXlj7fmpbzvvIw45Y+35a6kPC9tYXJrOnN0cmVldD48bWFyazpj
aXR5PumdkuWym+W4gjwvbWFyazpjaXR5PjxtYXJrOnBjPjM1MDA8L21hcms6cGM+PG1hcms6Y2M+
Q048L21hcms6Y2M+PC9tYXJrOmFkZHI+PG1hcms6dm9pY2U+Kzg2LjEwODQ2NTcxNzM8L21hcms6
dm9pY2U+PG1hcms6ZmF4Pis4Ni4xMDg0NjU3MTc1PC9tYXJrOmZheD48bWFyazplbWFpbD5pbmZv
QGNoaW5lc2UtYWdlbmN5LmNvbTwvbWFyazplbWFpbD48L21hcms6Y29udGFjdD48bWFyazpqdXJp
c2RpY3Rpb24+VVM8L21hcms6anVyaXNkaWN0aW9uPjxtYXJrOmNsYXNzPjE1PC9tYXJrOmNsYXNz
PjxtYXJrOmxhYmVsPnhuLS0tLWtlOGFsNTBhbG40Y2V1ajwvbWFyazpsYWJlbD48bWFyazpsYWJl
bD54bi0tYW5kLXVpMmV1NzRiOXQ0ZWdvbjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tZXQt
cGc1Y3czN2F4MDRkZnJsPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1mY3IxNHU4dDRiZHho
PC9tYXJrOmxhYmVsPjxtYXJrOmdvb2RzQW5kU2VydmljZXM+5ZCJ5LuWPC9tYXJrOmdvb2RzQW5k
U2VydmljZXM+PG1hcms6cmVnTnVtPjEyMzQ8L21hcms6cmVnTnVtPjxtYXJrOnJlZ0RhdGU+MjAx
My0wMS0wMVQwMDowMDowMC4wMDBaPC9tYXJrOnJlZ0RhdGU+PC9tYXJrOnRyYWRlbWFyaz48L21h
cms6bWFyaz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5
L3htbGRzaWcjIiBJZD0iX2I2ZmZkNDE3LWNkODktNGM5ZS1iMDVkLTY2MjQ0ZDNhZmVjNiI+PGRz
OlNpZ25lZEluZm8+PGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFs
Z29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1
NiIvPjxkczpSZWZlcmVuY2UgVVJJPSIjXzAwMTk2ZTQ2LWJiMTctNDE3OC1hZTkxLWQxM2VmYzkw
NTljMSI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+PGRzOlRyYW5zZm9y
bSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwv
ZHM6VHJhbnNmb3Jtcz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZhbHVlPlJNakxrK09ScVlyRmZl
UGg1TWNxRklNc2pUYWJGbGZudWhJNWwxRjdyWlU9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVy
ZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI19mOWY3OGUwOS05MzkyLTRlZTItYTExZi0zOTUzM2Iz
NDg1M2YiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2Vz
dE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1
NiIvPjxkczpEaWdlc3RWYWx1ZT4zVzFBZjY4U0F3dlRjUEVjN21RZnV1VUZKaVN3eWlkWTlUZXBv
ZXc3U3JzPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PC9kczpTaWduZWRJbmZvPjxk
czpTaWduYXR1cmVWYWx1ZSBJZD0iXzMxZjlmNTEzLWQwYjktNDcwNC04NGE1LTNiYjBmOTE3MzY1
MCI+Rm9iTGpncVA0TllOUXFGeVRReHkvMGV1N05nRk5NYXgzYjRCaG5oL1Q0bkFjdWtCZ2NCK0xx
d3NranVGZUR3NDNybjY2bm9sdFBtTwphOGdDQWNNdUdjM1drcjVYdDl2N1J4dEViOFdrN3hVRXZh
WnM2R0tpNDBZQlRodElNbHhKQyswRGlaRHEzLy9SZjFzSGxDT1k3S2htCjBXeXhMOFFFbmh1RUpJ
T09mRDBFbTZzUU9yMG90N0pQVGZ1MDc3bjFuY3FYbEZqSU9JOGZLRVd1d0ZPV0JYL1BTRDNDSENl
MCtIeTIKbHI3Q0xyWGVGbWVybmt3OEFDZDZKU3h6WjBqc2ZyVWsrOXY2MmNqQjdSY2FJTjhnTk44
ZUdvSCtzR0s2M1BGWHJBQU54YXZxem9tWgp5NXhtVkwzVHUyT1gvUlc5b0xrZVdKUzhEQnlLNGIy
WnArTXE5QT09PC9kczpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iX2Y5Zjc4ZTA5LTkz
OTItNGVlMi1hMTFmLTM5NTMzYjM0ODUzZiI+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNh
dGU+TUlJRk96Q0NCQ09nQXdJQkFnSWdMckFiZXZvYWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZv
Z3hLQ2ZOaFpjd0RRWUpLb1pJaHZjTgpBUUVMQlFBd2ZERUxNQWtHQTFVRUJoTUNWVk14UERBNkJn
TlZCQW9UTTBsdWRHVnlibVYwSUVOdmNuQnZjbUYwYVc5dUlHWnZjaUJCCmMzTnBaMjVsWkNCT1lX
MWxjeUJoYm1RZ1RuVnRZbVZ5Y3pFdk1DMEdBMVVFQXhNbVNVTkJUazRnVkhKaFpHVnRZWEpySUVO
c1pXRnkKYVc1bmFHOTFjMlVnVUdsc2IzUWdRMEV3SGhjTk1UZ3dNakk0TURBd01EQXdXaGNOTWpN
d016QXhNak0xT1RVNVdqQ0JqekVMTUFrRwpBMVVFQmhNQ1FrVXhJREFlQmdOVkJBZ1RGMEp5ZFhO
elpXeHpMVU5oY0dsMFlXd2dVbVZuYVc5dU1SRXdEd1lEVlFRSEV3aENjblZ6CmMyVnNjekVSTUE4
R0ExVUVDaE1JUkdWc2IybDBkR1V4T0RBMkJnTlZCQU1UTDBsRFFVNU9JRlJOUTBnZ1FYVjBhRzl5
YVhwbFpDQlUKY21Ga1pXMWhjbXNnVUdsc2IzUWdWbUZzYVdSaGRHOXlNSUlCSWpBTkJna3Foa2lH
OXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQp4bHAzS3BZSFgzV3lBc0ZoU2szTHdXZm5HbHhu
VURGcUZaQTNVb3VNWWovWGlnYk1rTmVFWElqbGtST0tUNE9QR2ZSeC9MQXlSbFFRCmpDTXY0cWhi
a2NYMXA3YXI2M2ZscTRTWk5WY2wxNWw3aDB1VDU4RnpTZm5sejB1NXJrSGZKSW1ENDMrbWFQLzhn
djM2RlIyN2pXOFIKOXdZNGhrK1dzNElCMGlGU2Q4U1h2MUtyOHcvSm1NUVNEa2l1RytSZklpdWJ3
US9meTdFa2o1UVdoUFp3K21NeE5LbkhVTHkzeFl6MgpMd1ZmZnRqd1V1ZWFjdnFOUkNrTVhsQ2xP
QURxZlQ4b1Nab2VEWGVoSHZsUHNMQ2VtR0JvVEt1cnNrSVM2OUYweVBFSDVnemUwSCtmCjhGUk9z
SW9LU3NWUTM0QjRTL2pvRTY3bnBzSlBUZEtzTlBKVHlRSURBUUFCbzRJQmt6Q0NBWTh3REFZRFZS
MFRBUUgvQkFJd0FEQWQKQmdOVkhRNEVGZ1FVb0ZwWTc2cDV5b05EUkd0UXB6VnVSODFVV1Ewd2dj
WUdBMVVkSXdTQnZqQ0J1NEFVdzYwK3B0WVJBRVdBWERwWApTb3B0M0RFTm5uR2hnWUNrZmpCOE1R
c3dDUVlEVlFRR0V3SlZVekU4TURvR0ExVUVDaE16U1c1MFpYSnVaWFFnUTI5eWNHOXlZWFJwCmIy
NGdabTl5SUVGemMybG5ibVZrSUU1aGJXVnpJR0Z1WkNCT2RXMWlaWEp6TVM4d0xRWURWUVFERXla
SlEwRk9UaUJVY21Ga1pXMWgKY21zZ1EyeGxZWEpwYm1kb2IzVnpaU0JRYVd4dmRDQkRRWUlnTHJB
YmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTgpoWGt3RGdZRFZSMFBBUUgvQkFR
REFnZUFNRFFHQTFVZEh3UXRNQ3N3S2FBbm9DV0dJMmgwZEhBNkx5OWpjbXd1YVdOaGJtNHViM0pu
CkwzUnRZMmhmY0dsc2IzUXVZM0pzTUZFR0ExVWRJQVJLTUVnd0VBWU9Ld1lCQkFHQ3lSc0JCWU03
REFvd05BWUlLd1lCQlFVSEFnRXcKS0RBbUJnZ3JCZ0VGQlFjQ0FSWWFhSFIwY0hNNkx5OWpZUzVw
WTJGdWJpNXZjbWN2Y0dsc2IzUXdEUVlKS29aSWh2Y05BUUVMQlFBRApnZ0VCQUF1aloySWNSMkRW
cnRhUnJBNTllTllDbDR4Y3NKTXU4RFFDSHYyOGZUZmkvQmlaWTRJcjdGOWtGeTk2RDdPWjhvTFk1
empmCjRkSHhGd0hQcUg4RGg2Sldzelh1SFcxWmEzWG1sMFBhSHhDV1JTMFhvbDhXc0hIcE55Z2pN
QllmSjBvZFZNODg1VFoxRWw5U2l1RUgKbnluRkJnU21pRmM5OXVRZC9ZRFJadUd2L0EwSHl2N3lS
OXRrTEVkRDNBMXVOSkJXNFArSEpHcGRLa1lMMVE1clU3K29IVlB0TUtLSQozaUZrVUVzYk80NUFW
ZDd2UC9qLzdKdEFaUGI2a29PVjVsWmkySDFSTGNjR3d6ZGV6bmhKZ2QwTjlvYmIwdm5FNDEvVVNX
YWZkV1JaClZHa3dQdXFUaGw3c0N0enJKSDhYWTB4Y3VtK2NmTHgyRUFJd1VuT2NhYjQ9PC9kczpY
NTA5Q2VydGlmaWNhdGU+PC9kczpYNTA5RGF0YT48L2RzOktleUluZm8+PC9kczpTaWduYXR1cmU+
PC9zbWQ6c2lnbmVkTWFyaz4=
-----END ENCODED SMD-----

View File

@@ -1,102 +0,0 @@
Marks: Test &amp; Validate
smdID: 000000871526320392536-65535
U-labels: test---validate, test--validate, test-and-validate, test-andvalidate, test-validate, testand-validate, testandvalidate, testet-validate, testetvalidate, testvalidate
notBefore: 2018-05-14T17:53:12.536Z
notAfter: 2022-08-18T14:57:36.681Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8wOTJk
YzQ4Yi02ZDZhLTRiNzQtYTRhZS1mOThmZDQ0NmQ1OGEiPjxzbWQ6aWQ+MDAwMDAwODcxNTI2MzIw
MzkyNTM2LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MzoxMi41MzZaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDo1NzozNi42ODFaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTM3MTUwMzA2ODA0OTE1MDMwNjgwNDktMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT5UZXN0ICZhbXA7IFZhbGlkYXRlPC9tYXJrOm1hcmtOYW1lPjxtYXJrOmhv
bGRlciBlbnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm5hbWU+VG9ueSBIb2xsYW5kPC9tYXJrOm5h
bWU+PG1hcms6b3JnPkFnIGNvcnBvcmF0aW9uPC9tYXJrOm9yZz48bWFyazphZGRyPjxtYXJrOnN0
cmVldD4xMzA1IEJyaWdodCBBdmVudWU8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+QXJjYWRpYTwv
bWFyazpjaXR5PjxtYXJrOnBjPjkwMDI4PC9tYXJrOnBjPjxtYXJrOmNjPlVTPC9tYXJrOmNjPjwv
bWFyazphZGRyPjwvbWFyazpob2xkZXI+PG1hcms6Y29udGFjdCB0eXBlPSJhZ2VudCI+PG1hcms6
bmFtZT5Ub255IEhvbGxhbmQ8L21hcms6bmFtZT48bWFyazpvcmc+QWcgY29ycG9yYXRpb248L21h
cms6b3JnPjxtYXJrOmFkZHI+PG1hcms6c3RyZWV0PkJyaWdodCBBdmVudWUgMTMwNSA8L21hcms6
c3RyZWV0PjxtYXJrOmNpdHk+QXJjYWRpYTwvbWFyazpjaXR5PjxtYXJrOnNwPkNBPC9tYXJrOnNw
PjxtYXJrOnBjPjkwMDI4PC9tYXJrOnBjPjxtYXJrOmNjPlVTPC9tYXJrOmNjPjwvbWFyazphZGRy
PjxtYXJrOnZvaWNlPisxLjIwMjU1NjIzMDI8L21hcms6dm9pY2U+PG1hcms6ZmF4PisxLjIwMjU1
NjIzMDE8L21hcms6ZmF4PjxtYXJrOmVtYWlsPmluZm9AYWdjb3Jwb3JhdGlvbi5jb208L21hcms6
ZW1haWw+PC9tYXJrOmNvbnRhY3Q+PG1hcms6anVyaXNkaWN0aW9uPlVTPC9tYXJrOmp1cmlzZGlj
dGlvbj48bWFyazpjbGFzcz4xNTwvbWFyazpjbGFzcz48bWFyazpsYWJlbD50ZXN0LS0tdmFsaWRh
dGU8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+dGVzdC0tdmFsaWRhdGU8L21hcms6bGFiZWw+PG1h
cms6bGFiZWw+dGVzdC1hbmQtdmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+dGVzdC1h
bmR2YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0LXZhbGlkYXRlPC9tYXJrOmxh
YmVsPjxtYXJrOmxhYmVsPnRlc3RhbmQtdmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+
dGVzdGFuZHZhbGlkYXRlPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnRlc3RldC12YWxpZGF0ZTwv
bWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0ZXR2YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazps
YWJlbD50ZXN0dmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6Z29vZHNBbmRTZXJ2aWNlcz5ndWl0
YXI8L21hcms6Z29vZHNBbmRTZXJ2aWNlcz48bWFyazpyZWdOdW0+MTIzNDwvbWFyazpyZWdOdW0+
PG1hcms6cmVnRGF0ZT4yMDEzLTAxLTAxVDAwOjAwOjAwLjAwMFo8L21hcms6cmVnRGF0ZT48L21h
cms6dHJhZGVtYXJrPjwvbWFyazptYXJrPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiIElkPSJfMzI5OGQ0OGItMzMyMS00OWU1LThiMDct
YTE4Y2RlODYxNmU0Ij48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBB
bGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpT
aWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRz
aWctbW9yZSNyc2Etc2hhMjU2Ii8+PGRzOlJlZmVyZW5jZSBVUkk9IiNfMDkyZGM0OGItNmQ2YS00
Yjc0LWE0YWUtZjk4ZmQ0NDZkNThhIj48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29y
aXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1
cmUiLz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94
bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGht
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFs
dWU+dU5TZ2VTclIvbXpHVmdUdmVjRHZCVFdiZDVqTWdKbENEODNrandIemJ4Zz08L2RzOkRpZ2Vz
dFZhbHVlPjwvZHM6UmVmZXJlbmNlPjxkczpSZWZlcmVuY2UgVVJJPSIjX2U0YTNhNjEzLTAzYTEt
NGZiMi05NWIwLTU2ODVlZDAzYjI4NyI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdv
cml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJh
bnNmb3Jtcz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS8wNC94bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZhbHVlPkZVbjdMcmVhWFVUQzQ3dkVueXQw
aXZZRXhVZUdJblBVMU5FUWY4NXNyUk09PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48
L2RzOlNpZ25lZEluZm8+PGRzOlNpZ25hdHVyZVZhbHVlIElkPSJfMjdjODQxOWUtOTk3Yy00NmQz
LWIxNTEtOTUwODQ1ZjgwOWE3Ij5pSmpxWnFaczdXcE91UzZVNVU0bS8zRzB4ZG9Ya3ZORk93UmNq
QjI3UFlFNEQ3cVd4d3JDeUZYUTdtNXhkcTAxR1NpeHRpYjlKOXIwClpzZEROaXZyR0c2b05JTGNs
a0J1UzRlR3pDMWo3cEZ0alYvRjFNclNiRlI3ZUN3eDhXd2p0N3lBdGlEYXQ0L3VSQkEwQlEyeEpV
QSsKQ3IxRml4ckdHSkZNREsxRzBRSU5FU0grK3lNUFZKM0x1ckFTSEJjY0syeVlQTWN6ME5yenJF
b0RHd0R0QVk5YXpmQTZndlRDZHZCVwpxOXpxR2NSaTIxOXAvb3c0aW5CcmNsQ05qMGdrUDRwMk5t
UTVmM29WSEI2MFVBQ2FFaDV1aUROZ2Q0QkszdDN0N0JQUHN2bStyb0N0CjNIR2V0dnFzK3RQdlE2
Mm1RRWFZVGtCSTZCS0M0TEVYYjRwdzRRPT08L2RzOlNpZ25hdHVyZVZhbHVlPjxkczpLZXlJbmZv
IElkPSJfZTRhM2E2MTMtMDNhMS00ZmIyLTk1YjAtNTY4NWVkMDNiMjg3Ij48ZHM6WDUwOURhdGE+
PGRzOlg1MDlDZXJ0aWZpY2F0ZT5NSUlGT3pDQ0JDT2dBd0lCQWdJZ0xyQWJldm9hZTUyeTNmNkMy
dEIwU24zcDdYSm0wVDAyRm9neEtDZk5oWmN3RFFZSktvWklodmNOCkFRRUxCUUF3ZkRFTE1Ba0dB
MVVFQmhNQ1ZWTXhQREE2QmdOVkJBb1RNMGx1ZEdWeWJtVjBJRU52Y25CdmNtRjBhVzl1SUdadmNp
QkIKYzNOcFoyNWxaQ0JPWVcxbGN5QmhibVFnVG5WdFltVnljekV2TUMwR0ExVUVBeE1tU1VOQlRr
NGdWSEpoWkdWdFlYSnJJRU5zWldGeQphVzVuYUc5MWMyVWdVR2xzYjNRZ1EwRXdIaGNOTVRnd01q
STRNREF3TURBd1doY05Nak13TXpBeE1qTTFPVFU1V2pDQmp6RUxNQWtHCkExVUVCaE1DUWtVeElE
QWVCZ05WQkFnVEYwSnlkWE56Wld4ekxVTmhjR2wwWVd3Z1VtVm5hVzl1TVJFd0R3WURWUVFIRXdo
Q2NuVnoKYzJWc2N6RVJNQThHQTFVRUNoTUlSR1ZzYjJsMGRHVXhPREEyQmdOVkJBTVRMMGxEUVU1
T0lGUk5RMGdnUVhWMGFHOXlhWHBsWkNCVQpjbUZrWlcxaGNtc2dVR2xzYjNRZ1ZtRnNhV1JoZEc5
eU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBCnhscDNLcFlIWDNX
eUFzRmhTazNMd1dmbkdseG5VREZxRlpBM1VvdU1Zai9YaWdiTWtOZUVYSWpsa1JPS1Q0T1BHZlJ4
L0xBeVJsUVEKakNNdjRxaGJrY1gxcDdhcjYzZmxxNFNaTlZjbDE1bDdoMHVUNThGelNmbmx6MHU1
cmtIZkpJbUQ0MyttYVAvOGd2MzZGUjI3alc4Ugo5d1k0aGsrV3M0SUIwaUZTZDhTWHYxS3I4dy9K
bU1RU0RraXVHK1JmSWl1YndRL2Z5N0VrajVRV2hQWncrbU14TktuSFVMeTN4WXoyCkx3VmZmdGp3
VXVlYWN2cU5SQ2tNWGxDbE9BRHFmVDhvU1pvZURYZWhIdmxQc0xDZW1HQm9US3Vyc2tJUzY5RjB5
UEVINWd6ZTBIK2YKOEZST3NJb0tTc1ZRMzRCNFMvam9FNjducHNKUFRkS3NOUEpUeVFJREFRQUJv
NElCa3pDQ0FZOHdEQVlEVlIwVEFRSC9CQUl3QURBZApCZ05WSFE0RUZnUVVvRnBZNzZwNXlvTkRS
R3RRcHpWdVI4MVVXUTB3Z2NZR0ExVWRJd1NCdmpDQnU0QVV3NjArcHRZUkFFV0FYRHBYClNvcHQz
REVObm5HaGdZQ2tmakI4TVFzd0NRWURWUVFHRXdKVlV6RThNRG9HQTFVRUNoTXpTVzUwWlhKdVpY
UWdRMjl5Y0c5eVlYUnAKYjI0Z1ptOXlJRUZ6YzJsbmJtVmtJRTVoYldWeklHRnVaQ0JPZFcxaVpY
SnpNUzh3TFFZRFZRUURFeVpKUTBGT1RpQlVjbUZrWlcxaApjbXNnUTJ4bFlYSnBibWRvYjNWelpT
QlFhV3h2ZENCRFFZSWdMckFiZXZvYWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOCmhY
a3dEZ1lEVlIwUEFRSC9CQVFEQWdlQU1EUUdBMVVkSHdRdE1Dc3dLYUFub0NXR0kyaDBkSEE2THk5
amNtd3VhV05oYm00dWIzSm4KTDNSdFkyaGZjR2xzYjNRdVkzSnNNRkVHQTFVZElBUktNRWd3RUFZ
T0t3WUJCQUdDeVJzQkJZTTdEQW93TkFZSUt3WUJCUVVIQWdFdwpLREFtQmdnckJnRUZCUWNDQVJZ
YWFIUjBjSE02THk5allTNXBZMkZ1Ymk1dmNtY3ZjR2xzYjNRd0RRWUpLb1pJaHZjTkFRRUxCUUFE
CmdnRUJBQXVqWjJJY1IyRFZydGFSckE1OWVOWUNsNHhjc0pNdThEUUNIdjI4ZlRmaS9CaVpZNEly
N0Y5a0Z5OTZEN09aOG9MWTV6amYKNGRIeEZ3SFBxSDhEaDZKV3N6WHVIVzFaYTNYbWwwUGFIeENX
UlMwWG9sOFdzSEhwTnlnak1CWWZKMG9kVk04ODVUWjFFbDlTaXVFSApueW5GQmdTbWlGYzk5dVFk
L1lEUlp1R3YvQTBIeXY3eVI5dGtMRWREM0ExdU5KQlc0UCtISkdwZEtrWUwxUTVyVTcrb0hWUHRN
S0tJCjNpRmtVRXNiTzQ1QVZkN3ZQL2ovN0p0QVpQYjZrb09WNWxaaTJIMVJMY2NHd3pkZXpuaEpn
ZDBOOW9iYjB2bkU0MS9VU1dhZmRXUloKVkdrd1B1cVRobDdzQ3R6ckpIOFhZMHhjdW0rY2ZMeDJF
QUl3VW5PY2FiND08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5m
bz48L2RzOlNpZ25hdHVyZT48L3NtZDpzaWduZWRNYXJrPg==
-----END ENCODED SMD-----

View File

@@ -1,103 +0,0 @@
Marks: Essai &amp; évaluation
smdID: 000000831526320386700-65535
U-labels: xn--essai---valuation-itb, xn--essai--valuation-hqb, xn--essai-and-valuation-kzb, xn--essai-andvaluation-jwb, xn--essai-valuation-gnb, xn--essaiand-valuation-jwb, xn--essaiandvaluation-itb, xn--essaiet-valuation-itb, xn--essaietvaluation-hqb, xn--essaivaluation-fkb
notBefore: 2018-05-14T17:53:06.700Z
notAfter: 2022-08-18T14:46:53.013Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8wNDc1
MzkxZi03MzU1LTQ2ZTctODAxOC0yMDdkOWY4OGIzNjYiPjxzbWQ6aWQ+MDAwMDAwODMxNTI2MzIw
Mzg2NzAwLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MzowNi43MDBaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDo0Njo1My4wMTNaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTM5MTUwMzA2NzM4MjE1MDMwNjczODItMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT5Fc3NhaSAmYW1wOyDDqXZhbHVhdGlvbjwvbWFyazptYXJrTmFtZT48bWFy
azpob2xkZXIgZW50aXRsZW1lbnQ9Im93bmVyIj48bWFyazpvcmc+QWdlbmNlIGVuIEZyYW5jZTwv
bWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpzdHJlZXQ+MTAgQXZlbnVlIFJvdXNzZWF1eDwvbWFy
azpzdHJlZXQ+PG1hcms6Y2l0eT5WZXJzYWlsbGVzPC9tYXJrOmNpdHk+PG1hcms6cGM+MzMwODE8
L21hcms6cGM+PG1hcms6Y2M+RlI8L21hcms6Y2M+PC9tYXJrOmFkZHI+PC9tYXJrOmhvbGRlcj48
bWFyazpjb250YWN0IHR5cGU9ImFnZW50Ij48bWFyazpuYW1lPkZyYW5jIExlYnJ1bjwvbWFyazpu
YW1lPjxtYXJrOm9yZz5BZ2VuY2UgZW4gRnJhbmNlPC9tYXJrOm9yZz48bWFyazphZGRyPjxtYXJr
OnN0cmVldD5BdmVudWUgUm91c3NlYXV4IDEwIDwvbWFyazpzdHJlZXQ+PG1hcms6Y2l0eT5WZXJz
YWlsbGVzPC9tYXJrOmNpdHk+PG1hcms6cGM+MzMwODE8L21hcms6cGM+PG1hcms6Y2M+RlI8L21h
cms6Y2M+PC9tYXJrOmFkZHI+PG1hcms6dm9pY2U+KzMzLjEyNTc4MTI1MDwvbWFyazp2b2ljZT48
bWFyazpmYXg+KzMzLjEyNTc4MTI1MTwvbWFyazpmYXg+PG1hcms6ZW1haWw+aW5mb0BhZ2VuY2Ut
ZW4tZnJhbmNlLmZyPC9tYXJrOmVtYWlsPjwvbWFyazpjb250YWN0PjxtYXJrOmp1cmlzZGljdGlv
bj5VUzwvbWFyazpqdXJpc2RpY3Rpb24+PG1hcms6Y2xhc3M+MTU8L21hcms6Y2xhc3M+PG1hcms6
bGFiZWw+eG4tLWVzc2FpLS0tdmFsdWF0aW9uLWl0YjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54
bi0tZXNzYWktLXZhbHVhdGlvbi1ocWI8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLWVzc2Fp
LWFuZC12YWx1YXRpb24ta3piPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1lc3NhaS1hbmR2
YWx1YXRpb24tandiPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1lc3NhaS12YWx1YXRpb24t
Z25iPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1lc3NhaWFuZC12YWx1YXRpb24tandiPC9t
YXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1lc3NhaWFuZHZhbHVhdGlvbi1pdGI8L21hcms6bGFi
ZWw+PG1hcms6bGFiZWw+eG4tLWVzc2FpZXQtdmFsdWF0aW9uLWl0YjwvbWFyazpsYWJlbD48bWFy
azpsYWJlbD54bi0tZXNzYWlldHZhbHVhdGlvbi1ocWI8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+
eG4tLWVzc2FpdmFsdWF0aW9uLWZrYjwvbWFyazpsYWJlbD48bWFyazpnb29kc0FuZFNlcnZpY2Vz
Pmd1aXRhcjwvbWFyazpnb29kc0FuZFNlcnZpY2VzPjxtYXJrOnJlZ051bT4xMjM0PC9tYXJrOnJl
Z051bT48bWFyazpyZWdEYXRlPjIwMTMtMDEtMDFUMDA6MDA6MDAuMDAwWjwvbWFyazpyZWdEYXRl
PjwvbWFyazp0cmFkZW1hcms+PC9tYXJrOm1hcms+PGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIgSWQ9Il9kODJkMWNjZC01NDE1LTQ1ZGMt
YmFlZS02YjQ0MTQyZjRiZjEiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0
aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+
PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQv
eG1sZHNpZy1tb3JlI3JzYS1zaGEyNTYiLz48ZHM6UmVmZXJlbmNlIFVSST0iI18wNDc1MzkxZi03
MzU1LTQ2ZTctODAxOC0yMDdkOWY4OGIzNjYiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0g
QWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNp
Z25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
LzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdv
cml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdl
c3RWYWx1ZT5CTWRyLzg3cVpocHQ1SXVvVXdTUFpiQ3JsMEQvYzMvS2RLM1ZTV2RFUmo0PTwvZHM6
RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PGRzOlJlZmVyZW5jZSBVUkk9IiNfNDhiZjM0ZTgt
NWM3MC00ZDRlLTg2MDItNWEwNTAwYWYyNWQ3Ij48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3Jt
IEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9k
czpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+cEZ0RTkxTEwyZ2h0SDZ0
cmtyR2ppWE1pZlpyQ1pNMUhXRXFZSmtTQ1ZwND08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJl
bmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9Il8yNGVjYWRhNS1kYjZj
LTQ4MmEtOWM3Mi0wYWJiYjUyNmU1OGIiPlNTbjRXeWVZNDZyVmdMZGQzNUNJQlAva2taMFFMWFpO
ajd0ZUhhUU1OVC9ROU5sRWNicmo0Y2djWFZNNXlsT1M5SXQvdjdvQ09jckMKK2cxbTdINjB1Vkg3
U0w0bWl5dWVyYW5vZy9GU2ZTd1J1akc4Z0MyWEhqQUNEU2dxbnFYN3YzempWRkI4VFZrYjhLWHJh
a29jM0tRUAo2ZjlDNmcxcll3QlBiVnZNV1FUd3BwSHJBbmRnRFlUb3pUOWowRmVzcWljbm14UzhG
ZU1DRHl4UkYydmxCQ05RaUk0QmZ6NVpYcHhFClhRdnEvdjBkVmk0cnl0UWY3K29UMnBHSlJNUVV3
ZHpXVmJOZnZvU2ZMUDBlRHFkUHcxczI1MVpHamhyRm9LOWRZRDBOMmo2RG5mSUgKUG9LbjNXSCtl
bVBvaGt3UlFGUmZlT2JUbnhwOGwyNmRsMWNVOVE9PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktl
eUluZm8gSWQ9Il80OGJmMzRlOC01YzcwLTRkNGUtODYwMi01YTA1MDBhZjI1ZDciPjxkczpYNTA5
RGF0YT48ZHM6WDUwOUNlcnRpZmljYXRlPk1JSUZPekNDQkNPZ0F3SUJBZ0lnTHJBYmV2b2FlNTJ5
M2Y2QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTmhaY3dEUVlKS29aSWh2Y04KQVFFTEJRQXdmREVM
TUFrR0ExVUVCaE1DVlZNeFBEQTZCZ05WQkFvVE0wbHVkR1Z5Ym1WMElFTnZjbkJ2Y21GMGFXOXVJ
R1p2Y2lCQgpjM05wWjI1bFpDQk9ZVzFsY3lCaGJtUWdUblZ0WW1WeWN6RXZNQzBHQTFVRUF4TW1T
VU5CVGs0Z1ZISmhaR1Z0WVhKcklFTnNaV0Z5CmFXNW5hRzkxYzJVZ1VHbHNiM1FnUTBFd0hoY05N
VGd3TWpJNE1EQXdNREF3V2hjTk1qTXdNekF4TWpNMU9UVTVXakNCanpFTE1Ba0cKQTFVRUJoTUNR
a1V4SURBZUJnTlZCQWdURjBKeWRYTnpaV3h6TFVOaGNHbDBZV3dnVW1WbmFXOXVNUkV3RHdZRFZR
UUhFd2hDY25WegpjMlZzY3pFUk1BOEdBMVVFQ2hNSVJHVnNiMmwwZEdVeE9EQTJCZ05WQkFNVEww
bERRVTVPSUZSTlEwZ2dRWFYwYUc5eWFYcGxaQ0JVCmNtRmtaVzFoY21zZ1VHbHNiM1FnVm1Gc2FX
UmhkRzl5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEKeGxwM0tw
WUhYM1d5QXNGaFNrM0x3V2ZuR2x4blVERnFGWkEzVW91TVlqL1hpZ2JNa05lRVhJamxrUk9LVDRP
UEdmUngvTEF5UmxRUQpqQ012NHFoYmtjWDFwN2FyNjNmbHE0U1pOVmNsMTVsN2gwdVQ1OEZ6U2Zu
bHowdTVya0hmSkltRDQzK21hUC84Z3YzNkZSMjdqVzhSCjl3WTRoaytXczRJQjBpRlNkOFNYdjFL
cjh3L0ptTVFTRGtpdUcrUmZJaXVid1EvZnk3RWtqNVFXaFBadyttTXhOS25IVUx5M3hZejIKTHdW
ZmZ0andVdWVhY3ZxTlJDa01YbENsT0FEcWZUOG9TWm9lRFhlaEh2bFBzTENlbUdCb1RLdXJza0lT
NjlGMHlQRUg1Z3plMEgrZgo4RlJPc0lvS1NzVlEzNEI0Uy9qb0U2N25wc0pQVGRLc05QSlR5UUlE
QVFBQm80SUJrekNDQVk4d0RBWURWUjBUQVFIL0JBSXdBREFkCkJnTlZIUTRFRmdRVW9GcFk3NnA1
eW9ORFJHdFFwelZ1UjgxVVdRMHdnY1lHQTFVZEl3U0J2akNCdTRBVXc2MCtwdFlSQUVXQVhEcFgK
U29wdDNERU5ubkdoZ1lDa2ZqQjhNUXN3Q1FZRFZRUUdFd0pWVXpFOE1Eb0dBMVVFQ2hNelNXNTBa
WEp1WlhRZ1EyOXljRzl5WVhScApiMjRnWm05eUlFRnpjMmxuYm1Wa0lFNWhiV1Z6SUdGdVpDQk9k
VzFpWlhKek1TOHdMUVlEVlFRREV5WkpRMEZPVGlCVWNtRmtaVzFoCmNtc2dRMnhsWVhKcGJtZG9i
M1Z6WlNCUWFXeHZkQ0JEUVlJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdYSm0wVDAyRm9neEtD
Zk4KaFhrd0RnWURWUjBQQVFIL0JBUURBZ2VBTURRR0ExVWRId1F0TUNzd0thQW5vQ1dHSTJoMGRI
QTZMeTlqY213dWFXTmhibTR1YjNKbgpMM1J0WTJoZmNHbHNiM1F1WTNKc01GRUdBMVVkSUFSS01F
Z3dFQVlPS3dZQkJBR0N5UnNCQllNN0RBb3dOQVlJS3dZQkJRVUhBZ0V3CktEQW1CZ2dyQmdFRkJR
Y0NBUllhYUhSMGNITTZMeTlqWVM1cFkyRnViaTV2Y21jdmNHbHNiM1F3RFFZSktvWklodmNOQVFF
TEJRQUQKZ2dFQkFBdWpaMkljUjJEVnJ0YVJyQTU5ZU5ZQ2w0eGNzSk11OERRQ0h2MjhmVGZpL0Jp
Wlk0SXI3RjlrRnk5NkQ3T1o4b0xZNXpqZgo0ZEh4RndIUHFIOERoNkpXc3pYdUhXMVphM1htbDBQ
YUh4Q1dSUzBYb2w4V3NISHBOeWdqTUJZZkowb2RWTTg4NVRaMUVsOVNpdUVICm55bkZCZ1NtaUZj
OTl1UWQvWURSWnVHdi9BMEh5djd5Ujl0a0xFZEQzQTF1TkpCVzRQK0hKR3BkS2tZTDFRNXJVNytv
SFZQdE1LS0kKM2lGa1VFc2JPNDVBVmQ3dlAvai83SnRBWlBiNmtvT1Y1bFppMkgxUkxjY0d3emRl
em5oSmdkME45b2JiMHZuRTQxL1VTV2FmZFdSWgpWR2t3UHVxVGhsN3NDdHpySkg4WFkweGN1bStj
Zkx4MkVBSXdVbk9jYWI0PTwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpL
ZXlJbmZvPjwvZHM6U2lnbmF0dXJlPjwvc21kOnNpZ25lZE1hcms+
-----END ENCODED SMD-----

View File

@@ -1,104 +0,0 @@
Marks: суда &amp; ошибки
smdID: 000000741526320369172-65535
U-labels: xn------5cdin6abr1b1ay5e, xn-----6kcgl1abp7azaw9d, xn---and--3vemr6bbv9b5a2a7f, xn---and-43dkp1bbt5b3a0a1f, xn----7sbejwbn3axu3d, xn--and--43dkp1bbt5b3a0a1f, xn--and-5cdin6abr1b1ay5e, xn--et--5cdin6abr1b1ay5e, xn--et-6kcgl1abp7azaw9d, xn--80achrblzvs7c
notBefore: 2018-05-14T17:52:49.172Z
notAfter: 2022-08-18T14:16:55.554Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8zZmM4
NjdlYy0yODlhLTQwMzEtYmQ2Mi1jNDdhZWUzOGNkZGMiPjxzbWQ6aWQ+MDAwMDAwNzQxNTI2MzIw
MzY5MTcyLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1Mjo0OS4xNzJaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDoxNjo1NS41NTRaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTQxMTUwMzA2NTU1MDE1MDMwNjU1NTAtMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT7RgdGD0LTQsCAmYW1wOyDQvtGI0LjQsdC60Lg8L21hcms6bWFya05hbWU+
PG1hcms6aG9sZGVyIGVudGl0bGVtZW50PSJvd25lciI+PG1hcms6b3JnPtCQ0LPQtdC90YLRgdGC
0LLQvjwvbWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpzdHJlZXQ+0J/RgNC+0YHQv9C10LrRgiDQ
ktC10YDQvdCw0LTRgdC60L7Qs9C+IDE1PC9tYXJrOnN0cmVldD48bWFyazpjaXR5PtCc0L7RgdC6
0LLQsDwvbWFyazpjaXR5PjxtYXJrOnBjPjExNzQ4NTwvbWFyazpwYz48bWFyazpjYz5SVTwvbWFy
azpjYz48L21hcms6YWRkcj48L21hcms6aG9sZGVyPjxtYXJrOmNvbnRhY3QgdHlwZT0iYWdlbnQi
PjxtYXJrOm5hbWU+0J3QsNGC0LDQu9GM0Y8g0JDQvdGC0L7QvdC+0LLQsDwvbWFyazpuYW1lPjxt
YXJrOm9yZz7QkNCz0LXQvdGC0YHRgtCy0L48L21hcms6b3JnPjxtYXJrOmFkZHI+PG1hcms6c3Ry
ZWV0PtCf0YDQvtGB0L/QtdC60YIg0JLQtdGA0L3QsNC00YHQutC+0LPQviAxNTwvbWFyazpzdHJl
ZXQ+PG1hcms6Y2l0eT7QnNC+0YHQutCy0LA8L21hcms6Y2l0eT48bWFyazpwYz4xMTc0ODU8L21h
cms6cGM+PG1hcms6Y2M+UlU8L21hcms6Y2M+PC9tYXJrOmFkZHI+PG1hcms6dm9pY2U+KzcuOTE4
ODIyMTY3NDwvbWFyazp2b2ljZT48bWFyazpmYXg+KzcuOTE4ODIyMTY3MzwvbWFyazpmYXg+PG1h
cms6ZW1haWw+aW5mb0BhZ2VuY3kucnU8L21hcms6ZW1haWw+PC9tYXJrOmNvbnRhY3Q+PG1hcms6
anVyaXNkaWN0aW9uPlVTPC9tYXJrOmp1cmlzZGljdGlvbj48bWFyazpjbGFzcz4xNTwvbWFyazpj
bGFzcz48bWFyazpsYWJlbD54bi0tLS0tLTVjZGluNmFicjFiMWF5NWU8L21hcms6bGFiZWw+PG1h
cms6bGFiZWw+eG4tLS0tLTZrY2dsMWFicDdhemF3OWQ8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+
eG4tLS1hbmQtLTN2ZW1yNmJidjliNWEyYTdmPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS0t
YW5kLTQzZGtwMWJidDViM2EwYTFmPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS0tLTdzYmVq
d2JuM2F4dTNkPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1hbmQtLTQzZGtwMWJidDViM2Ew
YTFmPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1hbmQtNWNkaW42YWJyMWIxYXk1ZTwvbWFy
azpsYWJlbD48bWFyazpsYWJlbD54bi0tZXQtLTVjZGluNmFicjFiMWF5NWU8L21hcms6bGFiZWw+
PG1hcms6bGFiZWw+eG4tLWV0LTZrY2dsMWFicDdhemF3OWQ8L21hcms6bGFiZWw+PG1hcms6bGFi
ZWw+eG4tLTgwYWNocmJsenZzN2M8L21hcms6bGFiZWw+PG1hcms6Z29vZHNBbmRTZXJ2aWNlcz7Q
s9C40YLQsNGA0LAgPC9tYXJrOmdvb2RzQW5kU2VydmljZXM+PG1hcms6cmVnTnVtPjEyMzQ8L21h
cms6cmVnTnVtPjxtYXJrOnJlZ0RhdGU+MjAxMy0wMS0wMVQwMDowMDowMC4wMDBaPC9tYXJrOnJl
Z0RhdGU+PC9tYXJrOnRyYWRlbWFyaz48L21hcms6bWFyaz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRz
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJZD0iXzJkYzkzZmYwLWE2OTEt
NGI5Ni05ZWQxLWQ0MjEyMjAxN2UxMyI+PGRzOlNpZ25lZEluZm8+PGRzOkNhbm9uaWNhbGl6YXRp
b25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0
biMiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxkczpSZWZlcmVuY2UgVVJJPSIjXzNmYzg2
N2VjLTI4OWEtNDAzMS1iZDYyLWM0N2FlZTM4Y2RkYyI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5z
Zm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9w
ZWQtc2lnbmF0dXJlIi8+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jtcz48ZHM6RGlnZXN0TWV0aG9k
IEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+PGRz
OkRpZ2VzdFZhbHVlPnFRMThOYktsOW0zS2NSS291aFRMWTErSXd3WFNkeEhTZlRMMk80cjFnSU09
PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI18xNGQ1
MzQ4MS04MTUzLTRhNDItOGI3OS0xNWYwMzI1N2FjYjYiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFu
c2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMi
Lz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5IcUplczRqN0dw
ODUrdmNvMVo2Q1A0VjA1dFU3c01FbDBQR0gwSDlJYjR3PTwvZHM6RGlnZXN0VmFsdWU+PC9kczpS
ZWZlcmVuY2U+PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZSBJZD0iXzVjNDllNzcw
LTJjYjMtNDg0OC05OWY1LWNhOTBlMDdhYmJhZSI+bmg1eGhwQ2tHdElmbnhVUGdUMmV6Uk5ZVWQ5
bjRGT2E2N1pSaW81QzdkbzkybjU0OTAzdTUwbThIV0FDTmdUdGVWTitvQ2lMNGNXdgpnQ1prNDJ0
bHdiY3dhb0I3cjJmK3ZsTzR6eDdFbUc2UDZPYWl3aWRYYjVabUdoOVc4dVplVk54VUtjLytjenNk
d0xBUmVQeXpZL2JOCjEzT3ZoSEkrbHM3TitDUkhNdTlwZUdIZXdBQlpIV0RKYXpXZWxPQVZkcVNY
L2hEOVVBSGY5QXo2RjdhZEp3RTVUN2JMOGxuRlVGaWMKQ3BlRDMxN0ZGOU1YTWdqU1hXMWpOVDdP
aUlLeXUxeXQ1WXFIZUtFU2ZiSklpY01WUVZDa3NVMUw1YWpWYzMyOUNudDM5N09Bb0JHdgpDei9N
SzhvV0o2UmluUHB3dThQN05TVzF1eWRVaTBKZE1CL0cyZz09PC9kczpTaWduYXR1cmVWYWx1ZT48
ZHM6S2V5SW5mbyBJZD0iXzE0ZDUzNDgxLTgxNTMtNGE0Mi04Yjc5LTE1ZjAzMjU3YWNiNiI+PGRz
Olg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRk96Q0NCQ09nQXdJQkFnSWdMckFiZXZv
YWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOaFpjd0RRWUpLb1pJaHZjTgpBUUVMQlFB
d2ZERUxNQWtHQTFVRUJoTUNWVk14UERBNkJnTlZCQW9UTTBsdWRHVnlibVYwSUVOdmNuQnZjbUYw
YVc5dUlHWnZjaUJCCmMzTnBaMjVsWkNCT1lXMWxjeUJoYm1RZ1RuVnRZbVZ5Y3pFdk1DMEdBMVVF
QXhNbVNVTkJUazRnVkhKaFpHVnRZWEpySUVOc1pXRnkKYVc1bmFHOTFjMlVnVUdsc2IzUWdRMEV3
SGhjTk1UZ3dNakk0TURBd01EQXdXaGNOTWpNd016QXhNak0xT1RVNVdqQ0JqekVMTUFrRwpBMVVF
QmhNQ1FrVXhJREFlQmdOVkJBZ1RGMEp5ZFhOelpXeHpMVU5oY0dsMFlXd2dVbVZuYVc5dU1SRXdE
d1lEVlFRSEV3aENjblZ6CmMyVnNjekVSTUE4R0ExVUVDaE1JUkdWc2IybDBkR1V4T0RBMkJnTlZC
QU1UTDBsRFFVNU9JRlJOUTBnZ1FYVjBhRzl5YVhwbFpDQlUKY21Ga1pXMWhjbXNnVUdsc2IzUWdW
bUZzYVdSaGRHOXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQp4
bHAzS3BZSFgzV3lBc0ZoU2szTHdXZm5HbHhuVURGcUZaQTNVb3VNWWovWGlnYk1rTmVFWElqbGtS
T0tUNE9QR2ZSeC9MQXlSbFFRCmpDTXY0cWhia2NYMXA3YXI2M2ZscTRTWk5WY2wxNWw3aDB1VDU4
RnpTZm5sejB1NXJrSGZKSW1ENDMrbWFQLzhndjM2RlIyN2pXOFIKOXdZNGhrK1dzNElCMGlGU2Q4
U1h2MUtyOHcvSm1NUVNEa2l1RytSZklpdWJ3US9meTdFa2o1UVdoUFp3K21NeE5LbkhVTHkzeFl6
MgpMd1ZmZnRqd1V1ZWFjdnFOUkNrTVhsQ2xPQURxZlQ4b1Nab2VEWGVoSHZsUHNMQ2VtR0JvVEt1
cnNrSVM2OUYweVBFSDVnemUwSCtmCjhGUk9zSW9LU3NWUTM0QjRTL2pvRTY3bnBzSlBUZEtzTlBK
VHlRSURBUUFCbzRJQmt6Q0NBWTh3REFZRFZSMFRBUUgvQkFJd0FEQWQKQmdOVkhRNEVGZ1FVb0Zw
WTc2cDV5b05EUkd0UXB6VnVSODFVV1Ewd2djWUdBMVVkSXdTQnZqQ0J1NEFVdzYwK3B0WVJBRVdB
WERwWApTb3B0M0RFTm5uR2hnWUNrZmpCOE1Rc3dDUVlEVlFRR0V3SlZVekU4TURvR0ExVUVDaE16
U1c1MFpYSnVaWFFnUTI5eWNHOXlZWFJwCmIyNGdabTl5SUVGemMybG5ibVZrSUU1aGJXVnpJR0Z1
WkNCT2RXMWlaWEp6TVM4d0xRWURWUVFERXlaSlEwRk9UaUJVY21Ga1pXMWgKY21zZ1EyeGxZWEpw
Ym1kb2IzVnpaU0JRYVd4dmRDQkRRWUlnTHJBYmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBUMDJG
b2d4S0NmTgpoWGt3RGdZRFZSMFBBUUgvQkFRREFnZUFNRFFHQTFVZEh3UXRNQ3N3S2FBbm9DV0dJ
MmgwZEhBNkx5OWpjbXd1YVdOaGJtNHViM0puCkwzUnRZMmhmY0dsc2IzUXVZM0pzTUZFR0ExVWRJ
QVJLTUVnd0VBWU9Ld1lCQkFHQ3lSc0JCWU03REFvd05BWUlLd1lCQlFVSEFnRXcKS0RBbUJnZ3JC
Z0VGQlFjQ0FSWWFhSFIwY0hNNkx5OWpZUzVwWTJGdWJpNXZjbWN2Y0dsc2IzUXdEUVlKS29aSWh2
Y05BUUVMQlFBRApnZ0VCQUF1aloySWNSMkRWcnRhUnJBNTllTllDbDR4Y3NKTXU4RFFDSHYyOGZU
ZmkvQmlaWTRJcjdGOWtGeTk2RDdPWjhvTFk1empmCjRkSHhGd0hQcUg4RGg2Sldzelh1SFcxWmEz
WG1sMFBhSHhDV1JTMFhvbDhXc0hIcE55Z2pNQllmSjBvZFZNODg1VFoxRWw5U2l1RUgKbnluRkJn
U21pRmM5OXVRZC9ZRFJadUd2L0EwSHl2N3lSOXRrTEVkRDNBMXVOSkJXNFArSEpHcGRLa1lMMVE1
clU3K29IVlB0TUtLSQozaUZrVUVzYk80NUFWZDd2UC9qLzdKdEFaUGI2a29PVjVsWmkySDFSTGNj
R3d6ZGV6bmhKZ2QwTjlvYmIwdm5FNDEvVVNXYWZkV1JaClZHa3dQdXFUaGw3c0N0enJKSDhYWTB4
Y3VtK2NmTHgyRUFJd1VuT2NhYjQ9PC9kczpYNTA5Q2VydGlmaWNhdGU+PC9kczpYNTA5RGF0YT48
L2RzOktleUluZm8+PC9kczpTaWduYXR1cmU+PC9zbWQ6c2lnbmVkTWFyaz4=
-----END ENCODED SMD-----

View File

@@ -1,99 +0,0 @@
Marks: الاختبار &amp; لتقييم
smdID: 000000901526320396418-65535
U-labels: xn------nzeaagpf7azb2ppajr3fa, xn-----btdaafne4a7azpoaiq8ea, xn----ymcaaeld1a4a6onahp3ea, xn-----btdaafne4a7azpoaiq4byba, xn----ymcaaeld1a4a6onahp2b7aa, xn--mgbaadjcy1a8mmago8da, xn----ymcaaeld1a4a6onahp1b8aa, xn--mgbaadjcy1a8mmago9a5aa
notBefore: 2018-05-14T17:53:16.418Z
notAfter: 2022-08-21T08:59:34.305Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il83YWMz
NWQ1MS1mZTgyLTQ5ODYtYTgzMC1iZjg1NDI4MzI1YWMiPjxzbWQ6aWQ+MDAwMDAwOTAxNTI2MzIw
Mzk2NDE4LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MzoxNi40MThaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODo1OTozNC4zMDVaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTQyMTUwMzMwNTI5OTE1MDMzMDUyOTktMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT7Yp9mE2KfYrtiq2KjYp9ixICZhbXA7INmE2KrZgtmK2YrZhTwvbWFyazpt
YXJrTmFtZT48bWFyazpob2xkZXIgZW50aXRsZW1lbnQ9Im93bmVyIj48bWFyazpuYW1lPtmF2YfZ
htiv2LMg2KfZhNmF2LnZhNmI2YXYp9iq2YrYqTwvbWFyazpuYW1lPjxtYXJrOm9yZz7Yp9iu2KrY
qNin2LE8L21hcms6b3JnPjxtYXJrOmFkZHI+PG1hcms6c3RyZWV0Ptis2LnZgdixINin2KjZhiDY
s9mK2YbYp9ihIDc1PC9tYXJrOnN0cmVldD48bWFyazpjaXR5PtmF2YPZhtin2LM8L21hcms6Y2l0
eT48bWFyazpwYz4yOTAwPC9tYXJrOnBjPjxtYXJrOmNjPk1BPC9tYXJrOmNjPjwvbWFyazphZGRy
PjxtYXJrOnZvaWNlPisyMTIuNTIyNTM5MDQwPC9tYXJrOnZvaWNlPjxtYXJrOmZheD4rMjEyLjUy
MjUzOTA0MTwvbWFyazpmYXg+PG1hcms6ZW1haWw+aW5mb0BleGFtcGxlLmV4YW1wbGU8L21hcms6
ZW1haWw+PC9tYXJrOmhvbGRlcj48bWFyazpqdXJpc2RpY3Rpb24+TUE8L21hcms6anVyaXNkaWN0
aW9uPjxtYXJrOmNsYXNzPjE1PC9tYXJrOmNsYXNzPjxtYXJrOmxhYmVsPnhuLS0tLS0tbnplYWFn
cGY3YXpiMnBwYWpyM2ZhPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS0tLS1idGRhYWZuZTRh
N2F6cG9haXE4ZWE8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLS0teW1jYWFlbGQxYTRhNm9u
YWhwM2VhPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS0tLS1idGRhYWZuZTRhN2F6cG9haXE0
YnliYTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tLS15bWNhYWVsZDFhNGE2b25haHAyYjdh
YTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tbWdiYWFkamN5MWE4bW1hZ284ZGE8L21hcms6
bGFiZWw+PG1hcms6bGFiZWw+eG4tLS0teW1jYWFlbGQxYTRhNm9uYWhwMWI4YWE8L21hcms6bGFi
ZWw+PG1hcms6bGFiZWw+eG4tLW1nYmFhZGpjeTFhOG1tYWdvOWE1YWE8L21hcms6bGFiZWw+PG1h
cms6Z29vZHNBbmRTZXJ2aWNlcz7YutmK2KrYp9ixPC9tYXJrOmdvb2RzQW5kU2VydmljZXM+PG1h
cms6cmVnTnVtPjEyMzQ8L21hcms6cmVnTnVtPjxtYXJrOnJlZ0RhdGU+MjAxMy0wMS0wMVQwMDow
MDowMC4wMDBaPC9tYXJrOnJlZ0RhdGU+PC9tYXJrOnRyYWRlbWFyaz48L21hcms6bWFyaz48ZHM6
U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJ
ZD0iXzA5ODIzYjE3LWU5YjQtNGU2My05ZjdjLTVlMjI0ODExZWJjZCI+PGRzOlNpZ25lZEluZm8+
PGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxLzEwL3htbC1leGMtYzE0biMiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxkczpSZWZl
cmVuY2UgVVJJPSIjXzdhYzM1ZDUxLWZlODItNDk4Ni1hODMwLWJmODU0MjgzMjVhYyI+PGRzOlRy
YW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
MDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jt
cz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94
bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZhbHVlPkJsOTBqOE5QMENpWExpTGZ3bGw1czZwUFo0
RkhndnNERGdONmpsU0VZdUk9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVm
ZXJlbmNlIFVSST0iI19kYmJkODUzMy1mM2JhLTRlYmItODIwOC00ZTQyNjA3OWZkYTgiPjxkczpU
cmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
LzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdv
cml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdl
c3RWYWx1ZT5NZGhmNjBmN0l4c0t6ODVLemVvbndtRlg5SGR1ZnBUZDhiYmNpODJhWkhZPTwvZHM6
RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVW
YWx1ZSBJZD0iX2I5YmJmYjU0LWVjNWEtNDA2Mi04OGE2LTlmNDg4YjY1ZjJhNyI+cjc5R08xZGFy
dDBuZ1lFak8rZkNCTzVKZHU2K0hWdDA3WDMvc2V3VUhHOG5tNmF3NGJESEM0aG0vcEMrSmR2NkpT
NkJLN2I1YTF3MQpTbWRzSUxxWmxMdmF4K0ZBTmlCQzRaVXpFZUN2cHFqZ2hFTThJN3g0MWdhUnFj
aDh3Y0kyUTdvSEdNbVo3N2crSU1PdHJBa0taZkxOCjV4c0RZbFkwUTVCWEJoNmVES0V5VHFwMmtJ
dGc3WVlJZDgvWGNYbldVQTRONDY3RE14b0RyekdJbFI0ZFpmMWMvdzZ3WXhMTFdMak0KZThpYzcr
cGpRMmFXVjNpQ25pZ2pnQlIvendQMHNzZEwxUGhoNVptUU5PSE9TZ2tEN2c2U2pzRUlJRkhRblZl
ZGVxaHB0cXBtRjVBYgpzdDFwWk1BWS8rRVIwY2NoMGFmSjRBZURVRjdpYVBWODM1cTEwZz09PC9k
czpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iX2RiYmQ4NTMzLWYzYmEtNGViYi04MjA4
LTRlNDI2MDc5ZmRhOCI+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRk96Q0NC
Q09nQXdJQkFnSWdMckFiZXZvYWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOaFpjd0RR
WUpLb1pJaHZjTgpBUUVMQlFBd2ZERUxNQWtHQTFVRUJoTUNWVk14UERBNkJnTlZCQW9UTTBsdWRH
VnlibVYwSUVOdmNuQnZjbUYwYVc5dUlHWnZjaUJCCmMzTnBaMjVsWkNCT1lXMWxjeUJoYm1RZ1Ru
VnRZbVZ5Y3pFdk1DMEdBMVVFQXhNbVNVTkJUazRnVkhKaFpHVnRZWEpySUVOc1pXRnkKYVc1bmFH
OTFjMlVnVUdsc2IzUWdRMEV3SGhjTk1UZ3dNakk0TURBd01EQXdXaGNOTWpNd016QXhNak0xT1RV
NVdqQ0JqekVMTUFrRwpBMVVFQmhNQ1FrVXhJREFlQmdOVkJBZ1RGMEp5ZFhOelpXeHpMVU5oY0ds
MFlXd2dVbVZuYVc5dU1SRXdEd1lEVlFRSEV3aENjblZ6CmMyVnNjekVSTUE4R0ExVUVDaE1JUkdW
c2IybDBkR1V4T0RBMkJnTlZCQU1UTDBsRFFVNU9JRlJOUTBnZ1FYVjBhRzl5YVhwbFpDQlUKY21G
a1pXMWhjbXNnVUdsc2IzUWdWbUZzYVdSaGRHOXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9D
QVE4QU1JSUJDZ0tDQVFFQQp4bHAzS3BZSFgzV3lBc0ZoU2szTHdXZm5HbHhuVURGcUZaQTNVb3VN
WWovWGlnYk1rTmVFWElqbGtST0tUNE9QR2ZSeC9MQXlSbFFRCmpDTXY0cWhia2NYMXA3YXI2M2Zs
cTRTWk5WY2wxNWw3aDB1VDU4RnpTZm5sejB1NXJrSGZKSW1ENDMrbWFQLzhndjM2RlIyN2pXOFIK
OXdZNGhrK1dzNElCMGlGU2Q4U1h2MUtyOHcvSm1NUVNEa2l1RytSZklpdWJ3US9meTdFa2o1UVdo
UFp3K21NeE5LbkhVTHkzeFl6MgpMd1ZmZnRqd1V1ZWFjdnFOUkNrTVhsQ2xPQURxZlQ4b1Nab2VE
WGVoSHZsUHNMQ2VtR0JvVEt1cnNrSVM2OUYweVBFSDVnemUwSCtmCjhGUk9zSW9LU3NWUTM0QjRT
L2pvRTY3bnBzSlBUZEtzTlBKVHlRSURBUUFCbzRJQmt6Q0NBWTh3REFZRFZSMFRBUUgvQkFJd0FE
QWQKQmdOVkhRNEVGZ1FVb0ZwWTc2cDV5b05EUkd0UXB6VnVSODFVV1Ewd2djWUdBMVVkSXdTQnZq
Q0J1NEFVdzYwK3B0WVJBRVdBWERwWApTb3B0M0RFTm5uR2hnWUNrZmpCOE1Rc3dDUVlEVlFRR0V3
SlZVekU4TURvR0ExVUVDaE16U1c1MFpYSnVaWFFnUTI5eWNHOXlZWFJwCmIyNGdabTl5SUVGemMy
bG5ibVZrSUU1aGJXVnpJR0Z1WkNCT2RXMWlaWEp6TVM4d0xRWURWUVFERXlaSlEwRk9UaUJVY21G
a1pXMWgKY21zZ1EyeGxZWEpwYm1kb2IzVnpaU0JRYVd4dmRDQkRRWUlnTHJBYmV2b2FlNTJ5M2Y2
QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTgpoWGt3RGdZRFZSMFBBUUgvQkFRREFnZUFNRFFHQTFV
ZEh3UXRNQ3N3S2FBbm9DV0dJMmgwZEhBNkx5OWpjbXd1YVdOaGJtNHViM0puCkwzUnRZMmhmY0ds
c2IzUXVZM0pzTUZFR0ExVWRJQVJLTUVnd0VBWU9Ld1lCQkFHQ3lSc0JCWU03REFvd05BWUlLd1lC
QlFVSEFnRXcKS0RBbUJnZ3JCZ0VGQlFjQ0FSWWFhSFIwY0hNNkx5OWpZUzVwWTJGdWJpNXZjbWN2
Y0dsc2IzUXdEUVlKS29aSWh2Y05BUUVMQlFBRApnZ0VCQUF1aloySWNSMkRWcnRhUnJBNTllTllD
bDR4Y3NKTXU4RFFDSHYyOGZUZmkvQmlaWTRJcjdGOWtGeTk2RDdPWjhvTFk1empmCjRkSHhGd0hQ
cUg4RGg2Sldzelh1SFcxWmEzWG1sMFBhSHhDV1JTMFhvbDhXc0hIcE55Z2pNQllmSjBvZFZNODg1
VFoxRWw5U2l1RUgKbnluRkJnU21pRmM5OXVRZC9ZRFJadUd2L0EwSHl2N3lSOXRrTEVkRDNBMXVO
SkJXNFArSEpHcGRLa1lMMVE1clU3K29IVlB0TUtLSQozaUZrVUVzYk80NUFWZDd2UC9qLzdKdEFa
UGI2a29PVjVsWmkySDFSTGNjR3d6ZGV6bmhKZ2QwTjlvYmIwdm5FNDEvVVNXYWZkV1JaClZHa3dQ
dXFUaGw3c0N0enJKSDhYWTB4Y3VtK2NmTHgyRUFJd1VuT2NhYjQ9PC9kczpYNTA5Q2VydGlmaWNh
dGU+PC9kczpYNTA5RGF0YT48L2RzOktleUluZm8+PC9kczpTaWduYXR1cmU+PC9zbWQ6c2lnbmVk
TWFyaz4=
-----END ENCODED SMD-----

View File

@@ -1,94 +0,0 @@
Marks: 试验&amp;用例
smdID: 000000711526320363329-65535
U-labels: xn----lb7ao71jn7sf0q, xn--and-xc0em33obp2aosv, xn--et-rt3cn04lhyx1ps, xn--fsqv03gtrpson
notBefore: 2018-05-14T17:52:43.329Z
notAfter: 2022-08-21T08:12:01.925Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il85YTNh
YTQwZi1kODE5LTQ1ODktYjIxZi1jNDkyODI5YzRkMTUiPjxzbWQ6aWQ+MDAwMDAwNzExNTI2MzIw
MzYzMzI5LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1Mjo0My4zMjlaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODoxMjowMS45MjVaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTQ1MTUwMzA2NDc4NDE1MDMwNjQ3ODQtMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT7or5XpqowmYW1wO+eUqOS+izwvbWFyazptYXJrTmFtZT48bWFyazpob2xk
ZXIgZW50aXRsZW1lbnQ9Im93bmVyIj48bWFyazpuYW1lPuadjuWwj+aWuTwvbWFyazpuYW1lPjxt
YXJrOm9yZz7mtYvor5U8L21hcms6b3JnPjxtYXJrOmFkZHI+PG1hcms6c3RyZWV0Pummmea4r+S4
nOi3rzblj7fvvIw15Y+35qW877yMOOWPt+WupCA8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+6Z2S
5bKb5biCPC9tYXJrOmNpdHk+PG1hcms6cGM+MTAwMDwvbWFyazpwYz48bWFyazpjYz5DTjwvbWFy
azpjYz48L21hcms6YWRkcj48bWFyazp2b2ljZT4rODYuMTA4NDY1NzE3MzwvbWFyazp2b2ljZT48
bWFyazpmYXg+Kzg2LjEwODQ2NTcxNzM8L21hcms6ZmF4PjxtYXJrOmVtYWlsPmluZm9AZXhhbXBs
ZS5leGFtcGxlPC9tYXJrOmVtYWlsPjwvbWFyazpob2xkZXI+PG1hcms6anVyaXNkaWN0aW9uPlVT
PC9tYXJrOmp1cmlzZGljdGlvbj48bWFyazpjbGFzcz4xNTwvbWFyazpjbGFzcz48bWFyazpsYWJl
bD54bi0tLS1sYjdhbzcxam43c2YwcTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tYW5kLXhj
MGVtMzNvYnAyYW9zdjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tZXQtcnQzY24wNGxoeXgx
cHM8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLWZzcXYwM2d0cnBzb248L21hcms6bGFiZWw+
PG1hcms6Z29vZHNBbmRTZXJ2aWNlcz4g5ZCJ5LuWPC9tYXJrOmdvb2RzQW5kU2VydmljZXM+PG1h
cms6cmVnTnVtPjEyMzQ8L21hcms6cmVnTnVtPjxtYXJrOnJlZ0RhdGU+MjAxMy0wMS0wMVQwMDow
MDowMC4wMDBaPC9tYXJrOnJlZ0RhdGU+PC9tYXJrOnRyYWRlbWFyaz48L21hcms6bWFyaz48ZHM6
U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJ
ZD0iX2NmOWI3MGJhLTA3ZGMtNDIzNi1iOGE4LWFkNTdmOWRjNzkwYSI+PGRzOlNpZ25lZEluZm8+
PGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxLzEwL3htbC1leGMtYzE0biMiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxkczpSZWZl
cmVuY2UgVVJJPSIjXzlhM2FhNDBmLWQ4MTktNDU4OS1iMjFmLWM0OTI4MjljNGQxNSI+PGRzOlRy
YW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
MDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jt
cz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94
bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZhbHVlPmdYQ3RKOXdLQUNSdkt5L1htUGJBSnFwbFY1
MklCN053UFVoUnNqN1dVdk09PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVm
ZXJlbmNlIFVSST0iI19hZTYzMzUzNS1mMzYyLTRjYzUtOWE3My00ZTQ3Y2U4NGI1ZjciPjxkczpU
cmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
LzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdv
cml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdl
c3RWYWx1ZT5xL1AveElVYm1zanhLMzNmTUo4eUdtNUxuenpjZ05ydG8yRHNNM2RqVk9ZPTwvZHM6
RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVW
YWx1ZSBJZD0iXzNlODFkNGJlLTc1YzMtNDAwMS04MDAzLWY0ZWNiYzliZWQ1MSI+TVFvNEVXUWRp
L3ZOWUViUWVzbDhiY2R5R3J3SWFVaVlyOWtpK3EydkV5UDZ1bllJdzdlRzFKaTNzZTRxL3VkWUhD
c2Uyc3c3UTkyZgpwQVNic1A0d0tQUldzRjZkZHRRVDVidlY1VS9sWU5YekZ1Rk9jV3ZPdEdPQ3hj
cVArZTBqMUFNR1ZvbVVPckR1VDg1T1dyQkVJM3Q4CjlqQTE3a0lrZkMwcWNFUUVYdG81dXFHa3NC
YUl2Y0VheFZCbWN2UlU5ZDJCSlozZnBra1ZXNDlVcTdQaVlhN2xiZktkQWFWOFJtYWYKZnBCQkp2
K2dUSVNKZklMTnozdHpYNVZZUlkzTmEwdUVEOFNNVnpJc1FOUzZXbzYwM1RUNXYxdThIUFVxYWtr
ZWZVL3VzVnEwVndYSwphdlg0V1hUVERNeVZHUXh2ck5aNnIzQ2RjMDM3UFptTExNSnREdz09PC9k
czpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iX2FlNjMzNTM1LWYzNjItNGNjNS05YTcz
LTRlNDdjZTg0YjVmNyI+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRk96Q0NC
Q09nQXdJQkFnSWdMckFiZXZvYWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOaFpjd0RR
WUpLb1pJaHZjTgpBUUVMQlFBd2ZERUxNQWtHQTFVRUJoTUNWVk14UERBNkJnTlZCQW9UTTBsdWRH
VnlibVYwSUVOdmNuQnZjbUYwYVc5dUlHWnZjaUJCCmMzTnBaMjVsWkNCT1lXMWxjeUJoYm1RZ1Ru
VnRZbVZ5Y3pFdk1DMEdBMVVFQXhNbVNVTkJUazRnVkhKaFpHVnRZWEpySUVOc1pXRnkKYVc1bmFH
OTFjMlVnVUdsc2IzUWdRMEV3SGhjTk1UZ3dNakk0TURBd01EQXdXaGNOTWpNd016QXhNak0xT1RV
NVdqQ0JqekVMTUFrRwpBMVVFQmhNQ1FrVXhJREFlQmdOVkJBZ1RGMEp5ZFhOelpXeHpMVU5oY0ds
MFlXd2dVbVZuYVc5dU1SRXdEd1lEVlFRSEV3aENjblZ6CmMyVnNjekVSTUE4R0ExVUVDaE1JUkdW
c2IybDBkR1V4T0RBMkJnTlZCQU1UTDBsRFFVNU9JRlJOUTBnZ1FYVjBhRzl5YVhwbFpDQlUKY21G
a1pXMWhjbXNnVUdsc2IzUWdWbUZzYVdSaGRHOXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9D
QVE4QU1JSUJDZ0tDQVFFQQp4bHAzS3BZSFgzV3lBc0ZoU2szTHdXZm5HbHhuVURGcUZaQTNVb3VN
WWovWGlnYk1rTmVFWElqbGtST0tUNE9QR2ZSeC9MQXlSbFFRCmpDTXY0cWhia2NYMXA3YXI2M2Zs
cTRTWk5WY2wxNWw3aDB1VDU4RnpTZm5sejB1NXJrSGZKSW1ENDMrbWFQLzhndjM2RlIyN2pXOFIK
OXdZNGhrK1dzNElCMGlGU2Q4U1h2MUtyOHcvSm1NUVNEa2l1RytSZklpdWJ3US9meTdFa2o1UVdo
UFp3K21NeE5LbkhVTHkzeFl6MgpMd1ZmZnRqd1V1ZWFjdnFOUkNrTVhsQ2xPQURxZlQ4b1Nab2VE
WGVoSHZsUHNMQ2VtR0JvVEt1cnNrSVM2OUYweVBFSDVnemUwSCtmCjhGUk9zSW9LU3NWUTM0QjRT
L2pvRTY3bnBzSlBUZEtzTlBKVHlRSURBUUFCbzRJQmt6Q0NBWTh3REFZRFZSMFRBUUgvQkFJd0FE
QWQKQmdOVkhRNEVGZ1FVb0ZwWTc2cDV5b05EUkd0UXB6VnVSODFVV1Ewd2djWUdBMVVkSXdTQnZq
Q0J1NEFVdzYwK3B0WVJBRVdBWERwWApTb3B0M0RFTm5uR2hnWUNrZmpCOE1Rc3dDUVlEVlFRR0V3
SlZVekU4TURvR0ExVUVDaE16U1c1MFpYSnVaWFFnUTI5eWNHOXlZWFJwCmIyNGdabTl5SUVGemMy
bG5ibVZrSUU1aGJXVnpJR0Z1WkNCT2RXMWlaWEp6TVM4d0xRWURWUVFERXlaSlEwRk9UaUJVY21G
a1pXMWgKY21zZ1EyeGxZWEpwYm1kb2IzVnpaU0JRYVd4dmRDQkRRWUlnTHJBYmV2b2FlNTJ5M2Y2
QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTgpoWGt3RGdZRFZSMFBBUUgvQkFRREFnZUFNRFFHQTFV
ZEh3UXRNQ3N3S2FBbm9DV0dJMmgwZEhBNkx5OWpjbXd1YVdOaGJtNHViM0puCkwzUnRZMmhmY0ds
c2IzUXVZM0pzTUZFR0ExVWRJQVJLTUVnd0VBWU9Ld1lCQkFHQ3lSc0JCWU03REFvd05BWUlLd1lC
QlFVSEFnRXcKS0RBbUJnZ3JCZ0VGQlFjQ0FSWWFhSFIwY0hNNkx5OWpZUzVwWTJGdWJpNXZjbWN2
Y0dsc2IzUXdEUVlKS29aSWh2Y05BUUVMQlFBRApnZ0VCQUF1aloySWNSMkRWcnRhUnJBNTllTllD
bDR4Y3NKTXU4RFFDSHYyOGZUZmkvQmlaWTRJcjdGOWtGeTk2RDdPWjhvTFk1empmCjRkSHhGd0hQ
cUg4RGg2Sldzelh1SFcxWmEzWG1sMFBhSHhDV1JTMFhvbDhXc0hIcE55Z2pNQllmSjBvZFZNODg1
VFoxRWw5U2l1RUgKbnluRkJnU21pRmM5OXVRZC9ZRFJadUd2L0EwSHl2N3lSOXRrTEVkRDNBMXVO
SkJXNFArSEpHcGRLa1lMMVE1clU3K29IVlB0TUtLSQozaUZrVUVzYk80NUFWZDd2UC9qLzdKdEFa
UGI2a29PVjVsWmkySDFSTGNjR3d6ZGV6bmhKZ2QwTjlvYmIwdm5FNDEvVVNXYWZkV1JaClZHa3dQ
dXFUaGw3c0N0enJKSDhYWTB4Y3VtK2NmTHgyRUFJd1VuT2NhYjQ9PC9kczpYNTA5Q2VydGlmaWNh
dGU+PC9kczpYNTA5RGF0YT48L2RzOktleUluZm8+PC9kczpTaWduYXR1cmU+PC9zbWQ6c2lnbmVk
TWFyaz4=
-----END ENCODED SMD-----

View File

@@ -1,99 +0,0 @@
Marks: Test &amp; Validate
smdID: 000000541526320345762-65535
U-labels: test---validate, test--validate, test-et-validate, test-etvalidate, test-validate, testand-validate, testandvalidate, testet-validate, testetvalidate, testvalidate
notBefore: 2018-05-14T17:52:25.762Z
notAfter: 2022-08-21T08:12:19.525Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il81MDRi
ZDc4NS1lNzViLTRkYTMtYWEzYy0yZmYxNDlkYmJlNWUiPjxzbWQ6aWQ+MDAwMDAwNTQxNTI2MzIw
MzQ1NzYyLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MjoyNS43NjJaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODoxMjoxOS41MjVaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTM2MTUwMzA1NjkwOTE1MDMwNTY5MDktMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT5UZXN0ICZhbXA7IFZhbGlkYXRlPC9tYXJrOm1hcmtOYW1lPjxtYXJrOmhv
bGRlciBlbnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm5hbWU+RnJhbmsgV2hpdGU8L21hcms6bmFt
ZT48bWFyazpvcmc+VGVzdCBPcmdhbml6YXRpb248L21hcms6b3JnPjxtYXJrOmFkZHI+PG1hcms6
c3RyZWV0Pldlc3QgQXJxdWVzIEF2ZW51ZSAxMDEgPC9tYXJrOnN0cmVldD48bWFyazpjaXR5PlN1
bm55dmFsZTwvbWFyazpjaXR5PjxtYXJrOnNwPkNBPC9tYXJrOnNwPjxtYXJrOnBjPjEwMDIzLTMy
NDE8L21hcms6cGM+PG1hcms6Y2M+VVM8L21hcms6Y2M+PC9tYXJrOmFkZHI+PG1hcms6dm9pY2U+
KzEuMzAxNDU1NjYwMDwvbWFyazp2b2ljZT48bWFyazpmYXg+KzEuMzAxNDU1NjYwMTwvbWFyazpm
YXg+PG1hcms6ZW1haWw+aW5mb0BleGFtcGxlLmV4YW1wbGU8L21hcms6ZW1haWw+PC9tYXJrOmhv
bGRlcj48bWFyazpqdXJpc2RpY3Rpb24+VVM8L21hcms6anVyaXNkaWN0aW9uPjxtYXJrOmNsYXNz
PjE1PC9tYXJrOmNsYXNzPjxtYXJrOmxhYmVsPnRlc3QtLS12YWxpZGF0ZTwvbWFyazpsYWJlbD48
bWFyazpsYWJlbD50ZXN0LS12YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0LWV0
LXZhbGlkYXRlPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnRlc3QtZXR2YWxpZGF0ZTwvbWFyazps
YWJlbD48bWFyazpsYWJlbD50ZXN0LXZhbGlkYXRlPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnRl
c3RhbmQtdmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+dGVzdGFuZHZhbGlkYXRlPC9t
YXJrOmxhYmVsPjxtYXJrOmxhYmVsPnRlc3RldC12YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazps
YWJlbD50ZXN0ZXR2YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0dmFsaWRhdGU8
L21hcms6bGFiZWw+PG1hcms6Z29vZHNBbmRTZXJ2aWNlcz5ndWl0YXI8L21hcms6Z29vZHNBbmRT
ZXJ2aWNlcz48bWFyazpyZWdOdW0+MTIzNDwvbWFyazpyZWdOdW0+PG1hcms6cmVnRGF0ZT4yMDEz
LTAxLTAxVDAwOjAwOjAwLjAwMFo8L21hcms6cmVnRGF0ZT48bWFyazpleERhdGU+MjAxNC0xMS0w
NVQwMDowMDowMC4wMDBaPC9tYXJrOmV4RGF0ZT48L21hcms6dHJhZGVtYXJrPjwvbWFyazptYXJr
PjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNp
ZyMiIElkPSJfOTJjYWZjMmMtOWM3Yy00MTgwLWI4ZDMtZjI0NmU2NDEzZjBiIj48ZHM6U2lnbmVk
SW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGht
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8+PGRz
OlJlZmVyZW5jZSBVUkk9IiNfNTA0YmQ3ODUtZTc1Yi00ZGEzLWFhM2MtMmZmMTQ5ZGJiZTVlIj48
ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6VHJhbnNmb3JtIEFsZ29y
aXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFu
c2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
LzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+UmlQcHZCR3B5N3lQZHo5VmVER3BI
M3RWSGdsS1NtU0xWREYvL3R1ZlcwRT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjxk
czpSZWZlcmVuY2UgVVJJPSIjXzE4NmUxY2Y3LTNmMWMtNDM0Ny05MWJmLTg4NzlmZmFjNmRhZSI+
PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jtcz48ZHM6RGlnZXN0TWV0aG9k
IEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+PGRz
OkRpZ2VzdFZhbHVlPnBFSTIvZmhmN0YwOThWTUF6Q3d2eURpRENMNmhBU3NUbTNDUWQ0eFc0LzA9
PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48L2RzOlNpZ25lZEluZm8+PGRzOlNpZ25h
dHVyZVZhbHVlIElkPSJfMGEyNzlmNWUtZGY4ZS00NGEyLWI0Y2MtMzFlYmUyYjcyYmQ1Ij5DOG5P
SFFIR3AwZlpYYVVEWUZxVVBhSS9ESG1rZXJSd0d3R1gybndzREIxazViOGJ4U3lnUFo3cDN6ZWZL
Y0NLTG8zdFhtNWVUU3dxClJFNVU1Y0tvVTRUYXRlS3JUUDV1SWtTbENhVXJOTU1ZbnFWcy9pNXNy
TlhMbENYdFpQT0hkTlM0VDVlcXdNMXpTWDlZTCsvSkRnRzIKMVVFbTh2Wk5qbmQ2c1ZzMDdnM0hZ
aVNZczBlKzZLTjdQbWV3T3NyVHZQbGNyQk1YK2w0MDlZNW5wUmNVRFQ4NUVCQ3l0bDZteG95bwov
d0NvYjR2cS9oOVE1Qk9nMFZ2NnNiRCt3d0RqQ0pRZzBBU25nVXRQM2w1L3FOODJEYWxLcXRqUDUw
WGduV2tJL1dSTlVQOG50c0NOCmtCZEY2Mnd0K1E2K2hOU3pDLzRxS2pPMFV6ZlBjWStqSkZ0SVpR
PT08L2RzOlNpZ25hdHVyZVZhbHVlPjxkczpLZXlJbmZvIElkPSJfMTg2ZTFjZjctM2YxYy00MzQ3
LTkxYmYtODg3OWZmYWM2ZGFlIj48ZHM6WDUwOURhdGE+PGRzOlg1MDlDZXJ0aWZpY2F0ZT5NSUlG
T3pDQ0JDT2dBd0lCQWdJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdYSm0wVDAyRm9neEtDZk5o
WmN3RFFZSktvWklodmNOCkFRRUxCUUF3ZkRFTE1Ba0dBMVVFQmhNQ1ZWTXhQREE2QmdOVkJBb1RN
MGx1ZEdWeWJtVjBJRU52Y25CdmNtRjBhVzl1SUdadmNpQkIKYzNOcFoyNWxaQ0JPWVcxbGN5Qmhi
bVFnVG5WdFltVnljekV2TUMwR0ExVUVBeE1tU1VOQlRrNGdWSEpoWkdWdFlYSnJJRU5zWldGeQph
VzVuYUc5MWMyVWdVR2xzYjNRZ1EwRXdIaGNOTVRnd01qSTRNREF3TURBd1doY05Nak13TXpBeE1q
TTFPVFU1V2pDQmp6RUxNQWtHCkExVUVCaE1DUWtVeElEQWVCZ05WQkFnVEYwSnlkWE56Wld4ekxV
TmhjR2wwWVd3Z1VtVm5hVzl1TVJFd0R3WURWUVFIRXdoQ2NuVnoKYzJWc2N6RVJNQThHQTFVRUNo
TUlSR1ZzYjJsMGRHVXhPREEyQmdOVkJBTVRMMGxEUVU1T0lGUk5RMGdnUVhWMGFHOXlhWHBsWkNC
VQpjbUZrWlcxaGNtc2dVR2xzYjNRZ1ZtRnNhV1JoZEc5eU1JSUJJakFOQmdrcWhraUc5dzBCQVFF
RkFBT0NBUThBTUlJQkNnS0NBUUVBCnhscDNLcFlIWDNXeUFzRmhTazNMd1dmbkdseG5VREZxRlpB
M1VvdU1Zai9YaWdiTWtOZUVYSWpsa1JPS1Q0T1BHZlJ4L0xBeVJsUVEKakNNdjRxaGJrY1gxcDdh
cjYzZmxxNFNaTlZjbDE1bDdoMHVUNThGelNmbmx6MHU1cmtIZkpJbUQ0MyttYVAvOGd2MzZGUjI3
alc4Ugo5d1k0aGsrV3M0SUIwaUZTZDhTWHYxS3I4dy9KbU1RU0RraXVHK1JmSWl1YndRL2Z5N0Vr
ajVRV2hQWncrbU14TktuSFVMeTN4WXoyCkx3VmZmdGp3VXVlYWN2cU5SQ2tNWGxDbE9BRHFmVDhv
U1pvZURYZWhIdmxQc0xDZW1HQm9US3Vyc2tJUzY5RjB5UEVINWd6ZTBIK2YKOEZST3NJb0tTc1ZR
MzRCNFMvam9FNjducHNKUFRkS3NOUEpUeVFJREFRQUJvNElCa3pDQ0FZOHdEQVlEVlIwVEFRSC9C
QUl3QURBZApCZ05WSFE0RUZnUVVvRnBZNzZwNXlvTkRSR3RRcHpWdVI4MVVXUTB3Z2NZR0ExVWRJ
d1NCdmpDQnU0QVV3NjArcHRZUkFFV0FYRHBYClNvcHQzREVObm5HaGdZQ2tmakI4TVFzd0NRWURW
UVFHRXdKVlV6RThNRG9HQTFVRUNoTXpTVzUwWlhKdVpYUWdRMjl5Y0c5eVlYUnAKYjI0Z1ptOXlJ
RUZ6YzJsbmJtVmtJRTVoYldWeklHRnVaQ0JPZFcxaVpYSnpNUzh3TFFZRFZRUURFeVpKUTBGT1Rp
QlVjbUZrWlcxaApjbXNnUTJ4bFlYSnBibWRvYjNWelpTQlFhV3h2ZENCRFFZSWdMckFiZXZvYWU1
MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOCmhYa3dEZ1lEVlIwUEFRSC9CQVFEQWdlQU1E
UUdBMVVkSHdRdE1Dc3dLYUFub0NXR0kyaDBkSEE2THk5amNtd3VhV05oYm00dWIzSm4KTDNSdFky
aGZjR2xzYjNRdVkzSnNNRkVHQTFVZElBUktNRWd3RUFZT0t3WUJCQUdDeVJzQkJZTTdEQW93TkFZ
SUt3WUJCUVVIQWdFdwpLREFtQmdnckJnRUZCUWNDQVJZYWFIUjBjSE02THk5allTNXBZMkZ1Ymk1
dmNtY3ZjR2xzYjNRd0RRWUpLb1pJaHZjTkFRRUxCUUFECmdnRUJBQXVqWjJJY1IyRFZydGFSckE1
OWVOWUNsNHhjc0pNdThEUUNIdjI4ZlRmaS9CaVpZNElyN0Y5a0Z5OTZEN09aOG9MWTV6amYKNGRI
eEZ3SFBxSDhEaDZKV3N6WHVIVzFaYTNYbWwwUGFIeENXUlMwWG9sOFdzSEhwTnlnak1CWWZKMG9k
Vk04ODVUWjFFbDlTaXVFSApueW5GQmdTbWlGYzk5dVFkL1lEUlp1R3YvQTBIeXY3eVI5dGtMRWRE
M0ExdU5KQlc0UCtISkdwZEtrWUwxUTVyVTcrb0hWUHRNS0tJCjNpRmtVRXNiTzQ1QVZkN3ZQL2ov
N0p0QVpQYjZrb09WNWxaaTJIMVJMY2NHd3pkZXpuaEpnZDBOOW9iYjB2bkU0MS9VU1dhZmRXUloK
Vkdrd1B1cVRobDdzQ3R6ckpIOFhZMHhjdW0rY2ZMeDJFQUl3VW5PY2FiND08L2RzOlg1MDlDZXJ0
aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48L3NtZDpz
aWduZWRNYXJrPg==
-----END ENCODED SMD-----

View File

@@ -1,99 +0,0 @@
Marks: Essai &amp; évaluation
smdID: 000000651526320351638-65535
U-labels: xn--essai---valuation-itb, xn--essai--valuation-hqb, xn--essai-and-valuation-kzb, xn--essai-andvaluation-jwb, xn--essai-valuation-gnb, xn--essaiand-valuation-jwb, xn--essaiandvaluation-itb, xn--essaiet-valuation-itb, xn--essaietvaluation-hqb, xn--essaivaluation-fkb
notBefore: 2018-05-14T17:52:31.638Z
notAfter: 2022-08-21T08:12:14.116Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8zYWE2
ZjExMS1lMjI4LTRiNWItOTc3MC00ZjkzYjE0MTI2MDkiPjxzbWQ6aWQ+MDAwMDAwNjUxNTI2MzIw
MzUxNjM4LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MjozMS42MzhaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODoxMjoxNC4xMTZaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTM4MTUwMzA2MDc4MjE1MDMwNjA3ODItMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT5Fc3NhaSAmYW1wOyDDqXZhbHVhdGlvbjwvbWFyazptYXJrTmFtZT48bWFy
azpob2xkZXIgZW50aXRsZW1lbnQ9Im93bmVyIj48bWFyazpuYW1lPkplYW4gTGVibGFuYzwvbWFy
azpuYW1lPjxtYXJrOm9yZz5PcmFuaXNhdGlvbiBkZSB0ZXN0PC9tYXJrOm9yZz48bWFyazphZGRy
PjxtYXJrOnN0cmVldD5SVUUgUk9HTkUgNDAgPC9tYXJrOnN0cmVldD48bWFyazpjaXR5PkFSVE9J
UzwvbWFyazpjaXR5PjxtYXJrOnBjPjIxMzAxPC9tYXJrOnBjPjxtYXJrOmNjPkZSPC9tYXJrOmNj
PjwvbWFyazphZGRyPjxtYXJrOnZvaWNlPiszMy4yNjQ5OTUwMzI8L21hcms6dm9pY2U+PG1hcms6
ZmF4PiszMy4yNjQ5OTUwMzM8L21hcms6ZmF4PjxtYXJrOmVtYWlsPmluZm9AZXhhbXBsZS5leGFt
cGxlPC9tYXJrOmVtYWlsPjwvbWFyazpob2xkZXI+PG1hcms6anVyaXNkaWN0aW9uPlVTPC9tYXJr
Omp1cmlzZGljdGlvbj48bWFyazpjbGFzcz4xNTwvbWFyazpjbGFzcz48bWFyazpsYWJlbD54bi0t
ZXNzYWktLS12YWx1YXRpb24taXRiPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1lc3NhaS0t
dmFsdWF0aW9uLWhxYjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tZXNzYWktYW5kLXZhbHVh
dGlvbi1remI8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLWVzc2FpLWFuZHZhbHVhdGlvbi1q
d2I8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+eG4tLWVzc2FpLXZhbHVhdGlvbi1nbmI8L21hcms6
bGFiZWw+PG1hcms6bGFiZWw+eG4tLWVzc2FpYW5kLXZhbHVhdGlvbi1qd2I8L21hcms6bGFiZWw+
PG1hcms6bGFiZWw+eG4tLWVzc2FpYW5kdmFsdWF0aW9uLWl0YjwvbWFyazpsYWJlbD48bWFyazps
YWJlbD54bi0tZXNzYWlldC12YWx1YXRpb24taXRiPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhu
LS1lc3NhaWV0dmFsdWF0aW9uLWhxYjwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tZXNzYWl2
YWx1YXRpb24tZmtiPC9tYXJrOmxhYmVsPjxtYXJrOmdvb2RzQW5kU2VydmljZXM+Z3VpdGFyZTwv
bWFyazpnb29kc0FuZFNlcnZpY2VzPjxtYXJrOnJlZ051bT4xMjM0PC9tYXJrOnJlZ051bT48bWFy
azpyZWdEYXRlPjIwMTMtMDEtMDFUMDA6MDA6MDAuMDAwWjwvbWFyazpyZWdEYXRlPjwvbWFyazp0
cmFkZW1hcms+PC9tYXJrOm1hcms+PGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC8wOS94bWxkc2lnIyIgSWQ9Il84NWI2MTY1NC05NmM4LTRkYjctOGVlOS0yYTJl
YjA1OTMzOTUiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29y
aXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PGRzOlNpZ25h
dHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1t
b3JlI3JzYS1zaGEyNTYiLz48ZHM6UmVmZXJlbmNlIFVSST0iI18zYWE2ZjExMS1lMjI4LTRiNWIt
OTc3MC00ZjkzYjE0MTI2MDkiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGht
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIv
PjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1l
eGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0
dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5a
VnlDb2lBb3M4TWV3SGFRQUhoNHZGcnFCS2l2QytDY29BZXd0Y1d6QmNNPTwvZHM6RGlnZXN0VmFs
dWU+PC9kczpSZWZlcmVuY2U+PGRzOlJlZmVyZW5jZSBVUkk9IiNfMzgzNDcyMDYtYjIxNS00OGE2
LWI4NjMtMGIxYmUzZTk3NmY3Ij48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRo
bT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zv
cm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0
L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+ZFBDR0NsN0NPandVYmE5WTVxeWEwRHEy
WE5aeTY1VDR1M3ErUkt6RjlVbz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6
U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9Il9kMTg3MmY4MS02ZjBlLTQ0ZGYtODEy
Ni1jMDljZTk1YjlmNmIiPnNsbGZ0dEowUEl1S2wvdGhoOTZyM3pBaG1vb0NWTE9UNm1BcmlyRCs4
MEgzSUpWRXNialh4OWtNTHlLZkM0UlVsRkZJdi9WVVd3clQKeG0xbVgyY2grVHFWRG9NczZHQWVY
eVJxUGtQaGdvejhNeGNaWi80TS9SK25teEpSK1dsbVBSZ0Z4bFd3dDZBTFRkL0RKT0RJR1FDYQpt
YUdVK0ZGdXpDS2NQZ0FISTBTSzZJR2JtZUZMNW1jRUNhZHBxNUxNamxGYU9vNmZkNTRGMDBkWDZ1
RTc2cmo5U2pZdVJvNkVjQjE5ClkyMXk4YVFOVU9GVmY1N25lLytsT0UwaExuS1JveHlJNVhzUDV3
MXlld0pQRXZ5ZVdvR1JzRVFhSmxBUmNqUDIwTVhiaEJLcVgrUE4KRzQrTHBlZXcyTlNZSnF2dzhE
VFZ1ZGROR1RKMlhMajRGdk55eHc9PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8gSWQ9
Il8zODM0NzIwNi1iMjE1LTQ4YTYtYjg2My0wYjFiZTNlOTc2ZjciPjxkczpYNTA5RGF0YT48ZHM6
WDUwOUNlcnRpZmljYXRlPk1JSUZPekNDQkNPZ0F3SUJBZ0lnTHJBYmV2b2FlNTJ5M2Y2QzJ0QjBT
bjNwN1hKbTBUMDJGb2d4S0NmTmhaY3dEUVlKS29aSWh2Y04KQVFFTEJRQXdmREVMTUFrR0ExVUVC
aE1DVlZNeFBEQTZCZ05WQkFvVE0wbHVkR1Z5Ym1WMElFTnZjbkJ2Y21GMGFXOXVJR1p2Y2lCQgpj
M05wWjI1bFpDQk9ZVzFsY3lCaGJtUWdUblZ0WW1WeWN6RXZNQzBHQTFVRUF4TW1TVU5CVGs0Z1ZI
SmhaR1Z0WVhKcklFTnNaV0Z5CmFXNW5hRzkxYzJVZ1VHbHNiM1FnUTBFd0hoY05NVGd3TWpJNE1E
QXdNREF3V2hjTk1qTXdNekF4TWpNMU9UVTVXakNCanpFTE1Ba0cKQTFVRUJoTUNRa1V4SURBZUJn
TlZCQWdURjBKeWRYTnpaV3h6TFVOaGNHbDBZV3dnVW1WbmFXOXVNUkV3RHdZRFZRUUhFd2hDY25W
egpjMlZzY3pFUk1BOEdBMVVFQ2hNSVJHVnNiMmwwZEdVeE9EQTJCZ05WQkFNVEwwbERRVTVPSUZS
TlEwZ2dRWFYwYUc5eWFYcGxaQ0JVCmNtRmtaVzFoY21zZ1VHbHNiM1FnVm1Gc2FXUmhkRzl5TUlJ
QklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEKeGxwM0twWUhYM1d5QXNG
aFNrM0x3V2ZuR2x4blVERnFGWkEzVW91TVlqL1hpZ2JNa05lRVhJamxrUk9LVDRPUEdmUngvTEF5
UmxRUQpqQ012NHFoYmtjWDFwN2FyNjNmbHE0U1pOVmNsMTVsN2gwdVQ1OEZ6U2ZubHowdTVya0hm
SkltRDQzK21hUC84Z3YzNkZSMjdqVzhSCjl3WTRoaytXczRJQjBpRlNkOFNYdjFLcjh3L0ptTVFT
RGtpdUcrUmZJaXVid1EvZnk3RWtqNVFXaFBadyttTXhOS25IVUx5M3hZejIKTHdWZmZ0andVdWVh
Y3ZxTlJDa01YbENsT0FEcWZUOG9TWm9lRFhlaEh2bFBzTENlbUdCb1RLdXJza0lTNjlGMHlQRUg1
Z3plMEgrZgo4RlJPc0lvS1NzVlEzNEI0Uy9qb0U2N25wc0pQVGRLc05QSlR5UUlEQVFBQm80SUJr
ekNDQVk4d0RBWURWUjBUQVFIL0JBSXdBREFkCkJnTlZIUTRFRmdRVW9GcFk3NnA1eW9ORFJHdFFw
elZ1UjgxVVdRMHdnY1lHQTFVZEl3U0J2akNCdTRBVXc2MCtwdFlSQUVXQVhEcFgKU29wdDNERU5u
bkdoZ1lDa2ZqQjhNUXN3Q1FZRFZRUUdFd0pWVXpFOE1Eb0dBMVVFQ2hNelNXNTBaWEp1WlhRZ1Ey
OXljRzl5WVhScApiMjRnWm05eUlFRnpjMmxuYm1Wa0lFNWhiV1Z6SUdGdVpDQk9kVzFpWlhKek1T
OHdMUVlEVlFRREV5WkpRMEZPVGlCVWNtRmtaVzFoCmNtc2dRMnhsWVhKcGJtZG9iM1Z6WlNCUWFX
eHZkQ0JEUVlJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdYSm0wVDAyRm9neEtDZk4KaFhrd0Rn
WURWUjBQQVFIL0JBUURBZ2VBTURRR0ExVWRId1F0TUNzd0thQW5vQ1dHSTJoMGRIQTZMeTlqY213
dWFXTmhibTR1YjNKbgpMM1J0WTJoZmNHbHNiM1F1WTNKc01GRUdBMVVkSUFSS01FZ3dFQVlPS3dZ
QkJBR0N5UnNCQllNN0RBb3dOQVlJS3dZQkJRVUhBZ0V3CktEQW1CZ2dyQmdFRkJRY0NBUllhYUhS
MGNITTZMeTlqWVM1cFkyRnViaTV2Y21jdmNHbHNiM1F3RFFZSktvWklodmNOQVFFTEJRQUQKZ2dF
QkFBdWpaMkljUjJEVnJ0YVJyQTU5ZU5ZQ2w0eGNzSk11OERRQ0h2MjhmVGZpL0JpWlk0SXI3Rjlr
Rnk5NkQ3T1o4b0xZNXpqZgo0ZEh4RndIUHFIOERoNkpXc3pYdUhXMVphM1htbDBQYUh4Q1dSUzBY
b2w4V3NISHBOeWdqTUJZZkowb2RWTTg4NVRaMUVsOVNpdUVICm55bkZCZ1NtaUZjOTl1UWQvWURS
WnVHdi9BMEh5djd5Ujl0a0xFZEQzQTF1TkpCVzRQK0hKR3BkS2tZTDFRNXJVNytvSFZQdE1LS0kK
M2lGa1VFc2JPNDVBVmQ3dlAvai83SnRBWlBiNmtvT1Y1bFppMkgxUkxjY0d3emRlem5oSmdkME45
b2JiMHZuRTQxL1VTV2FmZFdSWgpWR2t3UHVxVGhsN3NDdHpySkg4WFkweGN1bStjZkx4MkVBSXdV
bk9jYWI0PTwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjwv
ZHM6U2lnbmF0dXJlPjwvc21kOnNpZ25lZE1hcms+
-----END ENCODED SMD-----

View File

@@ -1,94 +0,0 @@
Marks: Тест&amp;случай
smdID: 000000681526320357491-65535
U-labels: xn----8sbnsi8abecn8b, xn--and-8cdv2am8bdecr6c, xn--et-8kcrxk3bcecp2c, xn--80ajng3aaecl4b
notBefore: 2018-05-14T17:52:37.491Z
notAfter: 2022-08-21T08:12:08.921Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il82ZDA4
NDdkZS0yZWMyLTQ5YjgtYjRkMy05MTMwMDE0YmQxN2MiPjxzbWQ6aWQ+MDAwMDAwNjgxNTI2MzIw
MzU3NDkxLTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MjozNy40OTFaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0yMVQwODoxMjowOC45MjFaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmFkZW1hcms+PG1hcms6aWQ+MDAwMTQwMTUwMzA2MzYxMzE1MDMwNjM2MTMtMTwvbWFyazppZD48
bWFyazptYXJrTmFtZT7QotC10YHRgiZhbXA70YHQu9GD0YfQsNC5PC9tYXJrOm1hcmtOYW1lPjxt
YXJrOmhvbGRlciBlbnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm5hbWU+0J3QsNGC0LDQu9GM0Y8g
0JDQvdGC0L7QvdC+0LLQsDwvbWFyazpuYW1lPjxtYXJrOm9yZz7QkNC90YLQvtC90L7QstCwPC9t
YXJrOm9yZz48bWFyazphZGRyPjxtYXJrOnN0cmVldD7Qn9GA0L7RgdC/0LXQutGCINCS0LXRgNC9
0LDQtNGB0LrQvtCz0L4gMTU8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+0JzQvtGB0LrQstCwPC9t
YXJrOmNpdHk+PG1hcms6cGM+MTE3NDg1PC9tYXJrOnBjPjxtYXJrOmNjPlJVPC9tYXJrOmNjPjwv
bWFyazphZGRyPjxtYXJrOnZvaWNlPis3LjkxODgyMjE2NzQ8L21hcms6dm9pY2U+PG1hcms6ZW1h
aWw+aW5mb0BleGFtcGxlLmV4YW1wbGU8L21hcms6ZW1haWw+PC9tYXJrOmhvbGRlcj48bWFyazpq
dXJpc2RpY3Rpb24+VVM8L21hcms6anVyaXNkaWN0aW9uPjxtYXJrOmNsYXNzPjE1PC9tYXJrOmNs
YXNzPjxtYXJrOmxhYmVsPnhuLS0tLThzYm5zaThhYmVjbjhiPC9tYXJrOmxhYmVsPjxtYXJrOmxh
YmVsPnhuLS1hbmQtOGNkdjJhbThiZGVjcjZjPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1l
dC04a2NyeGszYmNlY3AyYzwvbWFyazpsYWJlbD48bWFyazpsYWJlbD54bi0tODBham5nM2FhZWNs
NGI8L21hcms6bGFiZWw+PG1hcms6Z29vZHNBbmRTZXJ2aWNlcz7Qs9C40YLQsNGA0LA8L21hcms6
Z29vZHNBbmRTZXJ2aWNlcz48bWFyazpyZWdOdW0+MTIzNDwvbWFyazpyZWdOdW0+PG1hcms6cmVn
RGF0ZT4yMDEzLTAxLTAxVDAwOjAwOjAwLjAwMFo8L21hcms6cmVnRGF0ZT48L21hcms6dHJhZGVt
YXJrPjwvbWFyazptYXJrPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvMDkveG1sZHNpZyMiIElkPSJfOWM2NmZhMGUtMDY3ZS00YWQ0LWI4OWItZjM4NTA1NzQ1
N2YwIj48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVN
ZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNy
c2Etc2hhMjU2Ii8+PGRzOlJlZmVyZW5jZSBVUkk9IiNfNmQwODQ3ZGUtMmVjMi00OWI4LWI0ZDMt
OTEzMDAxNGJkMTdjIj48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0
cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6
VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMx
NG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+Z2JvTEhP
YStmMDR2QmxDNTk3RjdBU3U2cWVuNzNFcXBoM3NsMk5oN2dYZz08L2RzOkRpZ2VzdFZhbHVlPjwv
ZHM6UmVmZXJlbmNlPjxkczpSZWZlcmVuY2UgVVJJPSIjXzg2MWFjZWM5LTRkNDItNDEyMC1iY2Ey
LWQzMTlmMjlhOTRjNyI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0
dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jtcz48
ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxl
bmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZhbHVlPlVxUzVYN25MKzdDaXdQaW54Z0RFRXl6Qy9tV1Zk
cnZnbTVBeURVeWtzV2s9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48L2RzOlNpZ25l
ZEluZm8+PGRzOlNpZ25hdHVyZVZhbHVlIElkPSJfZjY5MTA1NTEtM2MxYi00ZjdhLWE2ZTAtNTU0
MmJjM2NjMTgxIj5vODM5YTFUajJwQjhEaGU3M2RPdlRub3JlaVdFM1NlM2VySkJpWjB3ZkxvYXBK
UEZsWXEzSm9wYXEyZjk2V2pIeHRIMjBoRHBiQVJZCi9jVjBsRzZaQkVxYllwRnJDOVd5TlMwN3ZD
eXFkOFV1dXdKZHl1Y0lZVW52UlptMmg3d1hsM2V6T1JweStDSG43YnVZVitIN0FjanEKRDgxNHhq
Zml0RVNzOE9ZdjJBaDNyV0QzcnplQzRPcjMrWWZLWFVYV01NMFRzSHVxbjBzR2ZEcGN4VXROSVJw
S1BMY003THI5UE1vTwpkd1d0ay9ySXZ2MjdQMVZXVVBSZEtjZXZOcHBSdWpmTDc4R09qbmxkT1Z0
RjhjcWJyZ1Uxc0pEV3JFZW5GY1VCRFB3VktrMGdmMnpPCnZEYjRSK3VFV0V5YWFyME45Y0xiU2hk
M3pkZHVNQUNHVHYzSVBRPT08L2RzOlNpZ25hdHVyZVZhbHVlPjxkczpLZXlJbmZvIElkPSJfODYx
YWNlYzktNGQ0Mi00MTIwLWJjYTItZDMxOWYyOWE5NGM3Ij48ZHM6WDUwOURhdGE+PGRzOlg1MDlD
ZXJ0aWZpY2F0ZT5NSUlGT3pDQ0JDT2dBd0lCQWdJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdY
Sm0wVDAyRm9neEtDZk5oWmN3RFFZSktvWklodmNOCkFRRUxCUUF3ZkRFTE1Ba0dBMVVFQmhNQ1ZW
TXhQREE2QmdOVkJBb1RNMGx1ZEdWeWJtVjBJRU52Y25CdmNtRjBhVzl1SUdadmNpQkIKYzNOcFoy
NWxaQ0JPWVcxbGN5QmhibVFnVG5WdFltVnljekV2TUMwR0ExVUVBeE1tU1VOQlRrNGdWSEpoWkdW
dFlYSnJJRU5zWldGeQphVzVuYUc5MWMyVWdVR2xzYjNRZ1EwRXdIaGNOTVRnd01qSTRNREF3TURB
d1doY05Nak13TXpBeE1qTTFPVFU1V2pDQmp6RUxNQWtHCkExVUVCaE1DUWtVeElEQWVCZ05WQkFn
VEYwSnlkWE56Wld4ekxVTmhjR2wwWVd3Z1VtVm5hVzl1TVJFd0R3WURWUVFIRXdoQ2NuVnoKYzJW
c2N6RVJNQThHQTFVRUNoTUlSR1ZzYjJsMGRHVXhPREEyQmdOVkJBTVRMMGxEUVU1T0lGUk5RMGdn
UVhWMGFHOXlhWHBsWkNCVQpjbUZrWlcxaGNtc2dVR2xzYjNRZ1ZtRnNhV1JoZEc5eU1JSUJJakFO
QmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBCnhscDNLcFlIWDNXeUFzRmhTazNM
d1dmbkdseG5VREZxRlpBM1VvdU1Zai9YaWdiTWtOZUVYSWpsa1JPS1Q0T1BHZlJ4L0xBeVJsUVEK
akNNdjRxaGJrY1gxcDdhcjYzZmxxNFNaTlZjbDE1bDdoMHVUNThGelNmbmx6MHU1cmtIZkpJbUQ0
MyttYVAvOGd2MzZGUjI3alc4Ugo5d1k0aGsrV3M0SUIwaUZTZDhTWHYxS3I4dy9KbU1RU0RraXVH
K1JmSWl1YndRL2Z5N0VrajVRV2hQWncrbU14TktuSFVMeTN4WXoyCkx3VmZmdGp3VXVlYWN2cU5S
Q2tNWGxDbE9BRHFmVDhvU1pvZURYZWhIdmxQc0xDZW1HQm9US3Vyc2tJUzY5RjB5UEVINWd6ZTBI
K2YKOEZST3NJb0tTc1ZRMzRCNFMvam9FNjducHNKUFRkS3NOUEpUeVFJREFRQUJvNElCa3pDQ0FZ
OHdEQVlEVlIwVEFRSC9CQUl3QURBZApCZ05WSFE0RUZnUVVvRnBZNzZwNXlvTkRSR3RRcHpWdVI4
MVVXUTB3Z2NZR0ExVWRJd1NCdmpDQnU0QVV3NjArcHRZUkFFV0FYRHBYClNvcHQzREVObm5HaGdZ
Q2tmakI4TVFzd0NRWURWUVFHRXdKVlV6RThNRG9HQTFVRUNoTXpTVzUwWlhKdVpYUWdRMjl5Y0c5
eVlYUnAKYjI0Z1ptOXlJRUZ6YzJsbmJtVmtJRTVoYldWeklHRnVaQ0JPZFcxaVpYSnpNUzh3TFFZ
RFZRUURFeVpKUTBGT1RpQlVjbUZrWlcxaApjbXNnUTJ4bFlYSnBibWRvYjNWelpTQlFhV3h2ZENC
RFFZSWdMckFiZXZvYWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOCmhYa3dEZ1lEVlIw
UEFRSC9CQVFEQWdlQU1EUUdBMVVkSHdRdE1Dc3dLYUFub0NXR0kyaDBkSEE2THk5amNtd3VhV05o
Ym00dWIzSm4KTDNSdFkyaGZjR2xzYjNRdVkzSnNNRkVHQTFVZElBUktNRWd3RUFZT0t3WUJCQUdD
eVJzQkJZTTdEQW93TkFZSUt3WUJCUVVIQWdFdwpLREFtQmdnckJnRUZCUWNDQVJZYWFIUjBjSE02
THk5allTNXBZMkZ1Ymk1dmNtY3ZjR2xzYjNRd0RRWUpLb1pJaHZjTkFRRUxCUUFECmdnRUJBQXVq
WjJJY1IyRFZydGFSckE1OWVOWUNsNHhjc0pNdThEUUNIdjI4ZlRmaS9CaVpZNElyN0Y5a0Z5OTZE
N09aOG9MWTV6amYKNGRIeEZ3SFBxSDhEaDZKV3N6WHVIVzFaYTNYbWwwUGFIeENXUlMwWG9sOFdz
SEhwTnlnak1CWWZKMG9kVk04ODVUWjFFbDlTaXVFSApueW5GQmdTbWlGYzk5dVFkL1lEUlp1R3Yv
QTBIeXY3eVI5dGtMRWREM0ExdU5KQlc0UCtISkdwZEtrWUwxUTVyVTcrb0hWUHRNS0tJCjNpRmtV
RXNiTzQ1QVZkN3ZQL2ovN0p0QVpQYjZrb09WNWxaaTJIMVJMY2NHd3pkZXpuaEpnZDBOOW9iYjB2
bkU0MS9VU1dhZmRXUloKVkdrd1B1cVRobDdzQ3R6ckpIOFhZMHhjdW0rY2ZMeDJFQUl3VW5PY2Fi
ND08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNp
Z25hdHVyZT48L3NtZDpzaWduZWRNYXJrPg==
-----END ENCODED SMD-----

View File

@@ -1,99 +0,0 @@
Marks: الاختبار &amp; لتقييم
smdID: 000000781526320376959-65535
U-labels: xn------nzeaagpf7azb2ppajr3fa, xn-----btdaafne4a7azpoaiq8ea, xn----ymcaaeld1a4a6onahp3ea, xn--mgbaadjcy1a8mmago8da
notBefore: 2018-05-14T17:52:56.959Z
notAfter: 2022-08-18T14:27:18.209Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il9mMGZi
ZTM5Ny05ZmI0LTRmMmQtODlmNC1iMDI5YjQwMzU2ZWQiPjxzbWQ6aWQ+MDAwMDAwNzgxNTI2MzIw
Mzc2OTU5LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1Mjo1Ni45NTlaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDoyNzoxOC4yMDlaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazpj
b3VydD48bWFyazppZD4wMDAxNDQxNTAzMDY2NDE3MTUwMzA2NjQxNy0xPC9tYXJrOmlkPjxtYXJr
Om1hcmtOYW1lPtin2YTYp9iu2KrYqNin2LEgJmFtcDsg2YTYqtmC2YrZitmFPC9tYXJrOm1hcmtO
YW1lPjxtYXJrOmhvbGRlciBlbnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm5hbWU+2YXZh9mG2K/Y
syDYp9mE2YXYudmE2YjZhdin2KrZitipPC9tYXJrOm5hbWU+PG1hcms6YWRkcj48bWFyazpzdHJl
ZXQ+2KzYudmB2LEg2KfYqNmGINiz2YrZhtin2KEgNzU8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+
2YXZg9mG2KfYszwvbWFyazpjaXR5PjxtYXJrOnBjPjI5MDA8L21hcms6cGM+PG1hcms6Y2M+VVM8
L21hcms6Y2M+PC9tYXJrOmFkZHI+PC9tYXJrOmhvbGRlcj48bWFyazpjb250YWN0IHR5cGU9ImFn
ZW50Ij48bWFyazpuYW1lPtmF2YfZhtiv2LMg2KfZhNmF2LnZhNmI2YXYp9iq2YrYqTwvbWFyazpu
YW1lPjxtYXJrOm9yZz7ZiNmD2KfZhNipPC9tYXJrOm9yZz48bWFyazphZGRyPjxtYXJrOnN0cmVl
dD7YtNin2LHYuSDYrNi52YHYsSDYp9io2YYg2LPZitmG2KfYoSA3NTwvbWFyazpzdHJlZXQ+PG1h
cms6Y2l0eT7ZhdmD2YbYp9izPC9tYXJrOmNpdHk+PG1hcms6cGM+MjkwMDwvbWFyazpwYz48bWFy
azpjYz5NQTwvbWFyazpjYz48L21hcms6YWRkcj48bWFyazp2b2ljZT4rMjEyLjUyMjUzOTA0MDwv
bWFyazp2b2ljZT48bWFyazpmYXg+KzIxMi41MjI1MzkwNDE8L21hcms6ZmF4PjxtYXJrOmVtYWls
PmluZm9AYWdlbmN5LW1hcm9jY28uY29tPC9tYXJrOmVtYWlsPjwvbWFyazpjb250YWN0PjxtYXJr
OmxhYmVsPnhuLS0tLS0tbnplYWFncGY3YXpiMnBwYWpyM2ZhPC9tYXJrOmxhYmVsPjxtYXJrOmxh
YmVsPnhuLS0tLS1idGRhYWZuZTRhN2F6cG9haXE4ZWE8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+
eG4tLS0teW1jYWFlbGQxYTRhNm9uYWhwM2VhPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1t
Z2JhYWRqY3kxYThtbWFnbzhkYTwvbWFyazpsYWJlbD48bWFyazpnb29kc0FuZFNlcnZpY2VzPti6
2YrYqtin2LE8L21hcms6Z29vZHNBbmRTZXJ2aWNlcz48bWFyazpyZWZOdW0+MTk4PC9tYXJrOnJl
Zk51bT48bWFyazpwcm9EYXRlPjIwMTUtMDktMTVUMDA6MDA6MDAuMDAwWjwvbWFyazpwcm9EYXRl
PjxtYXJrOmNjPlVTPC9tYXJrOmNjPjxtYXJrOmNvdXJ0TmFtZT7Yp9mE2K/Yp9ixINin2YTYqNmK
2LbYp9ihPC9tYXJrOmNvdXJ0TmFtZT48L21hcms6Y291cnQ+PC9tYXJrOm1hcms+PGRzOlNpZ25h
dHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIgSWQ9Il82
NmZhMWNjZC04OTQ5LTRjYTgtYjIwYy0wYTAzYWZkZWI1NmEiPjxkczpTaWduZWRJbmZvPjxkczpD
YW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8x
MC94bWwtZXhjLWMxNG4jIi8+PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEyNTYiLz48ZHM6UmVmZXJlbmNl
IFVSST0iI19mMGZiZTM5Ny05ZmI0LTRmMmQtODlmNC1iMDI5YjQwMzU2ZWQiPjxkczpUcmFuc2Zv
cm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3ht
bGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRz
OkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5j
I3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT4xK0pvcVFqQ1BEb0tMRVkyb0xUMGZOUktVaGFpSHJW
ZzREdHpyMG5rbTNnPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PGRzOlJlZmVyZW5j
ZSBVUkk9IiNfNGI1ZDYxODktNDg0Ny00Yzg0LTgwZDMtMDQ4NTA0MTMzMTZlIj48ZHM6VHJhbnNm
b3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94
bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGht
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFs
dWU+OUw3WWY5bk1meTZVaTVlRkg5ZEJnRldVODlTeGJ2TEFSeE02K1ovTm9XQT08L2RzOkRpZ2Vz
dFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUg
SWQ9Il81YzhlY2ZkMy1lOTMxLTRkNzItYTMwOC1mYjhmM2JlYTJlZTMiPnZxN2FKMUxraHBxUmhn
Zmx2NFBPeE1zK3R6MDBld0d2NUdFWlVJczhxVmNNemxLY2IzWTJJVGFjUklWcEZUekk1WDRsK29t
My9RM2cKQzFXakpkL0VFSDVkc2o2VGZ1eDBsTXJ5YjFxN0tLRVlpTTc4eTlVWEhGblJpa0ZteEth
SGJFbEpJQVhyRzFMb1BZV0RQQ0NJd2Vragp5L3VyV1E0Tm03aVZHczFxRVByMDZreGpaT1Vob2h1
UThrMEdYMWMreXhIRE85eDUvOXl6WEg0UmpmN2VRWFZtK3ZkbXI5WktIRW9UCmJzK3R0RVFJUVA3
dTB1dGhtUHpSOUNJeC9WOTFUYlB4dXhsd2ZCcE1GUEdsNzAxZk9Ha2xVb0tURUNwMjlOZFVlOUx2
bXV2U0xzK1UKa2hKRWpNeUdMZUdCOFlLUTNoTUFtUklmdkhvZWVqWU9ETWRIbFE9PTwvZHM6U2ln
bmF0dXJlVmFsdWU+PGRzOktleUluZm8gSWQ9Il80YjVkNjE4OS00ODQ3LTRjODQtODBkMy0wNDg1
MDQxMzMxNmUiPjxkczpYNTA5RGF0YT48ZHM6WDUwOUNlcnRpZmljYXRlPk1JSUZPekNDQkNPZ0F3
SUJBZ0lnTHJBYmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTmhaY3dEUVlKS29a
SWh2Y04KQVFFTEJRQXdmREVMTUFrR0ExVUVCaE1DVlZNeFBEQTZCZ05WQkFvVE0wbHVkR1Z5Ym1W
MElFTnZjbkJ2Y21GMGFXOXVJR1p2Y2lCQgpjM05wWjI1bFpDQk9ZVzFsY3lCaGJtUWdUblZ0WW1W
eWN6RXZNQzBHQTFVRUF4TW1TVU5CVGs0Z1ZISmhaR1Z0WVhKcklFTnNaV0Z5CmFXNW5hRzkxYzJV
Z1VHbHNiM1FnUTBFd0hoY05NVGd3TWpJNE1EQXdNREF3V2hjTk1qTXdNekF4TWpNMU9UVTVXakNC
anpFTE1Ba0cKQTFVRUJoTUNRa1V4SURBZUJnTlZCQWdURjBKeWRYTnpaV3h6TFVOaGNHbDBZV3dn
VW1WbmFXOXVNUkV3RHdZRFZRUUhFd2hDY25WegpjMlZzY3pFUk1BOEdBMVVFQ2hNSVJHVnNiMmww
ZEdVeE9EQTJCZ05WQkFNVEwwbERRVTVPSUZSTlEwZ2dRWFYwYUc5eWFYcGxaQ0JVCmNtRmtaVzFo
Y21zZ1VHbHNiM1FnVm1Gc2FXUmhkRzl5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFN
SUlCQ2dLQ0FRRUEKeGxwM0twWUhYM1d5QXNGaFNrM0x3V2ZuR2x4blVERnFGWkEzVW91TVlqL1hp
Z2JNa05lRVhJamxrUk9LVDRPUEdmUngvTEF5UmxRUQpqQ012NHFoYmtjWDFwN2FyNjNmbHE0U1pO
VmNsMTVsN2gwdVQ1OEZ6U2ZubHowdTVya0hmSkltRDQzK21hUC84Z3YzNkZSMjdqVzhSCjl3WTRo
aytXczRJQjBpRlNkOFNYdjFLcjh3L0ptTVFTRGtpdUcrUmZJaXVid1EvZnk3RWtqNVFXaFBadytt
TXhOS25IVUx5M3hZejIKTHdWZmZ0andVdWVhY3ZxTlJDa01YbENsT0FEcWZUOG9TWm9lRFhlaEh2
bFBzTENlbUdCb1RLdXJza0lTNjlGMHlQRUg1Z3plMEgrZgo4RlJPc0lvS1NzVlEzNEI0Uy9qb0U2
N25wc0pQVGRLc05QSlR5UUlEQVFBQm80SUJrekNDQVk4d0RBWURWUjBUQVFIL0JBSXdBREFkCkJn
TlZIUTRFRmdRVW9GcFk3NnA1eW9ORFJHdFFwelZ1UjgxVVdRMHdnY1lHQTFVZEl3U0J2akNCdTRB
VXc2MCtwdFlSQUVXQVhEcFgKU29wdDNERU5ubkdoZ1lDa2ZqQjhNUXN3Q1FZRFZRUUdFd0pWVXpF
OE1Eb0dBMVVFQ2hNelNXNTBaWEp1WlhRZ1EyOXljRzl5WVhScApiMjRnWm05eUlFRnpjMmxuYm1W
a0lFNWhiV1Z6SUdGdVpDQk9kVzFpWlhKek1TOHdMUVlEVlFRREV5WkpRMEZPVGlCVWNtRmtaVzFo
CmNtc2dRMnhsWVhKcGJtZG9iM1Z6WlNCUWFXeHZkQ0JEUVlJZ0xyQWJldm9hZTUyeTNmNkMydEIw
U24zcDdYSm0wVDAyRm9neEtDZk4KaFhrd0RnWURWUjBQQVFIL0JBUURBZ2VBTURRR0ExVWRId1F0
TUNzd0thQW5vQ1dHSTJoMGRIQTZMeTlqY213dWFXTmhibTR1YjNKbgpMM1J0WTJoZmNHbHNiM1F1
WTNKc01GRUdBMVVkSUFSS01FZ3dFQVlPS3dZQkJBR0N5UnNCQllNN0RBb3dOQVlJS3dZQkJRVUhB
Z0V3CktEQW1CZ2dyQmdFRkJRY0NBUllhYUhSMGNITTZMeTlqWVM1cFkyRnViaTV2Y21jdmNHbHNi
M1F3RFFZSktvWklodmNOQVFFTEJRQUQKZ2dFQkFBdWpaMkljUjJEVnJ0YVJyQTU5ZU5ZQ2w0eGNz
Sk11OERRQ0h2MjhmVGZpL0JpWlk0SXI3RjlrRnk5NkQ3T1o4b0xZNXpqZgo0ZEh4RndIUHFIOERo
NkpXc3pYdUhXMVphM1htbDBQYUh4Q1dSUzBYb2w4V3NISHBOeWdqTUJZZkowb2RWTTg4NVRaMUVs
OVNpdUVICm55bkZCZ1NtaUZjOTl1UWQvWURSWnVHdi9BMEh5djd5Ujl0a0xFZEQzQTF1TkpCVzRQ
K0hKR3BkS2tZTDFRNXJVNytvSFZQdE1LS0kKM2lGa1VFc2JPNDVBVmQ3dlAvai83SnRBWlBiNmtv
T1Y1bFppMkgxUkxjY0d3emRlem5oSmdkME45b2JiMHZuRTQxL1VTV2FmZFdSWgpWR2t3UHVxVGhs
N3NDdHpySkg4WFkweGN1bStjZkx4MkVBSXdVbk9jYWI0PTwvZHM6WDUwOUNlcnRpZmljYXRlPjwv
ZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjwvZHM6U2lnbmF0dXJlPjwvc21kOnNpZ25lZE1hcms+
-----END ENCODED SMD-----

View File

@@ -1,99 +0,0 @@
Marks: 检查&amp;查询
smdID: 000000811526320382809-65535
U-labels: xn----sh7bb78f789j, xn--and-bp0gd32k781m, xn--jvva96di40i
notBefore: 2018-05-14T17:53:02.809Z
notAfter: 2022-08-18T14:36:50.931Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il84NWVl
ZjE2OC1kOGE0LTQzYTYtOTRlZS1jNDk5MDcxN2ZkY2YiPjxzbWQ6aWQ+MDAwMDAwODExNTI2MzIw
MzgyODA5LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MzowMi44MDlaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDozNjo1MC45MzFaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmVhdHlPclN0YXR1dGU+PG1hcms6aWQ+MDAwMTQ2MTUwMzA2Njk3NjE1MDMwNjY5NzYtMTwvbWFy
azppZD48bWFyazptYXJrTmFtZT7mo4Dmn6UmYW1wO+afpeivojwvbWFyazptYXJrTmFtZT48bWFy
azpob2xkZXIgZW50aXRsZW1lbnQ9Im93bmVyIj48bWFyazpvcmc+5bel56iL5aSEPC9tYXJrOm9y
Zz48bWFyazphZGRyPjxtYXJrOnN0cmVldD7pppnmuK/kuJzot6825Y+377yMNeWPt+alvO+8jDjl
j7flrqQ8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+6Z2S5bKb5biCPC9tYXJrOmNpdHk+PG1hcms6
cGM+MzUwMDwvbWFyazpwYz48bWFyazpjYz5DTjwvbWFyazpjYz48L21hcms6YWRkcj48L21hcms6
aG9sZGVyPjxtYXJrOmNvbnRhY3QgdHlwZT0iYWdlbnQiPjxtYXJrOm5hbWU+5p2O5bCP5pa5PC9t
YXJrOm5hbWU+PG1hcms6b3JnPuW3peeoi+WkhDwvbWFyazpvcmc+PG1hcms6YWRkcj48bWFyazpz
dHJlZXQ+6aaZ5riv5Lic6LevNuWPt++8jDXlj7fmpbzvvIw45Y+35a6kPC9tYXJrOnN0cmVldD48
bWFyazpjaXR5PumdkuWym+W4gjwvbWFyazpjaXR5PjxtYXJrOnBjPjM1MDA8L21hcms6cGM+PG1h
cms6Y2M+Q048L21hcms6Y2M+PC9tYXJrOmFkZHI+PG1hcms6dm9pY2U+Kzg2LjEwODQ2NTcxNzM8
L21hcms6dm9pY2U+PG1hcms6ZmF4Pis4Ni4xMDg0NjU3MTc1PC9tYXJrOmZheD48bWFyazplbWFp
bD5pbmZvQGNoaW5lc2UtYWdlbmN5LmNvbTwvbWFyazplbWFpbD48L21hcms6Y29udGFjdD48bWFy
azpwcm90ZWN0aW9uPjxtYXJrOmNjPlVTPC9tYXJrOmNjPjxtYXJrOnJ1bGluZz5DTjwvbWFyazpy
dWxpbmc+PC9tYXJrOnByb3RlY3Rpb24+PG1hcms6bGFiZWw+eG4tLS0tc2g3YmI3OGY3ODlqPC9t
YXJrOmxhYmVsPjxtYXJrOmxhYmVsPnhuLS1hbmQtYnAwZ2QzMms3ODFtPC9tYXJrOmxhYmVsPjxt
YXJrOmxhYmVsPnhuLS1qdnZhOTZkaTQwaTwvbWFyazpsYWJlbD48bWFyazpnb29kc0FuZFNlcnZp
Y2VzPiDlkInku5Y8L21hcms6Z29vZHNBbmRTZXJ2aWNlcz48bWFyazpyZWZOdW0+MTIzNDwvbWFy
azpyZWZOdW0+PG1hcms6cHJvRGF0ZT4yMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFo8L21hcms6cHJv
RGF0ZT48bWFyazp0aXRsZT5UZXN0IFRyZWF0eTwvbWFyazp0aXRsZT48bWFyazpleGVjRGF0ZT4y
MDEzLTAyLTAyVDAwOjAwOjAwLjAwMFo8L21hcms6ZXhlY0RhdGU+PC9tYXJrOnRyZWF0eU9yU3Rh
dHV0ZT48L21hcms6bWFyaz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwLzA5L3htbGRzaWcjIiBJZD0iXzViZjE4MzY1LTNhYjYtNDI0YS04NTA1LTIyYjEyZTI2
YWM2NyI+PGRzOlNpZ25lZEluZm8+PGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGht
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48ZHM6U2lnbmF0dXJl
TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUj
cnNhLXNoYTI1NiIvPjxkczpSZWZlcmVuY2UgVVJJPSIjXzg1ZWVmMTY4LWQ4YTQtNDNhNi05NGVl
LWM0OTkwNzE3ZmRjZiI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+PGRz
OlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1j
MTRuIyIvPjwvZHM6VHJhbnNmb3Jtcz48ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDov
L3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+PGRzOkRpZ2VzdFZhbHVlPi9pbWJv
aDFoMGFROTNZOU5UTnAzNlpGYUg5UDNjbUNXQmlJUGVWQmUyWXc9PC9kczpEaWdlc3RWYWx1ZT48
L2RzOlJlZmVyZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI19iMjgwM2NkOS00M2M4LTQ4M2ItOTM4
ZC03ZGRkM2FlZDQ4NDUiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+
PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1s
ZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5ROU4xZllXb0U5VmJka2toSThVMThZQUQySzVV
b0xCT2dlUmtOZWNrRy9FPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PC9kczpTaWdu
ZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZSBJZD0iX2MyMGUxYjhlLTA3YmItNDM2MC05ODRlLWEz
ZDNmNGE5MWNiMiI+d1FBTm5xcldIQll1dVo1WlpQZzF6b2srOGpxa0ZsWmVlSnMvNGdHYW13K2lt
VmVMUkYzYk1TdVJBVjBiKytJRlNGL2VUL2M2QjkwTwo3Z0h2TlhIV25BRStWK2lwdFhSYmI5OHd0
YjBkTGh1NGFkNFBGN1ZHcWhmU1FPSUlMVHpUblQ2UkkwZXpVbUdEYzJ6ZXlIb2F0WWFKCm1XUXBy
UzcvY2ozL29DRVQ3OU1IelJCMDduN0VuSjlIaUhnYXdWbjhXUnJPSFNBaVVpZEpBcmtQTVNTRVdB
SG1PVUNvMzQ4MnI5WXMKVkhmNFVmV3ROMU91Nlo0TWFIbkk1SGRqQ3J6ekowVE8yblYydHJqandR
YmVFQ3Q0bDMyNzlKdkpsWVdYYnBYQ3dKaGYzdjlwUHV0YgpYS3VqWkZvck1LeERWVWlzT2hRaW9a
bHZvRVkwcFA0bGJUZkdXQT09PC9kczpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iX2Iy
ODAzY2Q5LTQzYzgtNDgzYi05MzhkLTdkZGQzYWVkNDg0NSI+PGRzOlg1MDlEYXRhPjxkczpYNTA5
Q2VydGlmaWNhdGU+TUlJRk96Q0NCQ09nQXdJQkFnSWdMckFiZXZvYWU1MnkzZjZDMnRCMFNuM3A3
WEptMFQwMkZvZ3hLQ2ZOaFpjd0RRWUpLb1pJaHZjTgpBUUVMQlFBd2ZERUxNQWtHQTFVRUJoTUNW
Vk14UERBNkJnTlZCQW9UTTBsdWRHVnlibVYwSUVOdmNuQnZjbUYwYVc5dUlHWnZjaUJCCmMzTnBa
MjVsWkNCT1lXMWxjeUJoYm1RZ1RuVnRZbVZ5Y3pFdk1DMEdBMVVFQXhNbVNVTkJUazRnVkhKaFpH
VnRZWEpySUVOc1pXRnkKYVc1bmFHOTFjMlVnVUdsc2IzUWdRMEV3SGhjTk1UZ3dNakk0TURBd01E
QXdXaGNOTWpNd016QXhNak0xT1RVNVdqQ0JqekVMTUFrRwpBMVVFQmhNQ1FrVXhJREFlQmdOVkJB
Z1RGMEp5ZFhOelpXeHpMVU5oY0dsMFlXd2dVbVZuYVc5dU1SRXdEd1lEVlFRSEV3aENjblZ6CmMy
VnNjekVSTUE4R0ExVUVDaE1JUkdWc2IybDBkR1V4T0RBMkJnTlZCQU1UTDBsRFFVNU9JRlJOUTBn
Z1FYVjBhRzl5YVhwbFpDQlUKY21Ga1pXMWhjbXNnVUdsc2IzUWdWbUZzYVdSaGRHOXlNSUlCSWpB
TkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQp4bHAzS3BZSFgzV3lBc0ZoU2sz
THdXZm5HbHhuVURGcUZaQTNVb3VNWWovWGlnYk1rTmVFWElqbGtST0tUNE9QR2ZSeC9MQXlSbFFR
CmpDTXY0cWhia2NYMXA3YXI2M2ZscTRTWk5WY2wxNWw3aDB1VDU4RnpTZm5sejB1NXJrSGZKSW1E
NDMrbWFQLzhndjM2RlIyN2pXOFIKOXdZNGhrK1dzNElCMGlGU2Q4U1h2MUtyOHcvSm1NUVNEa2l1
RytSZklpdWJ3US9meTdFa2o1UVdoUFp3K21NeE5LbkhVTHkzeFl6MgpMd1ZmZnRqd1V1ZWFjdnFO
UkNrTVhsQ2xPQURxZlQ4b1Nab2VEWGVoSHZsUHNMQ2VtR0JvVEt1cnNrSVM2OUYweVBFSDVnemUw
SCtmCjhGUk9zSW9LU3NWUTM0QjRTL2pvRTY3bnBzSlBUZEtzTlBKVHlRSURBUUFCbzRJQmt6Q0NB
WTh3REFZRFZSMFRBUUgvQkFJd0FEQWQKQmdOVkhRNEVGZ1FVb0ZwWTc2cDV5b05EUkd0UXB6VnVS
ODFVV1Ewd2djWUdBMVVkSXdTQnZqQ0J1NEFVdzYwK3B0WVJBRVdBWERwWApTb3B0M0RFTm5uR2hn
WUNrZmpCOE1Rc3dDUVlEVlFRR0V3SlZVekU4TURvR0ExVUVDaE16U1c1MFpYSnVaWFFnUTI5eWNH
OXlZWFJwCmIyNGdabTl5SUVGemMybG5ibVZrSUU1aGJXVnpJR0Z1WkNCT2RXMWlaWEp6TVM4d0xR
WURWUVFERXlaSlEwRk9UaUJVY21Ga1pXMWgKY21zZ1EyeGxZWEpwYm1kb2IzVnpaU0JRYVd4dmRD
QkRRWUlnTHJBYmV2b2FlNTJ5M2Y2QzJ0QjBTbjNwN1hKbTBUMDJGb2d4S0NmTgpoWGt3RGdZRFZS
MFBBUUgvQkFRREFnZUFNRFFHQTFVZEh3UXRNQ3N3S2FBbm9DV0dJMmgwZEhBNkx5OWpjbXd1YVdO
aGJtNHViM0puCkwzUnRZMmhmY0dsc2IzUXVZM0pzTUZFR0ExVWRJQVJLTUVnd0VBWU9Ld1lCQkFH
Q3lSc0JCWU03REFvd05BWUlLd1lCQlFVSEFnRXcKS0RBbUJnZ3JCZ0VGQlFjQ0FSWWFhSFIwY0hN
Nkx5OWpZUzVwWTJGdWJpNXZjbWN2Y0dsc2IzUXdEUVlKS29aSWh2Y05BUUVMQlFBRApnZ0VCQUF1
aloySWNSMkRWcnRhUnJBNTllTllDbDR4Y3NKTXU4RFFDSHYyOGZUZmkvQmlaWTRJcjdGOWtGeTk2
RDdPWjhvTFk1empmCjRkSHhGd0hQcUg4RGg2Sldzelh1SFcxWmEzWG1sMFBhSHhDV1JTMFhvbDhX
c0hIcE55Z2pNQllmSjBvZFZNODg1VFoxRWw5U2l1RUgKbnluRkJnU21pRmM5OXVRZC9ZRFJadUd2
L0EwSHl2N3lSOXRrTEVkRDNBMXVOSkJXNFArSEpHcGRLa1lMMVE1clU3K29IVlB0TUtLSQozaUZr
VUVzYk80NUFWZDd2UC9qLzdKdEFaUGI2a29PVjVsWmkySDFSTGNjR3d6ZGV6bmhKZ2QwTjlvYmIw
dm5FNDEvVVNXYWZkV1JaClZHa3dQdXFUaGw3c0N0enJKSDhYWTB4Y3VtK2NmTHgyRUFJd1VuT2Nh
YjQ9PC9kczpYNTA5Q2VydGlmaWNhdGU+PC9kczpYNTA5RGF0YT48L2RzOktleUluZm8+PC9kczpT
aWduYXR1cmU+PC9zbWQ6c2lnbmVkTWFyaz4=
-----END ENCODED SMD-----

View File

@@ -1,103 +0,0 @@
Marks: Test &amp; Validate
smdID: 000000881526320394478-65535
U-labels: test---validate, test--validate, test-and-validate, test-andvalidate, test-validate, testand-validate, testandvalidate, testvalidate
notBefore: 2018-05-14T17:53:14.478Z
notAfter: 2022-08-18T14:57:36.681Z
-----BEGIN ENCODED SMD-----
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNtZDpzaWduZWRNYXJrIHht
bG5zOnNtZD0idXJuOmlldGY6cGFyYW1zOnhtbDpuczpzaWduZWRNYXJrLTEuMCIgaWQ9Il8yOThh
NmVjZC0xN2I4LTQ3ZTAtYWQ4MC1hMDEyOGIyMzI0MTYiPjxzbWQ6aWQ+MDAwMDAwODgxNTI2MzIw
Mzk0NDc4LTY1NTM1PC9zbWQ6aWQ+PHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSI2NTUzNSI+PHNt
ZDpvcmc+SUNBTk4gVE1DSCBURVNUSU5HIFRNVjwvc21kOm9yZz48c21kOmVtYWlsPm5vdGF2YWls
YWJsZUBleGFtcGxlLmNvbTwvc21kOmVtYWlsPjxzbWQ6dXJsPnd3dy5leGFtcGxlLmNvbTwvc21k
OnVybD48c21kOnZvaWNlPiszMi4yMDAwMDAwMDwvc21kOnZvaWNlPjwvc21kOmlzc3VlckluZm8+
PHNtZDpub3RCZWZvcmU+MjAxOC0wNS0xNFQxNzo1MzoxNC40NzhaPC9zbWQ6bm90QmVmb3JlPjxz
bWQ6bm90QWZ0ZXI+MjAyMi0wOC0xOFQxNDo1NzozNi42ODFaPC9zbWQ6bm90QWZ0ZXI+PG1hcms6
bWFyayB4bWxuczptYXJrPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOm1hcmstMS4wIj48bWFyazp0
cmVhdHlPclN0YXR1dGU+PG1hcms6aWQ+MDAwMTM3MTUwMzA2ODIzMjE1MDMwNjgyMzItMTwvbWFy
azppZD48bWFyazptYXJrTmFtZT5UZXN0ICZhbXA7IFZhbGlkYXRlPC9tYXJrOm1hcmtOYW1lPjxt
YXJrOmhvbGRlciBlbnRpdGxlbWVudD0ib3duZXIiPjxtYXJrOm5hbWU+VG9ueSBIb2xsYW5kPC9t
YXJrOm5hbWU+PG1hcms6b3JnPkFnIGNvcnBvcmF0aW9uPC9tYXJrOm9yZz48bWFyazphZGRyPjxt
YXJrOnN0cmVldD4xMzA1IEJyaWdodCBBdmVudWU8L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+QXJj
YWRpYTwvbWFyazpjaXR5PjxtYXJrOnBjPjkwMDI4PC9tYXJrOnBjPjxtYXJrOmNjPlVTPC9tYXJr
OmNjPjwvbWFyazphZGRyPjwvbWFyazpob2xkZXI+PG1hcms6Y29udGFjdCB0eXBlPSJhZ2VudCI+
PG1hcms6bmFtZT5Ub255IEhvbGxhbmQ8L21hcms6bmFtZT48bWFyazpvcmc+QWcgY29ycG9yYXRp
b248L21hcms6b3JnPjxtYXJrOmFkZHI+PG1hcms6c3RyZWV0PkJyaWdodCBBdmVudWUgMTMwNSA8
L21hcms6c3RyZWV0PjxtYXJrOmNpdHk+QXJjYWRpYTwvbWFyazpjaXR5PjxtYXJrOnNwPkNBPC9t
YXJrOnNwPjxtYXJrOnBjPjkwMDI4PC9tYXJrOnBjPjxtYXJrOmNjPlVTPC9tYXJrOmNjPjwvbWFy
azphZGRyPjxtYXJrOnZvaWNlPisxLjIwMjU1NjIzMDI8L21hcms6dm9pY2U+PG1hcms6ZmF4Pisx
LjIwMjU1NjIzMDE8L21hcms6ZmF4PjxtYXJrOmVtYWlsPmluZm9AYWdjb3Jwb3JhdGlvbi5jb208
L21hcms6ZW1haWw+PC9tYXJrOmNvbnRhY3Q+PG1hcms6cHJvdGVjdGlvbj48bWFyazpjYz5VUzwv
bWFyazpjYz48bWFyazpydWxpbmc+VVM8L21hcms6cnVsaW5nPjwvbWFyazpwcm90ZWN0aW9uPjxt
YXJrOmxhYmVsPnRlc3QtLS12YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0LS12
YWxpZGF0ZTwvbWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0LWFuZC12YWxpZGF0ZTwvbWFyazps
YWJlbD48bWFyazpsYWJlbD50ZXN0LWFuZHZhbGlkYXRlPC9tYXJrOmxhYmVsPjxtYXJrOmxhYmVs
PnRlc3QtdmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6bGFiZWw+dGVzdGFuZC12YWxpZGF0ZTwv
bWFyazpsYWJlbD48bWFyazpsYWJlbD50ZXN0YW5kdmFsaWRhdGU8L21hcms6bGFiZWw+PG1hcms6
bGFiZWw+dGVzdHZhbGlkYXRlPC9tYXJrOmxhYmVsPjxtYXJrOmdvb2RzQW5kU2VydmljZXM+Z3Vp
dGFyPC9tYXJrOmdvb2RzQW5kU2VydmljZXM+PG1hcms6cmVmTnVtPjEyMzQ8L21hcms6cmVmTnVt
PjxtYXJrOnByb0RhdGU+MjAwMC0wMS0wMVQwMDowMDowMC4wMDBaPC9tYXJrOnByb0RhdGU+PG1h
cms6dGl0bGU+Z3VpdGFyPC9tYXJrOnRpdGxlPjxtYXJrOmV4ZWNEYXRlPjIwMTMtMDItMDJUMDA6
MDA6MDAuMDAwWjwvbWFyazpleGVjRGF0ZT48L21hcms6dHJlYXR5T3JTdGF0dXRlPjwvbWFyazpt
YXJrPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1s
ZHNpZyMiIElkPSJfNWI5ZmQ0MWItMzYwOS00NDM3LTk2ZTMtYTUyM2I4YmQ4MTA1Ij48ZHM6U2ln
bmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVNZXRob2QgQWxnb3Jp
dGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8+
PGRzOlJlZmVyZW5jZSBVUkk9IiNfMjk4YTZlY2QtMTdiOC00N2UwLWFkODAtYTAxMjhiMjMyNDE2
Ij48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5v
cmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6VHJhbnNmb3JtIEFs
Z29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpU
cmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+bGVIUzVtV2podHZZaWF2ZlQz
RWs1ZHRYSEFjbzV0dWlwVlRpVmM4NkxlRT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNl
PjxkczpSZWZlcmVuY2UgVVJJPSIjX2FhYzFkZTQzLTFmMTAtNGRiOC1hZTRhLWZmM2MzZTdjMzgw
MCI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHM6VHJhbnNmb3Jtcz48ZHM6RGlnZXN0TWV0
aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+
PGRzOkRpZ2VzdFZhbHVlPkJVcmNZaUxZZ0lKYWJBbXlMbXBNZDBsNEZIVEF4SkgvWVlsNTRyUHpw
MWM9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48L2RzOlNpZ25lZEluZm8+PGRzOlNp
Z25hdHVyZVZhbHVlIElkPSJfYjViMjhjYmUtZmEzYS00NDhjLTk1ZWEtZWE0YWUxYTgxMmQ5Ij5Y
WHU5eXo3Y045R0hQQ0tUUkxqT0VSRWRBM0hSejVlQkw2RmlSeU5VbkFGT2htRUVYZC9welBZeitm
d01vdktkMldjaWVDaHp1dmZoCjZYSUdOaWMycVpGQmpodTBBYXp6bjBueHd4QkYrRngwQ3lxb3pR
MitnZ2pwOUxubExKQ2hHcEhLMjFnOFc2RFpGVndXaXVLbjhMeGkKNWxzTDV4WFgvVllSVHh0OGQ2
b2tLeDM1bnVXbmx0RUc4Uldoa0JaZzBhaEZBZjl3c0FRV29wN1JucFc1RkQ1WjMyc3pYekV3U3pU
cApsR0JVV0xhb3ZMck9lMFVSM1VNWUU1SE1NL3l3bjZSd2ExMWNBeTVwekVhSzRHQXl3NTEvdlJS
L0ZXS3o3S3Fva2hvTDk4OGV2b1FzClNlc2tmSWRGb3BGbWdKQTd6YzdWWmdhV0ozanhKOGRORXpo
TFhnPT08L2RzOlNpZ25hdHVyZVZhbHVlPjxkczpLZXlJbmZvIElkPSJfYWFjMWRlNDMtMWYxMC00
ZGI4LWFlNGEtZmYzYzNlN2MzODAwIj48ZHM6WDUwOURhdGE+PGRzOlg1MDlDZXJ0aWZpY2F0ZT5N
SUlGT3pDQ0JDT2dBd0lCQWdJZ0xyQWJldm9hZTUyeTNmNkMydEIwU24zcDdYSm0wVDAyRm9neEtD
Zk5oWmN3RFFZSktvWklodmNOCkFRRUxCUUF3ZkRFTE1Ba0dBMVVFQmhNQ1ZWTXhQREE2QmdOVkJB
b1RNMGx1ZEdWeWJtVjBJRU52Y25CdmNtRjBhVzl1SUdadmNpQkIKYzNOcFoyNWxaQ0JPWVcxbGN5
QmhibVFnVG5WdFltVnljekV2TUMwR0ExVUVBeE1tU1VOQlRrNGdWSEpoWkdWdFlYSnJJRU5zWldG
eQphVzVuYUc5MWMyVWdVR2xzYjNRZ1EwRXdIaGNOTVRnd01qSTRNREF3TURBd1doY05Nak13TXpB
eE1qTTFPVFU1V2pDQmp6RUxNQWtHCkExVUVCaE1DUWtVeElEQWVCZ05WQkFnVEYwSnlkWE56Wld4
ekxVTmhjR2wwWVd3Z1VtVm5hVzl1TVJFd0R3WURWUVFIRXdoQ2NuVnoKYzJWc2N6RVJNQThHQTFV
RUNoTUlSR1ZzYjJsMGRHVXhPREEyQmdOVkJBTVRMMGxEUVU1T0lGUk5RMGdnUVhWMGFHOXlhWHBs
WkNCVQpjbUZrWlcxaGNtc2dVR2xzYjNRZ1ZtRnNhV1JoZEc5eU1JSUJJakFOQmdrcWhraUc5dzBC
QVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBCnhscDNLcFlIWDNXeUFzRmhTazNMd1dmbkdseG5VREZx
RlpBM1VvdU1Zai9YaWdiTWtOZUVYSWpsa1JPS1Q0T1BHZlJ4L0xBeVJsUVEKakNNdjRxaGJrY1gx
cDdhcjYzZmxxNFNaTlZjbDE1bDdoMHVUNThGelNmbmx6MHU1cmtIZkpJbUQ0MyttYVAvOGd2MzZG
UjI3alc4Ugo5d1k0aGsrV3M0SUIwaUZTZDhTWHYxS3I4dy9KbU1RU0RraXVHK1JmSWl1YndRL2Z5
N0VrajVRV2hQWncrbU14TktuSFVMeTN4WXoyCkx3VmZmdGp3VXVlYWN2cU5SQ2tNWGxDbE9BRHFm
VDhvU1pvZURYZWhIdmxQc0xDZW1HQm9US3Vyc2tJUzY5RjB5UEVINWd6ZTBIK2YKOEZST3NJb0tT
c1ZRMzRCNFMvam9FNjducHNKUFRkS3NOUEpUeVFJREFRQUJvNElCa3pDQ0FZOHdEQVlEVlIwVEFR
SC9CQUl3QURBZApCZ05WSFE0RUZnUVVvRnBZNzZwNXlvTkRSR3RRcHpWdVI4MVVXUTB3Z2NZR0Ex
VWRJd1NCdmpDQnU0QVV3NjArcHRZUkFFV0FYRHBYClNvcHQzREVObm5HaGdZQ2tmakI4TVFzd0NR
WURWUVFHRXdKVlV6RThNRG9HQTFVRUNoTXpTVzUwWlhKdVpYUWdRMjl5Y0c5eVlYUnAKYjI0Z1pt
OXlJRUZ6YzJsbmJtVmtJRTVoYldWeklHRnVaQ0JPZFcxaVpYSnpNUzh3TFFZRFZRUURFeVpKUTBG
T1RpQlVjbUZrWlcxaApjbXNnUTJ4bFlYSnBibWRvYjNWelpTQlFhV3h2ZENCRFFZSWdMckFiZXZv
YWU1MnkzZjZDMnRCMFNuM3A3WEptMFQwMkZvZ3hLQ2ZOCmhYa3dEZ1lEVlIwUEFRSC9CQVFEQWdl
QU1EUUdBMVVkSHdRdE1Dc3dLYUFub0NXR0kyaDBkSEE2THk5amNtd3VhV05oYm00dWIzSm4KTDNS
dFkyaGZjR2xzYjNRdVkzSnNNRkVHQTFVZElBUktNRWd3RUFZT0t3WUJCQUdDeVJzQkJZTTdEQW93
TkFZSUt3WUJCUVVIQWdFdwpLREFtQmdnckJnRUZCUWNDQVJZYWFIUjBjSE02THk5allTNXBZMkZ1
Ymk1dmNtY3ZjR2xzYjNRd0RRWUpLb1pJaHZjTkFRRUxCUUFECmdnRUJBQXVqWjJJY1IyRFZydGFS
ckE1OWVOWUNsNHhjc0pNdThEUUNIdjI4ZlRmaS9CaVpZNElyN0Y5a0Z5OTZEN09aOG9MWTV6amYK
NGRIeEZ3SFBxSDhEaDZKV3N6WHVIVzFaYTNYbWwwUGFIeENXUlMwWG9sOFdzSEhwTnlnak1CWWZK
MG9kVk04ODVUWjFFbDlTaXVFSApueW5GQmdTbWlGYzk5dVFkL1lEUlp1R3YvQTBIeXY3eVI5dGtM
RWREM0ExdU5KQlc0UCtISkdwZEtrWUwxUTVyVTcrb0hWUHRNS0tJCjNpRmtVRXNiTzQ1QVZkN3ZQ
L2ovN0p0QVpQYjZrb09WNWxaaTJIMVJMY2NHd3pkZXpuaEpnZDBOOW9iYjB2bkU0MS9VU1dhZmRX
UloKVkdrd1B1cVRobDdzQ3R6ckpIOFhZMHhjdW0rY2ZMeDJFQUl3VW5PY2FiND08L2RzOlg1MDlD
ZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48L3Nt
ZDpzaWduZWRNYXJrPg==
-----END ENCODED SMD-----

Some files were not shown because too many files have changed in this diff Show More