occam-verify-cli 1.0.53 → 1.0.55
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/dom/axiom.js +6 -6
- package/lib/dom/deduction.js +165 -0
- package/lib/dom/statement.js +12 -12
- package/lib/dom/topLevelAssertion.js +34 -34
- package/lib/dom/topLevelMetaAssertion.js +10 -10
- package/lib/index.js +2 -2
- package/lib/utilities/json.js +16 -16
- package/package.json +1 -1
- package/src/dom/axiom.js +7 -7
- package/src/dom/{consequent.js → deduction.js} +17 -17
- package/src/dom/statement.js +9 -9
- package/src/dom/topLevelAssertion.js +39 -41
- package/src/dom/topLevelMetaAssertion.js +17 -17
- package/src/index.js +1 -1
- package/src/utilities/json.js +10 -10
- package/lib/dom/consequent.js +0 -165
|
@@ -8,13 +8,13 @@ import Substitutions from "../substitutions";
|
|
|
8
8
|
import TopLevelAssertion from "./topLevelAssertion";
|
|
9
9
|
|
|
10
10
|
import { nodeQuery } from "../utilities/query";
|
|
11
|
-
import { proofFromNode,
|
|
11
|
+
import { proofFromNode, deductionFromNode, suppositionsFromNode, stringFromLabelsAndDeduction } from "./topLevelAssertion";
|
|
12
12
|
import { labelsFromJSON,
|
|
13
13
|
labelsToLabelsJSON,
|
|
14
|
-
|
|
14
|
+
deductionFromJSON,
|
|
15
15
|
suppositionsFromJSON,
|
|
16
16
|
substitutionsFromJSON,
|
|
17
|
-
|
|
17
|
+
deductionToDeductionJSON,
|
|
18
18
|
suppositionsToSuppositionsJSON,
|
|
19
19
|
substitutionsToSubstitutionsJSON } from "../utilities/json";
|
|
20
20
|
|
|
@@ -23,8 +23,8 @@ const { first } = arrayUtilities;
|
|
|
23
23
|
const labelNodeQuery = nodeQuery("/metatheorem/label");
|
|
24
24
|
|
|
25
25
|
export default class TopLevelMetaAssertion extends TopLevelAssertion {
|
|
26
|
-
constructor(fileContext, string, labels, suppositions,
|
|
27
|
-
super(fileContext, string, labels, suppositions,
|
|
26
|
+
constructor(fileContext, string, labels, suppositions, deduction, proof, substitutions) {
|
|
27
|
+
super(fileContext, string, labels, suppositions, deduction, proof);
|
|
28
28
|
|
|
29
29
|
this.substitutions = substitutions;
|
|
30
30
|
}
|
|
@@ -65,13 +65,13 @@ export default class TopLevelMetaAssertion extends TopLevelAssertion {
|
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
if (suppositionsVerified) {
|
|
68
|
-
const
|
|
68
|
+
const deductionVerified = this.deduction.verify(context);
|
|
69
69
|
|
|
70
|
-
if (
|
|
70
|
+
if (deductionVerified) {
|
|
71
71
|
if (this.proof === null) {
|
|
72
72
|
verified = true;
|
|
73
73
|
} else {
|
|
74
|
-
const proofVerified = this.proof.verify(this.substitutions, this.
|
|
74
|
+
const proofVerified = this.proof.verify(this.substitutions, this.deduction, context);
|
|
75
75
|
|
|
76
76
|
verified = proofVerified; ///
|
|
77
77
|
}
|
|
@@ -97,16 +97,16 @@ export default class TopLevelMetaAssertion extends TopLevelAssertion {
|
|
|
97
97
|
|
|
98
98
|
toJSON() {
|
|
99
99
|
const labelsJSON = labelsToLabelsJSON(this.labels),
|
|
100
|
-
|
|
100
|
+
deductionJSON = deductionToDeductionJSON(this.deduction),
|
|
101
101
|
suppositionsJSON = suppositionsToSuppositionsJSON(this.suppositions),
|
|
102
102
|
substitutionsJSON = substitutionsToSubstitutionsJSON(this.substitutions),
|
|
103
103
|
labels = labelsJSON, ///
|
|
104
|
-
|
|
104
|
+
deduction = deductionJSON, ///
|
|
105
105
|
suppositions = suppositionsJSON, ///
|
|
106
106
|
substitutions = substitutionsJSON, ///
|
|
107
107
|
json = {
|
|
108
108
|
labels,
|
|
109
|
-
|
|
109
|
+
deduction,
|
|
110
110
|
suppositions,
|
|
111
111
|
substitutions
|
|
112
112
|
};
|
|
@@ -118,10 +118,10 @@ export default class TopLevelMetaAssertion extends TopLevelAssertion {
|
|
|
118
118
|
const labels = labelsFromJSON(json, fileContext),
|
|
119
119
|
substitutions = substitutionsFromJSON(json, fileContext),
|
|
120
120
|
suppositions = suppositionsFromJSON(json, fileContext),
|
|
121
|
-
|
|
121
|
+
deduction = deductionFromJSON(json, fileContext),
|
|
122
122
|
proof = null,
|
|
123
|
-
string =
|
|
124
|
-
topLevelAssertion = new Class(fileContext, string, labels, suppositions,
|
|
123
|
+
string = stringFromLabelsAndDeduction(labels, deduction),
|
|
124
|
+
topLevelAssertion = new Class(fileContext, string, labels, suppositions, deduction, proof, substitutions);
|
|
125
125
|
|
|
126
126
|
return topLevelAssertion;
|
|
127
127
|
}
|
|
@@ -130,10 +130,10 @@ export default class TopLevelMetaAssertion extends TopLevelAssertion {
|
|
|
130
130
|
const labels = labelsFromNode(node, fileContext),
|
|
131
131
|
substitutions = Substitutions.fromNothing(),
|
|
132
132
|
suppositions = suppositionsFromNode(node, fileContext),
|
|
133
|
-
|
|
133
|
+
deduction = deductionFromNode(node, fileContext),
|
|
134
134
|
proof = proofFromNode(node, fileContext),
|
|
135
|
-
string =
|
|
136
|
-
metaLemma = new Class(fileContext, string, labels, suppositions,
|
|
135
|
+
string = stringFromLabelsAndDeduction(labels, deduction),
|
|
136
|
+
metaLemma = new Class(fileContext, string, labels, suppositions, deduction, proof, substitutions);
|
|
137
137
|
|
|
138
138
|
return metaLemma;
|
|
139
139
|
}
|
package/src/index.js
CHANGED
|
@@ -22,7 +22,7 @@ import Reference from "./dom/reference";
|
|
|
22
22
|
import Statement from "./dom/statement";
|
|
23
23
|
import Judgement from "./dom/judgement";
|
|
24
24
|
import MetaLemma from "./dom/metaLemma";
|
|
25
|
-
import
|
|
25
|
+
import Deduction from "./dom/deduction";
|
|
26
26
|
import Conjecture from "./dom/conjecture";
|
|
27
27
|
import Conclusion from "./dom/conclusion";
|
|
28
28
|
import Derivation from "./dom/derivation";
|
package/src/utilities/json.js
CHANGED
|
@@ -84,17 +84,17 @@ export function conclusionFromJSON(json, fileContext) {
|
|
|
84
84
|
return conclusion;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
export function
|
|
88
|
-
let {
|
|
87
|
+
export function deductionFromJSON(json, fileContext) {
|
|
88
|
+
let { deduction } = json;
|
|
89
89
|
|
|
90
|
-
const {
|
|
91
|
-
|
|
90
|
+
const { Deduction } = dom,
|
|
91
|
+
deductionJSON = deduction; ///
|
|
92
92
|
|
|
93
|
-
json =
|
|
93
|
+
json = deductionJSON; ///
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
deduction = Deduction.fromJSON(json, fileContext);
|
|
96
96
|
|
|
97
|
-
return
|
|
97
|
+
return deduction;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
export function metavariableFromJSON(json, fileContext) {
|
|
@@ -448,10 +448,10 @@ export function conclusionToConclusionJSON(conclusion) {
|
|
|
448
448
|
return conclusionJSON;
|
|
449
449
|
}
|
|
450
450
|
|
|
451
|
-
export function
|
|
452
|
-
const
|
|
451
|
+
export function deductionToDeductionJSON(deduction) {
|
|
452
|
+
const deductionJSON = deduction.toJSON();
|
|
453
453
|
|
|
454
|
-
return
|
|
454
|
+
return deductionJSON;
|
|
455
455
|
}
|
|
456
456
|
|
|
457
457
|
export function metavariableToMetavariableJSON(metavariable) {
|
package/lib/dom/consequent.js
DELETED
|
@@ -1,165 +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 _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _dom = /*#__PURE__*/ _interop_require_wildcard(require("../dom"));
|
|
12
|
-
var _json = require("../utilities/json");
|
|
13
|
-
function _class_call_check(instance, Constructor) {
|
|
14
|
-
if (!(instance instanceof Constructor)) {
|
|
15
|
-
throw new TypeError("Cannot call a class as a function");
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
function _defineProperties(target, props) {
|
|
19
|
-
for(var i = 0; i < props.length; i++){
|
|
20
|
-
var descriptor = props[i];
|
|
21
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
22
|
-
descriptor.configurable = true;
|
|
23
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
24
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
28
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
29
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
30
|
-
return Constructor;
|
|
31
|
-
}
|
|
32
|
-
function _define_property(obj, key, value) {
|
|
33
|
-
if (key in obj) {
|
|
34
|
-
Object.defineProperty(obj, key, {
|
|
35
|
-
value: value,
|
|
36
|
-
enumerable: true,
|
|
37
|
-
configurable: true,
|
|
38
|
-
writable: true
|
|
39
|
-
});
|
|
40
|
-
} else {
|
|
41
|
-
obj[key] = value;
|
|
42
|
-
}
|
|
43
|
-
return obj;
|
|
44
|
-
}
|
|
45
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
46
|
-
if (typeof WeakMap !== "function") return null;
|
|
47
|
-
var cacheBabelInterop = new WeakMap();
|
|
48
|
-
var cacheNodeInterop = new WeakMap();
|
|
49
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
50
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
51
|
-
})(nodeInterop);
|
|
52
|
-
}
|
|
53
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
54
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
55
|
-
return obj;
|
|
56
|
-
}
|
|
57
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
58
|
-
return {
|
|
59
|
-
default: obj
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
63
|
-
if (cache && cache.has(obj)) {
|
|
64
|
-
return cache.get(obj);
|
|
65
|
-
}
|
|
66
|
-
var newObj = {
|
|
67
|
-
__proto__: null
|
|
68
|
-
};
|
|
69
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
70
|
-
for(var key in obj){
|
|
71
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
72
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
73
|
-
if (desc && (desc.get || desc.set)) {
|
|
74
|
-
Object.defineProperty(newObj, key, desc);
|
|
75
|
-
} else {
|
|
76
|
-
newObj[key] = obj[key];
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
newObj.default = obj;
|
|
81
|
-
if (cache) {
|
|
82
|
-
cache.set(obj, newObj);
|
|
83
|
-
}
|
|
84
|
-
return newObj;
|
|
85
|
-
}
|
|
86
|
-
var _Consequent;
|
|
87
|
-
var _default = (0, _dom.domAssigned)((_Consequent = /*#__PURE__*/ function() {
|
|
88
|
-
function Consequent(string, statement) {
|
|
89
|
-
_class_call_check(this, Consequent);
|
|
90
|
-
this.string = string;
|
|
91
|
-
this.statement = statement;
|
|
92
|
-
}
|
|
93
|
-
_create_class(Consequent, [
|
|
94
|
-
{
|
|
95
|
-
key: "getString",
|
|
96
|
-
value: function getString() {
|
|
97
|
-
return this.string;
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
key: "getStatement",
|
|
102
|
-
value: function getStatement() {
|
|
103
|
-
return this.statement;
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
key: "verify",
|
|
108
|
-
value: function verify(context) {
|
|
109
|
-
var verified = false;
|
|
110
|
-
var consequentString = this.string; ///
|
|
111
|
-
context.trace("Verifying the '".concat(consequentString, "' consequent..."));
|
|
112
|
-
if (this.statement !== null) {
|
|
113
|
-
var stated = true, assignments = null, statementVerified = this.statement.verify(assignments, stated, context);
|
|
114
|
-
verified = statementVerified; ///
|
|
115
|
-
} else {
|
|
116
|
-
context.debug("Unable to verify the '".concat(consequentString, "' consequent because it is nonsense."));
|
|
117
|
-
}
|
|
118
|
-
if (verified) {
|
|
119
|
-
context.debug("...verified the '".concat(consequentString, "' consequent."));
|
|
120
|
-
}
|
|
121
|
-
return verified;
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
key: "unifyStatement",
|
|
126
|
-
value: function unifyStatement(statement, substitutions, generalContext, specificContext) {
|
|
127
|
-
var statementUnified;
|
|
128
|
-
var consequent = this, statementString = statement.getString(), consequentString = consequent.getString();
|
|
129
|
-
specificContext.trace("Unifying the '".concat(statementString, "' statement with the '").concat(consequentString, "' consequent..."));
|
|
130
|
-
statementUnified = this.statement.unifyStatement(statement, substitutions, generalContext, specificContext);
|
|
131
|
-
if (statementUnified) {
|
|
132
|
-
specificContext.debug("...unified the '".concat(statementString, "' statement with the '").concat(consequentString, "' consequent."));
|
|
133
|
-
}
|
|
134
|
-
return statementUnified;
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
key: "toJSON",
|
|
139
|
-
value: function toJSON() {
|
|
140
|
-
var statementJSON = (0, _json.statementToStatementJSON)(this.statement), statement = statementJSON, json = {
|
|
141
|
-
statement: statement
|
|
142
|
-
};
|
|
143
|
-
return json;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
], [
|
|
147
|
-
{
|
|
148
|
-
key: "fromJSON",
|
|
149
|
-
value: function fromJSON(json, fileContext) {
|
|
150
|
-
var statement = (0, _json.statementFromJSON)(json, fileContext), string = statement.getString(), consequent = new Consequent(string, statement);
|
|
151
|
-
return consequent;
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
key: "fromConsequentNode",
|
|
156
|
-
value: function fromConsequentNode(consequentNode, fileContext) {
|
|
157
|
-
var Statement = _dom.default.Statement, node = consequentNode, string = fileContext.nodeAsString(node), statement = Statement.fromConsequentNode(consequentNode, fileContext), consequent = new Consequent(string, statement);
|
|
158
|
-
return consequent;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
]);
|
|
162
|
-
return Consequent;
|
|
163
|
-
}(), _define_property(_Consequent, "name", "Consequent"), _Consequent));
|
|
164
|
-
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb20vY29uc2VxdWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGRvbSBmcm9tIFwiLi4vZG9tXCI7XG5cbmltcG9ydCB7IGRvbUFzc2lnbmVkIH0gZnJvbSBcIi4uL2RvbVwiO1xuaW1wb3J0IHsgc3RhdGVtZW50RnJvbUpTT04sIHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBkb21Bc3NpZ25lZChjbGFzcyBDb25zZXF1ZW50IHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nLCBzdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50O1xuICB9XG5cbiAgdmVyaWZ5KGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnNlcXVlbnRTdHJpbmcgPSB0aGlzLnN0cmluZzsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjb25zZXF1ZW50U3RyaW5nfScgY29uc2VxdWVudC4uLmApO1xuXG4gICAgaWYgKHRoaXMuc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZWQgPSB0cnVlLFxuICAgICAgICAgICAgYXNzaWdubWVudHMgPSBudWxsLFxuICAgICAgICAgICAgc3RhdGVtZW50VmVyaWZpZWQgPSB0aGlzLnN0YXRlbWVudC52ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgIHZlcmlmaWVkID0gc3RhdGVtZW50VmVyaWZpZWQ7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtjb25zZXF1ZW50U3RyaW5nfScgY29uc2VxdWVudCBiZWNhdXNlIGl0IGlzIG5vbnNlbnNlLmApO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnNlcXVlbnRTdHJpbmd9JyBjb25zZXF1ZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZDtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVkO1xuXG4gICAgY29uc3QgY29uc2VxdWVudCA9IHRoaXMsICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY29uc2VxdWVudFN0cmluZyA9IGNvbnNlcXVlbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29uc2VxdWVudFN0cmluZ30nIGNvbnNlcXVlbnQuLi5gKTtcblxuICAgIHN0YXRlbWVudFVuaWZpZWQgPSB0aGlzLnN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgIHNwZWNpZmljQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbnNlcXVlbnRTdHJpbmd9JyBjb25zZXF1ZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVkO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04odGhpcy5zdGF0ZW1lbnQpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RhdGVtZW50XG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbnNlcXVlbnRcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgc3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbnNlcXVlbnQgPSBuZXcgQ29uc2VxdWVudChzdHJpbmcsIHN0YXRlbWVudCk7XG5cbiAgICByZXR1cm4gY29uc2VxdWVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29uc2VxdWVudE5vZGUoY29uc2VxdWVudE5vZGUsIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGRvbSxcbiAgICAgICAgICBub2RlID0gY29uc2VxdWVudE5vZGUsICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBmaWxlQ29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50ID0gU3RhdGVtZW50LmZyb21Db25zZXF1ZW50Tm9kZShjb25zZXF1ZW50Tm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIGNvbnNlcXVlbnQgPSBuZXcgQ29uc2VxdWVudChzdHJpbmcsIHN0YXRlbWVudCk7XG5cbiAgICByZXR1cm4gY29uc2VxdWVudDtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZG9tQXNzaWduZWQiLCJDb25zZXF1ZW50Iiwic3RyaW5nIiwic3RhdGVtZW50IiwiZ2V0U3RyaW5nIiwiZ2V0U3RhdGVtZW50IiwidmVyaWZ5IiwiY29udGV4dCIsInZlcmlmaWVkIiwiY29uc2VxdWVudFN0cmluZyIsInRyYWNlIiwic3RhdGVkIiwiYXNzaWdubWVudHMiLCJzdGF0ZW1lbnRWZXJpZmllZCIsImRlYnVnIiwidW5pZnlTdGF0ZW1lbnQiLCJzdWJzdGl0dXRpb25zIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzdGF0ZW1lbnRVbmlmaWVkIiwiY29uc2VxdWVudCIsInN0YXRlbWVudFN0cmluZyIsInRvSlNPTiIsInN0YXRlbWVudEpTT04iLCJzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJmaWxlQ29udGV4dCIsInN0YXRlbWVudEZyb21KU09OIiwiZnJvbUNvbnNlcXVlbnROb2RlIiwiY29uc2VxdWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJkb20iLCJub2RlIiwibm9kZUFzU3RyaW5nIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBT0E7OztlQUFBOzs7MkRBTGdCO29CQUc0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRTVELFdBQWVBLElBQUFBLGdCQUFXLCtCQUFDO2FBQU1DLFdBQ25CQyxNQUFNLEVBQUVDLFNBQVM7Z0NBREVGO1FBRTdCLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTs7OztZQUduQkMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRixNQUFNO1lBQ3BCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRixTQUFTO1lBQ3ZCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLE9BQU9DLE9BQU87Z0JBQ1osSUFBSUMsV0FBVztnQkFFZixJQUFNQyxtQkFBbUIsSUFBSSxDQUFDUCxNQUFNLEVBQUcsR0FBRztnQkFFMUNLLFFBQVFHLEtBQUssQ0FBQyxBQUFDLGtCQUFrQyxPQUFqQkQsa0JBQWlCO2dCQUVqRCxJQUFJLElBQUksQ0FBQ04sU0FBUyxLQUFLLE1BQU07b0JBQzNCLElBQU1RLFNBQVMsTUFDVEMsY0FBYyxNQUNkQyxvQkFBb0IsSUFBSSxDQUFDVixTQUFTLENBQUNHLE1BQU0sQ0FBQ00sYUFBYUQsUUFBUUo7b0JBRXJFQyxXQUFXSyxtQkFBbUIsR0FBRztnQkFDbkMsT0FBTztvQkFDTE4sUUFBUU8sS0FBSyxDQUFDLEFBQUMseUJBQXlDLE9BQWpCTCxrQkFBaUI7Z0JBQzFEO2dCQUVBLElBQUlELFVBQVU7b0JBQ1pELFFBQVFPLEtBQUssQ0FBQyxBQUFDLG9CQUFvQyxPQUFqQkwsa0JBQWlCO2dCQUNyRDtnQkFFQSxPQUFPRDtZQUNUOzs7WUFFQU8sS0FBQUE7bUJBQUFBLFNBQUFBLGVBQWVaLFNBQVMsRUFBRWEsYUFBYSxFQUFFQyxjQUFjLEVBQUVDLGVBQWU7Z0JBQ3RFLElBQUlDO2dCQUVKLElBQU1DLGFBQWEsSUFBSSxFQUNqQkMsa0JBQWtCbEIsVUFBVUMsU0FBUyxJQUNyQ0ssbUJBQW1CVyxXQUFXaEIsU0FBUztnQkFFN0NjLGdCQUFnQlIsS0FBSyxDQUFDLEFBQUMsaUJBQXdERCxPQUF4Q1ksaUJBQWdCLDBCQUF5QyxPQUFqQlosa0JBQWlCO2dCQUVoR1UsbUJBQW1CLElBQUksQ0FBQ2hCLFNBQVMsQ0FBQ1ksY0FBYyxDQUFDWixXQUFXYSxlQUFlQyxnQkFBZ0JDO2dCQUUzRixJQUFJQyxrQkFBa0I7b0JBQ3BCRCxnQkFBZ0JKLEtBQUssQ0FBQyxBQUFDLG1CQUEwREwsT0FBeENZLGlCQUFnQiwwQkFBeUMsT0FBakJaLGtCQUFpQjtnQkFDcEc7Z0JBRUEsT0FBT1U7WUFDVDs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxnQkFBZ0JDLElBQUFBLDhCQUF3QixFQUFDLElBQUksQ0FBQ3JCLFNBQVMsR0FDdkRBLFlBQVlvQixlQUNaRSxPQUFPO29CQUNMdEIsV0FBQUE7Z0JBQ0Y7Z0JBRU4sT0FBT3NCO1lBQ1Q7Ozs7WUFJT0MsS0FBQUE7bUJBQVAsU0FBT0EsU0FBU0QsSUFBSSxFQUFFRSxXQUFXO2dCQUMvQixJQUFNeEIsWUFBWXlCLElBQUFBLHVCQUFpQixFQUFDSCxNQUFNRSxjQUNwQ3pCLFNBQVNDLFVBQVVDLFNBQVMsSUFDNUJnQixhQUFhLElBQUluQixXQUFXQyxRQUFRQztnQkFFMUMsT0FBT2lCO1lBQ1Q7OztZQUVPUyxLQUFBQTttQkFBUCxTQUFPQSxtQkFBbUJDLGNBQWMsRUFBRUgsV0FBVztnQkFDbkQsSUFBTSxBQUFFSSxZQUFjQyxZQUFHLENBQWpCRCxXQUNGRSxPQUFPSCxnQkFDUDVCLFNBQVN5QixZQUFZTyxZQUFZLENBQUNELE9BQ2xDOUIsWUFBWTRCLFVBQVVGLGtCQUFrQixDQUFDQyxnQkFBZ0JILGNBQ3pEUCxhQUFhLElBQUluQixXQUFXQyxRQUFRQztnQkFFMUMsT0FBT2lCO1lBQ1Q7Ozs7S0FsQkEsOEJBQU9lLFFBQU8ifQ==
|