ember-scoped-css 0.23.6 → 0.24.0
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/declarations/lib/path/md5.d.ts +12 -0
- package/declarations/lib/path/md5.d.ts.map +1 -0
- package/dist/cjs/app-css-loader.cjs +195 -3
- package/dist/cjs/babel-plugin.cjs +1 -6
- package/dist/cjs/ember-classic-support.cjs +195 -3
- package/dist/cjs/index.cjs +195 -3
- package/dist/cjs/template-plugin.cjs +195 -3
- package/dist/runtime/test-support.js +193 -1
- package/dist/runtime/test-support.js.map +4 -4
- package/package.json +2 -8
- package/src/lib/path/hash-from-module-path.js +1 -1
- package/src/lib/path/md5.js +411 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates MD5 value for a given string.
|
|
3
|
+
* If a key is provided, calculates the HMAC-MD5 value.
|
|
4
|
+
* Returns a Hex encoded string unless the raw argument is given.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} string Input string
|
|
7
|
+
* @param {string} [key] HMAC key
|
|
8
|
+
* @param {boolean} [raw] Raw output switch
|
|
9
|
+
* @returns {string} MD5 output
|
|
10
|
+
*/
|
|
11
|
+
export function md5(string: string, key?: string, raw?: boolean): string;
|
|
12
|
+
//# sourceMappingURL=md5.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"md5.d.ts","sourceRoot":"","sources":["../../../src/lib/path/md5.js"],"names":[],"mappings":"AAkYA;;;;;;;;;GASG;AACH,4BALW,MAAM,QACN,MAAM,QACN,OAAO,GACL,MAAM,CAgBlB"}
|
|
@@ -41,10 +41,202 @@ var import_node_fs = __toESM(require("node:fs"), 1);
|
|
|
41
41
|
var import_node_module = require("node:module");
|
|
42
42
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
43
43
|
|
|
44
|
+
// src/lib/path/md5.js
|
|
45
|
+
function safeAdd(x, y) {
|
|
46
|
+
var lsw = (x & 65535) + (y & 65535);
|
|
47
|
+
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
|
48
|
+
return msw << 16 | lsw & 65535;
|
|
49
|
+
}
|
|
50
|
+
function bitRotateLeft(num, cnt) {
|
|
51
|
+
return num << cnt | num >>> 32 - cnt;
|
|
52
|
+
}
|
|
53
|
+
function md5cmn(q, a, b, x, s, t) {
|
|
54
|
+
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
|
|
55
|
+
}
|
|
56
|
+
function md5ff(a, b, c, d, x, s, t) {
|
|
57
|
+
return md5cmn(b & c | ~b & d, a, b, x, s, t);
|
|
58
|
+
}
|
|
59
|
+
function md5gg(a, b, c, d, x, s, t) {
|
|
60
|
+
return md5cmn(b & d | c & ~d, a, b, x, s, t);
|
|
61
|
+
}
|
|
62
|
+
function md5hh(a, b, c, d, x, s, t) {
|
|
63
|
+
return md5cmn(b ^ c ^ d, a, b, x, s, t);
|
|
64
|
+
}
|
|
65
|
+
function md5ii(a, b, c, d, x, s, t) {
|
|
66
|
+
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
|
|
67
|
+
}
|
|
68
|
+
function binlMD5(x, len) {
|
|
69
|
+
x[len >> 5] |= 128 << len % 32;
|
|
70
|
+
x[(len + 64 >>> 9 << 4) + 14] = len;
|
|
71
|
+
var i;
|
|
72
|
+
var olda;
|
|
73
|
+
var oldb;
|
|
74
|
+
var oldc;
|
|
75
|
+
var oldd;
|
|
76
|
+
var a = 1732584193;
|
|
77
|
+
var b = -271733879;
|
|
78
|
+
var c = -1732584194;
|
|
79
|
+
var d = 271733878;
|
|
80
|
+
for (i = 0; i < x.length; i += 16) {
|
|
81
|
+
olda = a;
|
|
82
|
+
oldb = b;
|
|
83
|
+
oldc = c;
|
|
84
|
+
oldd = d;
|
|
85
|
+
a = md5ff(a, b, c, d, x[i], 7, -680876936);
|
|
86
|
+
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
|
|
87
|
+
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
|
|
88
|
+
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
|
89
|
+
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
|
|
90
|
+
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
|
91
|
+
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
|
92
|
+
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
|
|
93
|
+
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
|
94
|
+
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
|
95
|
+
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
|
|
96
|
+
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
|
97
|
+
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
|
98
|
+
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
|
|
99
|
+
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
|
100
|
+
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
|
101
|
+
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
|
|
102
|
+
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
|
103
|
+
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
|
|
104
|
+
b = md5gg(b, c, d, a, x[i], 20, -373897302);
|
|
105
|
+
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
|
|
106
|
+
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
|
|
107
|
+
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
|
|
108
|
+
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
|
|
109
|
+
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
|
|
110
|
+
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
|
111
|
+
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
|
|
112
|
+
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
|
113
|
+
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
|
114
|
+
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
|
|
115
|
+
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
|
116
|
+
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
|
117
|
+
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
|
|
118
|
+
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
|
119
|
+
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
|
120
|
+
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
|
|
121
|
+
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
|
122
|
+
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
|
123
|
+
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
|
|
124
|
+
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
|
125
|
+
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
|
|
126
|
+
d = md5hh(d, a, b, c, x[i], 11, -358537222);
|
|
127
|
+
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
|
|
128
|
+
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
|
|
129
|
+
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
|
|
130
|
+
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
|
|
131
|
+
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
|
|
132
|
+
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
|
|
133
|
+
a = md5ii(a, b, c, d, x[i], 6, -198630844);
|
|
134
|
+
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
|
135
|
+
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
|
136
|
+
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
|
|
137
|
+
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
|
138
|
+
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
|
139
|
+
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
|
|
140
|
+
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
|
141
|
+
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
|
142
|
+
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
|
|
143
|
+
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
|
144
|
+
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
|
145
|
+
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
|
|
146
|
+
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
|
147
|
+
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
|
|
148
|
+
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
|
|
149
|
+
a = safeAdd(a, olda);
|
|
150
|
+
b = safeAdd(b, oldb);
|
|
151
|
+
c = safeAdd(c, oldc);
|
|
152
|
+
d = safeAdd(d, oldd);
|
|
153
|
+
}
|
|
154
|
+
return [a, b, c, d];
|
|
155
|
+
}
|
|
156
|
+
function binl2rstr(input) {
|
|
157
|
+
var i;
|
|
158
|
+
var output = "";
|
|
159
|
+
var length32 = input.length * 32;
|
|
160
|
+
for (i = 0; i < length32; i += 8) {
|
|
161
|
+
output += String.fromCharCode(input[i >> 5] >>> i % 32 & 255);
|
|
162
|
+
}
|
|
163
|
+
return output;
|
|
164
|
+
}
|
|
165
|
+
function rstr2binl(input) {
|
|
166
|
+
var i;
|
|
167
|
+
var output = [];
|
|
168
|
+
output[(input.length >> 2) - 1] = void 0;
|
|
169
|
+
for (i = 0; i < output.length; i += 1) {
|
|
170
|
+
output[i] = 0;
|
|
171
|
+
}
|
|
172
|
+
var length8 = input.length * 8;
|
|
173
|
+
for (i = 0; i < length8; i += 8) {
|
|
174
|
+
output[i >> 5] |= (input.charCodeAt(i / 8) & 255) << i % 32;
|
|
175
|
+
}
|
|
176
|
+
return output;
|
|
177
|
+
}
|
|
178
|
+
function rstrMD5(s) {
|
|
179
|
+
return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
|
|
180
|
+
}
|
|
181
|
+
function rstrHMACMD5(key, data) {
|
|
182
|
+
var i;
|
|
183
|
+
var bkey = rstr2binl(key);
|
|
184
|
+
var ipad = [];
|
|
185
|
+
var opad = [];
|
|
186
|
+
var hash2;
|
|
187
|
+
ipad[15] = opad[15] = void 0;
|
|
188
|
+
if (bkey.length > 16) {
|
|
189
|
+
bkey = binlMD5(bkey, key.length * 8);
|
|
190
|
+
}
|
|
191
|
+
for (i = 0; i < 16; i += 1) {
|
|
192
|
+
ipad[i] = bkey[i] ^ 909522486;
|
|
193
|
+
opad[i] = bkey[i] ^ 1549556828;
|
|
194
|
+
}
|
|
195
|
+
hash2 = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
|
|
196
|
+
return binl2rstr(binlMD5(opad.concat(hash2), 512 + 128));
|
|
197
|
+
}
|
|
198
|
+
function rstr2hex(input) {
|
|
199
|
+
var hexTab = "0123456789abcdef";
|
|
200
|
+
var output = "";
|
|
201
|
+
var x;
|
|
202
|
+
var i;
|
|
203
|
+
for (i = 0; i < input.length; i += 1) {
|
|
204
|
+
x = input.charCodeAt(i);
|
|
205
|
+
output += hexTab.charAt(x >>> 4 & 15) + hexTab.charAt(x & 15);
|
|
206
|
+
}
|
|
207
|
+
return output;
|
|
208
|
+
}
|
|
209
|
+
function str2rstrUTF8(input) {
|
|
210
|
+
return unescape(encodeURIComponent(input));
|
|
211
|
+
}
|
|
212
|
+
function rawMD5(s) {
|
|
213
|
+
return rstrMD5(str2rstrUTF8(s));
|
|
214
|
+
}
|
|
215
|
+
function hexMD5(s) {
|
|
216
|
+
return rstr2hex(rawMD5(s));
|
|
217
|
+
}
|
|
218
|
+
function rawHMACMD5(k, d) {
|
|
219
|
+
return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
|
|
220
|
+
}
|
|
221
|
+
function hexHMACMD5(k, d) {
|
|
222
|
+
return rstr2hex(rawHMACMD5(k, d));
|
|
223
|
+
}
|
|
224
|
+
function md5(string, key, raw) {
|
|
225
|
+
if (!key) {
|
|
226
|
+
if (!raw) {
|
|
227
|
+
return hexMD5(string);
|
|
228
|
+
}
|
|
229
|
+
return rawMD5(string);
|
|
230
|
+
}
|
|
231
|
+
if (!raw) {
|
|
232
|
+
return hexHMACMD5(key, string);
|
|
233
|
+
}
|
|
234
|
+
return rawHMACMD5(key, string);
|
|
235
|
+
}
|
|
236
|
+
|
|
44
237
|
// src/lib/path/hash-from-module-path.js
|
|
45
|
-
var import_blueimp_md5 = __toESM(require("blueimp-md5"), 1);
|
|
46
238
|
function hash(modulePath) {
|
|
47
|
-
return "e" + (
|
|
239
|
+
return "e" + md5(modulePath).substring(0, 8);
|
|
48
240
|
}
|
|
49
241
|
var hashFromModulePath = hash;
|
|
50
242
|
|
|
@@ -336,4 +528,4 @@ async function app_css_loader_default(code) {
|
|
|
336
528
|
}
|
|
337
529
|
return code;
|
|
338
530
|
}
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyIsICIuLi8uLi9zcmMvbGliL3Jld3JpdGVDc3MuanMiLCAiLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSAgZnJvbSAndW5wbHVnaW4nO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHtcbiAgY3NzSGFzQXNzb2NpYXRlZENvbXBvbmVudCxcbiAgaGFzaEZyb20sXG4gIGlzUmVsZXZhbnRGaWxlLFxufSBmcm9tICcuLi9saWIvcGF0aC91dGlscy5qcyc7XG5pbXBvcnQgcmV3cml0ZUNzcyBmcm9tICcuLi9saWIvcmV3cml0ZUNzcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChjb2RlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgY3NzUGF0aCA9IHRoaXMucmVzb3VyY2VQYXRoO1xuXG4gIGlmICghaXNSZWxldmFudEZpbGUoY3NzUGF0aCwgeyAuLi5vcHRpb25zLCBjd2Q6IHRoaXMucm9vdENvbnRleHQgfSkpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuXG4gIGlmICghY3NzUGF0aC5zdGFydHNXaXRoKHRoaXMucm9vdENvbnRleHQpKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBjb25zdCBjc3NGaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG5cbiAgaWYgKGNzc0hhc0Fzc29jaWF0ZWRDb21wb25lbnQoY3NzUGF0aCkpIHtcbiAgICBjb25zdCBwb3N0Zml4ID0gaGFzaEZyb20oY3NzUGF0aCk7XG4gICAgY29uc3QgcmV3cml0dGVuQ3NzID0gcmV3cml0ZUNzcyhcbiAgICAgIGNvZGUsXG4gICAgICBwb3N0Zml4LFxuICAgICAgY3NzRmlsZU5hbWUsXG4gICAgICBvcHRpb25zLmxheWVyTmFtZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbkNzcztcbiAgfVxuXG4gIHJldHVybiBjb2RlO1xufVxuIiwgImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IGZzU3luYywgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmltcG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuZXhwb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmV4cG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuY29uc3QgQ09NUE9ORU5UX0VYVEVOU0lPTlMgPSBbJy5ndHMnLCAnLmdqcycsICcudHMnLCAnLmpzJywgJy5oYnMnXTtcblxuLy8gQ0pTIC8gRVNNP1xubGV0IGhlcmUgPSBpbXBvcnQubWV0YS51cmw7XG5sZXQgb3VyUmVxdWlyZSA9IGdsb2JhbFRoaXMucmVxdWlyZVxuICA/IGdsb2JhbFRoaXMucmVxdWlyZVxuICA6IGhlcmUgJiYgY3JlYXRlUmVxdWlyZShoZXJlKTtcblxuaWYgKCFvdXJSZXF1aXJlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBvdXJSZXF1aXJlID0gcmVxdWlyZTtcbn1cblxuY29uc3QgRU1CUk9JREVSX0RJUiA9ICdub2RlX21vZHVsZXMvLmVtYnJvaWRlcic7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEggPSBgJHtFTUJST0lERVJfRElSfS9yZXdyaXR0ZW4tYXBwYDtcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTID0gYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9hc3NldHNgO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTID0gYCR7RU1CUk9JREVSX0RJUn0vcmV3cml0dGVuLXBhY2thZ2VzYDtcbmNvbnN0IElSUkVMRVZBTlRfUEFUSFMgPSBbJ25vZGVfbW9kdWxlcy8ucG5wbScsICdfX3ZpdGUtJ107XG5jb25zdCBVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUyA9IG5ldyBTZXQoWyd0ZXN0cyddKTtcblxuY29uc3QgQ1dEID0gcHJvY2Vzcy5jd2QoKTtcblxuLyoqXG4gKiBSZWdhcmRsZXNzIG9mIHdoYXQgdGhlIGZpbGVQYXRoIGZvcm1hdCBpcyxcbiAqIHRoaXMgd2lsbCB0cnkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHBvc3RmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaEZyb20oZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBoYXNoRnJvbUFic29sdXRlUGF0aChmaWxlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gaGFzaEZyb21Nb2R1bGVQYXRoKGZpbGVQYXRoKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzSGFzQXNzb2NpYXRlZENvbXBvbmVudChjc3NQYXRoKSB7XG4gIHJldHVybiBjc3NIYXNTdGFuZGFyZEZpbGUoY3NzUGF0aCkgfHwgY3NzSGFzUG9kc0ZpbGUoY3NzUGF0aCk7XG59XG5cbmZ1bmN0aW9uIGNzc0hhc1N0YW5kYXJkRmlsZShpZCkge1xuICAvKipcbiAgICogTm9ybWFsbHkgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhIEpTIHBhdGggaGVyZSwgYnV0IHdoZW4gdXNpbmdcbiAgICogZW1icm9pZGVyQDMsIHdlIGhhdmUgYSBcInJld3JpdHRlbiBhcHBcIiwgd2hpY2ggaGFzIGFsbCBvdXIgc291cmNlXG4gICAqIHByZXByb2Nlc3NlZCBhIGJpdCBiZWZvcmUgc2NvcGVkLWNzcyB0cmFuc2Zvcm1hdGlvbnMuXG4gICAqXG4gICAqIChJbiBWaXRlLCB3ZSBvcGVyYXRlIG1vcmUgZGlyZWN0bHkgd2l0aCB0aGUgc291cmNlKVxuICAgKi9cbiAgZm9yIChsZXQgZXh0IG9mIENPTVBPTkVOVF9FWFRFTlNJT05TKSB7XG4gICAgbGV0IGNhbmRpZGF0ZVBhdGggPSBpZC5yZXBsYWNlKC9cXC5jc3MkLywgZXh0KTtcblxuICAgIGlmIChleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc0hhc1BvZHNGaWxlKGlkKSB7XG4gIGlmICghaWQuZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxseSB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGEgSlMgcGF0aCBoZXJlLCBidXQgd2hlbiB1c2luZ1xuICAgKiBlbWJyb2lkZXJAMywgd2UgaGF2ZSBhIFwicmV3cml0dGVuIGFwcFwiLCB3aGljaCBoYXMgYWxsIG91ciBzb3VyY2VcbiAgICogcHJlcHJvY2Vzc2VkIGEgYml0IGJlZm9yZSBzY29wZWQtY3NzIHRyYW5zZm9ybWF0aW9ucy5cbiAgICpcbiAgICogKEluIFZpdGUsIHdlIG9wZXJhdGUgbW9yZSBkaXJlY3RseSB3aXRoIHRoZSBzb3VyY2UpXG4gICAqL1xuICBmb3IgKGxldCBleHQgb2YgQ09NUE9ORU5UX0VYVEVOU0lPTlMpIHtcbiAgICBsZXQgY2FuZGlkYXRlUGF0aCA9IGlkLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCBgdGVtcGxhdGUke2V4dH1gKTtcblxuICAgIGlmIChleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQmFzZWQgb24gZW1iZXIncyBjb21wb25lbnQgbG9jYXRpb24gY29udmVudGlvbnMsXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBhIHBhdGggZm9yIHdoZXJlIHdlXG4gKiBleHBlY3QgdGhlIENTUyB0byBsaXZlLlxuICpcbiAqIEZvciBjby1sb2NhdGVkIHN0cnVjdHVyZTpcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5jc3NcbiAqXG4gKiBGb3IgbmVzdGVkIGNvLWxvY2F0ZWQgc3RydWN0dXJlXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5jc3NcbiAqXG4gKiBGb3IgUG9kcyByb3V0ZXMgc3RydWN0dXJlXG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3RlbXBsYXRlLntoYnMsanN9XG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3N0eWxlcy5jc3NcbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IHN1cHBvcnRlZDpcbiAqICAgLSBjb21wb25lbnRzIHcvIHBvZHMgLS0gdGhpcyBpcyBkZXByZWNhdGVkIGluIDUuMTBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSB0aGUgaGJzLCBqcywgZ2pzLCBndHMgb3Igd2hhdGV2ZXIgY28tbG9jYXRlZCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gLSBleHBlY3RlZCBjc3MgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzUGF0aEZvcihmaWxlTmFtZSkge1xuICBsZXQgd2l0aG91dEV4dCA9IHdpdGhvdXRFeHRlbnNpb24oZmlsZU5hbWUpO1xuICBsZXQgY3NzUGF0aCA9IHdpdGhvdXRFeHQgKyAnLmNzcyc7XG5cbiAgaWYgKGlzUG9kKGZpbGVOYW1lKSkge1xuICAgIGNzc1BhdGggPSBmaWxlTmFtZVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuanMkLywgJ3N0eWxlcy5jc3MnKVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuaGJzLywgJ3N0eWxlcy5jc3MnKTtcbiAgfVxuXG4gIHJldHVybiBjc3NQYXRoO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSB8fCBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJyk7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIENoZWNrcyBpZiBhIGZpbGUgZW5kcyB3aXRoXG4gKiAtIHRlbXBsYXRlLmpzXG4gKiAtIHRlbXBsYXRlLmhic1xuICogLSBzdHlsZXMuY3NzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZChmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuLyoqXG4gKiBFeGFtcGxlcyBmb3IgZmlsZU5hbWVcbiAqIC0gYWJzb2x1dGUgb24tZGlzayBwYXRoXG4gKiAtIGluIHdlYnBhY2tcbiAqICAgLSBVUkwtYWJzb2x1dGUgcGF0aCwgc3RhcnRpbmcgd2l0aCAvXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcGFyYW0ge3sgYWRkaXRpb25hbFJvb3RzPzogc3RyaW5nW107IGN3ZDogc3RyaW5nIH19IG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGV2YW50RmlsZShmaWxlTmFtZSwgeyBhZGRpdGlvbmFsUm9vdHMsIGN3ZCB9KSB7XG4gIC8vIFByaXZhdGUgVmlydHVhbCBNb2R1bGVzXG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCdcXDAnKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBUaGVzZSBhcmUgbm90IHZhbGlkIHVzZXJsYW5kIG5hbWVzIChvciBhcmUgZnJvbSBsaWJyYXJpZXMpXG4gIGlmIChmaWxlTmFtZS5tYXRjaCgvXlthLXpBLVpdLykpIHJldHVybiBmYWxzZTtcbiAgLy8gRXh0ZXJuYWwgdG8gdXNcbiAgaWYgKGZpbGVOYW1lLnN0YXJ0c1dpdGgoJy9AZW1icm9pZGVyJykpIHJldHVybiBmYWxzZTtcbiAgaWYgKElSUkVMRVZBTlRfUEFUSFMuc29tZSgoaSkgPT4gZmlsZU5hbWUuaW5jbHVkZXMoaSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgLy8gaWYgYSBmaWxlIGlzIG5vdCB0aGUgZW1icm9pZGVyIGNhY2hlIGRpcmVjdG9yeVxuICAgIC8vIGFuZCBpcyBpbiBub2RlX21vZHVsZXMsIHNraXAgaXQuXG4gICAgaWYgKCFmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfRElSKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHJld3JpdHRlbiBwYWNrYWdlcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGF0IHRoZWlyIG93blxuICAgIC8vIHB1Ymxpc2ggdGltZVxuICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fUEFDS0FHRVMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgYXJlIGFscmVhZHkgdGhlIGJ1bmRsZWQgZmlsZXMuXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTKSkge1xuICAgICAgLy8gbm90IHN1cHBvcnRlZCwgbmV2ZXIgd2lsbCBiZVxuICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTfS90ZXN0cy5qc2ApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWRlYWxseSwgd2UgbmV2ZXIgZ2V0IGhlcmUgLS0gaW5kaWNhdGVzIHdlJ3JlIG5vdCBmaWx0ZXJpbmcgZWZmZWN0aXZlbHkgaW4gYmFiZWxcbiAgICAgIC8vIE5PVEU6IGlmIHdlIGdldCBoZXJlLCB3ZSdyZSB0cnlpbmcgdG8gb3BlcmF0ZSBvbiBhIGZpbGUgdG9vIGxhdGUuXG4gICAgICAvLyAgICAgICB3ZSBuZWVkIFNjb3BlZENTUyB0byBvcGVyYXRlIGFzIGNsb3NlIHRvIG9yaWdpbmFsIHNvdXJjZSBhcyBwb3NzaWJsZSAtLSBub3Qgb3V0cHV0IGZpbGVzLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxldCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChmaWxlTmFtZSk7XG5cbiAgYXNzZXJ0KGN3ZCwgYGN3ZCB3YXMgbm90IHBhc3NlZCB0byBpc1JlbGV2YW50RmlsZWApO1xuXG4gIGxldCBvdXJXb3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChjd2QpO1xuXG4gIGlmICh3b3Jrc3BhY2UgIT09IG91cldvcmtzcGFjZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBsb2NhbCA9IGZpbGVOYW1lLnJlcGxhY2Uod29ya3NwYWNlLCAnJyk7XG4gIGxldCBbLCAuLi5wYXJ0c10gPSBsb2NhbC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcblxuICBpZiAoVU5TVVBQT1JURURfRElSRUNUT1JJRVMuaGFzKHBhcnRzWzBdKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3N0bHkgcG9kcyBzdXBwb3J0LlxuICAgKiBmb2xrcyBuZWVkIHRvIG9wdCBpbiB0byBwb2RzIChyb3V0ZXMpLCBiZWNhdXNlIGV2ZXJ5IHBvZHMgYXBwIGNhbiBiZSBjb25maWd1cmVkIGRpZmZlcmVudGx5XG4gICAqL1xuICBsZXQgcm9vdHMgPSBbJy9jb21wb25lbnRzLycsICcvdGVtcGxhdGVzLycsIC4uLihhZGRpdGlvbmFsUm9vdHMgfHwgW10pXTtcblxuICBpZiAoIXJvb3RzLnNvbWUoKHJvb3QpID0+IGZpbGVOYW1lLmluY2x1ZGVzKHJvb3QpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVNjb3BlZFBhdGgpIHtcbiAgLyoqXG4gICAqICpCeSBjb252ZW50aW9uKiwgYHNyY2AgaXMgb21pdHRlZCBmcm9tIGNvbXBvbmVudCBwYXRocy5cbiAgICogV2UgY2FuIHJlZmxlY3QgdGhlIHNhbWUgYmVoYXZpb3IgYnkgcmVwbGFjaW5nIHNyYy9cbiAgICogd2l0aCBhbiBlbXB0eSBzdHJpbmcuXG4gICAqXG4gICAqIENTUyBpc24ndCBlbWl0dGVkIGFzIGEgY28tbG9jYXRlZCBtb2R1bGUsIGJ1dFxuICAgKiB0byBrZWVwIGNvbnZlbnRpb25zIGNvbnNpc3RlbnQgYWNyb3NzIGxhbmd1YWdlcyxcbiAgICogd2UgY2FuIHByZXRlbmQgaXQgaXMuXG4gICAqXG4gICAqIEFueSBjdXN0b21pemF0aW9uIGJleW9uZCByZW1vdmluZyBgc3JjYCBhbmQgYGFwcGAgaXMgcG90ZW50aWFsbHkgY29uZnVzaW5nLlxuICAgKiBJZiB3ZSBuZWVkIGZ1cnRoZXIgY3VzdG9taXphdGlvbnMsIHdlJ2xsIHdhbnQgdG8gbWF0Y2ggb24gYGV4cG9ydHNgIGluIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHBhY2thZ2UuanNvblxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VTY29wZWRQYXRoLnJlcGxhY2UoL15cXC9zcmNcXC8vLCAnLycpO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgaWYgKGlzUG9kKHBhY2thZ2VSZWxhdGl2ZSkpIHtcbiAgICAvKipcbiAgICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgICAqL1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IG1vZHVsZU5hbWUoc291cmNlUGF0aCk7XG5cbiAgLyoqXG4gICAqICBVbmRlciBlbWJyb2lkZXIgYnVpbGRzLCB0aGUgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgYXBwXG4gICAqIGhhcyBhbGwgdGhlIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2UgbmFtZSxcbiAgICogcmF0aGVyIHRoYW4gXCJhcHBcIi5cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBzb3VyY2VQYXRoLnJlcGxhY2Uod29ya3NwYWNlUGF0aCwgJycpO1xuXG4gIC8qKlxuICAgKiBCdXQgd2UgYWxzbyBkb24ndCB3YW50ICdhcHAnIC0tIHdoaWNoIGlzIHByZXNlbnQgaW4gdGhlIHYxIGFkZG9uIHBpcGVsaW5lXG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShgL2FwcC9gLCBgL2ApO1xuXG4gIC8qKlxuICAgKiBhbHNvIGFsc28sIHdlIGtub3cgdGhhdCB0aGUgcmUtd3JpdHRlbiBhcHAgc3RydWN0dXJlIGluIGVtYnJvaWRlckB2M1xuICAgKiBpcyBleHRyYW5lb3VzLCBhbmQgd2UgY2FuIGNvbGxhcHNlIGl0XG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShcbiAgICBgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEh9L2AsXG4gICAgJy8nLFxuICApO1xuXG4gIC8vIEFueSBvZiB0aGUgYWJvdmUgcmVscGFjZW1lbnRzIGNvdWxkIGFjY2lkZW50YWxseSBnaXZlIHVzIGFuIGV4dHJhIC8gKGRlcGVuZGluZyBvbiBvdXIgYnVpbGQgZW52aXJvbm1lbnQpXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKCcvLycsICcvJyk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG4vKipcbiAqIFRvIGF2b2lkIGhpdHRpbmcgdGhlIGZpbGVzeXNldG0sIHdlJ2xsIHN0b3JlIGFsbCBmb3VuZFxuICogcHJvamVjdCBwYXRocyBiZXJlLCBzbyB3ZSBjYW4sIGluIG1lbW9yeSxcbiAqIGdldCB0aGUgZm9sZGVyIHdoZXJlIGEgcGFja2FnZS5qc29uIGV4aXN0cywgcmF0aGVyIHRoYW5cbiAqIGhpdCB0aGUgZmlsZSBzeXN0ZW0gZXZlcnkgdGltZS5cbiAqL1xuY29uc3QgU0VFTiA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gZ2V0U2Vlbihzb3VyY2VQYXRoKSB7XG4gIGlmIChTRUVOLmhhcyhzb3VyY2VQYXRoKSkgcmV0dXJuIHNvdXJjZVBhdGg7XG5cbiAgbGV0IHBhcnRzID0gc291cmNlUGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID4gMTsgaS0tKSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7XG5cbiAgICBsZXQgc2VlbiA9IFNFRU4uaGFzKHRvQ2hlY2spO1xuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCwgb3B0aW9ucykge1xuICBsZXQgY3dkID0gb3B0aW9ucz8uY3dkID8/IENXRDtcblxuICBpZiAoc291cmNlUGF0aC5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEgpKSB7XG4gICAgc291cmNlUGF0aCA9IHNvdXJjZVBhdGguc3BsaXQoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIKVswXTtcbiAgfVxuXG4gIGlmIChzb3VyY2VQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICBzb3VyY2VQYXRoID0gc291cmNlUGF0aC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICB9XG5cbiAgbGV0IHNlZW4gPSBnZXRTZWVuKHNvdXJjZVBhdGgpO1xuXG4gIGlmIChzZWVuKSB7XG4gICAgcmV0dXJuIHNlZW47XG4gIH1cblxuICBsZXQgY2FuZGlkYXRlUGF0aCA9IHBhdGguam9pbihzb3VyY2VQYXRoLCAncGFja2FnZS5qc29uJyk7XG5cbiAgY29uc3QgaXNXb3Jrc3BhY2UgPSBmc1N5bmMuZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKTtcblxuICBpZiAoaXNXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gc291cmNlUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGZpbmRQYWNrYWdlSnNvblVwKHNvdXJjZVBhdGgsIHsgY3dkIH0pO1xuXG4gIGlmICghcGFja2FnZUpzb25QYXRoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHByb2plY3QgZm9yICR7c291cmNlUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25QYXRoKTtcblxuICBTRUVOLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuZnVuY3Rpb24gZmluZFBhY2thZ2VKc29uVXAoc3RhcnRQYXRoLCBvcHRpb25zKSB7XG4gIGxldCBjd2QgPSBvcHRpb25zPy5jd2QgPz8gQ1dEO1xuICBsZXQgcGFydHMgPSBzdGFydFBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgIGxldCB0b0NoZWNrID0gcGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpO1xuXG4gICAgbGV0IHBhY2thZ2VKc29uID0gcGF0aC5qb2luKHRvQ2hlY2ssICdwYWNrYWdlLmpzb24nKTtcbiAgICBsZXQgZXhpc3RzID0gZnNTeW5jLmV4aXN0c1N5bmMocGFja2FnZUpzb24pO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIHBhY2thZ2VKc29uO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRyYXZlcnNlIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IG9mIHRoZSBmaWxlIHN5c3RlbS5cbiAgICBpZiAodG9DaGVjayA9PT0gY3dkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogV2lsbCByZXR1cm4gdGhlIHBhY2thZ2UuanNvbiNuYW1lLCBvciBjb25maWcvZW52aXJvbm1lbnQjbW91ZGxlUHJlZml4IChpZiB2MSBhcHApXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsZU5hbWUoc291cmNlUGF0aCkge1xuICBjb25zdCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChtYW5pZmVzdFsnZW1iZXItYWRkb24nXSkge1xuICAgIC8qKlxuICAgICAqIExpYnJhcmllcyBhcmUgbm90IGFsbG93ZWQgdG8gY3VzdG9taXplIHRoZWlyIG1vZHVsZSBuYW1lXG4gICAgICogdG8gYmUgZGlmZmVyZW50IGZyb20gdGhlaXIgcGFja2FnZSBuYW1lLlxuICAgICAqXG4gICAgICogKEl0J3MgYWxzbyBib25rZXJzIHRoYXQgdGhpcyBpcyBhbGxvd2VkIGZvciB2MSBhcHBzKVxuICAgICAqL1xuICAgIHJldHVybiBtYW5pZmVzdC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciB2MSBhcHBzLCB3ZSBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgY29uZmlnL2Vudmlyb25tZW50LmpzIGZpbGVcbiAgICogdG8gc2VlIGlmIHRoZSBtb2R1bGVQcmVmaXggc2V0dGluZyBkaWZmZXJzIGZyb20gbWFuaWZlc3QubmFtZTtcbiAgICovXG4gIGxldCBlbnZpcm9ubWVudEpTID0gcGF0aC5qb2luKHdvcmtzcGFjZSwgJ2NvbmZpZy9lbnZpcm9ubWVudC5qcycpO1xuXG4gIC8qKlxuICAgKiBOT1RFOiB0aGUgZW52aXJvbm1lbnQuanMgaXMgYSBjb21tb25KUyBmaWxlLCBzbyB3ZSBjYW4gc3luY2hyb25vdXNseSByZXF1aXJlIGl0XG4gICAqXG4gICAqIFRPRE86IGlmIHdlIGhhdmUgaXNzdWVzIHdpdGggbG9hZGluZyB0aGlzIGZpbGUgbGF0ZXIgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgcnVuIGpzY29kZXNoaWZ0IG9uIGl0XG4gICAqICAgICAgIGJ1dCB0aGF0IGNvdWxkIGFsbG93IHVzIHRvIGJlIGJyaXR0bGUgaW4gZGlmZmVyZW50IHdheXMsIGxpa2UgaWYgZm9sa3Mgc3RyYXkgZnJvbSB0aGUgd2F5IHRoZVxuICAgKiAgICAgICBmaWxlIGlzIGxhaWQgb3V0IGZyb20gdGhlIGJsdWVwcmludCBkZWZhdWx0cy5cbiAgICovXG4gIGlmIChmc1N5bmMuZXhpc3RzU3luYyhlbnZpcm9ubWVudEpTKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiAtLSB0aGlzIGV4aXN0c1xuICAgIGNvbnN0IGVudkZuID0gb3VyUmVxdWlyZShlbnZpcm9ubWVudEpTKTtcbiAgICBjb25zdCBlbnYgPSBlbnZGbignZW1iZXItc2NvcGVkLWNzcycpO1xuXG4gICAgcmV0dXJuIGVudi5tb2R1bGVQcmVmaXggfHwgbWFuaWZlc3QubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWxsYmFjayB0byB0aGUgdHJ1ZVx1MjEyMiBtb2R1bGVcdTIxMjIgbmFtZS5cbiAgICovXG4gIHJldHVybiBtYW5pZmVzdC5uYW1lO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3Jrc3BhY2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWFuaWZlc3Qod29ya3NwYWNlKSB7XG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGxldCBidWZmZXIgPSBmc1N5bmMucmVhZEZpbGVTeW5jKHBhdGguam9pbih3b3Jrc3BhY2UsICdwYWNrYWdlLmpzb24nKSk7XG4gIGxldCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKCk7XG4gIGxldCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICBNQU5JRkVTVF9DQUNIRS5zZXQod29ya3NwYWNlLCBqc29uKTtcblxuICByZXR1cm4ganNvbjtcbn1cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuLyoqXG4gKiBUaGUgaW50ZW50IG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZ2VuZXJhdGUgdGhlIHN1ZmZpeC9wb3N0Zml4IGZvciB0aGVcbiAqIGNzcyBjbGFzc2VzLCBiYXNlZCBvbiB0aGUgbW9kdWxlLXNjb3BlZCBwYXRoIG5hbWUuXG4gKlxuICogZm9yIGV4YW1wbGUsXG4gKiAgICBoYXNoKCdteS1hcHAvY29tcG9uZW50cy9mb28nKVxuICogIGluc3RlYWQgb2ZcbiAqICAgIGhhc2goJ2FwcC9jb21wb25lbnRzL2ZvbycpXG4gKlxuICogICh1bmxlc3MgeW91ciBhcHAgbmFtZSBpcyAnYXBwJylcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlUGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2gobW9kdWxlUGF0aCkge1xuICByZXR1cm4gJ2UnICsgbWQ1KG1vZHVsZVBhdGgpLnN1YnN0cmluZygwLCA4KTtcbn1cblxuXG5leHBvcnQgY29uc3QgaGFzaEZyb21Nb2R1bGVQYXRoID0gaGFzaDtcbiIsICJpbXBvcnQgeyBoYXNoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuaW1wb3J0IHsgYXBwUGF0aCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgeyBoYXNoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzaEZyb21BYnNvbHV0ZVBhdGgoYWJzb2x1dGVQYXRoKSB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgb2YgYGFwcFBhdGhgIHVsdGltYXRlbHkgdHJhbnNmb3JtcyB0aGUgYGFic29sdXRlUGF0aGBcbiAgICogaW50byB0aGUgZXhhY3Qgc3RyaW5nIHRoYXQgZm9sa3Mgd2lsbCBwYXNzIHRvIGByZWxhdGl2ZVBhdGhgXG4gICAqIGF0IHJ1bnRpbWUuXG4gICAqL1xuICBjb25zdCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuICBjb25zdCBwb3N0Zml4ID0gaGFzaChtb2R1bGVQYXRoKTtcblxuICByZXR1cm4gcG9zdGZpeDtcbn1cbiIsICJpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBwYXJzZXIgZnJvbSAncG9zdGNzcy1zZWxlY3Rvci1wYXJzZXInO1xuXG5pbXBvcnQgaXNJbnNpZGVHbG9iYWwgZnJvbSAnLi9pc0luc2lkZUdsb2JhbC5qcyc7XG5cbmZ1bmN0aW9uIHJld3JpdGVTZWxlY3RvcihzZWwsIHBvc3RmaXgpIHtcbiAgY29uc3QgdHJhbnNmb3JtID0gKHNlbGVjdG9ycykgPT4ge1xuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdjbGFzcycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBzZWxlY3Rvci52YWx1ZSArPSAnXycgKyBwb3N0Zml4O1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci50eXBlID09PSAndGFnJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnJlcGxhY2VXaXRoKFxuICAgICAgICAgIHBhcnNlci50YWcoeyB2YWx1ZTogc2VsZWN0b3IudmFsdWUgfSksXG4gICAgICAgICAgcGFyc2VyLmNsYXNzTmFtZSh7IHZhbHVlOiBwb3N0Zml4IH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gcmVtb3ZlIDpnbG9iYWxcbiAgICBzZWxlY3RvcnMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAncHNldWRvJyAmJiBzZWxlY3Rvci52YWx1ZSA9PT0gJzpnbG9iYWwnKSB7XG4gICAgICAgIHNlbGVjdG9yLnJlcGxhY2VXaXRoKC4uLnNlbGVjdG9yLm5vZGVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xuXG4gIHJldHVybiB0cmFuc2Zvcm1lZDtcbn1cblxuZnVuY3Rpb24gaXNJbnNpZGVLZXlmcmFtZXMobm9kZSkge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdhdHJ1bGUnICYmIHBhcmVudC5uYW1lID09PSAna2V5ZnJhbWVzJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlS2V5ZnJhbWVzKHBhcmVudCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJld3JpdGVDc3MoY3NzLCBwb3N0Zml4LCBmaWxlTmFtZSwgbGF5ZXJOYW1lKSB7XG4gIGNvbnN0IGxheWVyTmFtZVdpdGhEZWZhdWx0ID0gbGF5ZXJOYW1lID8/ICdjb21wb25lbnRzJztcbiAgY29uc3QgYXN0ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3J1bGUnICYmICFpc0luc2lkZUtleWZyYW1lcyhub2RlKSkge1xuICAgICAgbm9kZS5zZWxlY3RvciA9IHJld3JpdGVTZWxlY3Rvcihub2RlLnNlbGVjdG9yLCBwb3N0Zml4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHJld3JpdHRlbkNzcyA9IGFzdC50b1N0cmluZygpO1xuXG4gIGlmICghbGF5ZXJOYW1lV2l0aERlZmF1bHQpIHtcbiAgICByZXR1cm4gYC8qICR7ZmlsZU5hbWV9ICovXFxuJHtyZXdyaXR0ZW5Dc3N9XFxuYDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgYC8qICR7ZmlsZU5hbWV9ICovXFxuQGxheWVyICR7bGF5ZXJOYW1lV2l0aERlZmF1bHR9IHtcXG5cXG5gICtcbiAgICByZXdyaXR0ZW5Dc3MgK1xuICAgICdcXG59XFxuJ1xuICApO1xufVxuXG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNJbnNpZGVHbG9iYWwobm9kZSwgZnVuYykge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdwc2V1ZG8nICYmIHBhcmVudC52YWx1ZSA9PT0gJzpnbG9iYWwnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVHbG9iYWwocGFyZW50LCBmdW5jKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxJQUFBQSxvQkFBaUI7OztBQ0RqQix5QkFBbUI7QUFDbkIscUJBQW1DO0FBQ25DLHlCQUE4QjtBQUM5Qix1QkFBaUI7OztBQ0hqQix5QkFBZ0I7QUFnQlQsU0FBUyxLQUFLLFlBQVk7QUFDL0IsU0FBTyxVQUFNLG1CQUFBQyxTQUFJLFVBQVUsRUFBRSxVQUFVLEdBQUcsQ0FBQztBQUM3QztBQUdPLElBQU0scUJBQXFCOzs7QUNoQjNCLFNBQVMscUJBQXFCLGNBQWM7QUFNakQsUUFBTSxhQUFhLFFBQVEsWUFBWTtBQUN2QyxRQUFNLFVBQVUsS0FBSyxV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S0FBSyxTQUFTLFVBQVUsV0FBVztBQUNwRSxRQUFNLHVCQUF1QixhQUFhO0FBQzFDLFFBQU0sTUFBTSxlQUFBQyxRQUFRLE1BQU0sR0FBRztBQUU3QixNQUFJLEtBQUssQ0FBQyxTQUFTO0FBQ2pCLFFBQUksS0FBSyxTQUFTLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxHQUFHO0FBQ3BELFdBQUssV0FBVyxnQkFBZ0IsS0FBSyxVQUFVLE9BQU87QUFBQSxJQUN4RDtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sZUFBZSxJQUFJLFNBQVM7QUFFbEMsTUFBSSxDQUFDLHNCQUFzQjtBQUN6QixXQUFPLE1BQU0sUUFBUTtBQUFBLEVBQVEsWUFBWTtBQUFBO0FBQUEsRUFDM0M7QUFFQSxTQUNFLE1BQU0sUUFBUTtBQUFBLFNBQWUsb0JBQW9CO0FBQUE7QUFBQSxJQUNqRCxlQUNBO0FBRUo7OztBSmxEQSxlQUFPLHVCQUF3QixNQUFNO0FBQ25DLFFBQU0sVUFBVSxLQUFLLFdBQVc7QUFDaEMsUUFBTSxVQUFVLEtBQUs7QUFFckIsTUFBSSxDQUFDLGVBQWUsU0FBUyxFQUFFLEdBQUcsU0FBUyxLQUFLLEtBQUssWUFBWSxDQUFDLEdBQUc7QUFDbkUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLENBQUMsUUFBUSxXQUFXLEtBQUssV0FBVyxHQUFHO0FBQ3pDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLGtCQUFBQyxRQUFLLFNBQVMsT0FBTztBQUV6QyxNQUFJLDBCQUEwQixPQUFPLEdBQUc7QUFDdEMsVUFBTSxVQUFVLFNBQVMsT0FBTztBQUNoQyxVQUFNLGVBQWU7QUFBQSxNQUNuQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxRQUFRO0FBQUEsSUFDVjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfbm9kZV9wYXRoIiwgIm1kNSIsICJhc3NlcnQiLCAicGF0aCIsICJmc1N5bmMiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAicGF0aCJdCn0K
|
|
531
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvbWQ1LmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMiLCAiLi4vLi4vc3JjL2xpYi9wYXRoL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcmV3cml0ZUNzcy5qcyIsICIuLi8uLi9zcmMvbGliL2lzSW5zaWRlR2xvYmFsLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBpbXBvcnQgeyBjcmVhdGVVbnBsdWdpbiB9ICBmcm9tICd1bnBsdWdpbic7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQge1xuICBjc3NIYXNBc3NvY2lhdGVkQ29tcG9uZW50LFxuICBoYXNoRnJvbSxcbiAgaXNSZWxldmFudEZpbGUsXG59IGZyb20gJy4uL2xpYi9wYXRoL3V0aWxzLmpzJztcbmltcG9ydCByZXdyaXRlQ3NzIGZyb20gJy4uL2xpYi9yZXdyaXRlQ3NzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKGNvZGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICBjb25zdCBjc3NQYXRoID0gdGhpcy5yZXNvdXJjZVBhdGg7XG5cbiAgaWYgKCFpc1JlbGV2YW50RmlsZShjc3NQYXRoLCB7IC4uLm9wdGlvbnMsIGN3ZDogdGhpcy5yb290Q29udGV4dCB9KSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG5cbiAgaWYgKCFjc3NQYXRoLnN0YXJ0c1dpdGgodGhpcy5yb290Q29udGV4dCkpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuXG4gIGNvbnN0IGNzc0ZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShjc3NQYXRoKTtcblxuICBpZiAoY3NzSGFzQXNzb2NpYXRlZENvbXBvbmVudChjc3NQYXRoKSkge1xuICAgIGNvbnN0IHBvc3RmaXggPSBoYXNoRnJvbShjc3NQYXRoKTtcbiAgICBjb25zdCByZXdyaXR0ZW5Dc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgY29kZSxcbiAgICAgIHBvc3RmaXgsXG4gICAgICBjc3NGaWxlTmFtZSxcbiAgICAgIG9wdGlvbnMubGF5ZXJOYW1lLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuQ3NzO1xuICB9XG5cbiAgcmV0dXJuIGNvZGU7XG59XG4iLCAiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgZnNTeW5jLCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuaW1wb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG5leHBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuZXhwb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG5jb25zdCBDT01QT05FTlRfRVhURU5TSU9OUyA9IFsnLmd0cycsICcuZ2pzJywgJy50cycsICcuanMnLCAnLmhicyddO1xuXG4vLyBDSlMgLyBFU00/XG5sZXQgaGVyZSA9IGltcG9ydC5tZXRhLnVybDtcbmxldCBvdXJSZXF1aXJlID0gZ2xvYmFsVGhpcy5yZXF1aXJlXG4gID8gZ2xvYmFsVGhpcy5yZXF1aXJlXG4gIDogaGVyZSAmJiBjcmVhdGVSZXF1aXJlKGhlcmUpO1xuXG5pZiAoIW91clJlcXVpcmUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIG91clJlcXVpcmUgPSByZXF1aXJlO1xufVxuXG5jb25zdCBFTUJST0lERVJfRElSID0gJ25vZGVfbW9kdWxlcy8uZW1icm9pZGVyJztcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSCA9IGAke0VNQlJPSURFUl9ESVJ9L3Jld3JpdHRlbi1hcHBgO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFMgPSBgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEh9L2Fzc2V0c2A7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fUEFDS0FHRVMgPSBgJHtFTUJST0lERVJfRElSfS9yZXdyaXR0ZW4tcGFja2FnZXNgO1xuY29uc3QgSVJSRUxFVkFOVF9QQVRIUyA9IFsnbm9kZV9tb2R1bGVzLy5wbnBtJywgJ19fdml0ZS0nXTtcbmNvbnN0IFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTID0gbmV3IFNldChbJ3Rlc3RzJ10pO1xuXG5jb25zdCBDV0QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4vKipcbiAqIFJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgZmlsZVBhdGggZm9ybWF0IGlzLFxuICogdGhpcyB3aWxsIHRyeSB0byByZXR1cm4gdGhlIGNvcnJlY3QgcG9zdGZpeC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRnJvbShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGhhc2hGcm9tQWJzb2x1dGVQYXRoKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoRnJvbU1vZHVsZVBhdGgoZmlsZVBhdGgpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NIYXNBc3NvY2lhdGVkQ29tcG9uZW50KGNzc1BhdGgpIHtcbiAgcmV0dXJuIGNzc0hhc1N0YW5kYXJkRmlsZShjc3NQYXRoKSB8fCBjc3NIYXNQb2RzRmlsZShjc3NQYXRoKTtcbn1cblxuZnVuY3Rpb24gY3NzSGFzU3RhbmRhcmRGaWxlKGlkKSB7XG4gIC8qKlxuICAgKiBOb3JtYWxseSB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGEgSlMgcGF0aCBoZXJlLCBidXQgd2hlbiB1c2luZ1xuICAgKiBlbWJyb2lkZXJAMywgd2UgaGF2ZSBhIFwicmV3cml0dGVuIGFwcFwiLCB3aGljaCBoYXMgYWxsIG91ciBzb3VyY2VcbiAgICogcHJlcHJvY2Vzc2VkIGEgYml0IGJlZm9yZSBzY29wZWQtY3NzIHRyYW5zZm9ybWF0aW9ucy5cbiAgICpcbiAgICogKEluIFZpdGUsIHdlIG9wZXJhdGUgbW9yZSBkaXJlY3RseSB3aXRoIHRoZSBzb3VyY2UpXG4gICAqL1xuICBmb3IgKGxldCBleHQgb2YgQ09NUE9ORU5UX0VYVEVOU0lPTlMpIHtcbiAgICBsZXQgY2FuZGlkYXRlUGF0aCA9IGlkLnJlcGxhY2UoL1xcLmNzcyQvLCBleHQpO1xuXG4gICAgaWYgKGV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3NzSGFzUG9kc0ZpbGUoaWQpIHtcbiAgaWYgKCFpZC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGx5IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYSBKUyBwYXRoIGhlcmUsIGJ1dCB3aGVuIHVzaW5nXG4gICAqIGVtYnJvaWRlckAzLCB3ZSBoYXZlIGEgXCJyZXdyaXR0ZW4gYXBwXCIsIHdoaWNoIGhhcyBhbGwgb3VyIHNvdXJjZVxuICAgKiBwcmVwcm9jZXNzZWQgYSBiaXQgYmVmb3JlIHNjb3BlZC1jc3MgdHJhbnNmb3JtYXRpb25zLlxuICAgKlxuICAgKiAoSW4gVml0ZSwgd2Ugb3BlcmF0ZSBtb3JlIGRpcmVjdGx5IHdpdGggdGhlIHNvdXJjZSlcbiAgICovXG4gIGZvciAobGV0IGV4dCBvZiBDT01QT05FTlRfRVhURU5TSU9OUykge1xuICAgIGxldCBjYW5kaWRhdGVQYXRoID0gaWQucmVwbGFjZSgvc3R5bGVzXFwuY3NzJC8sIGB0ZW1wbGF0ZSR7ZXh0fWApO1xuXG4gICAgaWYgKGV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBlbWJlcidzIGNvbXBvbmVudCBsb2NhdGlvbiBjb252ZW50aW9ucyxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm92aWRlIGEgcGF0aCBmb3Igd2hlcmUgd2VcbiAqIGV4cGVjdCB0aGUgQ1NTIHRvIGxpdmUuXG4gKlxuICogRm9yIGNvLWxvY2F0ZWQgc3RydWN0dXJlOlxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50Lmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50LmNzc1xuICpcbiAqIEZvciBuZXN0ZWQgY28tbG9jYXRlZCBzdHJ1Y3R1cmVcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmNzc1xuICpcbiAqIEZvciBQb2RzIHJvdXRlcyBzdHJ1Y3R1cmVcbiAqICAgLSByb3V0ZXMvbXktcm91dGUvdGVtcGxhdGUue2hicyxqc31cbiAqICAgLSByb3V0ZXMvbXktcm91dGUvc3R5bGVzLmNzc1xuICpcbiAqIERlbGliZXJhdGVseSBub3Qgc3VwcG9ydGVkOlxuICogICAtIGNvbXBvbmVudHMgdy8gcG9kcyAtLSB0aGlzIGlzIGRlcHJlY2F0ZWQgaW4gNS4xMFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZSAtIHRoZSBoYnMsIGpzLCBnanMsIGd0cyBvciB3aGF0ZXZlciBjby1sb2NhdGVkIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGV4cGVjdGVkIGNzcyBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NQYXRoRm9yKGZpbGVOYW1lKSB7XG4gIGxldCB3aXRob3V0RXh0ID0gd2l0aG91dEV4dGVuc2lvbihmaWxlTmFtZSk7XG4gIGxldCBjc3NQYXRoID0gd2l0aG91dEV4dCArICcuY3NzJztcblxuICBpZiAoaXNQb2QoZmlsZU5hbWUpKSB7XG4gICAgY3NzUGF0aCA9IGZpbGVOYW1lXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5qcyQvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5oYnMvLCAnc3R5bGVzLmNzcycpO1xuICB9XG5cbiAgcmV0dXJuIGNzc1BhdGg7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVQYXRoLmVuZHNXaXRoKCd0ZW1wbGF0ZS5qcycpIHx8IGZpbGVQYXRoLmVuZHNXaXRoKCd0ZW1wbGF0ZS5oYnMnKTtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBlbmRzIHdpdGhcbiAqIC0gdGVtcGxhdGUuanNcbiAqIC0gdGVtcGxhdGUuaGJzXG4gKiAtIHN0eWxlcy5jc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEByZXR1cm5zIHRoZSBzYW1lIHBhdGgsIGJ1dCB3aXRob3V0IHRoZSBleHRlbnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhvdXRFeHRlbnNpb24oZmlsZVBhdGgpIHtcbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UoZmlsZVBhdGgpO1xuXG4gIHJldHVybiBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xufVxuXG4vKipcbiAqIEV4YW1wbGVzIGZvciBmaWxlTmFtZVxuICogLSBhYnNvbHV0ZSBvbi1kaXNrIHBhdGhcbiAqIC0gaW4gd2VicGFja1xuICogICAtIFVSTC1hYnNvbHV0ZSBwYXRoLCBzdGFydGluZyB3aXRoIC9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEBwYXJhbSB7eyBhZGRpdGlvbmFsUm9vdHM/OiBzdHJpbmdbXTsgY3dkOiBzdHJpbmcgfX0gb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7IGFkZGl0aW9uYWxSb290cywgY3dkIH0pIHtcbiAgLy8gUHJpdmF0ZSBWaXJ0dWFsIE1vZHVsZXNcbiAgaWYgKGZpbGVOYW1lLnN0YXJ0c1dpdGgoJ1xcMCcpKSByZXR1cm4gZmFsc2U7XG4gIC8vIFRoZXNlIGFyZSBub3QgdmFsaWQgdXNlcmxhbmQgbmFtZXMgKG9yIGFyZSBmcm9tIGxpYnJhcmllcylcbiAgaWYgKGZpbGVOYW1lLm1hdGNoKC9eW2EtekEtWl0vKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBFeHRlcm5hbCB0byB1c1xuICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnL0BlbWJyb2lkZXInKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoSVJSRUxFVkFOVF9QQVRIUy5zb21lKChpKSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhpKSkpIHJldHVybiBmYWxzZTtcblxuICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykpIHtcbiAgICAvLyBpZiBhIGZpbGUgaXMgbm90IHRoZSBlbWJyb2lkZXIgY2FjaGUgZGlyZWN0b3J5XG4gICAgLy8gYW5kIGlzIGluIG5vZGVfbW9kdWxlcywgc2tpcCBpdC5cbiAgICBpZiAoIWZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl9ESVIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gcmV3cml0dGVuIHBhY2thZ2VzIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYXQgdGhlaXIgb3duXG4gICAgLy8gcHVibGlzaCB0aW1lXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9QQUNLQUdFUykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGVzZSBhcmUgYWxyZWFkeSB0aGUgYnVuZGxlZCBmaWxlcy5cbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFMpKSB7XG4gICAgICAvLyBub3Qgc3VwcG9ydGVkLCBuZXZlciB3aWxsIGJlXG4gICAgICBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFN9L3Rlc3RzLmpzYCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVhbGx5LCB3ZSBuZXZlciBnZXQgaGVyZSAtLSBpbmRpY2F0ZXMgd2UncmUgbm90IGZpbHRlcmluZyBlZmZlY3RpdmVseSBpbiBiYWJlbFxuICAgICAgLy8gTk9URTogaWYgd2UgZ2V0IGhlcmUsIHdlJ3JlIHRyeWluZyB0byBvcGVyYXRlIG9uIGEgZmlsZSB0b28gbGF0ZS5cbiAgICAgIC8vICAgICAgIHdlIG5lZWQgU2NvcGVkQ1NTIHRvIG9wZXJhdGUgYXMgY2xvc2UgdG8gb3JpZ2luYWwgc291cmNlIGFzIHBvc3NpYmxlIC0tIG5vdCBvdXRwdXQgZmlsZXMuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbGV0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKGZpbGVOYW1lKTtcblxuICBhc3NlcnQoY3dkLCBgY3dkIHdhcyBub3QgcGFzc2VkIHRvIGlzUmVsZXZhbnRGaWxlYCk7XG5cbiAgbGV0IG91cldvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKGN3ZCk7XG5cbiAgaWYgKHdvcmtzcGFjZSAhPT0gb3VyV29ya3NwYWNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGxvY2FsID0gZmlsZU5hbWUucmVwbGFjZSh3b3Jrc3BhY2UsICcnKTtcbiAgbGV0IFssIC4uLnBhcnRzXSA9IGxvY2FsLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGlmIChVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUy5oYXMocGFydHNbMF0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3RseSBwb2RzIHN1cHBvcnQuXG4gICAqIGZvbGtzIG5lZWQgdG8gb3B0IGluIHRvIHBvZHMgKHJvdXRlcyksIGJlY2F1c2UgZXZlcnkgcG9kcyBhcHAgY2FuIGJlIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHlcbiAgICovXG4gIGxldCByb290cyA9IFsnL2NvbXBvbmVudHMvJywgJy90ZW1wbGF0ZXMvJywgLi4uKGFkZGl0aW9uYWxSb290cyB8fCBbXSldO1xuXG4gIGlmICghcm9vdHMuc29tZSgocm9vdCkgPT4gZmlsZU5hbWUuaW5jbHVkZXMocm9vdCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICBpZiAoaXNQb2QocGFja2FnZVJlbGF0aXZlKSkge1xuICAgIC8qKlxuICAgICAqIEZvciBwb2RzLCB3ZSBjaG9wIG9mZiB0aGUgd2hvbGUgZmlsZSwgYW5kIHVzZSB0aGUgZGlyIG5hbWUgYXMgdGhlIFwibW9kdWxlUGF0aFwiXG4gICAgICovXG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCB3b3Jrc3BhY2VQYXRoID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG4gIGxldCBuYW1lID0gbW9kdWxlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgLyoqXG4gICAqIEJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQgJ2FwcCcgLS0gd2hpY2ggaXMgcHJlc2VudCBpbiB0aGUgdjEgYWRkb24gcGlwZWxpbmVcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKGAvYXBwL2AsIGAvYCk7XG5cbiAgLyoqXG4gICAqIGFsc28gYWxzbywgd2Uga25vdyB0aGF0IHRoZSByZS13cml0dGVuIGFwcCBzdHJ1Y3R1cmUgaW4gZW1icm9pZGVyQHYzXG4gICAqIGlzIGV4dHJhbmVvdXMsIGFuZCB3ZSBjYW4gY29sbGFwc2UgaXRcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKFxuICAgIGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSH0vYCxcbiAgICAnLycsXG4gICk7XG5cbiAgLy8gQW55IG9mIHRoZSBhYm92ZSByZWxwYWNlbWVudHMgY291bGQgYWNjaWRlbnRhbGx5IGdpdmUgdXMgYW4gZXh0cmEgLyAoZGVwZW5kaW5nIG9uIG91ciBidWlsZCBlbnZpcm9ubWVudClcbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoJy8vJywgJy8nKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbi8qKlxuICogVG8gYXZvaWQgaGl0dGluZyB0aGUgZmlsZXN5c2V0bSwgd2UnbGwgc3RvcmUgYWxsIGZvdW5kXG4gKiBwcm9qZWN0IHBhdGhzIGJlcmUsIHNvIHdlIGNhbiwgaW4gbWVtb3J5LFxuICogZ2V0IHRoZSBmb2xkZXIgd2hlcmUgYSBwYWNrYWdlLmpzb24gZXhpc3RzLCByYXRoZXIgdGhhblxuICogaGl0IHRoZSBmaWxlIHN5c3RlbSBldmVyeSB0aW1lLlxuICovXG5jb25zdCBTRUVOID0gbmV3IFNldCgpO1xuXG5mdW5jdGlvbiBnZXRTZWVuKHNvdXJjZVBhdGgpIHtcbiAgaWYgKFNFRU4uaGFzKHNvdXJjZVBhdGgpKSByZXR1cm4gc291cmNlUGF0aDtcblxuICBsZXQgcGFydHMgPSBzb3VyY2VQYXRoLnNwbGl0KCcvJyk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcblxuICAgIGxldCBzZWVuID0gU0VFTi5oYXModG9DaGVjayk7XG5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gIGxldCBjd2QgPSBvcHRpb25zPy5jd2QgPz8gQ1dEO1xuXG4gIGlmIChzb3VyY2VQYXRoLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSCkpIHtcbiAgICBzb3VyY2VQYXRoID0gc291cmNlUGF0aC5zcGxpdChFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEgpWzBdO1xuICB9XG5cbiAgaWYgKHNvdXJjZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIHNvdXJjZVBhdGggPSBzb3VyY2VQYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIH1cblxuICBsZXQgc2VlbiA9IGdldFNlZW4oc291cmNlUGF0aCk7XG5cbiAgaWYgKHNlZW4pIHtcbiAgICByZXR1cm4gc2VlbjtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGVQYXRoID0gcGF0aC5qb2luKHNvdXJjZVBhdGgsICdwYWNrYWdlLmpzb24nKTtcblxuICBjb25zdCBpc1dvcmtzcGFjZSA9IGZzU3luYy5leGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpO1xuXG4gIGlmIChpc1dvcmtzcGFjZSkge1xuICAgIHJldHVybiBzb3VyY2VQYXRoO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFBhY2thZ2VKc29uVXAoc291cmNlUGF0aCwgeyBjd2QgfSk7XG5cbiAgaWYgKCFwYWNrYWdlSnNvblBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgcHJvamVjdCBmb3IgJHtzb3VyY2VQYXRofWApO1xuICB9XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIFNFRU4uYWRkKHdvcmtzcGFjZVBhdGgpO1xuXG4gIHJldHVybiB3b3Jrc3BhY2VQYXRoO1xufVxuXG5mdW5jdGlvbiBmaW5kUGFja2FnZUpzb25VcChzdGFydFBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG4gIGxldCBwYXJ0cyA9IHN0YXJ0UGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID4gMTsgaS0tKSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7XG5cbiAgICBsZXQgcGFja2FnZUpzb24gPSBwYXRoLmpvaW4odG9DaGVjaywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGxldCBleGlzdHMgPSBmc1N5bmMuZXhpc3RzU3luYyhwYWNrYWdlSnNvbik7XG5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb247XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJhdmVyc2UgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3Qgb2YgdGhlIGZpbGUgc3lzdGVtLlxuICAgIGlmICh0b0NoZWNrID09PSBjd2QpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiB0aGUgcGFja2FnZS5qc29uI25hbWUsIG9yIGNvbmZpZy9lbnZpcm9ubWVudCNtb3VkbGVQcmVmaXggKGlmIHYxIGFwcClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGdldE1hbmlmZXN0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKG1hbmlmZXN0WydlbWJlci1hZGRvbiddKSB7XG4gICAgLyoqXG4gICAgICogTGlicmFyaWVzIGFyZSBub3QgYWxsb3dlZCB0byBjdXN0b21pemUgdGhlaXIgbW9kdWxlIG5hbWVcbiAgICAgKiB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGVpciBwYWNrYWdlIG5hbWUuXG4gICAgICpcbiAgICAgKiAoSXQncyBhbHNvIGJvbmtlcnMgdGhhdCB0aGlzIGlzIGFsbG93ZWQgZm9yIHYxIGFwcHMpXG4gICAgICovXG4gICAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRm9yIHYxIGFwcHMsIHdlIG5lZWQgdG8gcmVmZXJlbmNlIHRoZSBjb25maWcvZW52aXJvbm1lbnQuanMgZmlsZVxuICAgKiB0byBzZWUgaWYgdGhlIG1vZHVsZVByZWZpeCBzZXR0aW5nIGRpZmZlcnMgZnJvbSBtYW5pZmVzdC5uYW1lO1xuICAgKi9cbiAgbGV0IGVudmlyb25tZW50SlMgPSBwYXRoLmpvaW4od29ya3NwYWNlLCAnY29uZmlnL2Vudmlyb25tZW50LmpzJyk7XG5cbiAgLyoqXG4gICAqIE5PVEU6IHRoZSBlbnZpcm9ubWVudC5qcyBpcyBhIGNvbW1vbkpTIGZpbGUsIHNvIHdlIGNhbiBzeW5jaHJvbm91c2x5IHJlcXVpcmUgaXRcbiAgICpcbiAgICogVE9ETzogaWYgd2UgaGF2ZSBpc3N1ZXMgd2l0aCBsb2FkaW5nIHRoaXMgZmlsZSBsYXRlciB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBydW4ganNjb2Rlc2hpZnQgb24gaXRcbiAgICogICAgICAgYnV0IHRoYXQgY291bGQgYWxsb3cgdXMgdG8gYmUgYnJpdHRsZSBpbiBkaWZmZXJlbnQgd2F5cywgbGlrZSBpZiBmb2xrcyBzdHJheSBmcm9tIHRoZSB3YXkgdGhlXG4gICAqICAgICAgIGZpbGUgaXMgbGFpZCBvdXQgZnJvbSB0aGUgYmx1ZXByaW50IGRlZmF1bHRzLlxuICAgKi9cbiAgaWYgKGZzU3luYy5leGlzdHNTeW5jKGVudmlyb25tZW50SlMpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmIC0tIHRoaXMgZXhpc3RzXG4gICAgY29uc3QgZW52Rm4gPSBvdXJSZXF1aXJlKGVudmlyb25tZW50SlMpO1xuICAgIGNvbnN0IGVudiA9IGVudkZuKCdlbWJlci1zY29wZWQtY3NzJyk7XG5cbiAgICByZXR1cm4gZW52Lm1vZHVsZVByZWZpeCB8fCBtYW5pZmVzdC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhbGxiYWNrIHRvIHRoZSB0cnVlXHUyMTIyIG1vZHVsZVx1MjEyMiBuYW1lLlxuICAgKi9cbiAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmtzcGFjZVxuICovXG5mdW5jdGlvbiBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpIHtcbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uO1xufVxuIiwgIi8qXG4gKiBKYXZhU2NyaXB0IE1ENVxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvSmF2YVNjcmlwdC1NRDVcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSwgU2ViYXN0aWFuIFRzY2hhblxuICogaHR0cHM6Ly9ibHVlaW1wLm5ldFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKlxuICogQmFzZWQgb25cbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2VcbiAqIERpZ2VzdCBBbGdvcml0aG0sIGFzIGRlZmluZWQgaW4gUkZDIDEzMjEuXG4gKiBWZXJzaW9uIDIuMiBDb3B5cmlnaHQgKEMpIFBhdWwgSm9obnN0b24gMTk5OSAtIDIwMDlcbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgTGljZW5zZVxuICogU2VlIGh0dHA6Ly9wYWpob21lLm9yZy51ay9jcnlwdC9tZDUgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBNb2RpZmljYXRpb25zOlxuICogLSByZW1vdmVkIElJRkUsIGV4cG9ydGVkIG1kNSAodGhpcyBmaWxlIGlzIG5vdyBFU00pXG4gKi9cblxuLyoqXG4gKiBBZGQgaW50ZWdlcnMsIHdyYXBwaW5nIGF0IDJeMzIuXG4gKiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseSB0byB3b3JrIGFyb3VuZCBidWdzIGluIGludGVycHJldGVycy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBGaXJzdCBpbnRlZ2VyXG4gKiBAcGFyYW0ge251bWJlcn0geSBTZWNvbmQgaW50ZWdlclxuICogQHJldHVybnMge251bWJlcn0gU3VtXG4gKi9cbmZ1bmN0aW9uIHNhZmVBZGQoeCwgeSkge1xuICB2YXIgbHN3ID0gKHggJiAweGZmZmYpICsgKHkgJiAweGZmZmYpO1xuICB2YXIgbXN3ID0gKHggPj4gMTYpICsgKHkgPj4gMTYpICsgKGxzdyA+PiAxNik7XG5cbiAgcmV0dXJuIChtc3cgPDwgMTYpIHwgKGxzdyAmIDB4ZmZmZik7XG59XG5cbi8qKlxuICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRvIHRoZSBsZWZ0LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0gMzItYml0IG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IGNudCBSb3RhdGlvbiBjb3VudFxuICogQHJldHVybnMge251bWJlcn0gUm90YXRlZCBudW1iZXJcbiAqL1xuZnVuY3Rpb24gYml0Um90YXRlTGVmdChudW0sIGNudCkge1xuICByZXR1cm4gKG51bSA8PCBjbnQpIHwgKG51bSA+Pj4gKDMyIC0gY250KSk7XG59XG5cbi8qKlxuICogQmFzaWMgb3BlcmF0aW9uIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcSBxXG4gKiBAcGFyYW0ge251bWJlcn0gYSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYiBiXG4gKiBAcGFyYW0ge251bWJlcn0geCB4XG4gKiBAcGFyYW0ge251bWJlcn0gcyBzXG4gKiBAcGFyYW0ge251bWJlcn0gdCB0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXN1bHRcbiAqL1xuZnVuY3Rpb24gbWQ1Y21uKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIHNhZmVBZGQoYml0Um90YXRlTGVmdChzYWZlQWRkKHNhZmVBZGQoYSwgcSksIHNhZmVBZGQoeCwgdCkpLCBzKSwgYik7XG59XG5cbi8qKlxuICogQmFzaWMgb3BlcmF0aW9uIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYiBiXG4gKiBAcGFyYW0ge251bWJlcn0gYyBjXG4gKiBAcGFyYW0ge251bWJlcn0gZCBkXG4gKiBAcGFyYW0ge251bWJlcn0geCB4XG4gKiBAcGFyYW0ge251bWJlcn0gcyBzXG4gKiBAcGFyYW0ge251bWJlcn0gdCB0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXN1bHRcbiAqL1xuZnVuY3Rpb24gbWQ1ZmYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKChiICYgYykgfCAofmIgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG59XG5cbi8qKlxuICogQmFzaWMgb3BlcmF0aW9uIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYiBiXG4gKiBAcGFyYW0ge251bWJlcn0gYyBjXG4gKiBAcGFyYW0ge251bWJlcn0gZCBkXG4gKiBAcGFyYW0ge251bWJlcn0geCB4XG4gKiBAcGFyYW0ge251bWJlcn0gcyBzXG4gKiBAcGFyYW0ge251bWJlcn0gdCB0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXN1bHRcbiAqL1xuZnVuY3Rpb24gbWQ1Z2coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKChiICYgZCkgfCAoYyAmIH5kKSwgYSwgYiwgeCwgcywgdCk7XG59XG5cbi8qKlxuICogQmFzaWMgb3BlcmF0aW9uIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYiBiXG4gKiBAcGFyYW0ge251bWJlcn0gYyBjXG4gKiBAcGFyYW0ge251bWJlcn0gZCBkXG4gKiBAcGFyYW0ge251bWJlcn0geCB4XG4gKiBAcGFyYW0ge251bWJlcn0gcyBzXG4gKiBAcGFyYW0ge251bWJlcn0gdCB0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXN1bHRcbiAqL1xuZnVuY3Rpb24gbWQ1aGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbi8qKlxuICogQmFzaWMgb3BlcmF0aW9uIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYiBiXG4gKiBAcGFyYW0ge251bWJlcn0gYyBjXG4gKiBAcGFyYW0ge251bWJlcn0gZCBkXG4gKiBAcGFyYW0ge251bWJlcn0geCB4XG4gKiBAcGFyYW0ge251bWJlcn0gcyBzXG4gKiBAcGFyYW0ge251bWJlcn0gdCB0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXN1bHRcbiAqL1xuZnVuY3Rpb24gbWQ1aWkoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGMgXiAoYiB8IH5kKSwgYSwgYiwgeCwgcywgdCk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcywgYW5kIGEgYml0IGxlbmd0aC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB4IEFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW4gQml0IGxlbmd0aFxuICogQHJldHVybnMge0FycmF5PG51bWJlcj59IE1ENSBBcnJheVxuICovXG5mdW5jdGlvbiBiaW5sTUQ1KHgsIGxlbikge1xuICAvKiBhcHBlbmQgcGFkZGluZyAqL1xuICB4W2xlbiA+PiA1XSB8PSAweDgwIDw8IGxlbiAlIDMyO1xuICB4WygoKGxlbiArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsZW47XG5cbiAgdmFyIGk7XG4gIHZhciBvbGRhO1xuICB2YXIgb2xkYjtcbiAgdmFyIG9sZGM7XG4gIHZhciBvbGRkO1xuICB2YXIgYSA9IDE3MzI1ODQxOTM7XG4gIHZhciBiID0gLTI3MTczMzg3OTtcbiAgdmFyIGMgPSAtMTczMjU4NDE5NDtcbiAgdmFyIGQgPSAyNzE3MzM4Nzg7XG5cbiAgZm9yIChpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgb2xkYSA9IGE7XG4gICAgb2xkYiA9IGI7XG4gICAgb2xkYyA9IGM7XG4gICAgb2xkZCA9IGQ7XG5cbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpXSwgNywgLTY4MDg3NjkzNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4Nik7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMCk7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpO1xuXG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA1LCAtMTY1Nzk2NTEwKTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgNl0sIDksIC0xMDY5NTAxNjMyKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgNjQzNzE3NzEzKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpXSwgMjAsIC0zNzM4OTczMDIpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNSwgLTcwMTU1ODY5MSk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgOSwgMzgwMTYwODMpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE0LCAtNjYwNDc4MzM1KTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgOV0sIDUsIDU2ODQ0NjQzOCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDE0XSwgOSwgLTEwMTk4MDM2OTApO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTQsIC0xODczNjM5NjEpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA4XSwgMjAsIDExNjM1MzE1MDEpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDUsIC0xNDQ0NjgxNDY3KTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMl0sIDksIC01MTQwMzc4NCk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNCwgMTczNTMyODQ3Myk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcblxuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNCwgLTM3ODU1OCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE2LCAxODM5MDMwNTYyKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTRdLCAyMywgLTM1MzA5NTU2KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMV0sIDQsIC0xNTMwOTkyMDYwKTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgNF0sIDExLCAxMjcyODkzMzUzKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgN10sIDE2LCAtMTU1NDk3NjMyKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDQsIDY4MTI3OTE3NCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaV0sIDExLCAtMzU4NTM3MjIyKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgM10sIDE2LCAtNzIyNTIxOTc5KTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgNl0sIDIzLCA3NjAyOTE4OSk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDldLCA0LCAtNjQwMzY0NDg3KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgMTJdLCAxMSwgLTQyMTgxNTgzNSk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTYsIDUzMDc0MjUyMCk7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDJdLCAyMywgLTk5NTMzODY1MSk7XG5cbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpXSwgNiwgLTE5ODYzMDg0NCk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSk7XG5cbiAgICBhID0gc2FmZUFkZChhLCBvbGRhKTtcbiAgICBiID0gc2FmZUFkZChiLCBvbGRiKTtcbiAgICBjID0gc2FmZUFkZChjLCBvbGRjKTtcbiAgICBkID0gc2FmZUFkZChkLCBvbGRkKTtcbiAgfVxuXG4gIHJldHVybiBbYSwgYiwgYywgZF07XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBpbnB1dCBNRDUgQXJyYXlcbiAqIEByZXR1cm5zIHtzdHJpbmd9IE1ENSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYmlubDJyc3RyKGlucHV0KSB7XG4gIHZhciBpO1xuICB2YXIgb3V0cHV0ID0gJyc7XG4gIHZhciBsZW5ndGgzMiA9IGlucHV0Lmxlbmd0aCAqIDMyO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGgzMjsgaSArPSA4KSB7XG4gICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGlucHV0W2kgPj4gNV0gPj4+IGkgJSAzMikgJiAweGZmKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHJhdyBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICogQ2hhcmFjdGVycyA+MjU1IGhhdmUgdGhlaXIgaGlnaC1ieXRlIHNpbGVudGx5IGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IFJhdyBpbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIHtBcnJheTxudW1iZXI+fSBBcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gKi9cbmZ1bmN0aW9uIHJzdHIyYmlubChpbnB1dCkge1xuICB2YXIgaTtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBvdXRwdXRbKGlucHV0Lmxlbmd0aCA+PiAyKSAtIDFdID0gdW5kZWZpbmVkO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBvdXRwdXQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBvdXRwdXRbaV0gPSAwO1xuICB9XG5cbiAgdmFyIGxlbmd0aDggPSBpbnB1dC5sZW5ndGggKiA4O1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg4OyBpICs9IDgpIHtcbiAgICBvdXRwdXRbaSA+PiA1XSB8PSAoaW5wdXQuY2hhckNvZGVBdChpIC8gOCkgJiAweGZmKSA8PCBpICUgMzI7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgTUQ1IG9mIGEgcmF3IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzIElucHV0IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gUmF3IE1ENSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcnN0ck1ENShzKSB7XG4gIHJldHVybiBiaW5sMnJzdHIoYmlubE1ENShyc3RyMmJpbmwocyksIHMubGVuZ3RoICogOCkpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIEhNQUMtTUQ1IG9mIGEga2V5IGFuZCBzb21lIGRhdGEgKHJhdyBzdHJpbmdzKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgSE1BQyBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIFJhdyBpbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJhdyBNRDUgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHJzdHJITUFDTUQ1KGtleSwgZGF0YSkge1xuICB2YXIgaTtcbiAgdmFyIGJrZXkgPSByc3RyMmJpbmwoa2V5KTtcbiAgdmFyIGlwYWQgPSBbXTtcbiAgdmFyIG9wYWQgPSBbXTtcbiAgdmFyIGhhc2g7XG4gIGlwYWRbMTVdID0gb3BhZFsxNV0gPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGJrZXkubGVuZ3RoID4gMTYpIHtcbiAgICBia2V5ID0gYmlubE1ENShia2V5LCBrZXkubGVuZ3RoICogOCk7XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMSkge1xuICAgIGlwYWRbaV0gPSBia2V5W2ldIF4gMHgzNjM2MzYzNjtcbiAgICBvcGFkW2ldID0gYmtleVtpXSBeIDB4NWM1YzVjNWM7XG4gIH1cblxuICBoYXNoID0gYmlubE1ENShpcGFkLmNvbmNhdChyc3RyMmJpbmwoZGF0YSkpLCA1MTIgKyBkYXRhLmxlbmd0aCAqIDgpO1xuXG4gIHJldHVybiBiaW5sMnJzdHIoYmlubE1ENShvcGFkLmNvbmNhdChoYXNoKSwgNTEyICsgMTI4KSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHJhdyBzdHJpbmcgdG8gYSBoZXggc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IFJhdyBpbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhleCBlbmNvZGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiByc3RyMmhleChpbnB1dCkge1xuICB2YXIgaGV4VGFiID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuICB2YXIgb3V0cHV0ID0gJyc7XG4gIHZhciB4O1xuICB2YXIgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB4ID0gaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICBvdXRwdXQgKz0gaGV4VGFiLmNoYXJBdCgoeCA+Pj4gNCkgJiAweDBmKSArIGhleFRhYi5jaGFyQXQoeCAmIDB4MGYpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBFbmNvZGUgYSBzdHJpbmcgYXMgVVRGLThcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVVEY4IHN0cmluZ1xuICovXG5mdW5jdGlvbiBzdHIycnN0clVURjgoaW5wdXQpIHtcbiAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgaW5wdXQgc3RyaW5nIGFzIHJhdyBNRDUgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHMgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSYXcgTUQ1IHN0cmluZ1xuICovXG5mdW5jdGlvbiByYXdNRDUocykge1xuICByZXR1cm4gcnN0ck1ENShzdHIycnN0clVURjgocykpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgaW5wdXQgc3RyaW5nIGFzIEhleCBlbmNvZGVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzIElucHV0IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gSGV4IGVuY29kZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGhleE1ENShzKSB7XG4gIHJldHVybiByc3RyMmhleChyYXdNRDUocykpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHJhdyBITUFDLU1ENSBmb3IgdGhlIGdpdmVuIGtleSBhbmQgZGF0YVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrIEhNQUMga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gZCBJbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJhdyBNRDUgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHJhd0hNQUNNRDUoaywgZCkge1xuICByZXR1cm4gcnN0ckhNQUNNRDUoc3RyMnJzdHJVVEY4KGspLCBzdHIycnN0clVURjgoZCkpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIEhleCBlbmNvZGVkIEhNQUMtTUQ1IGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkYXRhXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGsgSE1BQyBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBkIElucHV0IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gUmF3IE1ENSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gaGV4SE1BQ01ENShrLCBkKSB7XG4gIHJldHVybiByc3RyMmhleChyYXdITUFDTUQ1KGssIGQpKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIE1ENSB2YWx1ZSBmb3IgYSBnaXZlbiBzdHJpbmcuXG4gKiBJZiBhIGtleSBpcyBwcm92aWRlZCwgY2FsY3VsYXRlcyB0aGUgSE1BQy1NRDUgdmFsdWUuXG4gKiBSZXR1cm5zIGEgSGV4IGVuY29kZWQgc3RyaW5nIHVubGVzcyB0aGUgcmF3IGFyZ3VtZW50IGlzIGdpdmVuLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgSW5wdXQgc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gSE1BQyBrZXlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jhd10gUmF3IG91dHB1dCBzd2l0Y2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9IE1ENSBvdXRwdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1kNShzdHJpbmcsIGtleSwgcmF3KSB7XG4gIGlmICgha2V5KSB7XG4gICAgaWYgKCFyYXcpIHtcbiAgICAgIHJldHVybiBoZXhNRDUoc3RyaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmF3TUQ1KHN0cmluZyk7XG4gIH1cblxuICBpZiAoIXJhdykge1xuICAgIHJldHVybiBoZXhITUFDTUQ1KGtleSwgc3RyaW5nKTtcbiAgfVxuXG4gIHJldHVybiByYXdITUFDTUQ1KGtleSwgc3RyaW5nKTtcbn1cbiIsICJpbXBvcnQgeyBtZDUgfSBmcm9tICcuL21kNS5qcyc7XG5cbi8qKlxuICogVGhlIGludGVudCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVyYXRlIHRoZSBzdWZmaXgvcG9zdGZpeCBmb3IgdGhlXG4gKiBjc3MgY2xhc3NlcywgYmFzZWQgb24gdGhlIG1vZHVsZS1zY29wZWQgcGF0aCBuYW1lLlxuICpcbiAqIGZvciBleGFtcGxlLFxuICogICAgaGFzaCgnbXktYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqICBpbnN0ZWFkIG9mXG4gKiAgICBoYXNoKCdhcHAvY29tcG9uZW50cy9mb28nKVxuICpcbiAqICAodW5sZXNzIHlvdXIgYXBwIG5hbWUgaXMgJ2FwcCcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZVBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKG1vZHVsZVBhdGgpIHtcbiAgcmV0dXJuICdlJyArIG1kNShtb2R1bGVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGhhc2hGcm9tTW9kdWxlUGF0aCA9IGhhc2g7XG4iLCAiaW1wb3J0IHsgaGFzaCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcbmltcG9ydCB7IGFwcFBhdGggfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IHsgaGFzaCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tQWJzb2x1dGVQYXRoKGFic29sdXRlUGF0aCkge1xuICAvKipcbiAgICogVGhlIHdob2xlIG9mIGBhcHBQYXRoYCB1bHRpbWF0ZWx5IHRyYW5zZm9ybXMgdGhlIGBhYnNvbHV0ZVBhdGhgXG4gICAqIGludG8gdGhlIGV4YWN0IHN0cmluZyB0aGF0IGZvbGtzIHdpbGwgcGFzcyB0byBgcmVsYXRpdmVQYXRoYFxuICAgKiBhdCBydW50aW1lLlxuICAgKi9cbiAgY29uc3QgbW9kdWxlUGF0aCA9IGFwcFBhdGgoYWJzb2x1dGVQYXRoKTtcbiAgY29uc3QgcG9zdGZpeCA9IGhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIHBvc3RmaXg7XG59XG4iLCAiaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IGlzSW5zaWRlR2xvYmFsIGZyb20gJy4vaXNJbnNpZGVHbG9iYWwuanMnO1xuXG5mdW5jdGlvbiByZXdyaXRlU2VsZWN0b3Ioc2VsLCBwb3N0Zml4KSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzZWxlY3RvcnMpID0+IHtcbiAgICBzZWxlY3RvcnMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IudmFsdWUgKz0gJ18nICsgcG9zdGZpeDtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3RhZycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBzZWxlY3Rvci5yZXBsYWNlV2l0aChcbiAgICAgICAgICBwYXJzZXIudGFnKHsgdmFsdWU6IHNlbGVjdG9yLnZhbHVlIH0pLFxuICAgICAgICAgIHBhcnNlci5jbGFzc05hbWUoeyB2YWx1ZTogcG9zdGZpeCB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHJlbW92ZSA6Z2xvYmFsXG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3BzZXVkbycgJiYgc2VsZWN0b3IudmFsdWUgPT09ICc6Z2xvYmFsJykge1xuICAgICAgICBzZWxlY3Rvci5yZXBsYWNlV2l0aCguLi5zZWxlY3Rvci5ub2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gcGFyc2VyKHRyYW5zZm9ybSkucHJvY2Vzc1N5bmMoc2VsKTtcblxuICByZXR1cm4gdHJhbnNmb3JtZWQ7XG59XG5cbmZ1bmN0aW9uIGlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnYXRydWxlJyAmJiBwYXJlbnQubmFtZSA9PT0gJ2tleWZyYW1lcycpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUtleWZyYW1lcyhwYXJlbnQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlQ3NzKGNzcywgcG9zdGZpeCwgZmlsZU5hbWUsIGxheWVyTmFtZSkge1xuICBjb25zdCBsYXllck5hbWVXaXRoRGVmYXVsdCA9IGxheWVyTmFtZSA/PyAnY29tcG9uZW50cyc7XG4gIGNvbnN0IGFzdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuICBhc3Qud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdydWxlJyAmJiAhaXNJbnNpZGVLZXlmcmFtZXMobm9kZSkpIHtcbiAgICAgIG5vZGUuc2VsZWN0b3IgPSByZXdyaXRlU2VsZWN0b3Iobm9kZS5zZWxlY3RvciwgcG9zdGZpeCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCByZXdyaXR0ZW5Dc3MgPSBhc3QudG9TdHJpbmcoKTtcblxuICBpZiAoIWxheWVyTmFtZVdpdGhEZWZhdWx0KSB7XG4gICAgcmV0dXJuIGAvKiAke2ZpbGVOYW1lfSAqL1xcbiR7cmV3cml0dGVuQ3NzfVxcbmA7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGAvKiAke2ZpbGVOYW1lfSAqL1xcbkBsYXllciAke2xheWVyTmFtZVdpdGhEZWZhdWx0fSB7XFxuXFxuYCArXG4gICAgcmV3cml0dGVuQ3NzICtcbiAgICAnXFxufVxcbidcbiAgKTtcbn1cblxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzSW5zaWRlR2xvYmFsKG5vZGUsIGZ1bmMpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAncHNldWRvJyAmJiBwYXJlbnQudmFsdWUgPT09ICc6Z2xvYmFsJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlR2xvYmFsKHBhcmVudCwgZnVuYyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsSUFBQUEsb0JBQWlCOzs7QUNEakIseUJBQW1CO0FBQ25CLHFCQUFtQztBQUNuQyx5QkFBOEI7QUFDOUIsdUJBQWlCOzs7QUMyQmpCLFNBQVMsUUFBUSxHQUFHLEdBQUc7QUFDckIsTUFBSSxPQUFPLElBQUksVUFBVyxJQUFJO0FBQzlCLE1BQUksT0FBTyxLQUFLLE9BQU8sS0FBSyxPQUFPLE9BQU87QUFFMUMsU0FBUSxPQUFPLEtBQU8sTUFBTTtBQUM5QjtBQVNBLFNBQVMsY0FBYyxLQUFLLEtBQUs7QUFDL0IsU0FBUSxPQUFPLE1BQVEsUUFBUyxLQUFLO0FBQ3ZDO0FBYUEsU0FBUyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ2hDLFNBQU8sUUFBUSxjQUFjLFFBQVEsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDM0U7QUFjQSxTQUFTLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztBQUNsQyxTQUFPLE9BQVEsSUFBSSxJQUFNLENBQUMsSUFBSSxHQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNqRDtBQWNBLFNBQVMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ2xDLFNBQU8sT0FBUSxJQUFJLElBQU0sSUFBSSxDQUFDLEdBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2pEO0FBY0EsU0FBUyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDbEMsU0FBTyxPQUFPLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN4QztBQWNBLFNBQVMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ2xDLFNBQU8sT0FBTyxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMzQztBQVNBLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFFdkIsSUFBRSxPQUFPLENBQUMsS0FBSyxPQUFRLE1BQU07QUFDN0IsS0FBSyxNQUFNLE9BQVEsS0FBTSxLQUFLLEVBQUUsSUFBSTtBQUVwQyxNQUFJO0FBQ0osTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJO0FBQ0osTUFBSTtBQUNKLE1BQUksSUFBSTtBQUNSLE1BQUksSUFBSTtBQUNSLE1BQUksSUFBSTtBQUNSLE1BQUksSUFBSTtBQUVSLE9BQUssSUFBSSxHQUFHLElBQUksRUFBRSxRQUFRLEtBQUssSUFBSTtBQUNqQyxXQUFPO0FBQ1AsV0FBTztBQUNQLFdBQU87QUFDUCxXQUFPO0FBRVAsUUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxVQUFVO0FBQ3pDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVO0FBQzlDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxTQUFTO0FBQzdDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXO0FBQy9DLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVO0FBQzdDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVO0FBQzlDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXO0FBQy9DLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxTQUFTO0FBQzdDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVO0FBQzdDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXO0FBQy9DLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNO0FBQzNDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxXQUFXO0FBQ2hELFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxVQUFVO0FBQzlDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxTQUFTO0FBQzlDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxXQUFXO0FBQ2hELFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxVQUFVO0FBRS9DLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVO0FBQzdDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXO0FBQzlDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxTQUFTO0FBQzlDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksVUFBVTtBQUMxQyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVTtBQUM3QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsUUFBUTtBQUM1QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksVUFBVTtBQUMvQyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVTtBQUM5QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUztBQUM1QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsV0FBVztBQUMvQyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVTtBQUM5QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVTtBQUM5QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsV0FBVztBQUMvQyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUztBQUM1QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVTtBQUM5QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksV0FBVztBQUVoRCxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTztBQUMxQyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVztBQUMvQyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksVUFBVTtBQUMvQyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksU0FBUztBQUM5QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVztBQUM5QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVTtBQUM5QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVTtBQUM5QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksV0FBVztBQUNoRCxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsU0FBUztBQUM3QyxRQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLFVBQVU7QUFDMUMsUUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVU7QUFDOUMsUUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVE7QUFDNUMsUUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVU7QUFDN0MsUUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLFVBQVU7QUFDL0MsUUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLFNBQVM7QUFDOUMsUUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVU7QUFFOUMsUUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxVQUFVO0FBQ3pDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVO0FBQzlDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxXQUFXO0FBQ2hELFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxTQUFTO0FBQzdDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxVQUFVO0FBQzlDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXO0FBQy9DLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxRQUFRO0FBQzdDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXO0FBQy9DLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVO0FBQzdDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxTQUFTO0FBQzlDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXO0FBQy9DLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxVQUFVO0FBQy9DLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVO0FBQzdDLFFBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVB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O0FMbERBLGVBQU8sdUJBQXdCLE1BQU07QUFDbkMsUUFBTSxVQUFVLEtBQUssV0FBVztBQUNoQyxRQUFNLFVBQVUsS0FBSztBQUVyQixNQUFJLENBQUMsZUFBZSxTQUFTLEVBQUUsR0FBRyxTQUFTLEtBQUssS0FBSyxZQUFZLENBQUMsR0FBRztBQUNuRSxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksQ0FBQyxRQUFRLFdBQVcsS0FBSyxXQUFXLEdBQUc7QUFDekMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGNBQWMsa0JBQUFDLFFBQUssU0FBUyxPQUFPO0FBRXpDLE1BQUksMEJBQTBCLE9BQU8sR0FBRztBQUN0QyxVQUFNLFVBQVUsU0FBUyxPQUFPO0FBQ2hDLFVBQU0sZUFBZTtBQUFBLE1BQ25CO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFFBQVE7QUFBQSxJQUNWO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbImltcG9ydF9ub2RlX3BhdGgiLCAiaGFzaCIsICJhc3NlcnQiLCAicGF0aCIsICJmc1N5bmMiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAicGF0aCJdCn0K
|
|
@@ -42,11 +42,6 @@ var import_node_assert = __toESM(require("node:assert"), 1);
|
|
|
42
42
|
var import_node_fs = __toESM(require("node:fs"), 1);
|
|
43
43
|
var import_node_module = require("node:module");
|
|
44
44
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
45
|
-
|
|
46
|
-
// src/lib/path/hash-from-module-path.js
|
|
47
|
-
var import_blueimp_md5 = __toESM(require("blueimp-md5"), 1);
|
|
48
|
-
|
|
49
|
-
// src/lib/path/utils.js
|
|
50
45
|
var import_meta = {};
|
|
51
46
|
var here = import_meta.url;
|
|
52
47
|
var ourRequire = globalThis.require ? globalThis.require : here && (0, import_node_module.createRequire)(here);
|
|
@@ -248,4 +243,4 @@ var babel_plugin_default = (env, options, workingDirectory) => {
|
|
|
248
243
|
}
|
|
249
244
|
};
|
|
250
245
|
};
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2JhYmVsLXBsdWdpbi5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvdXRpbHMuanMiLCAiLi4vLi4vc3JjL2xpYi9wYXRoL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgSW1wb3J0VXRpbCB9IGZyb20gJ2JhYmVsLWltcG9ydC11dGlsJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgbm9kZVBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IGNzc1BhdGhGb3IsIGlzUmVsZXZhbnRGaWxlIH0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuXG5mdW5jdGlvbiBfaXNSZWxldmFudEZpbGUoc3RhdGUsIGN3ZCkge1xuICBsZXQgZmlsZU5hbWUgPSBzdGF0ZS5maWxlLm9wdHMuZmlsZW5hbWU7XG4gIGxldCBhZGRpdGlvbmFsUm9vdHMgPSBzdGF0ZS5vcHRzPy5hZGRpdGlvbmFsUm9vdHM7XG5cbiAgcmV0dXJuIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7XG4gICAgYWRkaXRpb25hbFJvb3RzLFxuICAgIGN3ZCxcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGVudiAtIGJhYmVsIHBsdWdpbiBlbnYsIGVudi50eXBlcyBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgKGVzcCBpbiBUUylcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gdGhlIG9wdGlvbnMgZm9yIHNjb3BlZC1jc3MgLS0gdGhpcyBpcyBhbHNvIGF2YWlsYWJsZSBpbiBlYWNoIHZpc2l0b3IncyBzdGF0ZS5vcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gd29ya2luZ0RpcmVjdG9yeVxuICovXG5leHBvcnQgZGVmYXVsdCAoZW52LCBvcHRpb25zLCB3b3JraW5nRGlyZWN0b3J5KSA9PiB7XG4gIC8qKlxuICAgKiBUaGlzIGJhYmVsIHBsdWdpbiBkb2VzIHRocmVlIHRoaW5nczpcbiAgICogLSByZW1vdmVzIHRoZSBpbXBvcnQgb2Ygc2NvcGVkQ2xhc3MsIGlmIGl0IGV4aXN0c1xuICAgKiAgIC0gaWYgc2NvcGVkQ2xhc3Mgd2FzIGltcG9ydGVkLCBpdCBpcyByZW1vdmVkIGZyb20gYW55IGNvbXBvbmVudCdzIFwic2NvcGUgYmFnXCJcbiAgICogICAgICh0aGUgc2NvcGUgYmFnIGJlaW5nIGEgbG93LWxldmVsIG9iamVjdCB1c2VkIGZvciBwYXNzaW5nIHdoYXQgaXMgXCJpbiBzY29wZVwiIGZvciBhIGNvbXBvbmVudClcbiAgICogLSBhZGRzIGFuIGltcG9ydCB0byB0aGUgQ1NTIGZpbGUsIGlmIGl0IGV4aXN0c1xuICAgKi9cbiAgcmV0dXJuIHtcbiAgICB2aXNpdG9yOiB7XG4gICAgICBQcm9ncmFtOiB7XG4gICAgICAgIGVudGVyKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgICAgaWYgKCFfaXNSZWxldmFudEZpbGUoc3RhdGUsIHdvcmtpbmdEaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICBzdGF0ZS5jYW5Ta2lwID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRlLmltcG9ydFV0aWwgPSBuZXcgSW1wb3J0VXRpbChlbnYsIHBhdGgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5jYW5Ta2lwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGgubm9kZS5zb3VyY2UudmFsdWUgPT09ICdlbWJlci1zY29wZWQtY3NzJykge1xuICAgICAgICAgIGxldCBzcGVjaWZpZXIgPSBwYXRoLm5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgICAgICAgKHgpID0+IHguaW1wb3J0ZWQubmFtZSA9PT0gJ3Njb3BlZENsYXNzJyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmllcikge1xuICAgICAgICAgICAgc3RhdGUuZmlsZS5vcHRzLmltcG9ydGVkU2NvcGVkQ2xhc3MgPSBzcGVjaWZpZXIubG9jYWwubmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3BlY2lmaWVyLmxvY2FsLm5hbWUgIT09ICdzY29wZWRDbGFzcycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRoZSBzY29wZWRDbGFzcyBpbXBvcnQgaXMgYSBwc3VlZG8taGVscGVyLCBhbmQgbWF5IG5vdCBiZSByZW5hbWVkIGFzIGl0IGlzIHJlbW92ZWQgYXQgYnVpbGQgdGltZS5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBPbmx5IGluIHN0cmljdCBtb2RlLCBkbyB3ZSBjYXJlIGFib3V0IHJlbW9uaW5nIHRoZSBzY29wZSBiYWcgcmVmZXJlbmNlXG4gICAgICAgKi9cbiAgICAgIE9iamVjdFByb3BlcnR5KHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhdGgubm9kZS52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBwYXRoLm5vZGUudmFsdWUubmFtZSA9PT0gc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzXG4gICAgICAgICkge1xuICAgICAgICAgIHBhdGgucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIElmIHRoZXJlIGlzIGEgQ1NTIGZpbGUsIEFORCBhIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUsXG4gICAgICAgKiB3ZSBjYW4gaW1wb3J0IHRoZSBDU1MgdG8gdGhlbiBkZWZlciB0byB0aGUgQ1NTIGxvYWRlclxuICAgICAgICogb3Igb3RoZXIgQ1NTIHByb2Nlc3NpbmcgdG8gaGFuZGxlIHRoZSBwb3N0Zml4aW5nXG4gICAgICAgKi9cbiAgICAgIENhbGxFeHByZXNzaW9uKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5jYW5Ta2lwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IHBhdGgubm9kZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ3ByZWNvbXBpbGVUZW1wbGF0ZScgfHxcbiAgICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAnaGJzJyB8fFxuICAgICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdjcmVhdGVUZW1wbGF0ZUZhY3RvcnknXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID1cbiAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5zb3VyY2VGaWxlTmFtZSB8fCBzdGF0ZS5maWxlLm9wdHMuZmlsZW5hbWU7XG5cbiAgICAgICAgICBsZXQgY3NzUGF0aCA9IGNzc1BhdGhGb3IoZmlsZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0c1N5bmMoY3NzUGF0aCkpIHtcbiAgICAgICAgICAgIGxldCBiYXNlQ1NTID0gbm9kZVBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG5cbiAgICAgICAgICAgIHN0YXRlLmltcG9ydFV0aWwuaW1wb3J0Rm9yU2lkZUVmZmVjdChgLi8ke2Jhc2VDU1N9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuIiwgImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IGZzU3luYywgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmltcG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuZXhwb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmV4cG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuY29uc3QgQ09NUE9ORU5UX0VYVEVOU0lPTlMgPSBbJy5ndHMnLCAnLmdqcycsICcudHMnLCAnLmpzJywgJy5oYnMnXTtcblxuLy8gQ0pTIC8gRVNNP1xubGV0IGhlcmUgPSBpbXBvcnQubWV0YS51cmw7XG5sZXQgb3VyUmVxdWlyZSA9IGdsb2JhbFRoaXMucmVxdWlyZVxuICA/IGdsb2JhbFRoaXMucmVxdWlyZVxuICA6IGhlcmUgJiYgY3JlYXRlUmVxdWlyZShoZXJlKTtcblxuaWYgKCFvdXJSZXF1aXJlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBvdXJSZXF1aXJlID0gcmVxdWlyZTtcbn1cblxuY29uc3QgRU1CUk9JREVSX0RJUiA9ICdub2RlX21vZHVsZXMvLmVtYnJvaWRlcic7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEggPSBgJHtFTUJST0lERVJfRElSfS9yZXdyaXR0ZW4tYXBwYDtcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTID0gYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9hc3NldHNgO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTID0gYCR7RU1CUk9JREVSX0RJUn0vcmV3cml0dGVuLXBhY2thZ2VzYDtcbmNvbnN0IElSUkVMRVZBTlRfUEFUSFMgPSBbJ25vZGVfbW9kdWxlcy8ucG5wbScsICdfX3ZpdGUtJ107XG5jb25zdCBVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUyA9IG5ldyBTZXQoWyd0ZXN0cyddKTtcblxuY29uc3QgQ1dEID0gcHJvY2Vzcy5jd2QoKTtcblxuLyoqXG4gKiBSZWdhcmRsZXNzIG9mIHdoYXQgdGhlIGZpbGVQYXRoIGZvcm1hdCBpcyxcbiAqIHRoaXMgd2lsbCB0cnkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHBvc3RmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaEZyb20oZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBoYXNoRnJvbUFic29sdXRlUGF0aChmaWxlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gaGFzaEZyb21Nb2R1bGVQYXRoKGZpbGVQYXRoKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzSGFzQXNzb2NpYXRlZENvbXBvbmVudChjc3NQYXRoKSB7XG4gIHJldHVybiBjc3NIYXNTdGFuZGFyZEZpbGUoY3NzUGF0aCkgfHwgY3NzSGFzUG9kc0ZpbGUoY3NzUGF0aCk7XG59XG5cbmZ1bmN0aW9uIGNzc0hhc1N0YW5kYXJkRmlsZShpZCkge1xuICAvKipcbiAgICogTm9ybWFsbHkgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhIEpTIHBhdGggaGVyZSwgYnV0IHdoZW4gdXNpbmdcbiAgICogZW1icm9pZGVyQDMsIHdlIGhhdmUgYSBcInJld3JpdHRlbiBhcHBcIiwgd2hpY2ggaGFzIGFsbCBvdXIgc291cmNlXG4gICAqIHByZXByb2Nlc3NlZCBhIGJpdCBiZWZvcmUgc2NvcGVkLWNzcyB0cmFuc2Zvcm1hdGlvbnMuXG4gICAqXG4gICAqIChJbiBWaXRlLCB3ZSBvcGVyYXRlIG1vcmUgZGlyZWN0bHkgd2l0aCB0aGUgc291cmNlKVxuICAgKi9cbiAgZm9yIChsZXQgZXh0IG9mIENPTVBPTkVOVF9FWFRFTlNJT05TKSB7XG4gICAgbGV0IGNhbmRpZGF0ZVBhdGggPSBpZC5yZXBsYWNlKC9cXC5jc3MkLywgZXh0KTtcblxuICAgIGlmIChleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc0hhc1BvZHNGaWxlKGlkKSB7XG4gIGlmICghaWQuZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxseSB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGEgSlMgcGF0aCBoZXJlLCBidXQgd2hlbiB1c2luZ1xuICAgKiBlbWJyb2lkZXJAMywgd2UgaGF2ZSBhIFwicmV3cml0dGVuIGFwcFwiLCB3aGljaCBoYXMgYWxsIG91ciBzb3VyY2VcbiAgICogcHJlcHJvY2Vzc2VkIGEgYml0IGJlZm9yZSBzY29wZWQtY3NzIHRyYW5zZm9ybWF0aW9ucy5cbiAgICpcbiAgICogKEluIFZpdGUsIHdlIG9wZXJhdGUgbW9yZSBkaXJlY3RseSB3aXRoIHRoZSBzb3VyY2UpXG4gICAqL1xuICBmb3IgKGxldCBleHQgb2YgQ09NUE9ORU5UX0VYVEVOU0lPTlMpIHtcbiAgICBsZXQgY2FuZGlkYXRlUGF0aCA9IGlkLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCBgdGVtcGxhdGUke2V4dH1gKTtcblxuICAgIGlmIChleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQmFzZWQgb24gZW1iZXIncyBjb21wb25lbnQgbG9jYXRpb24gY29udmVudGlvbnMsXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBhIHBhdGggZm9yIHdoZXJlIHdlXG4gKiBleHBlY3QgdGhlIENTUyB0byBsaXZlLlxuICpcbiAqIEZvciBjby1sb2NhdGVkIHN0cnVjdHVyZTpcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5jc3NcbiAqXG4gKiBGb3IgbmVzdGVkIGNvLWxvY2F0ZWQgc3RydWN0dXJlXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5jc3NcbiAqXG4gKiBGb3IgUG9kcyByb3V0ZXMgc3RydWN0dXJlXG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3RlbXBsYXRlLntoYnMsanN9XG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3N0eWxlcy5jc3NcbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IHN1cHBvcnRlZDpcbiAqICAgLSBjb21wb25lbnRzIHcvIHBvZHMgLS0gdGhpcyBpcyBkZXByZWNhdGVkIGluIDUuMTBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSB0aGUgaGJzLCBqcywgZ2pzLCBndHMgb3Igd2hhdGV2ZXIgY28tbG9jYXRlZCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gLSBleHBlY3RlZCBjc3MgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzUGF0aEZvcihmaWxlTmFtZSkge1xuICBsZXQgd2l0aG91dEV4dCA9IHdpdGhvdXRFeHRlbnNpb24oZmlsZU5hbWUpO1xuICBsZXQgY3NzUGF0aCA9IHdpdGhvdXRFeHQgKyAnLmNzcyc7XG5cbiAgaWYgKGlzUG9kKGZpbGVOYW1lKSkge1xuICAgIGNzc1BhdGggPSBmaWxlTmFtZVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuanMkLywgJ3N0eWxlcy5jc3MnKVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuaGJzLywgJ3N0eWxlcy5jc3MnKTtcbiAgfVxuXG4gIHJldHVybiBjc3NQYXRoO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSB8fCBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJyk7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIENoZWNrcyBpZiBhIGZpbGUgZW5kcyB3aXRoXG4gKiAtIHRlbXBsYXRlLmpzXG4gKiAtIHRlbXBsYXRlLmhic1xuICogLSBzdHlsZXMuY3NzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZChmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuLyoqXG4gKiBFeGFtcGxlcyBmb3IgZmlsZU5hbWVcbiAqIC0gYWJzb2x1dGUgb24tZGlzayBwYXRoXG4gKiAtIGluIHdlYnBhY2tcbiAqICAgLSBVUkwtYWJzb2x1dGUgcGF0aCwgc3RhcnRpbmcgd2l0aCAvXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcGFyYW0ge3sgYWRkaXRpb25hbFJvb3RzPzogc3RyaW5nW107IGN3ZDogc3RyaW5nIH19IG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGV2YW50RmlsZShmaWxlTmFtZSwgeyBhZGRpdGlvbmFsUm9vdHMsIGN3ZCB9KSB7XG4gIC8vIFByaXZhdGUgVmlydHVhbCBNb2R1bGVzXG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCdcXDAnKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBUaGVzZSBhcmUgbm90IHZhbGlkIHVzZXJsYW5kIG5hbWVzIChvciBhcmUgZnJvbSBsaWJyYXJpZXMpXG4gIGlmIChmaWxlTmFtZS5tYXRjaCgvXlthLXpBLVpdLykpIHJldHVybiBmYWxzZTtcbiAgLy8gRXh0ZXJuYWwgdG8gdXNcbiAgaWYgKGZpbGVOYW1lLnN0YXJ0c1dpdGgoJy9AZW1icm9pZGVyJykpIHJldHVybiBmYWxzZTtcbiAgaWYgKElSUkVMRVZBTlRfUEFUSFMuc29tZSgoaSkgPT4gZmlsZU5hbWUuaW5jbHVkZXMoaSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgLy8gaWYgYSBmaWxlIGlzIG5vdCB0aGUgZW1icm9pZGVyIGNhY2hlIGRpcmVjdG9yeVxuICAgIC8vIGFuZCBpcyBpbiBub2RlX21vZHVsZXMsIHNraXAgaXQuXG4gICAgaWYgKCFmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfRElSKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHJld3JpdHRlbiBwYWNrYWdlcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGF0IHRoZWlyIG93blxuICAgIC8vIHB1Ymxpc2ggdGltZVxuICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fUEFDS0FHRVMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgYXJlIGFscmVhZHkgdGhlIGJ1bmRsZWQgZmlsZXMuXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTKSkge1xuICAgICAgLy8gbm90IHN1cHBvcnRlZCwgbmV2ZXIgd2lsbCBiZVxuICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTfS90ZXN0cy5qc2ApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWRlYWxseSwgd2UgbmV2ZXIgZ2V0IGhlcmUgLS0gaW5kaWNhdGVzIHdlJ3JlIG5vdCBmaWx0ZXJpbmcgZWZmZWN0aXZlbHkgaW4gYmFiZWxcbiAgICAgIC8vIE5PVEU6IGlmIHdlIGdldCBoZXJlLCB3ZSdyZSB0cnlpbmcgdG8gb3BlcmF0ZSBvbiBhIGZpbGUgdG9vIGxhdGUuXG4gICAgICAvLyAgICAgICB3ZSBuZWVkIFNjb3BlZENTUyB0byBvcGVyYXRlIGFzIGNsb3NlIHRvIG9yaWdpbmFsIHNvdXJjZSBhcyBwb3NzaWJsZSAtLSBub3Qgb3V0cHV0IGZpbGVzLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxldCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChmaWxlTmFtZSk7XG5cbiAgYXNzZXJ0KGN3ZCwgYGN3ZCB3YXMgbm90IHBhc3NlZCB0byBpc1JlbGV2YW50RmlsZWApO1xuXG4gIGxldCBvdXJXb3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChjd2QpO1xuXG4gIGlmICh3b3Jrc3BhY2UgIT09IG91cldvcmtzcGFjZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBsb2NhbCA9IGZpbGVOYW1lLnJlcGxhY2Uod29ya3NwYWNlLCAnJyk7XG4gIGxldCBbLCAuLi5wYXJ0c10gPSBsb2NhbC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcblxuICBpZiAoVU5TVVBQT1JURURfRElSRUNUT1JJRVMuaGFzKHBhcnRzWzBdKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3N0bHkgcG9kcyBzdXBwb3J0LlxuICAgKiBmb2xrcyBuZWVkIHRvIG9wdCBpbiB0byBwb2RzIChyb3V0ZXMpLCBiZWNhdXNlIGV2ZXJ5IHBvZHMgYXBwIGNhbiBiZSBjb25maWd1cmVkIGRpZmZlcmVudGx5XG4gICAqL1xuICBsZXQgcm9vdHMgPSBbJy9jb21wb25lbnRzLycsICcvdGVtcGxhdGVzLycsIC4uLihhZGRpdGlvbmFsUm9vdHMgfHwgW10pXTtcblxuICBpZiAoIXJvb3RzLnNvbWUoKHJvb3QpID0+IGZpbGVOYW1lLmluY2x1ZGVzKHJvb3QpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVNjb3BlZFBhdGgpIHtcbiAgLyoqXG4gICAqICpCeSBjb252ZW50aW9uKiwgYHNyY2AgaXMgb21pdHRlZCBmcm9tIGNvbXBvbmVudCBwYXRocy5cbiAgICogV2UgY2FuIHJlZmxlY3QgdGhlIHNhbWUgYmVoYXZpb3IgYnkgcmVwbGFjaW5nIHNyYy9cbiAgICogd2l0aCBhbiBlbXB0eSBzdHJpbmcuXG4gICAqXG4gICAqIENTUyBpc24ndCBlbWl0dGVkIGFzIGEgY28tbG9jYXRlZCBtb2R1bGUsIGJ1dFxuICAgKiB0byBrZWVwIGNvbnZlbnRpb25zIGNvbnNpc3RlbnQgYWNyb3NzIGxhbmd1YWdlcyxcbiAgICogd2UgY2FuIHByZXRlbmQgaXQgaXMuXG4gICAqXG4gICAqIEFueSBjdXN0b21pemF0aW9uIGJleW9uZCByZW1vdmluZyBgc3JjYCBhbmQgYGFwcGAgaXMgcG90ZW50aWFsbHkgY29uZnVzaW5nLlxuICAgKiBJZiB3ZSBuZWVkIGZ1cnRoZXIgY3VzdG9taXphdGlvbnMsIHdlJ2xsIHdhbnQgdG8gbWF0Y2ggb24gYGV4cG9ydHNgIGluIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHBhY2thZ2UuanNvblxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VTY29wZWRQYXRoLnJlcGxhY2UoL15cXC9zcmNcXC8vLCAnLycpO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgaWYgKGlzUG9kKHBhY2thZ2VSZWxhdGl2ZSkpIHtcbiAgICAvKipcbiAgICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgICAqL1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IG1vZHVsZU5hbWUoc291cmNlUGF0aCk7XG5cbiAgLyoqXG4gICAqICBVbmRlciBlbWJyb2lkZXIgYnVpbGRzLCB0aGUgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgYXBwXG4gICAqIGhhcyBhbGwgdGhlIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2UgbmFtZSxcbiAgICogcmF0aGVyIHRoYW4gXCJhcHBcIi5cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBzb3VyY2VQYXRoLnJlcGxhY2Uod29ya3NwYWNlUGF0aCwgJycpO1xuXG4gIC8qKlxuICAgKiBCdXQgd2UgYWxzbyBkb24ndCB3YW50ICdhcHAnIC0tIHdoaWNoIGlzIHByZXNlbnQgaW4gdGhlIHYxIGFkZG9uIHBpcGVsaW5lXG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShgL2FwcC9gLCBgL2ApO1xuXG4gIC8qKlxuICAgKiBhbHNvIGFsc28sIHdlIGtub3cgdGhhdCB0aGUgcmUtd3JpdHRlbiBhcHAgc3RydWN0dXJlIGluIGVtYnJvaWRlckB2M1xuICAgKiBpcyBleHRyYW5lb3VzLCBhbmQgd2UgY2FuIGNvbGxhcHNlIGl0XG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShcbiAgICBgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEh9L2AsXG4gICAgJy8nLFxuICApO1xuXG4gIC8vIEFueSBvZiB0aGUgYWJvdmUgcmVscGFjZW1lbnRzIGNvdWxkIGFjY2lkZW50YWxseSBnaXZlIHVzIGFuIGV4dHJhIC8gKGRlcGVuZGluZyBvbiBvdXIgYnVpbGQgZW52aXJvbm1lbnQpXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKCcvLycsICcvJyk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG4vKipcbiAqIFRvIGF2b2lkIGhpdHRpbmcgdGhlIGZpbGVzeXNldG0sIHdlJ2xsIHN0b3JlIGFsbCBmb3VuZFxuICogcHJvamVjdCBwYXRocyBiZXJlLCBzbyB3ZSBjYW4sIGluIG1lbW9yeSxcbiAqIGdldCB0aGUgZm9sZGVyIHdoZXJlIGEgcGFja2FnZS5qc29uIGV4aXN0cywgcmF0aGVyIHRoYW5cbiAqIGhpdCB0aGUgZmlsZSBzeXN0ZW0gZXZlcnkgdGltZS5cbiAqL1xuY29uc3QgU0VFTiA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gZ2V0U2Vlbihzb3VyY2VQYXRoKSB7XG4gIGlmIChTRUVOLmhhcyhzb3VyY2VQYXRoKSkgcmV0dXJuIHNvdXJjZVBhdGg7XG5cbiAgbGV0IHBhcnRzID0gc291cmNlUGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID4gMTsgaS0tKSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7XG5cbiAgICBsZXQgc2VlbiA9IFNFRU4uaGFzKHRvQ2hlY2spO1xuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCwgb3B0aW9ucykge1xuICBsZXQgY3dkID0gb3B0aW9ucz8uY3dkID8/IENXRDtcblxuICBpZiAoc291cmNlUGF0aC5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEgpKSB7XG4gICAgc291cmNlUGF0aCA9IHNvdXJjZVBhdGguc3BsaXQoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIKVswXTtcbiAgfVxuXG4gIGlmIChzb3VyY2VQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICBzb3VyY2VQYXRoID0gc291cmNlUGF0aC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICB9XG5cbiAgbGV0IHNlZW4gPSBnZXRTZWVuKHNvdXJjZVBhdGgpO1xuXG4gIGlmIChzZWVuKSB7XG4gICAgcmV0dXJuIHNlZW47XG4gIH1cblxuICBsZXQgY2FuZGlkYXRlUGF0aCA9IHBhdGguam9pbihzb3VyY2VQYXRoLCAncGFja2FnZS5qc29uJyk7XG5cbiAgY29uc3QgaXNXb3Jrc3BhY2UgPSBmc1N5bmMuZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKTtcblxuICBpZiAoaXNXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gc291cmNlUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGZpbmRQYWNrYWdlSnNvblVwKHNvdXJjZVBhdGgsIHsgY3dkIH0pO1xuXG4gIGlmICghcGFja2FnZUpzb25QYXRoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHByb2plY3QgZm9yICR7c291cmNlUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25QYXRoKTtcblxuICBTRUVOLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuZnVuY3Rpb24gZmluZFBhY2thZ2VKc29uVXAoc3RhcnRQYXRoLCBvcHRpb25zKSB7XG4gIGxldCBjd2QgPSBvcHRpb25zPy5jd2QgPz8gQ1dEO1xuICBsZXQgcGFydHMgPSBzdGFydFBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgIGxldCB0b0NoZWNrID0gcGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpO1xuXG4gICAgbGV0IHBhY2thZ2VKc29uID0gcGF0aC5qb2luKHRvQ2hlY2ssICdwYWNrYWdlLmpzb24nKTtcbiAgICBsZXQgZXhpc3RzID0gZnNTeW5jLmV4aXN0c1N5bmMocGFja2FnZUpzb24pO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIHBhY2thZ2VKc29uO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRyYXZlcnNlIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IG9mIHRoZSBmaWxlIHN5c3RlbS5cbiAgICBpZiAodG9DaGVjayA9PT0gY3dkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogV2lsbCByZXR1cm4gdGhlIHBhY2thZ2UuanNvbiNuYW1lLCBvciBjb25maWcvZW52aXJvbm1lbnQjbW91ZGxlUHJlZml4IChpZiB2MSBhcHApXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsZU5hbWUoc291cmNlUGF0aCkge1xuICBjb25zdCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChtYW5pZmVzdFsnZW1iZXItYWRkb24nXSkge1xuICAgIC8qKlxuICAgICAqIExpYnJhcmllcyBhcmUgbm90IGFsbG93ZWQgdG8gY3VzdG9taXplIHRoZWlyIG1vZHVsZSBuYW1lXG4gICAgICogdG8gYmUgZGlmZmVyZW50IGZyb20gdGhlaXIgcGFja2FnZSBuYW1lLlxuICAgICAqXG4gICAgICogKEl0J3MgYWxzbyBib25rZXJzIHRoYXQgdGhpcyBpcyBhbGxvd2VkIGZvciB2MSBhcHBzKVxuICAgICAqL1xuICAgIHJldHVybiBtYW5pZmVzdC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciB2MSBhcHBzLCB3ZSBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgY29uZmlnL2Vudmlyb25tZW50LmpzIGZpbGVcbiAgICogdG8gc2VlIGlmIHRoZSBtb2R1bGVQcmVmaXggc2V0dGluZyBkaWZmZXJzIGZyb20gbWFuaWZlc3QubmFtZTtcbiAgICovXG4gIGxldCBlbnZpcm9ubWVudEpTID0gcGF0aC5qb2luKHdvcmtzcGFjZSwgJ2NvbmZpZy9lbnZpcm9ubWVudC5qcycpO1xuXG4gIC8qKlxuICAgKiBOT1RFOiB0aGUgZW52aXJvbm1lbnQuanMgaXMgYSBjb21tb25KUyBmaWxlLCBzbyB3ZSBjYW4gc3luY2hyb25vdXNseSByZXF1aXJlIGl0XG4gICAqXG4gICAqIFRPRE86IGlmIHdlIGhhdmUgaXNzdWVzIHdpdGggbG9hZGluZyB0aGlzIGZpbGUgbGF0ZXIgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgcnVuIGpzY29kZXNoaWZ0IG9uIGl0XG4gICAqICAgICAgIGJ1dCB0aGF0IGNvdWxkIGFsbG93IHVzIHRvIGJlIGJyaXR0bGUgaW4gZGlmZmVyZW50IHdheXMsIGxpa2UgaWYgZm9sa3Mgc3RyYXkgZnJvbSB0aGUgd2F5IHRoZVxuICAgKiAgICAgICBmaWxlIGlzIGxhaWQgb3V0IGZyb20gdGhlIGJsdWVwcmludCBkZWZhdWx0cy5cbiAgICovXG4gIGlmIChmc1N5bmMuZXhpc3RzU3luYyhlbnZpcm9ubWVudEpTKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiAtLSB0aGlzIGV4aXN0c1xuICAgIGNvbnN0IGVudkZuID0gb3VyUmVxdWlyZShlbnZpcm9ubWVudEpTKTtcbiAgICBjb25zdCBlbnYgPSBlbnZGbignZW1iZXItc2NvcGVkLWNzcycpO1xuXG4gICAgcmV0dXJuIGVudi5tb2R1bGVQcmVmaXggfHwgbWFuaWZlc3QubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWxsYmFjayB0byB0aGUgdHJ1ZVx1MjEyMiBtb2R1bGVcdTIxMjIgbmFtZS5cbiAgICovXG4gIHJldHVybiBtYW5pZmVzdC5uYW1lO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3Jrc3BhY2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWFuaWZlc3Qod29ya3NwYWNlKSB7XG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGxldCBidWZmZXIgPSBmc1N5bmMucmVhZEZpbGVTeW5jKHBhdGguam9pbih3b3Jrc3BhY2UsICdwYWNrYWdlLmpzb24nKSk7XG4gIGxldCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKCk7XG4gIGxldCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICBNQU5JRkVTVF9DQUNIRS5zZXQod29ya3NwYWNlLCBqc29uKTtcblxuICByZXR1cm4ganNvbjtcbn1cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuLyoqXG4gKiBUaGUgaW50ZW50IG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZ2VuZXJhdGUgdGhlIHN1ZmZpeC9wb3N0Zml4IGZvciB0aGVcbiAqIGNzcyBjbGFzc2VzLCBiYXNlZCBvbiB0aGUgbW9kdWxlLXNjb3BlZCBwYXRoIG5hbWUuXG4gKlxuICogZm9yIGV4YW1wbGUsXG4gKiAgICBoYXNoKCdteS1hcHAvY29tcG9uZW50cy9mb28nKVxuICogIGluc3RlYWQgb2ZcbiAqICAgIGhhc2goJ2FwcC9jb21wb25lbnRzL2ZvbycpXG4gKlxuICogICh1bmxlc3MgeW91ciBhcHAgbmFtZSBpcyAnYXBwJylcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlUGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2gobW9kdWxlUGF0aCkge1xuICByZXR1cm4gJ2UnICsgbWQ1KG1vZHVsZVBhdGgpLnN1YnN0cmluZygwLCA4KTtcbn1cblxuXG5leHBvcnQgY29uc3QgaGFzaEZyb21Nb2R1bGVQYXRoID0gaGFzaDtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkFBMkI7QUFDM0IsZ0JBQTJCO0FBQzNCLGtCQUFxQjs7O0FDRnJCLHlCQUFtQjtBQUNuQixxQkFBbUM7QUFDbkMseUJBQThCO0FBQzlCLHVCQUFpQjs7O0FDSGpCLHlCQUFnQjs7O0FEQWhCO0FBY0EsSUFBSSxPQUFPLFlBQVk7QUFDdkIsSUFBSSxhQUFhLFdBQVcsVUFDeEIsV0FBVyxVQUNYLFlBQVEsa0NBQWMsSUFBSTtBQUU5QixJQUFJLENBQUMsWUFBWTtBQUVmLGVBQWE7QUFDZjtBQUVBLElBQU0sZ0JBQWdCO0FBQ3RCLElBQU0saUNBQWlDLEdBQUcsYUFBYTtBQUN2RCxJQUFNLG1DQUFtQyxHQUFHLDhCQUE4QjtBQUMxRSxJQUFNLGlDQUFp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QUFBQSxNQUlBLGVBQWVBLE9BQU0sT0FBTztBQUMxQixZQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sb0JBQXFCO0FBRTNDLFlBQ0VBLE1BQUssS0FBSyxNQUFNLFNBQVMsZ0JBQ3pCQSxNQUFLLEtBQUssTUFBTSxTQUFTLE1BQU0sS0FBSyxNQUFNLHFCQUMxQztBQUNBLFVBQUFBLE1BQUssT0FBTztBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTUEsZUFBZUEsT0FBTSxPQUFPO0FBQzFCLFlBQUksTUFBTSxTQUFTO0FBQ2pCO0FBQUEsUUFDRjtBQUVBLGNBQU0sT0FBT0EsTUFBSztBQUVsQixZQUNFLEtBQUssT0FBTyxTQUFTLHdCQUNyQixLQUFLLE9BQU8sU0FBUyxTQUNyQixLQUFLLE9BQU8sU0FBUyx5QkFDckI7QUFDQSxnQkFBTSxXQUNKLE1BQU0sS0FBSyxLQUFLLGtCQUFrQixNQUFNLEtBQUssS0FBSztBQUVwRCxjQUFJLFVBQVUsV0FBVyxRQUFRO0FBRWpDLGtCQUFJLHNCQUFXLE9BQU8sR0FBRztBQUN2QixnQkFBSSxVQUFVLFlBQUFDLFFBQVMsU0FBUyxPQUFPO0FBRXZDLGtCQUFNLFdBQVcsb0JBQW9CLEtBQUssT0FBTyxFQUFFO0FBQUEsVUFDckQ7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbInBhdGgiLCAiYXNzZXJ0IiwgInBhdGgiLCAiZnNTeW5jIiwgInBhdGgiLCAibm9kZVBhdGgiXQp9Cg==
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2JhYmVsLXBsdWdpbi5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvdXRpbHMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IEltcG9ydFV0aWwgfSBmcm9tICdiYWJlbC1pbXBvcnQtdXRpbCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IG5vZGVQYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBjc3NQYXRoRm9yLCBpc1JlbGV2YW50RmlsZSB9IGZyb20gJy4uL2xpYi9wYXRoL3V0aWxzLmpzJztcblxuZnVuY3Rpb24gX2lzUmVsZXZhbnRGaWxlKHN0YXRlLCBjd2QpIHtcbiAgbGV0IGZpbGVOYW1lID0gc3RhdGUuZmlsZS5vcHRzLmZpbGVuYW1lO1xuICBsZXQgYWRkaXRpb25hbFJvb3RzID0gc3RhdGUub3B0cz8uYWRkaXRpb25hbFJvb3RzO1xuXG4gIHJldHVybiBpc1JlbGV2YW50RmlsZShmaWxlTmFtZSwge1xuICAgIGFkZGl0aW9uYWxSb290cyxcbiAgICBjd2QsXG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBlbnYgLSBiYWJlbCBwbHVnaW4gZW52LCBlbnYudHlwZXMgaXMgbW9zdCBjb21tb25seSB1c2VkIChlc3AgaW4gVFMpXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIHRoZSBvcHRpb25zIGZvciBzY29wZWQtY3NzIC0tIHRoaXMgaXMgYWxzbyBhdmFpbGFibGUgaW4gZWFjaCB2aXNpdG9yJ3Mgc3RhdGUub3B0c1xuICogQHBhcmFtIHtzdHJpbmd9IHdvcmtpbmdEaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgKGVudiwgb3B0aW9ucywgd29ya2luZ0RpcmVjdG9yeSkgPT4ge1xuICAvKipcbiAgICogVGhpcyBiYWJlbCBwbHVnaW4gZG9lcyB0aHJlZSB0aGluZ3M6XG4gICAqIC0gcmVtb3ZlcyB0aGUgaW1wb3J0IG9mIHNjb3BlZENsYXNzLCBpZiBpdCBleGlzdHNcbiAgICogICAtIGlmIHNjb3BlZENsYXNzIHdhcyBpbXBvcnRlZCwgaXQgaXMgcmVtb3ZlZCBmcm9tIGFueSBjb21wb25lbnQncyBcInNjb3BlIGJhZ1wiXG4gICAqICAgICAodGhlIHNjb3BlIGJhZyBiZWluZyBhIGxvdy1sZXZlbCBvYmplY3QgdXNlZCBmb3IgcGFzc2luZyB3aGF0IGlzIFwiaW4gc2NvcGVcIiBmb3IgYSBjb21wb25lbnQpXG4gICAqIC0gYWRkcyBhbiBpbXBvcnQgdG8gdGhlIENTUyBmaWxlLCBpZiBpdCBleGlzdHNcbiAgICovXG4gIHJldHVybiB7XG4gICAgdmlzaXRvcjoge1xuICAgICAgUHJvZ3JhbToge1xuICAgICAgICBlbnRlcihwYXRoLCBzdGF0ZSkge1xuICAgICAgICAgIGlmICghX2lzUmVsZXZhbnRGaWxlKHN0YXRlLCB3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgc3RhdGUuY2FuU2tpcCA9IHRydWU7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0ZS5pbXBvcnRVdGlsID0gbmV3IEltcG9ydFV0aWwoZW52LCBwYXRoKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBJbXBvcnREZWNsYXJhdGlvbihwYXRoLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUuY2FuU2tpcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoLm5vZGUuc291cmNlLnZhbHVlID09PSAnZW1iZXItc2NvcGVkLWNzcycpIHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyID0gcGF0aC5ub2RlLnNwZWNpZmllcnMuZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4LmltcG9ydGVkLm5hbWUgPT09ICdzY29wZWRDbGFzcycsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzcGVjaWZpZXIpIHtcbiAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5pbXBvcnRlZFNjb3BlZENsYXNzID0gc3BlY2lmaWVyLmxvY2FsLm5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNwZWNpZmllci5sb2NhbC5uYW1lICE9PSAnc2NvcGVkQ2xhc3MnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgc2NvcGVkQ2xhc3MgaW1wb3J0IGlzIGEgcHN1ZWRvLWhlbHBlciwgYW5kIG1heSBub3QgYmUgcmVuYW1lZCBhcyBpdCBpcyByZW1vdmVkIGF0IGJ1aWxkIHRpbWUuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogT25seSBpbiBzdHJpY3QgbW9kZSwgZG8gd2UgY2FyZSBhYm91dCByZW1vbmluZyB0aGUgc2NvcGUgYmFnIHJlZmVyZW5jZVxuICAgICAgICovXG4gICAgICBPYmplY3RQcm9wZXJ0eShwYXRoLCBzdGF0ZSkge1xuICAgICAgICBpZiAoIXN0YXRlLmZpbGUub3B0cz8uaW1wb3J0ZWRTY29wZWRDbGFzcykgcmV0dXJuO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXRoLm5vZGUudmFsdWUudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgcGF0aC5ub2RlLnZhbHVlLm5hbWUgPT09IHN0YXRlLmZpbGUub3B0cz8uaW1wb3J0ZWRTY29wZWRDbGFzc1xuICAgICAgICApIHtcbiAgICAgICAgICBwYXRoLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBJZiB0aGVyZSBpcyBhIENTUyBmaWxlLCBBTkQgYSBjb3JyZXNwb25kaW5nIHRlbXBsYXRlLFxuICAgICAgICogd2UgY2FuIGltcG9ydCB0aGUgQ1NTIHRvIHRoZW4gZGVmZXIgdG8gdGhlIENTUyBsb2FkZXJcbiAgICAgICAqIG9yIG90aGVyIENTUyBwcm9jZXNzaW5nIHRvIGhhbmRsZSB0aGUgcG9zdGZpeGluZ1xuICAgICAgICovXG4gICAgICBDYWxsRXhwcmVzc2lvbihwYXRoLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUuY2FuU2tpcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGUgPSBwYXRoLm5vZGU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdwcmVjb21waWxlVGVtcGxhdGUnIHx8XG4gICAgICAgICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ2hicycgfHxcbiAgICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAnY3JlYXRlVGVtcGxhdGVGYWN0b3J5J1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9XG4gICAgICAgICAgICBzdGF0ZS5maWxlLm9wdHMuc291cmNlRmlsZU5hbWUgfHwgc3RhdGUuZmlsZS5vcHRzLmZpbGVuYW1lO1xuXG4gICAgICAgICAgbGV0IGNzc1BhdGggPSBjc3NQYXRoRm9yKGZpbGVOYW1lKTtcblxuICAgICAgICAgIGlmIChleGlzdHNTeW5jKGNzc1BhdGgpKSB7XG4gICAgICAgICAgICBsZXQgYmFzZUNTUyA9IG5vZGVQYXRoLmJhc2VuYW1lKGNzc1BhdGgpO1xuXG4gICAgICAgICAgICBzdGF0ZS5pbXBvcnRVdGlsLmltcG9ydEZvclNpZGVFZmZlY3QoYC4vJHtiYXNlQ1NTfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufTtcbiIsICJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCBmc1N5bmMsIHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5leHBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmNvbnN0IENPTVBPTkVOVF9FWFRFTlNJT05TID0gWycuZ3RzJywgJy5nanMnLCAnLnRzJywgJy5qcycsICcuaGJzJ107XG5cbi8vIENKUyAvIEVTTT9cbmxldCBoZXJlID0gaW1wb3J0Lm1ldGEudXJsO1xubGV0IG91clJlcXVpcmUgPSBnbG9iYWxUaGlzLnJlcXVpcmVcbiAgPyBnbG9iYWxUaGlzLnJlcXVpcmVcbiAgOiBoZXJlICYmIGNyZWF0ZVJlcXVpcmUoaGVyZSk7XG5cbmlmICghb3VyUmVxdWlyZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgb3VyUmVxdWlyZSA9IHJlcXVpcmU7XG59XG5cbmNvbnN0IEVNQlJPSURFUl9ESVIgPSAnbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXInO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIID0gYCR7RU1CUk9JREVSX0RJUn0vcmV3cml0dGVuLWFwcGA7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUUyA9IGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSH0vYXNzZXRzYDtcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9QQUNLQUdFUyA9IGAke0VNQlJPSURFUl9ESVJ9L3Jld3JpdHRlbi1wYWNrYWdlc2A7XG5jb25zdCBJUlJFTEVWQU5UX1BBVEhTID0gWydub2RlX21vZHVsZXMvLnBucG0nLCAnX192aXRlLSddO1xuY29uc3QgVU5TVVBQT1JURURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsndGVzdHMnXSk7XG5cbmNvbnN0IENXRCA9IHByb2Nlc3MuY3dkKCk7XG5cbi8qKlxuICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlUGF0aCBmb3JtYXQgaXMsXG4gKiB0aGlzIHdpbGwgdHJ5IHRvIHJldHVybiB0aGUgY29ycmVjdCBwb3N0Zml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gaGFzaEZyb21BYnNvbHV0ZVBhdGgoZmlsZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGhhc2hGcm9tTW9kdWxlUGF0aChmaWxlUGF0aCk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0hhc0Fzc29jaWF0ZWRDb21wb25lbnQoY3NzUGF0aCkge1xuICByZXR1cm4gY3NzSGFzU3RhbmRhcmRGaWxlKGNzc1BhdGgpIHx8IGNzc0hhc1BvZHNGaWxlKGNzc1BhdGgpO1xufVxuXG5mdW5jdGlvbiBjc3NIYXNTdGFuZGFyZEZpbGUoaWQpIHtcbiAgLyoqXG4gICAqIE5vcm1hbGx5IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYSBKUyBwYXRoIGhlcmUsIGJ1dCB3aGVuIHVzaW5nXG4gICAqIGVtYnJvaWRlckAzLCB3ZSBoYXZlIGEgXCJyZXdyaXR0ZW4gYXBwXCIsIHdoaWNoIGhhcyBhbGwgb3VyIHNvdXJjZVxuICAgKiBwcmVwcm9jZXNzZWQgYSBiaXQgYmVmb3JlIHNjb3BlZC1jc3MgdHJhbnNmb3JtYXRpb25zLlxuICAgKlxuICAgKiAoSW4gVml0ZSwgd2Ugb3BlcmF0ZSBtb3JlIGRpcmVjdGx5IHdpdGggdGhlIHNvdXJjZSlcbiAgICovXG4gIGZvciAobGV0IGV4dCBvZiBDT01QT05FTlRfRVhURU5TSU9OUykge1xuICAgIGxldCBjYW5kaWRhdGVQYXRoID0gaWQucmVwbGFjZSgvXFwuY3NzJC8sIGV4dCk7XG5cbiAgICBpZiAoZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NIYXNQb2RzRmlsZShpZCkge1xuICBpZiAoIWlkLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsbHkgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhIEpTIHBhdGggaGVyZSwgYnV0IHdoZW4gdXNpbmdcbiAgICogZW1icm9pZGVyQDMsIHdlIGhhdmUgYSBcInJld3JpdHRlbiBhcHBcIiwgd2hpY2ggaGFzIGFsbCBvdXIgc291cmNlXG4gICAqIHByZXByb2Nlc3NlZCBhIGJpdCBiZWZvcmUgc2NvcGVkLWNzcyB0cmFuc2Zvcm1hdGlvbnMuXG4gICAqXG4gICAqIChJbiBWaXRlLCB3ZSBvcGVyYXRlIG1vcmUgZGlyZWN0bHkgd2l0aCB0aGUgc291cmNlKVxuICAgKi9cbiAgZm9yIChsZXQgZXh0IG9mIENPTVBPTkVOVF9FWFRFTlNJT05TKSB7XG4gICAgbGV0IGNhbmRpZGF0ZVBhdGggPSBpZC5yZXBsYWNlKC9zdHlsZXNcXC5jc3MkLywgYHRlbXBsYXRlJHtleHR9YCk7XG5cbiAgICBpZiAoZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEJhc2VkIG9uIGVtYmVyJ3MgY29tcG9uZW50IGxvY2F0aW9uIGNvbnZlbnRpb25zLFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgYSBwYXRoIGZvciB3aGVyZSB3ZVxuICogZXhwZWN0IHRoZSBDU1MgdG8gbGl2ZS5cbiAqXG4gKiBGb3IgY28tbG9jYXRlZCBzdHJ1Y3R1cmU6XG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQuaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQuY3NzXG4gKlxuICogRm9yIG5lc3RlZCBjby1sb2NhdGVkIHN0cnVjdHVyZVxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uY3NzXG4gKlxuICogRm9yIFBvZHMgcm91dGVzIHN0cnVjdHVyZVxuICogICAtIHJvdXRlcy9teS1yb3V0ZS90ZW1wbGF0ZS57aGJzLGpzfVxuICogICAtIHJvdXRlcy9teS1yb3V0ZS9zdHlsZXMuY3NzXG4gKlxuICogRGVsaWJlcmF0ZWx5IG5vdCBzdXBwb3J0ZWQ6XG4gKiAgIC0gY29tcG9uZW50cyB3LyBwb2RzIC0tIHRoaXMgaXMgZGVwcmVjYXRlZCBpbiA1LjEwXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lIC0gdGhlIGhicywganMsIGdqcywgZ3RzIG9yIHdoYXRldmVyIGNvLWxvY2F0ZWQgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gZXhwZWN0ZWQgY3NzIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc1BhdGhGb3IoZmlsZU5hbWUpIHtcbiAgbGV0IHdpdGhvdXRFeHQgPSB3aXRob3V0RXh0ZW5zaW9uKGZpbGVOYW1lKTtcbiAgbGV0IGNzc1BhdGggPSB3aXRob3V0RXh0ICsgJy5jc3MnO1xuXG4gIGlmIChpc1BvZChmaWxlTmFtZSkpIHtcbiAgICBjc3NQYXRoID0gZmlsZU5hbWVcbiAgICAgIC5yZXBsYWNlKC90ZW1wbGF0ZVxcLmpzJC8sICdzdHlsZXMuY3NzJylcbiAgICAgIC5yZXBsYWNlKC90ZW1wbGF0ZVxcLmhicy8sICdzdHlsZXMuY3NzJyk7XG4gIH1cblxuICByZXR1cm4gY3NzUGF0aDtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZFRlbXBsYXRlKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykgfHwgZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmhicycpO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGVuZHMgd2l0aFxuICogLSB0ZW1wbGF0ZS5qc1xuICogLSB0ZW1wbGF0ZS5oYnNcbiAqIC0gc3R5bGVzLmNzc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2QoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc1BvZFRlbXBsYXRlKGZpbGVQYXRoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVQYXRoLmVuZHNXaXRoKCdzdHlsZXMuY3NzJyk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnMgdGhlIHNhbWUgcGF0aCwgYnV0IHdpdGhvdXQgdGhlIGV4dGVuc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aG91dEV4dGVuc2lvbihmaWxlUGF0aCkge1xuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShmaWxlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG59XG5cbi8qKlxuICogRXhhbXBsZXMgZm9yIGZpbGVOYW1lXG4gKiAtIGFic29sdXRlIG9uLWRpc2sgcGF0aFxuICogLSBpbiB3ZWJwYWNrXG4gKiAgIC0gVVJMLWFic29sdXRlIHBhdGgsIHN0YXJ0aW5nIHdpdGggL1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHBhcmFtIHt7IGFkZGl0aW9uYWxSb290cz86IHN0cmluZ1tdOyBjd2Q6IHN0cmluZyB9fSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWxldmFudEZpbGUoZmlsZU5hbWUsIHsgYWRkaXRpb25hbFJvb3RzLCBjd2QgfSkge1xuICAvLyBQcml2YXRlIFZpcnR1YWwgTW9kdWxlc1xuICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnXFwwJykpIHJldHVybiBmYWxzZTtcbiAgLy8gVGhlc2UgYXJlIG5vdCB2YWxpZCB1c2VybGFuZCBuYW1lcyAob3IgYXJlIGZyb20gbGlicmFyaWVzKVxuICBpZiAoZmlsZU5hbWUubWF0Y2goL15bYS16QS1aXS8pKSByZXR1cm4gZmFsc2U7XG4gIC8vIEV4dGVybmFsIHRvIHVzXG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCcvQGVtYnJvaWRlcicpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChJUlJFTEVWQU5UX1BBVEhTLnNvbWUoKGkpID0+IGZpbGVOYW1lLmluY2x1ZGVzKGkpKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChmaWxlTmFtZS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgIC8vIGlmIGEgZmlsZSBpcyBub3QgdGhlIGVtYnJvaWRlciBjYWNoZSBkaXJlY3RvcnlcbiAgICAvLyBhbmQgaXMgaW4gbm9kZV9tb2R1bGVzLCBza2lwIGl0LlxuICAgIGlmICghZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSX0RJUikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZXdyaXR0ZW4gcGFja2FnZXMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBhdCB0aGVpciBvd25cbiAgICAvLyBwdWJsaXNoIHRpbWVcbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoZXNlIGFyZSBhbHJlYWR5IHRoZSBidW5kbGVkIGZpbGVzLlxuICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUUykpIHtcbiAgICAgIC8vIG5vdCBzdXBwb3J0ZWQsIG5ldmVyIHdpbGwgYmVcbiAgICAgIGlmIChmaWxlTmFtZS5lbmRzV2l0aChgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUU30vdGVzdHMuanNgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZWFsbHksIHdlIG5ldmVyIGdldCBoZXJlIC0tIGluZGljYXRlcyB3ZSdyZSBub3QgZmlsdGVyaW5nIGVmZmVjdGl2ZWx5IGluIGJhYmVsXG4gICAgICAvLyBOT1RFOiBpZiB3ZSBnZXQgaGVyZSwgd2UncmUgdHJ5aW5nIHRvIG9wZXJhdGUgb24gYSBmaWxlIHRvbyBsYXRlLlxuICAgICAgLy8gICAgICAgd2UgbmVlZCBTY29wZWRDU1MgdG8gb3BlcmF0ZSBhcyBjbG9zZSB0byBvcmlnaW5hbCBzb3VyY2UgYXMgcG9zc2libGUgLS0gbm90IG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuXG4gIGFzc2VydChjd2QsIGBjd2Qgd2FzIG5vdCBwYXNzZWQgdG8gaXNSZWxldmFudEZpbGVgKTtcblxuICBsZXQgb3VyV29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoY3dkKTtcblxuICBpZiAod29ya3NwYWNlICE9PSBvdXJXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbG9jYWwgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICBsZXQgWywgLi4ucGFydHNdID0gbG9jYWwuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTLmhhcyhwYXJ0c1swXSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTW9zdGx5IHBvZHMgc3VwcG9ydC5cbiAgICogZm9sa3MgbmVlZCB0byBvcHQgaW4gdG8gcG9kcyAocm91dGVzKSwgYmVjYXVzZSBldmVyeSBwb2RzIGFwcCBjYW4gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseVxuICAgKi9cbiAgbGV0IHJvb3RzID0gWycvY29tcG9uZW50cy8nLCAnL3RlbXBsYXRlcy8nLCAuLi4oYWRkaXRpb25hbFJvb3RzIHx8IFtdKV07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKC9eXFwvc3JjXFwvLywgJy8nKTtcblxuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIGlmIChpc1BvZChwYWNrYWdlUmVsYXRpdmUpKSB7XG4gICAgLyoqXG4gICAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICAgKi9cbiAgICByZXR1cm4gcGFyc2VkLmRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhbiBleHRlbnNpb24gaXMgcGFzc2VkLCByZW1vdmUgaXQuXG4gICAqIFdoZW4gdXNpbmcgcGFja2FnZXJzLCBmb2xrcyBhcmUgdXNlZCB0byBub3QgaGF2aW5nIHRvIHNwZWNpZnkgZXh0ZW5zaW9ucyBmb3IgZmlsZXMuXG4gICAqIFNpbmNlIHdlIGRvbid0IGV2ZW4gZW1pdCBjc3MgZmlsZXMgY28tbG9jYXRlZCB0byBlYWNoIG1vZHVsZSxcbiAgICogdGhpcyBoZWxwcyB1cyBub3QgY29udmV5IGEgbGllIHRoYXQgYSBmaWxlIG1heSBleGlzdCBpbiBhdCBydW50aW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSBgPG1vZHVsZS1uYW1lPi9jb21wb25lbnRzL2J1dHRvbmAuXG4gICAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGV4dGVuc2lvbiBpcywgYmVjYXVzZSB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgY3NzIGZpbGVcbiAgICogZm9yIHRoZSBidXR0b24gbW9kdWxlIGFueXdheS5cbiAgICovXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcblxuICByZXR1cm4gbG9jYWxQYWNrYWdlclN0eWxlUGF0aDtcbn1cblxuLyoqXG4gKiByZXR1cm5zIHRoZSBhcHAtbW9kdWxlIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlXG4gKlxuICogVGhpcyBhc3N1bWVzIG5vcm1hbCBlbWJlciBhcHAgY29udmVudGlvbnNcbiAqXG4gKiB3aGljaCBpcyBgPHBhY2thZ2UuanNvbiNuYW1lPi9wYXRoLXRvLWZpbGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSBtb2R1bGVOYW1lKHNvdXJjZVBhdGgpO1xuXG4gIC8qKlxuICAgKiAgVW5kZXIgZW1icm9pZGVyIGJ1aWxkcywgdGhlIHNwZWMtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGFwcFxuICAgKiBoYXMgYWxsIHRoZSBmaWxlcyB1bmRlciBhIGZvbGRlciB3aGljaCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIG5hbWUsXG4gICAqIHJhdGhlciB0aGFuIFwiYXBwXCIuXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gc291cmNlUGF0aC5yZXBsYWNlKHdvcmtzcGFjZVBhdGgsICcnKTtcblxuICAvKipcbiAgICogQnV0IHdlIGFsc28gZG9uJ3Qgd2FudCAnYXBwJyAtLSB3aGljaCBpcyBwcmVzZW50IGluIHRoZSB2MSBhZGRvbiBwaXBlbGluZVxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoYC9hcHAvYCwgYC9gKTtcblxuICAvKipcbiAgICogYWxzbyBhbHNvLCB3ZSBrbm93IHRoYXQgdGhlIHJlLXdyaXR0ZW4gYXBwIHN0cnVjdHVyZSBpbiBlbWJyb2lkZXJAdjNcbiAgICogaXMgZXh0cmFuZW91cywgYW5kIHdlIGNhbiBjb2xsYXBzZSBpdFxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoXG4gICAgYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9gLFxuICAgICcvJyxcbiAgKTtcblxuICAvLyBBbnkgb2YgdGhlIGFib3ZlIHJlbHBhY2VtZW50cyBjb3VsZCBhY2NpZGVudGFsbHkgZ2l2ZSB1cyBhbiBleHRyYSAvIChkZXBlbmRpbmcgb24gb3VyIGJ1aWxkIGVudmlyb25tZW50KVxuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZSgnLy8nLCAnLycpO1xuXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVJlbGF0aXZlKTtcblxuICByZXR1cm4gYCR7bmFtZX0ke2xvY2FsUGFja2FnZXJTdHlsZVBhdGh9YDtcbn1cblxuLyoqXG4gKiBUbyBhdm9pZCBoaXR0aW5nIHRoZSBmaWxlc3lzZXRtLCB3ZSdsbCBzdG9yZSBhbGwgZm91bmRcbiAqIHByb2plY3QgcGF0aHMgYmVyZSwgc28gd2UgY2FuLCBpbiBtZW1vcnksXG4gKiBnZXQgdGhlIGZvbGRlciB3aGVyZSBhIHBhY2thZ2UuanNvbiBleGlzdHMsIHJhdGhlciB0aGFuXG4gKiBoaXQgdGhlIGZpbGUgc3lzdGVtIGV2ZXJ5IHRpbWUuXG4gKi9cbmNvbnN0IFNFRU4gPSBuZXcgU2V0KCk7XG5cbmZ1bmN0aW9uIGdldFNlZW4oc291cmNlUGF0aCkge1xuICBpZiAoU0VFTi5oYXMoc291cmNlUGF0aCkpIHJldHVybiBzb3VyY2VQYXRoO1xuXG4gIGxldCBwYXJ0cyA9IHNvdXJjZVBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgIGxldCB0b0NoZWNrID0gcGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpO1xuXG4gICAgbGV0IHNlZW4gPSBTRUVOLmhhcyh0b0NoZWNrKTtcblxuICAgIGlmIChzZWVuKSB7XG4gICAgICByZXR1cm4gdG9DaGVjaztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG5cbiAgaWYgKHNvdXJjZVBhdGguaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIKSkge1xuICAgIHNvdXJjZVBhdGggPSBzb3VyY2VQYXRoLnNwbGl0KEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSClbMF07XG4gIH1cblxuICBpZiAoc291cmNlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgc291cmNlUGF0aCA9IHNvdXJjZVBhdGgucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgfVxuXG4gIGxldCBzZWVuID0gZ2V0U2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZVBhdGggPSBwYXRoLmpvaW4oc291cmNlUGF0aCwgJ3BhY2thZ2UuanNvbicpO1xuXG4gIGNvbnN0IGlzV29ya3NwYWNlID0gZnNTeW5jLmV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCk7XG5cbiAgaWYgKGlzV29ya3NwYWNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZVBhdGg7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBmaW5kUGFja2FnZUpzb25VcChzb3VyY2VQYXRoLCB7IGN3ZCB9KTtcblxuICBpZiAoIXBhY2thZ2VKc29uUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSBwcm9qZWN0IGZvciAke3NvdXJjZVBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCk7XG5cbiAgU0VFTi5hZGQod29ya3NwYWNlUGF0aCk7XG5cbiAgcmV0dXJuIHdvcmtzcGFjZVBhdGg7XG59XG5cbmZ1bmN0aW9uIGZpbmRQYWNrYWdlSnNvblVwKHN0YXJ0UGF0aCwgb3B0aW9ucykge1xuICBsZXQgY3dkID0gb3B0aW9ucz8uY3dkID8/IENXRDtcbiAgbGV0IHBhcnRzID0gc3RhcnRQYXRoLnNwbGl0KCcvJyk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcblxuICAgIGxldCBwYWNrYWdlSnNvbiA9IHBhdGguam9pbih0b0NoZWNrLCAncGFja2FnZS5qc29uJyk7XG4gICAgbGV0IGV4aXN0cyA9IGZzU3luYy5leGlzdHNTeW5jKHBhY2thZ2VKc29uKTtcblxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHJldHVybiBwYWNrYWdlSnNvbjtcbiAgICB9XG5cbiAgICAvLyBEb24ndCB0cmF2ZXJzZSBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCBvZiB0aGUgZmlsZSBzeXN0ZW0uXG4gICAgaWYgKHRvQ2hlY2sgPT09IGN3ZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IE1BTklGRVNUX0NBQ0hFID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIHRoZSBwYWNrYWdlLmpzb24jbmFtZSwgb3IgY29uZmlnL2Vudmlyb25tZW50I21vdWRsZVByZWZpeCAoaWYgdjEgYXBwKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2R1bGVOYW1lKHNvdXJjZVBhdGgpIHtcbiAgY29uc3Qgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gZ2V0TWFuaWZlc3Qod29ya3NwYWNlKTtcblxuICBpZiAobWFuaWZlc3RbJ2VtYmVyLWFkZG9uJ10pIHtcbiAgICAvKipcbiAgICAgKiBMaWJyYXJpZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGN1c3RvbWl6ZSB0aGVpciBtb2R1bGUgbmFtZVxuICAgICAqIHRvIGJlIGRpZmZlcmVudCBmcm9tIHRoZWlyIHBhY2thZ2UgbmFtZS5cbiAgICAgKlxuICAgICAqIChJdCdzIGFsc28gYm9ua2VycyB0aGF0IHRoaXMgaXMgYWxsb3dlZCBmb3IgdjEgYXBwcylcbiAgICAgKi9cbiAgICByZXR1cm4gbWFuaWZlc3QubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgdjEgYXBwcywgd2UgbmVlZCB0byByZWZlcmVuY2UgdGhlIGNvbmZpZy9lbnZpcm9ubWVudC5qcyBmaWxlXG4gICAqIHRvIHNlZSBpZiB0aGUgbW9kdWxlUHJlZml4IHNldHRpbmcgZGlmZmVycyBmcm9tIG1hbmlmZXN0Lm5hbWU7XG4gICAqL1xuICBsZXQgZW52aXJvbm1lbnRKUyA9IHBhdGguam9pbih3b3Jrc3BhY2UsICdjb25maWcvZW52aXJvbm1lbnQuanMnKTtcblxuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50LmpzIGlzIGEgY29tbW9uSlMgZmlsZSwgc28gd2UgY2FuIHN5bmNocm9ub3VzbHkgcmVxdWlyZSBpdFxuICAgKlxuICAgKiBUT0RPOiBpZiB3ZSBoYXZlIGlzc3VlcyB3aXRoIGxvYWRpbmcgdGhpcyBmaWxlIGxhdGVyIHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IHJ1biBqc2NvZGVzaGlmdCBvbiBpdFxuICAgKiAgICAgICBidXQgdGhhdCBjb3VsZCBhbGxvdyB1cyB0byBiZSBicml0dGxlIGluIGRpZmZlcmVudCB3YXlzLCBsaWtlIGlmIGZvbGtzIHN0cmF5IGZyb20gdGhlIHdheSB0aGVcbiAgICogICAgICAgZmlsZSBpcyBsYWlkIG91dCBmcm9tIHRoZSBibHVlcHJpbnQgZGVmYXVsdHMuXG4gICAqL1xuICBpZiAoZnNTeW5jLmV4aXN0c1N5bmMoZW52aXJvbm1lbnRKUykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYgLS0gdGhpcyBleGlzdHNcbiAgICBjb25zdCBlbnZGbiA9IG91clJlcXVpcmUoZW52aXJvbm1lbnRKUyk7XG4gICAgY29uc3QgZW52ID0gZW52Rm4oJ2VtYmVyLXNjb3BlZC1jc3MnKTtcblxuICAgIHJldHVybiBlbnYubW9kdWxlUHJlZml4IHx8IG1hbmlmZXN0Lm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRmFsbGJhY2sgdG8gdGhlIHRydWVcdTIxMjIgbW9kdWxlXHUyMTIyIG5hbWUuXG4gICAqL1xuICByZXR1cm4gbWFuaWZlc3QubmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29ya3NwYWNlXG4gKi9cbmZ1bmN0aW9uIGdldE1hbmlmZXN0KHdvcmtzcGFjZSkge1xuICBsZXQgZXhpc3RpbmcgPSBNQU5JRkVTVF9DQUNIRS5nZXQod29ya3NwYWNlKTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cblxuICBsZXQgYnVmZmVyID0gZnNTeW5jLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya3NwYWNlLCAncGFja2FnZS5qc29uJykpO1xuICBsZXQgY29udGVudCA9IGJ1ZmZlci50b1N0cmluZygpO1xuICBsZXQganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cbiAgTUFOSUZFU1RfQ0FDSEUuc2V0KHdvcmtzcGFjZSwganNvbik7XG5cbiAgcmV0dXJuIGpzb247XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFB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
|