occam-verify-cli 0.0.951 → 0.0.955
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context/file.js +9 -128
- package/lib/context/release.js +174 -33
- package/lib/declaration.js +13 -13
- package/lib/frame.js +14 -14
- package/lib/index.js +6 -6
- package/lib/judgement.js +4 -4
- package/lib/metavariable.js +10 -10
- package/lib/releaseContext/verify.js +66 -0
- package/lib/substitution/statementForMetavariable.js +11 -11
- package/lib/unifier/equality.js +6 -6
- package/lib/unifier/metaLevel.js +5 -5
- package/lib/unify/statementAgainstMetaType.js +5 -5
- package/lib/utilities/array.js +5 -2
- package/lib/verify/judgement.js +3 -3
- package/lib/verify/metavariable.js +3 -3
- package/lib/verify/statement/qualified.js +3 -3
- package/package.json +1 -1
- package/src/context/file.js +11 -212
- package/src/context/release.js +164 -33
- package/src/declaration.js +10 -10
- package/src/frame.js +12 -11
- package/src/index.js +2 -4
- package/src/judgement.js +1 -1
- package/src/metavariable.js +18 -17
- package/src/releaseContext/{initialise.js → verify.js} +7 -7
- package/src/substitution/statementForMetavariable.js +9 -10
- package/src/unifier/equality.js +5 -5
- package/src/unifier/metaLevel.js +4 -4
- package/src/unify/statementAgainstMetaType.js +4 -4
- package/src/utilities/array.js +1 -1
- package/src/verify/judgement.js +3 -3
- package/src/verify/metavariable.js +3 -3
- package/src/verify/statement/qualified.js +2 -2
- package/lib/releaseContext/initialise.js +0 -66
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { nodeQuery } from "../utilities/query";
|
|
4
4
|
import { nameFromMetavariableNode } from "../utilities/name";
|
|
5
|
-
import {
|
|
5
|
+
import { unifyTermAgainstTermType } from "../metavariable";
|
|
6
6
|
|
|
7
7
|
const termNodeQuery = nodeQuery("/metavariable/argument/term"),
|
|
8
8
|
typeNodeQuery = nodeQuery("/metavariable/argument/type");
|
|
@@ -43,9 +43,9 @@ export default function verifyMetavariable(metavariableNode, localContext) {
|
|
|
43
43
|
|
|
44
44
|
localContext.debug(`No term was found when the metavariable's term type is '${termTypeName}'.`, termNode);
|
|
45
45
|
} else {
|
|
46
|
-
const
|
|
46
|
+
const termUnifiedAgainstTermType = unifyTermAgainstTermType(termNode, termType, localContext);
|
|
47
47
|
|
|
48
|
-
metavariableVerified =
|
|
48
|
+
metavariableVerified = termUnifiedAgainstTermType; ///
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
}
|
|
@@ -194,13 +194,13 @@ function unifyQualifiedStatementAAgainstReference(qualifiedStatementNode, substi
|
|
|
194
194
|
statementNodeB = statementNode, ///
|
|
195
195
|
substitutionNodeA = null,
|
|
196
196
|
metavariableNodeA = metavariableNode, ///
|
|
197
|
-
|
|
197
|
+
metavariableUnifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, () => {
|
|
198
198
|
const verifiedAhead = true;
|
|
199
199
|
|
|
200
200
|
return verifiedAhead;
|
|
201
201
|
});
|
|
202
202
|
|
|
203
|
-
qualifiedStatementUnifiedAgainstReference =
|
|
203
|
+
qualifiedStatementUnifiedAgainstReference = metavariableUnifiedAgainstStatement; ///
|
|
204
204
|
}
|
|
205
205
|
|
|
206
206
|
if (qualifiedStatementUnifiedAgainstReference) {
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return initialiseReleaseContext;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
function initialiseReleaseContext(dependency, dependentName, dependentReleased, context) {
|
|
12
|
-
var releaseContextInitialised = false;
|
|
13
|
-
var releaseContextMap = context.releaseContextMap, dependencyName = dependency.getName(), releaseName = dependencyName, releaseContext = releaseContextMap[releaseName] || null;
|
|
14
|
-
if (releaseContext === null) {
|
|
15
|
-
var log = context.log;
|
|
16
|
-
log.error("Unable to initialise the '".concat(dependencyName, "' dependency's context because it has not been created."));
|
|
17
|
-
} else {
|
|
18
|
-
var initialised = releaseContext.isInitialised();
|
|
19
|
-
if (initialised) {
|
|
20
|
-
releaseContextInitialised = true;
|
|
21
|
-
} else {
|
|
22
|
-
var released = releaseContext.isReleased();
|
|
23
|
-
if (!released && dependentReleased) {
|
|
24
|
-
var log1 = context.log;
|
|
25
|
-
log1.error("Unable to initialise the '".concat(dependencyName, "' dependency's context because its '").concat(dependentName, "' dependent is a package."));
|
|
26
|
-
} else {
|
|
27
|
-
var dependencies = releaseContext.getDependencies();
|
|
28
|
-
dependentName = dependencyName; ///
|
|
29
|
-
dependentReleased = released; ///
|
|
30
|
-
releaseContextInitialised = dependencies.everyDependency(function(dependency) {
|
|
31
|
-
var releaseContextInitialised = initialiseReleaseContext(dependency, dependentName, dependentReleased, context);
|
|
32
|
-
if (releaseContextInitialised) {
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
if (releaseContextInitialised) {
|
|
37
|
-
var releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
|
|
38
|
-
releaseContext.initialise(releaseContexts);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return releaseContextInitialised;
|
|
44
|
-
}
|
|
45
|
-
function retrieveReleaseContexts(releaseContext, releaseContextMap) {
|
|
46
|
-
var releaseContexts = [], remainingReleaseContext = releaseContext, remainingReleaseContexts = [
|
|
47
|
-
remainingReleaseContext
|
|
48
|
-
];
|
|
49
|
-
var remainingReleaseContextsLength = remainingReleaseContexts.length;
|
|
50
|
-
while(remainingReleaseContextsLength > 0){
|
|
51
|
-
var remainingReleaseContext1 = remainingReleaseContexts.shift(), _$releaseContext = remainingReleaseContext1; ///
|
|
52
|
-
releaseContexts.push(_$releaseContext);
|
|
53
|
-
var dependencies = _$releaseContext.getDependencies();
|
|
54
|
-
dependencies.forEachDependency(function(dependency) {
|
|
55
|
-
var dependencyName = dependency.getName(), releaseName = dependencyName, _$releaseContext = releaseContextMap[releaseName], releaseContextsIncludesReleaseContext = releaseContexts.includes(_$releaseContext), remainingReleaseContextsIncludesReleaseContext = remainingReleaseContexts.includes(_$releaseContext);
|
|
56
|
-
if (!releaseContextsIncludesReleaseContext && !remainingReleaseContextsIncludesReleaseContext) {
|
|
57
|
-
var remainingReleaseContext = _$releaseContext; ///
|
|
58
|
-
remainingReleaseContexts.push(remainingReleaseContext);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
remainingReleaseContextsLength = remainingReleaseContexts.length;
|
|
62
|
-
}
|
|
63
|
-
return releaseContexts;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWxlYXNlQ29udGV4dC9pbml0aWFsaXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZSwgZGVwZW5kZW50UmVsZWFzZWQsIGNvbnRleHQpIHtcbiAgbGV0IHJlbGVhc2VDb250ZXh0SW5pdGlhbGlzZWQgPSBmYWxzZTtcblxuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0TWFwIH0gPSBjb250ZXh0LFxuICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lLCAvLy9cbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dE1hcFtyZWxlYXNlTmFtZV0gfHwgbnVsbDtcblxuICBpZiAocmVsZWFzZUNvbnRleHQgPT09IG51bGwpIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dDtcblxuICAgIGxvZy5lcnJvcihgVW5hYmxlIHRvIGluaXRpYWxpc2UgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgZGVwZW5kZW5jeSdzIGNvbnRleHQgYmVjYXVzZSBpdCBoYXMgbm90IGJlZW4gY3JlYXRlZC5gKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpbml0aWFsaXNlZCA9IHJlbGVhc2VDb250ZXh0LmlzSW5pdGlhbGlzZWQoKTtcblxuICAgIGlmIChpbml0aWFsaXNlZCkge1xuICAgICAgcmVsZWFzZUNvbnRleHRJbml0aWFsaXNlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VkID0gcmVsZWFzZUNvbnRleHQuaXNSZWxlYXNlZCgpO1xuXG4gICAgICBpZiAoIXJlbGVhc2VkICYmIGRlcGVuZGVudFJlbGVhc2VkKSB7XG4gICAgICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0O1xuXG4gICAgICAgIGxvZy5lcnJvcihgVW5hYmxlIHRvIGluaXRpYWxpc2UgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgZGVwZW5kZW5jeSdzIGNvbnRleHQgYmVjYXVzZSBpdHMgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCBpcyBhIHBhY2thZ2UuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKTtcblxuICAgICAgICBkZXBlbmRlbnROYW1lID0gZGVwZW5kZW5jeU5hbWU7ICAvLy9cblxuICAgICAgICBkZXBlbmRlbnRSZWxlYXNlZCA9IHJlbGVhc2VkOyAgLy8vXG5cbiAgICAgICAgcmVsZWFzZUNvbnRleHRJbml0aWFsaXNlZCA9IGRlcGVuZGVuY2llcy5ldmVyeURlcGVuZGVuY3koKGRlcGVuZGVuY3kpID0+IHsgIC8vL1xuICAgICAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0SW5pdGlhbGlzZWQgPSBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZSwgZGVwZW5kZW50UmVsZWFzZWQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHJlbGVhc2VDb250ZXh0SW5pdGlhbGlzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlbGVhc2VDb250ZXh0SW5pdGlhbGlzZWQpIHtcbiAgICAgICAgICBjb25zdCByZWxlYXNlQ29udGV4dHMgPSByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgcmVsZWFzZUNvbnRleHRNYXApO1xuXG4gICAgICAgICAgcmVsZWFzZUNvbnRleHQuaW5pdGlhbGlzZShyZWxlYXNlQ29udGV4dHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0SW5pdGlhbGlzZWQ7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCByZWxlYXNlQ29udGV4dE1hcCkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dHMgPSBbXSxcbiAgICAgICAgcmVtYWluaW5nUmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dCwgIC8vL1xuICAgICAgICByZW1haW5pbmdSZWxlYXNlQ29udGV4dHMgPSBbXG4gICAgICAgICAgcmVtYWluaW5nUmVsZWFzZUNvbnRleHRcbiAgICAgICAgXTtcblxuICBsZXQgcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzTGVuZ3RoID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLmxlbmd0aDtcblxuICB3aGlsZSAocmVtYWluaW5nUmVsZWFzZUNvbnRleHRzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0ID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLnNoaWZ0KCksXG4gICAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZW1haW5pbmdSZWxlYXNlQ29udGV4dDsgIC8vL1xuXG4gICAgcmVsZWFzZUNvbnRleHRzLnB1c2gocmVsZWFzZUNvbnRleHQpO1xuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaERlcGVuZGVuY3koKGRlcGVuZGVuY3kpID0+IHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lLCAvLy9cbiAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdLFxuICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0cy5pbmNsdWRlcyhyZWxlYXNlQ29udGV4dCksXG4gICAgICAgICAgICByZW1haW5pbmdSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLmluY2x1ZGVzKHJlbGVhc2VDb250ZXh0KTtcblxuICAgICAgaWYgKCFyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ICYmICFyZW1haW5pbmdSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHQ7IC8vL1xuXG4gICAgICAgIHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0cy5wdXNoKHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0c0xlbmd0aCA9IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0cy5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHRzO1xufVxuIl0sIm5hbWVzIjpbImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dCIsImRlcGVuZGVuY3kiLCJkZXBlbmRlbnROYW1lIiwiZGVwZW5kZW50UmVsZWFzZWQiLCJjb250ZXh0IiwicmVsZWFzZUNvbnRleHRJbml0aWFsaXNlZCIsInJlbGVhc2VDb250ZXh0TWFwIiwiZGVwZW5kZW5jeU5hbWUiLCJnZXROYW1lIiwicmVsZWFzZU5hbWUiLCJyZWxlYXNlQ29udGV4dCIsImxvZyIsImVycm9yIiwiaW5pdGlhbGlzZWQiLCJpc0luaXRpYWxpc2VkIiwicmVsZWFzZWQiLCJpc1JlbGVhc2VkIiwiZGVwZW5kZW5jaWVzIiwiZ2V0RGVwZW5kZW5jaWVzIiwiZXZlcnlEZXBlbmRlbmN5IiwicmVsZWFzZUNvbnRleHRzIiwicmV0cmlldmVSZWxlYXNlQ29udGV4dHMiLCJpbml0aWFsaXNlIiwicmVtYWluaW5nUmVsZWFzZUNvbnRleHQiLCJyZW1haW5pbmdSZWxlYXNlQ29udGV4dHMiLCJyZW1haW5pbmdSZWxlYXNlQ29udGV4dHNMZW5ndGgiLCJsZW5ndGgiLCJzaGlmdCIsInB1c2giLCJmb3JFYWNoRGVwZW5kZW5jeSIsInJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQiLCJpbmNsdWRlcyIsInJlbWFpbmluZ1JlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQUVBOzs7ZUFBd0JBOzs7QUFBVCxTQUFTQSx5QkFBeUJDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxpQkFBaUIsRUFBRUMsT0FBTztJQUNwRyxJQUFJQyw0QkFBNEI7SUFFaEMsSUFBTSxBQUFFQyxvQkFBc0JGLFFBQXRCRSxtQkFDRkMsaUJBQWlCTixXQUFXTyxPQUFPLElBQ25DQyxjQUFjRixnQkFDZEcsaUJBQWlCSixpQkFBaUIsQ0FBQ0csWUFBWSxJQUFJO0lBRXpELElBQUlDLG1CQUFtQixNQUFNO1FBQzNCLElBQU0sQUFBRUMsTUFBUVAsUUFBUk87UUFFUkEsSUFBSUMsS0FBSyxDQUFDLEFBQUMsNkJBQTJDLE9BQWZMLGdCQUFlO0lBQ3hELE9BQU87UUFDTCxJQUFNTSxjQUFjSCxlQUFlSSxhQUFhO1FBRWhELElBQUlELGFBQWE7WUFDZlIsNEJBQTRCO1FBQzlCLE9BQU87WUFDTCxJQUFNVSxXQUFXTCxlQUFlTSxVQUFVO1lBRTFDLElBQUksQ0FBQ0QsWUFBWVosbUJBQW1CO2dCQUNsQyxJQUFNLEFBQUVRLE9BQVFQLFFBQVJPO2dCQUVSQSxLQUFJQyxLQUFLLENBQUMsQUFBQyw2QkFBaUZWLE9BQXJESyxnQkFBZSx3Q0FBb0QsT0FBZEwsZUFBYztZQUM1RyxPQUFPO2dCQUNMLElBQU1lLGVBQWVQLGVBQWVRLGVBQWU7Z0JBRW5EaEIsZ0JBQWdCSyxnQkFBaUIsR0FBRztnQkFFcENKLG9CQUFvQlksVUFBVyxHQUFHO2dCQUVsQ1YsNEJBQTRCWSxhQUFhRSxlQUFlLENBQUMsU0FBQ2xCO29CQUN4RCxJQUFNSSw0QkFBNEJMLHlCQUF5QkMsWUFBWUMsZUFBZUMsbUJBQW1CQztvQkFFekcsSUFBSUMsMkJBQTJCO3dCQUM3QixPQUFPO29CQUNUO2dCQUNGO2dCQUVBLElBQUlBLDJCQUEyQjtvQkFDN0IsSUFBTWUsa0JBQWtCQyx3QkFBd0JYLGdCQUFnQko7b0JBRWhFSSxlQUFlWSxVQUFVLENBQUNGO2dCQUM1QjtZQUNGO1FBQ0Y7SUFDRjtJQUVBLE9BQU9mO0FBQ1Q7QUFFQSxTQUFTZ0Isd0JBQXdCWCxjQUFjLEVBQUVKLGlCQUFpQjtJQUNoRSxJQUFNYyxrQkFBa0IsRUFBRSxFQUNwQkcsMEJBQTBCYixnQkFDMUJjLDJCQUEyQjtRQUN6QkQ7S0FDRDtJQUVQLElBQUlFLGlDQUFpQ0QseUJBQXlCRSxNQUFNO0lBRXBFLE1BQU9ELGlDQUFpQyxFQUFHO1FBQ3pDLElBQU1GLDJCQUEwQkMseUJBQXlCRyxLQUFLLElBQ3hEakIsbUJBQWlCYSwwQkFBMEIsR0FBRztRQUVwREgsZ0JBQWdCUSxJQUFJLENBQUNsQjtRQUVyQixJQUFNTyxlQUFlUCxpQkFBZVEsZUFBZTtRQUVuREQsYUFBYVksaUJBQWlCLENBQUMsU0FBQzVCO1lBQzlCLElBQU1NLGlCQUFpQk4sV0FBV08sT0FBTyxJQUNuQ0MsY0FBY0YsZ0JBQ2RHLG1CQUFpQkosaUJBQWlCLENBQUNHLFlBQVksRUFDL0NxQix3Q0FBd0NWLGdCQUFnQlcsUUFBUSxDQUFDckIsbUJBQ2pFc0IsaURBQWlEUix5QkFBeUJPLFFBQVEsQ0FBQ3JCO1lBRXpGLElBQUksQ0FBQ29CLHlDQUF5QyxDQUFDRSxnREFBZ0Q7Z0JBQzdGLElBQU1ULDBCQUEwQmIsa0JBQWdCLEdBQUc7Z0JBRW5EYyx5QkFBeUJJLElBQUksQ0FBQ0w7WUFDaEM7UUFDRjtRQUVBRSxpQ0FBaUNELHlCQUF5QkUsTUFBTTtJQUNsRTtJQUVBLE9BQU9OO0FBQ1QifQ==
|