@beforeyoubid/logger-adapter 1.0.12 → 2.0.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/README.md +55 -127
- package/dist/console/logWrapper.d.ts +4 -0
- package/dist/index.d.ts +2 -1
- package/dist/logger/index.d.ts +1 -1
- package/dist/logger/logdnaClient.d.ts +19 -0
- package/dist/logger/logger.d.ts +12 -2
- package/dist/logger/util.d.ts +11 -0
- package/dist/params.d.ts +1 -1
- package/dist/src/__tests__/params.spec.js +84 -0
- package/dist/src/console/__tests__/consoleLogger.spec.js +18 -0
- package/dist/src/console/index.js +44 -0
- package/dist/src/console/logWrapper.js +99 -0
- package/dist/{consts.js → src/consts.js} +1 -1
- package/dist/src/index.js +40 -0
- package/dist/src/logger/__tests__/index.spec.js +24 -0
- package/dist/src/logger/__tests__/logger.spec.js +139 -0
- package/dist/src/logger/__tests__/util.spec.js +81 -0
- package/dist/src/logger/index.js +17 -0
- package/dist/src/logger/logdnaClient.js +47 -0
- package/dist/src/logger/logger.js +61 -0
- package/dist/src/logger/util.js +57 -0
- package/dist/src/params.js +66 -0
- package/dist/src/transports/logdnaWinston.js +267 -0
- package/dist/src/util.js +328 -0
- package/dist/transports/logdnaWinston.d.ts +28 -0
- package/dist/types.d.ts +1 -1
- package/dist/util.d.ts +1 -0
- package/package.json +10 -10
- package/dist/console/index.js +0 -37
- package/dist/console/logger.d.ts +0 -4
- package/dist/console/logger.js +0 -108
- package/dist/index.js +0 -36
- package/dist/logger/index.js +0 -16
- package/dist/logger/logger.js +0 -51
- package/dist/params.js +0 -60
- package/dist/util.js +0 -291
- /package/dist/{types.js → src/types.js} +0 -0
package/dist/util.js
DELETED
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: all[name]
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
isLogDNAEnabled: function() {
|
|
13
|
-
return isLogDNAEnabled;
|
|
14
|
-
},
|
|
15
|
-
flushAll: function() {
|
|
16
|
-
return flushAll;
|
|
17
|
-
},
|
|
18
|
-
ensureFlushAll: function() {
|
|
19
|
-
return ensureFlushAll;
|
|
20
|
-
},
|
|
21
|
-
ensureFlushAllCallback: function() {
|
|
22
|
-
return ensureFlushAllCallback;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
26
|
-
try {
|
|
27
|
-
var info = gen[key](arg);
|
|
28
|
-
var value = info.value;
|
|
29
|
-
} catch (error) {
|
|
30
|
-
reject(error);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (info.done) {
|
|
34
|
-
resolve(value);
|
|
35
|
-
} else {
|
|
36
|
-
Promise.resolve(value).then(_next, _throw);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function _asyncToGenerator(fn) {
|
|
40
|
-
return function() {
|
|
41
|
-
var self = this, args = arguments;
|
|
42
|
-
return new Promise(function(resolve, reject) {
|
|
43
|
-
var gen = fn.apply(self, args);
|
|
44
|
-
function _next(value) {
|
|
45
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
46
|
-
}
|
|
47
|
-
function _throw(err) {
|
|
48
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
49
|
-
}
|
|
50
|
-
_next(undefined);
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
var __generator = (void 0) && (void 0).__generator || function(thisArg, body) {
|
|
55
|
-
var f, y, t, g, _ = {
|
|
56
|
-
label: 0,
|
|
57
|
-
sent: function() {
|
|
58
|
-
if (t[0] & 1) throw t[1];
|
|
59
|
-
return t[1];
|
|
60
|
-
},
|
|
61
|
-
trys: [],
|
|
62
|
-
ops: []
|
|
63
|
-
};
|
|
64
|
-
return(g = {
|
|
65
|
-
next: verb(0),
|
|
66
|
-
"throw": verb(1),
|
|
67
|
-
"return": verb(2)
|
|
68
|
-
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
69
|
-
return this;
|
|
70
|
-
}), g);
|
|
71
|
-
function verb(n) {
|
|
72
|
-
return function(v) {
|
|
73
|
-
return step([
|
|
74
|
-
n,
|
|
75
|
-
v
|
|
76
|
-
]);
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
function step(op) {
|
|
80
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
81
|
-
while(_)try {
|
|
82
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
83
|
-
if (y = 0, t) op = [
|
|
84
|
-
op[0] & 2,
|
|
85
|
-
t.value
|
|
86
|
-
];
|
|
87
|
-
switch(op[0]){
|
|
88
|
-
case 0:
|
|
89
|
-
case 1:
|
|
90
|
-
t = op;
|
|
91
|
-
break;
|
|
92
|
-
case 4:
|
|
93
|
-
_.label++;
|
|
94
|
-
return {
|
|
95
|
-
value: op[1],
|
|
96
|
-
done: false
|
|
97
|
-
};
|
|
98
|
-
case 5:
|
|
99
|
-
_.label++;
|
|
100
|
-
y = op[1];
|
|
101
|
-
op = [
|
|
102
|
-
0
|
|
103
|
-
];
|
|
104
|
-
continue;
|
|
105
|
-
case 7:
|
|
106
|
-
op = _.ops.pop();
|
|
107
|
-
_.trys.pop();
|
|
108
|
-
continue;
|
|
109
|
-
default:
|
|
110
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
111
|
-
_ = 0;
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
115
|
-
_.label = op[1];
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
if (op[0] === 6 && _.label < t[1]) {
|
|
119
|
-
_.label = t[1];
|
|
120
|
-
t = op;
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
if (t && _.label < t[2]) {
|
|
124
|
-
_.label = t[2];
|
|
125
|
-
_.ops.push(op);
|
|
126
|
-
break;
|
|
127
|
-
}
|
|
128
|
-
if (t[2]) _.ops.pop();
|
|
129
|
-
_.trys.pop();
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
op = body.call(thisArg, _);
|
|
133
|
-
} catch (e) {
|
|
134
|
-
op = [
|
|
135
|
-
6,
|
|
136
|
-
e
|
|
137
|
-
];
|
|
138
|
-
y = 0;
|
|
139
|
-
} finally{
|
|
140
|
-
f = t = 0;
|
|
141
|
-
}
|
|
142
|
-
if (op[0] & 5) throw op[1];
|
|
143
|
-
return {
|
|
144
|
-
value: op[0] ? op[1] : void 0,
|
|
145
|
-
done: true
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
var LogDNALogger = require("logdna");
|
|
150
|
-
var debug = require("util").debuglog("logger-adapter");
|
|
151
|
-
var FALLBACK_TIMEOUT_AFTER_FLUSHING = require("./consts").FALLBACK_TIMEOUT_AFTER_FLUSHING;
|
|
152
|
-
var getLogParams = require("./params").getLogParams;
|
|
153
|
-
// timeout
|
|
154
|
-
var timeout;
|
|
155
|
-
/**
|
|
156
|
-
* Handy function to check if we are sending to LogDNA
|
|
157
|
-
* @param logDNAKey
|
|
158
|
-
* @param sendToRemote
|
|
159
|
-
*/ var isLogDNAEnabled = function(logDNAKey, sendToRemote) {
|
|
160
|
-
return !!logDNAKey && sendToRemote;
|
|
161
|
-
};
|
|
162
|
-
/**
|
|
163
|
-
* REturn if we need to suppress flushAll on a local machine
|
|
164
|
-
*/ var suppressFlushAll = function() {
|
|
165
|
-
var _getLogParams;
|
|
166
|
-
return ((_getLogParams = getLogParams()) === null || _getLogParams === void 0 ? void 0 : _getLogParams.logDNASuppressFlushAll) || false;
|
|
167
|
-
};
|
|
168
|
-
/**
|
|
169
|
-
* Send all log messages to LogDNA before lambda is terminated
|
|
170
|
-
*/ var flushAll = function() {
|
|
171
|
-
var _ref = _asyncToGenerator(function() {
|
|
172
|
-
return __generator(this, function(_state) {
|
|
173
|
-
return [
|
|
174
|
-
2,
|
|
175
|
-
new Promise(function(resolve) {
|
|
176
|
-
debug("Flushing all logs...");
|
|
177
|
-
LogDNALogger.flushAll(function() {
|
|
178
|
-
debug("Completed flushing all log messages");
|
|
179
|
-
if (timeout) {
|
|
180
|
-
clearTimeout(timeout);
|
|
181
|
-
}
|
|
182
|
-
resolve();
|
|
183
|
-
});
|
|
184
|
-
})
|
|
185
|
-
];
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
return function flushAll() {
|
|
189
|
-
return _ref.apply(this, arguments);
|
|
190
|
-
};
|
|
191
|
-
}();
|
|
192
|
-
/**
|
|
193
|
-
* Fallback promise just in
|
|
194
|
-
*/ var timeoutPromise = function() {
|
|
195
|
-
return new Promise(function(resolve) {
|
|
196
|
-
timeout = setTimeout(function() {
|
|
197
|
-
debug("Flushing timeout has reached. Ignore flushing messages...");
|
|
198
|
-
resolve();
|
|
199
|
-
}, FALLBACK_TIMEOUT_AFTER_FLUSHING);
|
|
200
|
-
});
|
|
201
|
-
};
|
|
202
|
-
/**
|
|
203
|
-
* Lambda wrapper to ensure we flush messages before returning the response
|
|
204
|
-
* @param lambdaHandler
|
|
205
|
-
*/ var ensureFlushAll = function(lambdaHandler) {
|
|
206
|
-
return function() {
|
|
207
|
-
var _ref = _asyncToGenerator(function(event, context) {
|
|
208
|
-
var result, e;
|
|
209
|
-
return __generator(this, function(_state) {
|
|
210
|
-
switch(_state.label){
|
|
211
|
-
case 0:
|
|
212
|
-
_state.trys.push([
|
|
213
|
-
0,
|
|
214
|
-
4,
|
|
215
|
-
,
|
|
216
|
-
7
|
|
217
|
-
]);
|
|
218
|
-
return [
|
|
219
|
-
4,
|
|
220
|
-
lambdaHandler(event, context)
|
|
221
|
-
];
|
|
222
|
-
case 1:
|
|
223
|
-
result = _state.sent();
|
|
224
|
-
if (!!suppressFlushAll()) return [
|
|
225
|
-
3,
|
|
226
|
-
3
|
|
227
|
-
];
|
|
228
|
-
return [
|
|
229
|
-
4,
|
|
230
|
-
Promise.race([
|
|
231
|
-
flushAll(),
|
|
232
|
-
timeoutPromise()
|
|
233
|
-
])
|
|
234
|
-
];
|
|
235
|
-
case 2:
|
|
236
|
-
_state.sent();
|
|
237
|
-
_state.label = 3;
|
|
238
|
-
case 3:
|
|
239
|
-
return [
|
|
240
|
-
2,
|
|
241
|
-
result
|
|
242
|
-
];
|
|
243
|
-
case 4:
|
|
244
|
-
e = _state.sent();
|
|
245
|
-
if (!!suppressFlushAll()) return [
|
|
246
|
-
3,
|
|
247
|
-
6
|
|
248
|
-
];
|
|
249
|
-
return [
|
|
250
|
-
4,
|
|
251
|
-
Promise.race([
|
|
252
|
-
flushAll(),
|
|
253
|
-
timeoutPromise()
|
|
254
|
-
])
|
|
255
|
-
];
|
|
256
|
-
case 5:
|
|
257
|
-
_state.sent();
|
|
258
|
-
_state.label = 6;
|
|
259
|
-
case 6:
|
|
260
|
-
throw e;
|
|
261
|
-
case 7:
|
|
262
|
-
return [
|
|
263
|
-
2
|
|
264
|
-
];
|
|
265
|
-
}
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
return function(event, context) {
|
|
269
|
-
return _ref.apply(this, arguments);
|
|
270
|
-
};
|
|
271
|
-
}();
|
|
272
|
-
};
|
|
273
|
-
/**
|
|
274
|
-
* A Lambda wrapper to ensure we flush messages before a Lambda function get terminated
|
|
275
|
-
* NOTE: For non-async handlers, AWS Lambda will wait until the event loop is completed.
|
|
276
|
-
* This means after a callback function is called, a Lambda function still run
|
|
277
|
-
* and we can catch the final clean up.
|
|
278
|
-
* REF: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html
|
|
279
|
-
*
|
|
280
|
-
* @param lambdaHandler
|
|
281
|
-
*/ var ensureFlushAllCallback = function(lambdaHandler) {
|
|
282
|
-
return function(event, context, callback) {
|
|
283
|
-
var thisCallback = function(error, result) {
|
|
284
|
-
callback(error, result);
|
|
285
|
-
if (!suppressFlushAll()) flushAll();
|
|
286
|
-
};
|
|
287
|
-
lambdaHandler(event, context, thisCallback);
|
|
288
|
-
};
|
|
289
|
-
};
|
|
290
|
-
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExhbWJkYUhhbmRsZXJXaXRoQXN5bmNGdW5jdGlvbiwgTGFtYmRhSGFuZGxlcldpdGhDYWxsYmFja0Z1bmN0aW9uLCBDYWxsYmFja0Z1bmN0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IExvZ0ROQUxvZ2dlciA9IHJlcXVpcmUoJ2xvZ2RuYScpO1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCd1dGlsJykuZGVidWdsb2coJ2xvZ2dlci1hZGFwdGVyJyk7XG5jb25zdCB7IEZBTExCQUNLX1RJTUVPVVRfQUZURVJfRkxVU0hJTkcgfSA9IHJlcXVpcmUoJy4vY29uc3RzJyk7XG5jb25zdCB7IGdldExvZ1BhcmFtcyB9ID0gcmVxdWlyZSgnLi9wYXJhbXMnKTtcblxuLy8gdGltZW91dFxubGV0IHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0O1xuXG4vKipcbiAqIEhhbmR5IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHdlIGFyZSBzZW5kaW5nIHRvIExvZ0ROQVxuICogQHBhcmFtIGxvZ0ROQUtleVxuICogQHBhcmFtIHNlbmRUb1JlbW90ZVxuICovXG5jb25zdCBpc0xvZ0ROQUVuYWJsZWQgPSAobG9nRE5BS2V5OiBzdHJpbmcsIHNlbmRUb1JlbW90ZTogYm9vbGVhbik6IGJvb2xlYW4gPT4gISFsb2dETkFLZXkgJiYgc2VuZFRvUmVtb3RlO1xuXG4vKipcbiAqIFJFdHVybiBpZiB3ZSBuZWVkIHRvIHN1cHByZXNzIGZsdXNoQWxsIG9uIGEgbG9jYWwgbWFjaGluZVxuICovXG5jb25zdCBzdXBwcmVzc0ZsdXNoQWxsID0gKCk6IGJvb2xlYW4gPT4gZ2V0TG9nUGFyYW1zKCk/LmxvZ0ROQVN1cHByZXNzRmx1c2hBbGwgfHwgZmFsc2U7XG5cbi8qKlxuICogU2VuZCBhbGwgbG9nIG1lc3NhZ2VzIHRvIExvZ0ROQSBiZWZvcmUgbGFtYmRhIGlzIHRlcm1pbmF0ZWRcbiAqL1xuY29uc3QgZmx1c2hBbGwgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBkZWJ1ZygnRmx1c2hpbmcgYWxsIGxvZ3MuLi4nKTtcbiAgICBMb2dETkFMb2dnZXIuZmx1c2hBbGwoKCkgPT4ge1xuICAgICAgZGVidWcoJ0NvbXBsZXRlZCBmbHVzaGluZyBhbGwgbG9nIG1lc3NhZ2VzJyk7XG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBGYWxsYmFjayBwcm9taXNlIGp1c3QgaW5cbiAqL1xuY29uc3QgdGltZW91dFByb21pc2UgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkZWJ1ZygnRmx1c2hpbmcgdGltZW91dCBoYXMgcmVhY2hlZC4gSWdub3JlIGZsdXNoaW5nIG1lc3NhZ2VzLi4uJyk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSwgRkFMTEJBQ0tfVElNRU9VVF9BRlRFUl9GTFVTSElORyk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBMYW1iZGEgd3JhcHBlciB0byBlbnN1cmUgd2UgZmx1c2ggbWVzc2FnZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2VcbiAqIEBwYXJhbSBsYW1iZGFIYW5kbGVyXG4gKi9cbmNvbnN0IGVuc3VyZUZsdXNoQWxsID0gKGxhbWJkYUhhbmRsZXI6IExhbWJkYUhhbmRsZXJXaXRoQXN5bmNGdW5jdGlvbik6IExhbWJkYUhhbmRsZXJXaXRoQXN5bmNGdW5jdGlvbiA9PiB7XG4gIHJldHVybiBhc3luYyAoZXZlbnQ6IGFueSwgY29udGV4dDogYW55KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbGFtYmRhSGFuZGxlcihldmVudCwgY29udGV4dCk7XG4gICAgICBpZiAoIXN1cHByZXNzRmx1c2hBbGwoKSkgYXdhaXQgUHJvbWlzZS5yYWNlKFtmbHVzaEFsbCgpLCB0aW1lb3V0UHJvbWlzZSgpXSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghc3VwcHJlc3NGbHVzaEFsbCgpKSBhd2FpdCBQcm9taXNlLnJhY2UoW2ZsdXNoQWxsKCksIHRpbWVvdXRQcm9taXNlKCldKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBBIExhbWJkYSB3cmFwcGVyIHRvIGVuc3VyZSB3ZSBmbHVzaCBtZXNzYWdlcyBiZWZvcmUgYSBMYW1iZGEgZnVuY3Rpb24gZ2V0IHRlcm1pbmF0ZWRcbiAqIE5PVEU6IEZvciBub24tYXN5bmMgaGFuZGxlcnMsIEFXUyBMYW1iZGEgd2lsbCB3YWl0IHVudGlsIHRoZSBldmVudCBsb29wIGlzIGNvbXBsZXRlZC5cbiAqIFRoaXMgbWVhbnMgYWZ0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIGEgTGFtYmRhIGZ1bmN0aW9uIHN0aWxsIHJ1blxuICogYW5kIHdlIGNhbiBjYXRjaCB0aGUgZmluYWwgY2xlYW4gdXAuXG4gKiBSRUY6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL25vZGVqcy1oYW5kbGVyLmh0bWxcbiAqXG4gKiBAcGFyYW0gbGFtYmRhSGFuZGxlclxuICovXG5jb25zdCBlbnN1cmVGbHVzaEFsbENhbGxiYWNrID0gKFxuICBsYW1iZGFIYW5kbGVyOiBMYW1iZGFIYW5kbGVyV2l0aENhbGxiYWNrRnVuY3Rpb25cbik6IExhbWJkYUhhbmRsZXJXaXRoQ2FsbGJhY2tGdW5jdGlvbiA9PiB7XG4gIHJldHVybiAoZXZlbnQ6IGFueSwgY29udGV4dDogYW55LCBjYWxsYmFjazogQ2FsbGJhY2tGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHRoaXNDYWxsYmFjayA9IChlcnJvcjogYW55LCByZXN1bHQ6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdCk7XG4gICAgICBpZiAoIXN1cHByZXNzRmx1c2hBbGwoKSkgZmx1c2hBbGwoKTtcbiAgICB9O1xuICAgIGxhbWJkYUhhbmRsZXIoZXZlbnQsIGNvbnRleHQsIHRoaXNDYWxsYmFjayk7XG4gIH07XG59O1xuXG5leHBvcnQgeyBpc0xvZ0ROQUVuYWJsZWQsIGZsdXNoQWxsLCBlbnN1cmVGbHVzaEFsbCwgZW5zdXJlRmx1c2hBbGxDYWxsYmFjayB9O1xuIl0sIm5hbWVzIjpbImlzTG9nRE5BRW5hYmxlZCIsImZsdXNoQWxsIiwiZW5zdXJlRmx1c2hBbGwiLCJlbnN1cmVGbHVzaEFsbENhbGxiYWNrIiwiTG9nRE5BTG9nZ2VyIiwicmVxdWlyZSIsImRlYnVnIiwiZGVidWdsb2ciLCJGQUxMQkFDS19USU1FT1VUX0FGVEVSX0ZMVVNISU5HIiwiZ2V0TG9nUGFyYW1zIiwidGltZW91dCIsImxvZ0ROQUtleSIsInNlbmRUb1JlbW90ZSIsInN1cHByZXNzRmx1c2hBbGwiLCJsb2dETkFTdXBwcmVzc0ZsdXNoQWxsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjbGVhclRpbWVvdXQiLCJ0aW1lb3V0UHJvbWlzZSIsInNldFRpbWVvdXQiLCJsYW1iZGFIYW5kbGVyIiwiZXZlbnQiLCJjb250ZXh0IiwicmVzdWx0IiwiZSIsInJhY2UiLCJjYWxsYmFjayIsInRoaXNDYWxsYmFjayIsImVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXdGU0EsZUFBZTtlQUFmQTs7SUFBaUJDLFFBQVE7ZUFBUkE7O0lBQVVDLGNBQWM7ZUFBZEE7O0lBQWdCQyxzQkFBc0I7ZUFBdEJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdEZwRCxJQUFNQyxlQUFlQyxRQUFRO0FBQzdCLElBQU1DLFFBQVFELFFBQVEsUUFBUUUsUUFBUSxDQUFDO0FBQ3ZDLElBQU0sQUFBRUMsa0NBQW9DSCxRQUFRLFlBQTVDRztBQUNSLElBQU0sQUFBRUMsZUFBaUJKLFFBQVEsWUFBekJJO0FBRVIsVUFBVTtBQUNWLElBQUlDO0FBRUo7Ozs7Q0FJQyxHQUNELElBQU1WLGtCQUFrQixTQUFDVyxXQUFtQkM7V0FBbUMsQ0FBQyxDQUFDRCxhQUFhQzs7QUFFOUY7O0NBRUMsR0FDRCxJQUFNQyxtQkFBbUI7UUFBZUo7SUFBQUEsT0FBQUEsQ0FBQUEsQ0FBQUEsZ0JBQUFBLDRCQUFBQSwyQkFBQUEsS0FBQUEsSUFBQUEsY0FBZ0JLLHNCQUFzQixBQUFELEtBQUssS0FBSzs7QUFFdkY7O0NBRUMsR0FDRCxJQUFNYjtlQUFXLGtCQUFBLFdBQTJCOztZQUMxQzs7Z0JBQU8sSUFBSWMsUUFBUUMsU0FBQUEsU0FBVztvQkFDNUJWLE1BQU07b0JBQ05GLGFBQWFILFFBQVEsQ0FBQyxXQUFNO3dCQUMxQkssTUFBTTt3QkFDTixJQUFJSSxTQUFTOzRCQUNYTyxhQUFhUDt3QkFDZixDQUFDO3dCQUNETTtvQkFDRjtnQkFDRjs7O0lBQ0Y7b0JBWE1mOzs7O0FBYU47O0NBRUMsR0FDRCxJQUFNaUIsaUJBQWlCLFdBQXFCO0lBQzFDLE9BQU8sSUFBSUgsUUFBUUMsU0FBQUEsU0FBVztRQUM1Qk4sVUFBVVMsV0FBVyxXQUFNO1lBQ3pCYixNQUFNO1lBQ05VO1FBQ0YsR0FBR1I7SUFDTDtBQUNGO0FBRUE7OztDQUdDLEdBQ0QsSUFBTU4saUJBQWlCLFNBQUNrQixlQUFrRjtJQUN4RzttQkFBTyxrQkFBQSxTQUFPQyxPQUFZQyxTQUErQjtnQkFFL0NDLFFBR0NDOzs7Ozs7Ozs7O3dCQUhROzs0QkFBTUosY0FBY0MsT0FBT0M7Ozt3QkFBcENDLFNBQVM7NkJBQ1gsQ0FBQ1Ysb0JBQUQ7Ozs7d0JBQXFCOzs0QkFBTUUsUUFBUVUsSUFBSTtnQ0FBRXhCO2dDQUFZaUI7Ozs7d0JBQWhDOzs7d0JBQ3pCOzs0QkFBT0s7Ozt3QkFDQUM7NkJBQ0gsQ0FBQ1gsb0JBQUQ7Ozs7d0JBQXFCOzs0QkFBTUUsUUFBUVUsSUFBSTtnQ0FBRXhCO2dDQUFZaUI7Ozs7d0JBQWhDOzs7d0JBQ3pCLE1BQU1NLEVBQUU7Ozs7Ozs7UUFFWjt3QkFUY0gsT0FBWUM7Ozs7QUFVNUI7QUFFQTs7Ozs7Ozs7Q0FRQyxHQUNELElBQU1uQix5QkFBeUIsU0FDN0JpQixlQUNzQztJQUN0QyxPQUFPLFNBQUNDLE9BQVlDLFNBQWNJLFVBQXFDO1FBQ3JFLElBQU1DLGVBQWUsU0FBQ0MsT0FBWUwsUUFBc0I7WUFDdERHLFNBQVNFLE9BQU9MO1lBQ2hCLElBQUksQ0FBQ1Ysb0JBQW9CWjtRQUMzQjtRQUNBbUIsY0FBY0MsT0FBT0MsU0FBU0s7SUFDaEM7QUFDRiJ9
|
|
File without changes
|