1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const ava_1 = require("ava");
|
4 | const serialize_1 = require("../src/serialize");
|
5 | const shared_1 = require("../src/shared");
|
6 | const util_1 = require("./fixtures/util");
|
7 | (0, ava_1.default)("deepCopyUndefined copies undefined properties", t => {
|
8 | const obj = { prop: undefined };
|
9 | const obj2 = {};
|
10 | (0, serialize_1.deepCopyUndefined)(obj2, obj);
|
11 | t.deepEqual(obj2, obj);
|
12 | });
|
13 | (0, ava_1.default)("deepCopyUndefined copies nested undefined properties", t => {
|
14 | const obj = { outer: { inner: undefined } };
|
15 | const obj2 = { outer: {} };
|
16 | (0, serialize_1.deepCopyUndefined)(obj2, obj);
|
17 | t.deepEqual(obj2, obj);
|
18 | });
|
19 | (0, ava_1.default)("deepCopyUndefined should not hang on cyclical references", t => {
|
20 | const obj = { ref: {} };
|
21 | obj.ref = obj;
|
22 | const obj2 = { ref: {} };
|
23 | obj2.ref = obj2;
|
24 | (0, serialize_1.deepCopyUndefined)(obj2, obj);
|
25 | t.deepEqual(obj2, obj);
|
26 | });
|
27 | (0, ava_1.default)("deepCopyUndefined copies symbol properties", t => {
|
28 | const obj = { [Symbol()]: "value" };
|
29 | const obj2 = {};
|
30 | (0, serialize_1.deepCopyUndefined)(obj2, obj);
|
31 | t.deepEqual(obj2, obj);
|
32 | });
|
33 | (0, ava_1.default)("deepCopyUndefined copies symbol values", t => {
|
34 | const obj = { symbolValuedKey: Symbol() };
|
35 | const obj2 = {};
|
36 | (0, serialize_1.deepCopyUndefined)(obj2, obj);
|
37 | t.deepEqual(obj2, obj);
|
38 | });
|
39 | (0, ava_1.default)("deep copy should not fail when objects are not shaped similarly", t => {
|
40 | const obj = { geometry: { theorem: { name: "Pythagorean" } } };
|
41 | const obj2 = { hypothesis: "Riemann" };
|
42 | t.notThrows(() => (0, serialize_1.deepCopyUndefined)(obj2, obj));
|
43 | });
|
44 | function check(t, values) {
|
45 | const stat = new shared_1.Statistics();
|
46 | values.forEach(value => stat.update(value));
|
47 | t.true(Math.abs(stat.mean - (0, util_1.avg)(values)) < 0.000000001);
|
48 | t.true(Math.abs(stat.stdev - (0, util_1.stdev)(values)) < 0.000000001);
|
49 | t.is(stat.samples, values.length);
|
50 | }
|
51 | (0, ava_1.default)("statistics empty values", t => {
|
52 | const emptyStat = new shared_1.Statistics();
|
53 | t.is(emptyStat.mean, NaN);
|
54 | t.is(emptyStat.stdev, 0);
|
55 | t.is(emptyStat.samples, 0);
|
56 | });
|
57 | (0, ava_1.default)("statistics single values", t => {
|
58 | check(t, [0]);
|
59 | check(t, [1]);
|
60 | check(t, [-1]);
|
61 | check(t, [0.5]);
|
62 | check(t, [-0.5]);
|
63 | check(t, [0.1]);
|
64 | check(t, [-0.1]);
|
65 | });
|
66 | (0, ava_1.default)("statistics multiple values", t => {
|
67 | check(t, [0, 1]);
|
68 | check(t, [0, 1, 2]);
|
69 | check(t, [42, 100, 1000]);
|
70 | check(t, [1, 0.1]);
|
71 | check(t, [-0.5, 0.5]);
|
72 | check(t, [-1, 1]);
|
73 | check(t, [3.14159, 2.717]);
|
74 | });
|
75 | (0, ava_1.default)("statistics random values", t => {
|
76 | const a = [];
|
77 | const b = [];
|
78 | const c = [];
|
79 | for (let i = 0; i < 1000; i++) {
|
80 | a.push(Math.random());
|
81 | b.push(Math.random() * 10);
|
82 | c.push(Math.random() * 100);
|
83 | }
|
84 | check(t, a);
|
85 | check(t, b);
|
86 | check(t, c);
|
87 | });
|
88 | (0, ava_1.default)(`statistics clone`, t => {
|
89 | const stats = new shared_1.Statistics();
|
90 | stats.update(10);
|
91 | stats.update(100);
|
92 | stats.update(5);
|
93 | const cloned = stats.clone();
|
94 | t.deepEqual(cloned, stats);
|
95 | t.is(cloned.toString(), stats.toString());
|
96 | cloned.update(42);
|
97 | t.true(cloned.mean !== stats.mean);
|
98 | t.true(cloned.stdev !== stats.stdev);
|
99 | t.is(stats.samples, 3);
|
100 | t.is(cloned.samples, 4);
|
101 | });
|
102 | (0, ava_1.default)("MaxHeap basics", t => {
|
103 | const h = new shared_1.MaxHeap();
|
104 | h.insert(5);
|
105 | h.insert(10);
|
106 | h.insert(100);
|
107 | h.insert(1);
|
108 | t.is(h.extractMax(), 100);
|
109 | t.is(h.extractMax(), 10);
|
110 | t.is(h.extractMax(), 5);
|
111 | t.is(h.extractMax(), 1);
|
112 | t.throws(() => h.extractMax(), { message: /empty/ });
|
113 | });
|
114 | (0, ava_1.default)("MaxHeap empty", t => {
|
115 | const h = new shared_1.MaxHeap();
|
116 | t.throws(() => h.extractMax(), { message: /empty/ });
|
117 | });
|
118 | (0, ava_1.default)("MaxHeap sorting", t => {
|
119 | const h = new shared_1.MaxHeap();
|
120 | const N = 10000;
|
121 | const size = 100;
|
122 | for (let attempt = 0; attempt < N; attempt++) {
|
123 | let orig = [];
|
124 | const a = [];
|
125 | for (let i = 0; i < size; i++) {
|
126 | const value = Math.round(Math.random() * 1000);
|
127 | a.push(value);
|
128 | h.insert(value);
|
129 | }
|
130 | orig = a.slice();
|
131 | a.sort((x, y) => y - x);
|
132 | const b = [];
|
133 | while (h.size > 0) {
|
134 | b.push(h.extractMax());
|
135 | }
|
136 | t.deepEqual(a, b, `difference sorting ${orig}`);
|
137 | }
|
138 | });
|
139 | (0, ava_1.default)("MaxHeap specific ordering", t => {
|
140 | const h = new shared_1.MaxHeap();
|
141 | h.insert(7);
|
142 | h.insert(2);
|
143 | h.insert(0);
|
144 | h.insert(3);
|
145 | h.insert(4);
|
146 | h.insert(1);
|
147 | h.insert(6);
|
148 | h.insert(5);
|
149 | t.is(h.extractMax(), 7);
|
150 | t.is(h.extractMax(), 6);
|
151 | t.is(h.extractMax(), 5);
|
152 | t.is(h.extractMax(), 4);
|
153 | t.is(h.extractMax(), 3);
|
154 | t.is(h.extractMax(), 2);
|
155 | t.is(h.extractMax(), 1);
|
156 | t.is(h.extractMax(), 0);
|
157 | });
|
158 | (0, ava_1.default)("MaxHeap iterator", t => {
|
159 | const h = new shared_1.MaxHeap();
|
160 | h.insert(10);
|
161 | h.insert(42);
|
162 | h.insert(12);
|
163 | t.deepEqual([...h], [42, 10, 12]);
|
164 | });
|
165 | (0, ava_1.default)("SmallestN saves smallest N keys", t => {
|
166 | const s = new shared_1.SmallestN(3);
|
167 | s.update(100);
|
168 | s.update(42);
|
169 | s.update(-1);
|
170 | s.update(0);
|
171 | s.update(4);
|
172 | s.update(1000);
|
173 | t.deepEqual(s.keys().sort(), [-1, 0, 4].sort());
|
174 | });
|
175 | (0, ava_1.default)("SmallestN saves smallest N values", t => {
|
176 | const N = 3;
|
177 | const s = new shared_1.SmallestN(N);
|
178 | s.update(100, "100");
|
179 | s.update(42, "42");
|
180 | s.update(-1, "-1");
|
181 | s.update(0, "0");
|
182 | s.update(4, "4");
|
183 | s.update(1000, "1000");
|
184 | t.deepEqual([...s], [
|
185 | [-1, "-1"],
|
186 | [0, "0"],
|
187 | [4, "4"]
|
188 | ]);
|
189 | });
|
190 | (0, ava_1.default)("SmallestN duplicate values", t => {
|
191 | const N = 5;
|
192 | const s = new shared_1.SmallestN(N);
|
193 | s.update(88, "88.1");
|
194 | s.update(88, "88.2");
|
195 | s.update(88, "88.3");
|
196 | s.update(42, "42");
|
197 | s.update(88, "88.4");
|
198 | s.update(88, "88.5");
|
199 | s.update(88, "88.6");
|
200 | s.update(10, "10.1");
|
201 | s.update(10, "10.2");
|
202 | s.update(88, "88.7");
|
203 | s.update(88, "88.8");
|
204 | t.deepEqual([...s], [
|
205 | [88, "88.1"],
|
206 | [88, "88.2"],
|
207 | [42, "42"],
|
208 | [10, "10.1"],
|
209 | [10, "10.2"]
|
210 | ]);
|
211 | });
|
212 | function vals(a) {
|
213 | return a.map(i => [i, undefined]);
|
214 | }
|
215 | (0, ava_1.default)("SmallestN can reduce size", t => {
|
216 | const N = 5;
|
217 | const s = new shared_1.SmallestN(N);
|
218 | s.update(1);
|
219 | s.update(2);
|
220 | s.update(3);
|
221 | s.update(4);
|
222 | s.update(5);
|
223 | s.update(6);
|
224 | s.update(7);
|
225 | s.setSize(3);
|
226 | t.deepEqual([...s], vals([1, 2, 3]));
|
227 | });
|
228 | (0, ava_1.default)("SmallestN can increase size", t => {
|
229 | const N = 3;
|
230 | const s = new shared_1.SmallestN(N);
|
231 | s.update(1);
|
232 | s.update(2);
|
233 | s.update(3);
|
234 | s.update(4);
|
235 | s.update(5);
|
236 | t.deepEqual([...s], vals([1, 2, 3]));
|
237 | s.setSize(5);
|
238 | s.update(6);
|
239 | s.update(7);
|
240 | s.update(8);
|
241 | t.deepEqual([...s], vals([1, 2, 3, 6, 7]));
|
242 | });
|
243 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC1zaGFyZWQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Rlc3QvdW5pdC1zaGFyZWQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUF1QztBQUN2QyxnREFBcUQ7QUFDckQsMENBQStEO0FBQy9ELDBDQUE2QztBQUU3QyxJQUFBLGFBQUksRUFBQywrQ0FBK0MsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUN0RCxNQUFNLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBQSw2QkFBaUIsRUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFBLGFBQUksRUFBQyxzREFBc0QsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM3RCxNQUFNLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDO0lBQzVDLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzNCLElBQUEsNkJBQWlCLEVBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBQSxhQUFJLEVBQUMsMERBQTBELEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDakUsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFFZCxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FB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YUFBSSxFQUFDLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLE1BQU0sQ0FBQyxHQUFHLElBQUksa0JBQVMsQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsU0FBUyxDQUNQLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDTjtRQUNJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNaLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNaLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztRQUNWLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNaLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQztLQUNmLENBQ0osQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxJQUFJLENBQUMsQ0FBVztJQUNyQixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQXdCLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsSUFBQSxhQUFJLEVBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osTUFBTSxDQUFDLEdBQUcsSUFBSSxrQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFWixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFBLGFBQUksRUFBQyw2QkFBNkIsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixNQUFNLENBQUMsR0FBRyxJQUFJLGtCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVyQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0LCB7IEFzc2VydGlvbnMgfSBmcm9tIFwiYXZhXCI7XG5pbXBvcnQgeyBkZWVwQ29weVVuZGVmaW5lZCB9IGZyb20gXCIuLi9zcmMvc2VyaWFsaXplXCI7XG5pbXBvcnQgeyBNYXhIZWFwLCBTbWFsbGVzdE4sIFN0YXRpc3RpY3MgfSBmcm9tIFwiLi4vc3JjL3NoYXJlZFwiO1xuaW1wb3J0IHsgYXZnLCBzdGRldiB9IGZyb20gXCIuL2ZpeHR1cmVzL3V0aWxcIjtcblxudGVzdChcImRlZXBDb3B5VW5kZWZpbmVkIGNvcGllcyB1bmRlZmluZWQgcHJvcGVydGllc1wiLCB0ID0+IHtcbiAgICBjb25zdCBvYmogPSB7IHByb3A6IHVuZGVmaW5lZCB9O1xuICAgIGNvbnN0IG9iajIgPSB7fTtcbiAgICBkZWVwQ29weVVuZGVmaW5lZChvYmoyLCBvYmopO1xuICAgIHQuZGVlcEVxdWFsKG9iajIsIG9iaik7XG59KTtcblxudGVzdChcImRlZXBDb3B5VW5kZWZpbmVkIGNvcGllcyBuZXN0ZWQgdW5kZWZpbmVkIHByb3BlcnRpZXNcIiwgdCA9PiB7XG4gICAgY29uc3Qgb2JqID0geyBvdXRlcjogeyBpbm5lcjogdW5kZWZpbmVkIH0gfTtcbiAgICBjb25zdCBvYmoyID0geyBvdXRlcjoge30gfTtcbiAgICBkZWVwQ29weVVuZGVmaW5lZChvYmoyLCBvYmopO1xuICAgIHQuZGVlcEVxdWFsKG9iajIsIG9iaik7XG59KTtcblxudGVzdChcImRlZXBDb3B5VW5kZWZpbmVkIHNob3VsZCBub3QgaGFuZyBvbiBjeWNsaWNhbCByZWZlcmVuY2VzXCIsIHQgPT4ge1xuICAgIGNvbnN0IG9iaiA9IHsgcmVmOiB7fSB9O1xuICAgIG9iai5yZWYgPSBvYmo7XG5cbiAgICBjb25zdCBvYmoyID0geyByZWY6IHt9IH07XG4gICAgb2JqMi5yZWYgPSBvYmoyO1xuXG4gICAgZGVlcENvcHlVbmRlZmluZWQob2JqMiwgb2JqKTtcbiAgICB0LmRlZXBFcXVhbChvYmoyLCBvYmopO1xufSk7XG5cbnRlc3QoXCJkZWVwQ29weVVuZGVmaW5lZCBjb3BpZXMgc3ltYm9sIHByb3BlcnRpZXNcIiwgdCA9PiB7XG4gICAgY29uc3Qgb2JqID0geyBbU3ltYm9sKCldOiBcInZhbHVlXCIgfTtcbiAgICBjb25zdCBvYmoyID0ge307XG4gICAgZGVlcENvcHlVbmRlZmluZWQob2JqMiwgb2JqKTtcbiAgICB0LmRlZXBFcXVhbChvYmoyLCBvYmopO1xufSk7XG5cbnRlc3QoXCJkZWVwQ29weVVuZGVmaW5lZCBjb3BpZXMgc3ltYm9sIHZhbHVlc1wiLCB0ID0+IHtcbiAgICBjb25zdCBvYmogPSB7IHN5bWJvbFZhbHVlZEtleTogU3ltYm9sKCkgfTtcbiAgICBjb25zdCBvYmoyID0ge307XG4gICAgZGVlcENvcHlVbmRlZmluZWQob2JqMiwgb2JqKTtcbiAgICB0LmRlZXBFcXVhbChvYmoyLCBvYmopO1xufSk7XG5cbnRlc3QoXCJkZWVwIGNvcHkgc2hvdWxkIG5vdCBmYWlsIHdoZW4gb2JqZWN0cyBhcmUgbm90IHNoYXBlZCBzaW1pbGFybHlcIiwgdCA9PiB7XG4gICAgY29uc3Qgb2JqID0geyBnZW9tZXRyeTogeyB0aGVvcmVtOiB7IG5hbWU6IFwiUHl0aGFnb3JlYW5cIiB9IH0gfTtcbiAgICBjb25zdCBvYmoyID0geyBoeXBvdGhlc2lzOiBcIlJpZW1hbm5cIiB9O1xuICAgIHQubm90VGhyb3dzKCgpID0+IGRlZXBDb3B5VW5kZWZpbmVkKG9iajIsIG9iaikpO1xufSk7XG5cbmZ1bmN0aW9uIGNoZWNrKHQ6IEFzc2VydGlvbnMsIHZhbHVlczogbnVtYmVyW10pIHtcbiAgICBjb25zdCBzdGF0ID0gbmV3IFN0YXRpc3RpY3MoKTtcbiAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiBzdGF0LnVwZGF0ZSh2YWx1ZSkpO1xuICAgIHQudHJ1ZShNYXRoLmFicyhzdGF0Lm1lYW4gLSBhdmcodmFsdWVzKSkgPCAwLjAwMDAwMDAwMSk7XG4gICAgdC50cnVlKE1hdGguYWJzKHN0YXQuc3RkZXYgLSBzdGRldih2YWx1ZXMpKSA8IDAuMDAwMDAwMDAxKTtcbiAgICB0LmlzKHN0YXQuc2FtcGxlcywgdmFsdWVzLmxlbmd0aCk7XG59XG5cbnRlc3QoXCJzdGF0aXN0aWNzIGVtcHR5IHZhbHVlc1wiLCB0ID0+IHtcbiAgICBjb25zdCBlbXB0eVN0YXQgPSBuZXcgU3RhdGlzdGljcygpO1xuICAgIHQuaXMoZW1wdHlTdGF0Lm1lYW4sIE5hTik7XG4gICAgdC5pcyhlbXB0eVN0YXQuc3RkZXYsIDApO1xuICAgIHQuaXMoZW1wdHlTdGF0LnNhbXBsZXMsIDApO1xufSk7XG5cbnRlc3QoXCJzdGF0aXN0aWNzIHNpbmdsZSB2YWx1ZXNcIiwgdCA9PiB7XG4gICAgY2hlY2sodCwgWzBdKTtcbiAgICBjaGVjayh0LCBbMV0pO1xuICAgIGNoZWNrKHQsIFstMV0pO1xuICAgIGNoZWNrKHQsIFswLjVdKTtcbiAgICBjaGVjayh0LCBbLTAuNV0pO1xuICAgIGNoZWNrKHQsIFswLjFdKTtcbiAgICBjaGVjayh0LCBbLTAuMV0pO1xufSk7XG5cbnRlc3QoXCJzdGF0aXN0aWNzIG11bHRpcGxlIHZhbHVlc1wiLCB0ID0+IHtcbiAgICBjaGVjayh0LCBbMCwgMV0pO1xuICAgIGNoZWNrKHQsIFswLCAxLCAyXSk7XG4gICAgY2hlY2sodCwgWzQyLCAxMDAsIDEwMDBdKTtcbiAgICBjaGVjayh0LCBbMSwgMC4xXSk7XG4gICAgY2hlY2sodCwgWy0wLjUsIDAuNV0pO1xuICAgIGNoZWNrKHQsIFstMSwgMV0pO1xuICAgIGNoZWNrKHQsIFszLjE0MTU5LCAyLjcxN10pO1xufSk7XG5cbnRlc3QoXCJzdGF0aXN0aWNzIHJhbmRvbSB2YWx1ZXNcIiwgdCA9PiB7XG4gICAgY29uc3QgYSA9IFtdO1xuICAgIGNvbnN0IGIgPSBbXTtcbiAgICBjb25zdCBjID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHtcbiAgICAgICAgYS5wdXNoKE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBiLnB1c2goTWF0aC5yYW5kb20oKSAqIDEwKTtcbiAgICAgICAgYy5wdXNoKE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgIH1cbiAgICBjaGVjayh0LCBhKTtcbiAgICBjaGVjayh0LCBiKTtcbiAgICBjaGVjayh0LCBjKTtcbn0pO1xuXG50ZXN0KGBzdGF0aXN0aWNzIGNsb25lYCwgdCA9PiB7XG4gICAgY29uc3Qgc3RhdHMgPSBuZXcgU3RhdGlzdGljcygpO1xuICAgIHN0YXRzLnVwZGF0ZSgxMCk7XG4gICAgc3RhdHMudXBkYXRlKDEwMCk7XG4gICAgc3RhdHMudXBkYXRlKDUpO1xuXG4gICAgY29uc3QgY2xvbmVkID0gc3RhdHMuY2xvbmUoKTtcbiAgICB0LmRlZXBFcXVhbChjbG9uZWQsIHN0YXRzKTtcbiAgICB0LmlzKGNsb25lZC50b1N0cmluZygpLCBzdGF0cy50b1N0cmluZygpKTtcbiAgICBjbG9uZWQudXBkYXRlKDQyKTtcbiAgICB0LnRydWUoY2xvbmVkLm1lYW4gIT09IHN0YXRzLm1lYW4pO1xuICAgIHQudHJ1ZShjbG9uZWQuc3RkZXYgIT09IHN0YXRzLnN0ZGV2KTtcbiAgICB0LmlzKHN0YXRzLnNhbXBsZXMsIDMpO1xuICAgIHQuaXMoY2xvbmVkLnNhbXBsZXMsIDQpO1xufSk7XG5cbnRlc3QoXCJNYXhIZWFwIGJhc2ljc1wiLCB0ID0+IHtcbiAgICBjb25zdCBoID0gbmV3IE1heEhlYXAoKTtcbiAgICBoLmluc2VydCg1KTtcbiAgICBoLmluc2VydCgxMCk7XG4gICAgaC5pbnNlcnQoMTAwKTtcbiAgICBoLmluc2VydCgxKTtcblxuICAgIHQuaXMoaC5leHRyYWN0TWF4KCksIDEwMCk7XG4gICAgdC5pcyhoLmV4dHJhY3RNYXgoKSwgMTApO1xuICAgIHQuaXMoaC5leHRyYWN0TWF4KCksIDUpO1xuICAgIHQuaXMoaC5leHRyYWN0TWF4KCksIDEpO1xuICAgIHQudGhyb3dzKCgpID0+IGguZXh0cmFjdE1heCgpLCB7IG1lc3NhZ2U6IC9lbXB0eS8gfSk7XG59KTtcblxudGVzdChcIk1heEhlYXAgZW1wdHlcIiwgdCA9PiB7XG4gICAgY29uc3QgaCA9IG5ldyBNYXhIZWFwKCk7XG4gICAgdC50aHJvd3MoKCkgPT4gaC5leHRyYWN0TWF4KCksIHsgbWVzc2FnZTogL2VtcHR5LyB9KTtcbn0pO1xuXG50ZXN0KFwiTWF4SGVhcCBzb3J0aW5nXCIsIHQgPT4ge1xuICAgIGNvbnN0IGggPSBuZXcgTWF4SGVhcCgpO1xuICAgIGNvbnN0IE4gPSAxMDAwMDtcbiAgICBjb25zdCBzaXplID0gMTAwO1xuXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBOOyBhdHRlbXB0KyspIHtcbiAgICAgICAgbGV0IG9yaWc6IG51bWJlcltdID0gW107XG4gICAgICAgIGNvbnN0IGE6IG51bWJlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDApO1xuICAgICAgICAgICAgYS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIGguaW5zZXJ0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnID0gYS5zbGljZSgpO1xuICAgICAgICBhLnNvcnQoKHgsIHkpID0+IHkgLSB4KTtcbiAgICAgICAgY29uc3QgYiA9IFtdO1xuICAgICAgICB3aGlsZSAoaC5zaXplID4gMCkge1xuICAgICAgICAgICAgYi5wdXNoKGguZXh0cmFjdE1heCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0LmRlZXBFcXVhbChhLCBiLCBgZGlmZmVyZW5jZSBzb3J0aW5nICR7b3JpZ31gKTtcbiAgICB9XG59KTtcblxudGVzdChcIk1heEhlYXAgc3BlY2lmaWMgb3JkZXJpbmdcIiwgdCA9PiB7XG4gICAgY29uc3QgaCA9IG5ldyBNYXhIZWFwKCk7XG4gICAgaC5pbnNlcnQoNyk7XG4gICAgaC5pbnNlcnQoMik7XG4gICAgaC5pbnNlcnQoMCk7XG4gICAgaC5pbnNlcnQoMyk7XG4gICAgaC5pbnNlcnQoNCk7XG4gICAgaC5pbnNlcnQoMSk7XG4gICAgaC5pbnNlcnQoNik7XG4gICAgaC5pbnNlcnQoNSk7XG5cbiAgICB0LmlzKGguZXh0cmFjdE1heCgpLCA3KTtcbiAgICB0LmlzKGguZXh0cmFjdE1heCgpLCA2KTtcbiAgICB0LmlzKGguZXh0cmFjdE1heCgpLCA1KTtcbiAgICB0LmlzKGguZXh0cmFjdE1heCgpLCA0KTtcbiAgICB0LmlzKGguZXh0cmFjdE1heCgpLCAzKTtcbiAgICB0LmlzKGguZXh0cmFjdE1heCgpLCAyKTtcbiAgICB0LmlzKGguZXh0cmFjdE1heCgpLCAxKTtcbiAgICB0LmlzKGguZXh0cmFjdE1heCgpLCAwKTtcbn0pO1xuXG50ZXN0KFwiTWF4SGVhcCBpdGVyYXRvclwiLCB0ID0+IHtcbiAgICBjb25zdCBoID0gbmV3IE1heEhlYXAoKTtcbiAgICBoLmluc2VydCgxMCk7XG4gICAgaC5pbnNlcnQoNDIpO1xuICAgIGguaW5zZXJ0KDEyKTtcbiAgICB0LmRlZXBFcXVhbChbLi4uaF0sIFs0MiwgMTAsIDEyXSk7XG59KTtcblxudGVzdChcIlNtYWxsZXN0TiBzYXZlcyBzbWFsbGVzdCBOIGtleXNcIiwgdCA9PiB7XG4gICAgY29uc3QgcyA9IG5ldyBTbWFsbGVzdE4oMyk7XG4gICAgcy51cGRhdGUoMTAwKTtcbiAgICBzLnVwZGF0ZSg0Mik7XG4gICAgcy51cGRhdGUoLTEpO1xuICAgIHMudXBkYXRlKDApO1xuICAgIHMudXBkYXRlKDQpO1xuICAgIHMudXBkYXRlKDEwMDApO1xuICAgIHQuZGVlcEVxdWFsKHMua2V5cygpLnNvcnQoKSwgWy0xLCAwLCA0XS5zb3J0KCkpO1xufSk7XG5cbnRlc3QoXCJTbWFsbGVzdE4gc2F2ZXMgc21hbGxlc3QgTiB2YWx1ZXNcIiwgdCA9PiB7XG4gICAgY29uc3QgTiA9IDM7XG4gICAgY29uc3QgcyA9IG5ldyBTbWFsbGVzdE48c3RyaW5nPihOKTtcbiAgICBzLnVwZGF0ZSgxMDAsIFwiMTAwXCIpO1xuICAgIHMudXBkYXRlKDQyLCBcIjQyXCIpO1xuICAgIHMudXBkYXRlKC0xLCBcIi0xXCIpO1xuICAgIHMudXBkYXRlKDAsIFwiMFwiKTtcbiAgICBzLnVwZGF0ZSg0LCBcIjRcIik7XG4gICAgcy51cGRhdGUoMTAwMCwgXCIxMDAwXCIpO1xuICAgIHQuZGVlcEVxdWFsKFxuICAgICAgICBbLi4uc10sXG4gICAgICAgIFtcbiAgICAgICAgICAgIFstMSwgXCItMVwiXSxcbiAgICAgICAgICAgIFswLCBcIjBcIl0sXG4gICAgICAgICAgICBbNCwgXCI0XCJdXG4gICAgICAgIF1cbiAgICApO1xufSk7XG5cbnRlc3QoXCJTbWFsbGVzdE4gZHVwbGljYXRlIHZhbHVlc1wiLCB0ID0+IHtcbiAgICBjb25zdCBOID0gNTtcbiAgICBjb25zdCBzID0gbmV3IFNtYWxsZXN0TjxzdHJpbmc+KE4pO1xuICAgIHMudXBkYXRlKDg4LCBcIjg4LjFcIik7XG4gICAgcy51cGRhdGUoODgsIFwiODguMlwiKTtcbiAgICBzLnVwZGF0ZSg4OCwgXCI4OC4zXCIpO1xuICAgIHMudXBkYXRlKDQyLCBcIjQyXCIpO1xuICAgIHMudXBkYXRlKDg4LCBcIjg4LjRcIik7XG4gICAgcy51cGRhdGUoODgsIFwiODguNVwiKTtcbiAgICBzLnVwZGF0ZSg4OCwgXCI4OC42XCIpO1xuICAgIHMudXBkYXRlKDEwLCBcIjEwLjFcIik7XG4gICAgcy51cGRhdGUoMTAsIFwiMTAuMlwiKTtcbiAgICBzLnVwZGF0ZSg4OCwgXCI4OC43XCIpO1xuICAgIHMudXBkYXRlKDg4LCBcIjg4LjhcIik7XG4gICAgdC5kZWVwRXF1YWwoXG4gICAgICAgIFsuLi5zXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgWzg4LCBcIjg4LjFcIl0sXG4gICAgICAgICAgICBbODgsIFwiODguMlwiXSxcbiAgICAgICAgICAgIFs0MiwgXCI0MlwiXSxcbiAgICAgICAgICAgIFsxMCwgXCIxMC4xXCJdLFxuICAgICAgICAgICAgWzEwLCBcIjEwLjJcIl1cbiAgICAgICAgXVxuICAgICk7XG59KTtcblxuZnVuY3Rpb24gdmFscyhhOiBudW1iZXJbXSk6IFtudW1iZXIsIHVuZGVmaW5lZF1bXSB7XG4gICAgcmV0dXJuIGEubWFwKGkgPT4gW2ksIHVuZGVmaW5lZF0gYXMgW251bWJlciwgdW5kZWZpbmVkXSk7XG59XG5cbnRlc3QoXCJTbWFsbGVzdE4gY2FuIHJlZHVjZSBzaXplXCIsIHQgPT4ge1xuICAgIGNvbnN0IE4gPSA1O1xuICAgIGNvbnN0IHMgPSBuZXcgU21hbGxlc3ROKE4pO1xuICAgIHMudXBkYXRlKDEpO1xuICAgIHMudXBkYXRlKDIpO1xuICAgIHMudXBkYXRlKDMpO1xuICAgIHMudXBkYXRlKDQpO1xuICAgIHMudXBkYXRlKDUpO1xuICAgIHMudXBkYXRlKDYpO1xuICAgIHMudXBkYXRlKDcpO1xuXG4gICAgcy5zZXRTaXplKDMpO1xuICAgIHQuZGVlcEVxdWFsKFsuLi5zXSwgdmFscyhbMSwgMiwgM10pKTtcbn0pO1xuXG50ZXN0KFwiU21hbGxlc3ROIGNhbiBpbmNyZWFzZSBzaXplXCIsIHQgPT4ge1xuICAgIGNvbnN0IE4gPSAzO1xuICAgIGNvbnN0IHMgPSBuZXcgU21hbGxlc3ROKE4pO1xuICAgIHMudXBkYXRlKDEpO1xuICAgIHMudXBkYXRlKDIpO1xuICAgIHMudXBkYXRlKDMpO1xuICAgIHMudXBkYXRlKDQpO1xuICAgIHMudXBkYXRlKDUpO1xuICAgIHQuZGVlcEVxdWFsKFsuLi5zXSwgdmFscyhbMSwgMiwgM10pKTtcblxuICAgIHMuc2V0U2l6ZSg1KTtcbiAgICBzLnVwZGF0ZSg2KTtcbiAgICBzLnVwZGF0ZSg3KTtcbiAgICBzLnVwZGF0ZSg4KTtcbiAgICB0LmRlZXBFcXVhbChbLi4uc10sIHZhbHMoWzEsIDIsIDMsIDYsIDddKSk7XG59KTtcbiJdfQ== |
\ | No newline at end of file |