@tricoteuses/senat 1.0.1 → 1.1.1
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 +4 -1
- package/lib/aggregates.d.ts +54 -0
- package/lib/aggregates.js +1122 -0
- package/lib/aggregates.mjs +802 -0
- package/lib/aggregates.ts +947 -0
- package/lib/datasets.d.ts +1 -0
- package/lib/datasets.js +9 -1
- package/lib/datasets.mjs +10 -0
- package/lib/datasets.ts +11 -0
- package/lib/inserters.d.ts +5 -1
- package/lib/inserters.js +22 -3
- package/lib/inserters.mjs +19 -3
- package/lib/inserters.ts +27 -2
- package/lib/model/ameli.d.ts +4 -0
- package/lib/model/ameli.js +167 -0
- package/lib/model/ameli.mjs +57 -0
- package/lib/model/ameli.ts +86 -0
- package/lib/model/debats.d.ts +4 -0
- package/lib/model/debats.js +123 -0
- package/lib/model/debats.mjs +43 -0
- package/lib/model/debats.ts +68 -0
- package/lib/model/dosleg.d.ts +29 -0
- package/lib/model/dosleg.js +840 -0
- package/lib/model/dosleg.mjs +337 -0
- package/lib/model/dosleg.ts +558 -0
- package/lib/model/index.d.ts +5 -0
- package/lib/model/index.js +48 -0
- package/lib/model/index.mjs +5 -0
- package/lib/model/index.ts +11 -0
- package/lib/model/questions.d.ts +2 -0
- package/lib/model/questions.js +52 -0
- package/lib/model/questions.mjs +8 -0
- package/lib/model/questions.ts +14 -0
- package/lib/model/sens.d.ts +2 -0
- package/lib/model/sens.js +57 -0
- package/lib/model/sens.mjs +9 -0
- package/lib/model/sens.ts +18 -0
- package/lib/model/util.d.ts +1 -0
- package/lib/model/util.js +60 -0
- package/lib/model/util.mjs +10 -0
- package/lib/model/util.ts +16 -0
- package/lib/raw_types/questions.d.ts +226 -2
- package/lib/raw_types/questions.js +18 -5
- package/lib/raw_types/questions.mjs +1 -8
- package/lib/raw_types/questions.ts +242 -2
- package/lib/scripts/convert_data.d.ts +1 -0
- package/lib/scripts/convert_data.js +284 -0
- package/lib/scripts/convert_data.mjs +146 -0
- package/lib/scripts/convert_data.ts +182 -0
- package/lib/scripts/fix_db.d.ts +1 -0
- package/lib/scripts/fix_db.js +144 -0
- package/lib/scripts/fix_db.mjs +64 -0
- package/lib/scripts/fix_db.ts +75 -0
- package/lib/scripts/retrieve_open_data.js +20 -15
- package/lib/scripts/retrieve_open_data.mjs +20 -17
- package/lib/scripts/retrieve_open_data.ts +26 -22
- package/lib/scripts/retrieve_textes.js +4 -2
- package/lib/scripts/retrieve_textes.mjs +3 -1
- package/lib/scripts/retrieve_textes.ts +6 -4
- package/lib/types/questions.d.ts +2 -0
- package/lib/types/questions.js +13 -1
- package/lib/types/questions.mjs +1 -1
- package/lib/types/questions.ts +3 -0
- package/package.json +1 -1
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
require("core-js/modules/es.symbol.js");
|
|
5
|
+
require("core-js/modules/es.symbol.description.js");
|
|
6
|
+
require("core-js/modules/es.symbol.async-iterator.js");
|
|
7
|
+
require("core-js/modules/es.symbol.iterator.js");
|
|
8
|
+
require("core-js/modules/es.symbol.replace.js");
|
|
9
|
+
require("core-js/modules/es.symbol.to-string-tag.js");
|
|
10
|
+
require("core-js/modules/es.array.for-each.js");
|
|
11
|
+
require("core-js/modules/es.array.from.js");
|
|
12
|
+
require("core-js/modules/es.array.is-array.js");
|
|
13
|
+
require("core-js/modules/es.array.reduce.js");
|
|
14
|
+
require("core-js/modules/es.array.reverse.js");
|
|
15
|
+
require("core-js/modules/es.array.slice.js");
|
|
16
|
+
require("core-js/modules/es.date.to-string.js");
|
|
17
|
+
require("core-js/modules/es.function.name.js");
|
|
18
|
+
require("core-js/modules/es.json.to-string-tag.js");
|
|
19
|
+
require("core-js/modules/es.math.to-string-tag.js");
|
|
20
|
+
require("core-js/modules/es.object.create.js");
|
|
21
|
+
require("core-js/modules/es.object.define-property.js");
|
|
22
|
+
require("core-js/modules/es.object.get-prototype-of.js");
|
|
23
|
+
require("core-js/modules/es.object.keys.js");
|
|
24
|
+
require("core-js/modules/es.promise.js");
|
|
25
|
+
require("core-js/modules/es.regexp.constructor.js");
|
|
26
|
+
require("core-js/modules/es.regexp.to-string.js");
|
|
27
|
+
require("core-js/modules/es.string.replace.js");
|
|
28
|
+
require("core-js/modules/es.weak-map.js");
|
|
29
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
30
|
+
require("core-js/modules/es.array.iterator.js");
|
|
31
|
+
require("core-js/modules/es.array.join.js");
|
|
32
|
+
require("core-js/modules/es.function.bind.js");
|
|
33
|
+
require("core-js/modules/es.object.set-prototype-of.js");
|
|
34
|
+
require("core-js/modules/es.object.to-string.js");
|
|
35
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
36
|
+
require("core-js/modules/es.set.js");
|
|
37
|
+
require("core-js/modules/es.string.iterator.js");
|
|
38
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
39
|
+
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
40
|
+
var _path = _interopRequireDefault(require("path"));
|
|
41
|
+
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
42
|
+
var _datasets = require("../datasets");
|
|
43
|
+
var _model = require("../model");
|
|
44
|
+
var _inserters = require("../inserters");
|
|
45
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
46
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
47
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
48
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
49
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
50
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
51
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
52
|
+
function _wrapRegExp() { _wrapRegExp = function _wrapRegExp(e, r) { return new BabelRegExp(e, void 0, r); }; var e = RegExp.prototype, r = new WeakMap(); function BabelRegExp(e, t, p) { var o = RegExp(e, t); return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype); } function buildGroups(e, t) { var p = r.get(t); return Object.keys(p).reduce(function (r, t) { var o = p[t]; if ("number" == typeof o) r[t] = e[o];else { for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++; r[t] = e[o[i]]; } return r; }, Object.create(null)); } return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) { var t = e.exec.call(this, r); if (t) { t.groups = buildGroups(t, this); var p = t.indices; p && (p.groups = buildGroups(p, this)); } return t; }, BabelRegExp.prototype[Symbol.replace] = function (t, p) { if ("string" == typeof p) { var o = r.get(this); return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)>/g, function (e, r) { var t = o[r]; return "$" + (Array.isArray(t) ? t.join("$") : t); })); } if ("function" == typeof p) { var i = this; return e[Symbol.replace].call(this, t, function () { var e = arguments; return "object" != _typeof(e[e.length - 1]) && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e); }); } return e[Symbol.replace].call(this, t, p); }, _wrapRegExp.apply(this, arguments); }
|
|
53
|
+
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
54
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
55
|
+
var optionsDefinitions = [{
|
|
56
|
+
alias: 'k',
|
|
57
|
+
defaultValue: ['All'],
|
|
58
|
+
help: 'categories of datasets to reorganize',
|
|
59
|
+
multiple: true,
|
|
60
|
+
name: 'categories',
|
|
61
|
+
type: String
|
|
62
|
+
}, {
|
|
63
|
+
alias: 's',
|
|
64
|
+
help: 'don\'t log anything',
|
|
65
|
+
name: 'silent',
|
|
66
|
+
type: Boolean
|
|
67
|
+
}, {
|
|
68
|
+
alias: "v",
|
|
69
|
+
help: "verbose logs",
|
|
70
|
+
name: "verbose",
|
|
71
|
+
type: Boolean
|
|
72
|
+
}, {
|
|
73
|
+
defaultOption: true,
|
|
74
|
+
help: 'directory containing Sénat open data files',
|
|
75
|
+
name: 'dataDir',
|
|
76
|
+
type: String
|
|
77
|
+
}];
|
|
78
|
+
var options = (0, _commandLineArgs["default"])(optionsDefinitions);
|
|
79
|
+
var SIGNET_STRUCTURE_REGEXP = /*#__PURE__*/_wrapRegExp(/^([a-z]+)(\d{2,4})-?(\d+)?/, {
|
|
80
|
+
type: 1,
|
|
81
|
+
session: 2,
|
|
82
|
+
numTexte: 3
|
|
83
|
+
});
|
|
84
|
+
function ensureAndClearDir(path) {
|
|
85
|
+
if (!_fsExtra["default"].existsSync(path)) {
|
|
86
|
+
_fsExtra["default"].mkdirSync(path);
|
|
87
|
+
} else {
|
|
88
|
+
_fsExtra["default"].emptyDirSync(path);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function convertData() {
|
|
92
|
+
return _convertData.apply(this, arguments);
|
|
93
|
+
}
|
|
94
|
+
function _convertData() {
|
|
95
|
+
_convertData = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
96
|
+
var enabledDatasets, dataDir, dataset, lois, aggregator, _iterator, _step, loi, allData, loiReorganizedRootDir, _iterator2, _step2, _loi, loiFileName, loiReorganizedDir, _SIGNET_STRUCTURE_REG, signetParts, session, _dataset, questions, _aggregator, _iterator3, _step3, question, _allData, questionReorganizedRootDir, _iterator4, _step4, _question, legislature, questionReorganizedDir, questionFileName, _dataset2, sens, _aggregator2, _iterator5, _step5, sen, _allData2, senReorganizedRootDir, _iterator6, _step6, _sen, senFileName;
|
|
97
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
98
|
+
while (1) switch (_context.prev = _context.next) {
|
|
99
|
+
case 0:
|
|
100
|
+
enabledDatasets = (0, _datasets.getEnabledDatasets)(options.categories);
|
|
101
|
+
dataDir = options.dataDir;
|
|
102
|
+
if (!(enabledDatasets & _datasets.EnabledDatasets.DosLeg)) {
|
|
103
|
+
_context.next = 20;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
dataset = _datasets.datasets.dosleg;
|
|
107
|
+
if (!options.silent) {
|
|
108
|
+
console.log("Converting database ".concat(dataset.database, " data into files\u2026"));
|
|
109
|
+
}
|
|
110
|
+
_context.next = 7;
|
|
111
|
+
return (0, _model.getAllLois)();
|
|
112
|
+
case 7:
|
|
113
|
+
lois = _context.sent;
|
|
114
|
+
aggregator = new _model.Aggregator(new Set(_model.allFollows));
|
|
115
|
+
_iterator = _createForOfIteratorHelper(lois);
|
|
116
|
+
try {
|
|
117
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
118
|
+
loi = _step.value;
|
|
119
|
+
aggregator.addLoi(loi);
|
|
120
|
+
}
|
|
121
|
+
} catch (err) {
|
|
122
|
+
_iterator.e(err);
|
|
123
|
+
} finally {
|
|
124
|
+
_iterator.f();
|
|
125
|
+
}
|
|
126
|
+
if (options.verbose) {
|
|
127
|
+
console.log("Starting getting all the data…");
|
|
128
|
+
console.time("get all data");
|
|
129
|
+
}
|
|
130
|
+
_context.next = 14;
|
|
131
|
+
return aggregator.getAll();
|
|
132
|
+
case 14:
|
|
133
|
+
if (options.verbose) {
|
|
134
|
+
console.timeEnd("get all data");
|
|
135
|
+
}
|
|
136
|
+
allData = aggregator.toJson();
|
|
137
|
+
loiReorganizedRootDir = _path["default"].join(dataDir, dataset.database);
|
|
138
|
+
ensureAndClearDir(loiReorganizedRootDir);
|
|
139
|
+
_iterator2 = _createForOfIteratorHelper(lois);
|
|
140
|
+
try {
|
|
141
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
142
|
+
_loi = _step2.value;
|
|
143
|
+
if (options.verbose) {
|
|
144
|
+
console.log("Converting ".concat(_loi.signet, " file\u2026"));
|
|
145
|
+
}
|
|
146
|
+
(0, _inserters.insertLoiReferences)(_loi, allData, {});
|
|
147
|
+
loiFileName = "".concat(_loi.loicod, ".json");
|
|
148
|
+
loiReorganizedDir = _path["default"].join(loiReorganizedRootDir, _loi.typloicod);
|
|
149
|
+
if (_loi.signet) {
|
|
150
|
+
loiFileName = "".concat(_loi.signet, ".json");
|
|
151
|
+
signetParts = (_SIGNET_STRUCTURE_REG = SIGNET_STRUCTURE_REGEXP.exec(_loi.signet)) === null || _SIGNET_STRUCTURE_REG === void 0 ? void 0 : _SIGNET_STRUCTURE_REG.groups;
|
|
152
|
+
if (signetParts) {
|
|
153
|
+
session = signetParts.session;
|
|
154
|
+
loiReorganizedDir = _path["default"].join(loiReorganizedDir, session);
|
|
155
|
+
} else {
|
|
156
|
+
loiReorganizedDir = _path["default"].join(loiReorganizedDir, "non defini");
|
|
157
|
+
}
|
|
158
|
+
_fsExtra["default"].ensureDirSync(loiReorganizedDir);
|
|
159
|
+
}
|
|
160
|
+
_fsExtra["default"].writeJSONSync(_path["default"].join(loiReorganizedDir, loiFileName), _loi, {
|
|
161
|
+
spaces: 2
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
} catch (err) {
|
|
165
|
+
_iterator2.e(err);
|
|
166
|
+
} finally {
|
|
167
|
+
_iterator2.f();
|
|
168
|
+
}
|
|
169
|
+
case 20:
|
|
170
|
+
if (!(enabledDatasets & _datasets.EnabledDatasets.Questions)) {
|
|
171
|
+
_context.next = 36;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
_dataset = _datasets.datasets.questions;
|
|
175
|
+
if (!options.silent) {
|
|
176
|
+
console.log("Converting database ".concat(_dataset.database, " data into files\u2026"));
|
|
177
|
+
}
|
|
178
|
+
_context.next = 25;
|
|
179
|
+
return (0, _model.getAllQuestions)();
|
|
180
|
+
case 25:
|
|
181
|
+
questions = _context.sent;
|
|
182
|
+
_aggregator = new _model.Aggregator(new Set(_model.allFollows));
|
|
183
|
+
_iterator3 = _createForOfIteratorHelper(questions);
|
|
184
|
+
try {
|
|
185
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
186
|
+
question = _step3.value;
|
|
187
|
+
_aggregator.addQuestion(question);
|
|
188
|
+
}
|
|
189
|
+
} catch (err) {
|
|
190
|
+
_iterator3.e(err);
|
|
191
|
+
} finally {
|
|
192
|
+
_iterator3.f();
|
|
193
|
+
}
|
|
194
|
+
_context.next = 31;
|
|
195
|
+
return _aggregator.getAll();
|
|
196
|
+
case 31:
|
|
197
|
+
_allData = _aggregator.toJson();
|
|
198
|
+
questionReorganizedRootDir = _path["default"].join(dataDir, _dataset.database);
|
|
199
|
+
ensureAndClearDir(questionReorganizedRootDir);
|
|
200
|
+
_iterator4 = _createForOfIteratorHelper(questions);
|
|
201
|
+
try {
|
|
202
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
203
|
+
_question = _step4.value;
|
|
204
|
+
if (options.verbose) {
|
|
205
|
+
console.log("Converting ".concat(_question.id, " file\u2026"));
|
|
206
|
+
}
|
|
207
|
+
(0, _inserters.insertQuestionReferences)(_question, _allData, {});
|
|
208
|
+
legislature = _question.legislature ? _question.legislature : 0;
|
|
209
|
+
questionReorganizedDir = _path["default"].join(questionReorganizedRootDir, String(legislature));
|
|
210
|
+
_fsExtra["default"].ensureDirSync(questionReorganizedDir);
|
|
211
|
+
questionFileName = "".concat(_question.reference, ".json");
|
|
212
|
+
_fsExtra["default"].writeJSONSync(_path["default"].join(questionReorganizedDir, questionFileName), _question, {
|
|
213
|
+
spaces: 2
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
} catch (err) {
|
|
217
|
+
_iterator4.e(err);
|
|
218
|
+
} finally {
|
|
219
|
+
_iterator4.f();
|
|
220
|
+
}
|
|
221
|
+
case 36:
|
|
222
|
+
if (!(enabledDatasets & _datasets.EnabledDatasets.Sens)) {
|
|
223
|
+
_context.next = 52;
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
_dataset2 = _datasets.datasets.sens;
|
|
227
|
+
if (!options.silent) {
|
|
228
|
+
console.log("Converting database ".concat(_dataset2.database, " data into files\u2026"));
|
|
229
|
+
}
|
|
230
|
+
_context.next = 41;
|
|
231
|
+
return (0, _model.getAllSens)();
|
|
232
|
+
case 41:
|
|
233
|
+
sens = _context.sent;
|
|
234
|
+
_aggregator2 = new _model.Aggregator(new Set(_model.allFollows));
|
|
235
|
+
_iterator5 = _createForOfIteratorHelper(sens);
|
|
236
|
+
try {
|
|
237
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
238
|
+
sen = _step5.value;
|
|
239
|
+
_aggregator2.addSen(sen);
|
|
240
|
+
}
|
|
241
|
+
} catch (err) {
|
|
242
|
+
_iterator5.e(err);
|
|
243
|
+
} finally {
|
|
244
|
+
_iterator5.f();
|
|
245
|
+
}
|
|
246
|
+
_context.next = 47;
|
|
247
|
+
return _aggregator2.getAll();
|
|
248
|
+
case 47:
|
|
249
|
+
_allData2 = _aggregator2.toJson();
|
|
250
|
+
senReorganizedRootDir = _path["default"].join(dataDir, _dataset2.database);
|
|
251
|
+
ensureAndClearDir(senReorganizedRootDir);
|
|
252
|
+
_iterator6 = _createForOfIteratorHelper(sens);
|
|
253
|
+
try {
|
|
254
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
255
|
+
_sen = _step6.value;
|
|
256
|
+
if (options.verbose) {
|
|
257
|
+
console.log("Converting ".concat(_sen.senmat, " file\u2026"));
|
|
258
|
+
}
|
|
259
|
+
(0, _inserters.insertSenReferences)(_sen, _allData2, {});
|
|
260
|
+
senFileName = "".concat(_sen.senmat, ".json");
|
|
261
|
+
_fsExtra["default"].writeJSONSync(_path["default"].join(senReorganizedRootDir, senFileName), _sen, {
|
|
262
|
+
spaces: 2
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
} catch (err) {
|
|
266
|
+
_iterator6.e(err);
|
|
267
|
+
} finally {
|
|
268
|
+
_iterator6.f();
|
|
269
|
+
}
|
|
270
|
+
case 52:
|
|
271
|
+
case "end":
|
|
272
|
+
return _context.stop();
|
|
273
|
+
}
|
|
274
|
+
}, _callee);
|
|
275
|
+
}));
|
|
276
|
+
return _convertData.apply(this, arguments);
|
|
277
|
+
}
|
|
278
|
+
convertData().then(function () {
|
|
279
|
+
return process.exit(0);
|
|
280
|
+
})["catch"](function (error) {
|
|
281
|
+
console.log(error);
|
|
282
|
+
process.exit(1);
|
|
283
|
+
});
|
|
284
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnNFeHRyYSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BhdGgiLCJfY29tbWFuZExpbmVBcmdzIiwiX2RhdGFzZXRzIiwiX21vZGVsIiwiX2luc2VydGVycyIsImUiLCJfX2VzTW9kdWxlIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbiIsIkYiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwiZnJvbSIsInRlc3QiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfd3JhcFJlZ0V4cCIsIkJhYmVsUmVnRXhwIiwiUmVnRXhwIiwiV2Vha01hcCIsInNldCIsImdldCIsIl9zZXRQcm90b3R5cGVPZiIsImJ1aWxkR3JvdXBzIiwicmVkdWNlIiwiX2luaGVyaXRzIiwiZXhlYyIsImdyb3VwcyIsImluZGljZXMiLCJyZXBsYWNlIiwiam9pbiIsImJpbmQiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImRlZmF1bHRWYWx1ZSIsImhlbHAiLCJtdWx0aXBsZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsIlNJR05FVF9TVFJVQ1RVUkVfUkVHRVhQIiwic2Vzc2lvbiIsIm51bVRleHRlIiwiZW5zdXJlQW5kQ2xlYXJEaXIiLCJwYXRoIiwiZnMiLCJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwiZW1wdHlEaXJTeW5jIiwiY29udmVydERhdGEiLCJfY29udmVydERhdGEiLCJfY2FsbGVlIiwiZW5hYmxlZERhdGFzZXRzIiwiZGF0YURpciIsImRhdGFzZXQiLCJsb2lzIiwiYWdncmVnYXRvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwibG9pIiwiYWxsRGF0YSIsImxvaVJlb3JnYW5pemVkUm9vdERpciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfbG9pIiwibG9pRmlsZU5hbWUiLCJsb2lSZW9yZ2FuaXplZERpciIsIl9TSUdORVRfU1RSVUNUVVJFX1JFRyIsInNpZ25ldFBhcnRzIiwiX2RhdGFzZXQiLCJxdWVzdGlvbnMiLCJfYWdncmVnYXRvciIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJxdWVzdGlvbiIsIl9hbGxEYXRhIiwicXVlc3Rpb25SZW9yZ2FuaXplZFJvb3REaXIiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiX3F1ZXN0aW9uIiwibGVnaXNsYXR1cmUiLCJxdWVzdGlvblJlb3JnYW5pemVkRGlyIiwicXVlc3Rpb25GaWxlTmFtZSIsIl9kYXRhc2V0MiIsInNlbnMiLCJfYWdncmVnYXRvcjIiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1Iiwic2VuIiwiX2FsbERhdGEyIiwic2VuUmVvcmdhbml6ZWRSb290RGlyIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsIl9zZW4iLCJzZW5GaWxlTmFtZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJnZXRFbmFibGVkRGF0YXNldHMiLCJjYXRlZ29yaWVzIiwiRW5hYmxlZERhdGFzZXRzIiwiRG9zTGVnIiwiZGF0YXNldHMiLCJkb3NsZWciLCJzaWxlbnQiLCJjb25zb2xlIiwibG9nIiwiY29uY2F0IiwiZGF0YWJhc2UiLCJnZXRBbGxMb2lzIiwiQWdncmVnYXRvciIsIlNldCIsImFsbEZvbGxvd3MiLCJhZGRMb2kiLCJlcnIiLCJ2ZXJib3NlIiwidGltZSIsImdldEFsbCIsInRpbWVFbmQiLCJ0b0pzb24iLCJzaWduZXQiLCJpbnNlcnRMb2lSZWZlcmVuY2VzIiwibG9pY29kIiwidHlwbG9pY29kIiwiZW5zdXJlRGlyU3luYyIsIndyaXRlSlNPTlN5bmMiLCJzcGFjZXMiLCJRdWVzdGlvbnMiLCJnZXRBbGxRdWVzdGlvbnMiLCJhZGRRdWVzdGlvbiIsImlkIiwiaW5zZXJ0UXVlc3Rpb25SZWZlcmVuY2VzIiwicmVmZXJlbmNlIiwiU2VucyIsImdldEFsbFNlbnMiLCJhZGRTZW4iLCJzZW5tYXQiLCJpbnNlcnRTZW5SZWZlcmVuY2VzIiwicHJvY2VzcyIsImV4aXQiLCJlcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NvbnZlcnRfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tICdjb21tYW5kLWxpbmUtYXJncydcblxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cywgZ2V0RW5hYmxlZERhdGFzZXRzLCB9IGZyb20gJy4uL2RhdGFzZXRzJ1xuaW1wb3J0IHtcbiAgQWdncmVnYXRvcixcbiAgYWxsRm9sbG93cyxcbiAgZ2V0QWxsTG9pcyxcbiAgZ2V0QWxsUXVlc3Rpb25zLFxuICBnZXRBbGxTZW5zXG59IGZyb20gJy4uL21vZGVsJ1xuaW1wb3J0IHtcbiAgaW5zZXJ0TG9pUmVmZXJlbmNlcyxcbiAgaW5zZXJ0UXVlc3Rpb25SZWZlcmVuY2VzLFxuICBpbnNlcnRTZW5SZWZlcmVuY2VzXG59IGZyb20gJy4uL2luc2VydGVycydcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6ICdrJyxcbiAgICBkZWZhdWx0VmFsdWU6IFsnQWxsJ10sXG4gICAgaGVscDogJ2NhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmVvcmdhbml6ZScsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogJ2NhdGVnb3JpZXMnLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiAncycsXG4gICAgaGVscDogJ2RvblxcJ3QgbG9nIGFueXRoaW5nJyxcbiAgICBuYW1lOiAnc2lsZW50JyxcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogJ2RpcmVjdG9yeSBjb250YWluaW5nIFPDqW5hdCBvcGVuIGRhdGEgZmlsZXMnLFxuICAgIG5hbWU6ICdkYXRhRGlyJyxcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuY29uc3QgU0lHTkVUX1NUUlVDVFVSRV9SRUdFWFAgPSAvXig/PHR5cGU+W2Etel0rKSg/PHNlc3Npb24+XFxkezIsNH0pLT8oPzxudW1UZXh0ZT5cXGQrKT8vXG5cbmZ1bmN0aW9uIGVuc3VyZUFuZENsZWFyRGlyKHBhdGg6IHN0cmluZykge1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICBmcy5ta2RpclN5bmMocGF0aClcbiAgfSBlbHNlIHtcbiAgICBmcy5lbXB0eURpclN5bmMocGF0aClcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0RGF0YSgpIHtcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gZ2V0RW5hYmxlZERhdGFzZXRzKG9wdGlvbnMuY2F0ZWdvcmllcylcbiAgY29uc3QgZGF0YURpcjogc3RyaW5nID0gb3B0aW9ucy5kYXRhRGlyXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NMZWcpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHMuZG9zbGVnXG5cbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29udmVydGluZyBkYXRhYmFzZSAke2RhdGFzZXQuZGF0YWJhc2V9IGRhdGEgaW50byBmaWxlc+KApmApXG4gICAgfVxuXG4gICAgY29uc3QgbG9pcyA9IGF3YWl0IGdldEFsbExvaXMoKVxuICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSBuZXcgQWdncmVnYXRvcihuZXcgU2V0KGFsbEZvbGxvd3MpKVxuICAgIGZvciAoY29uc3QgbG9pIG9mIGxvaXMpIHtcbiAgICAgIGFnZ3JlZ2F0b3IuYWRkTG9pKGxvaSlcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coXCJTdGFydGluZyBnZXR0aW5nIGFsbCB0aGUgZGF0YeKAplwiKVxuICAgICAgY29uc29sZS50aW1lKFwiZ2V0IGFsbCBkYXRhXCIpXG4gICAgfVxuICAgIGF3YWl0IGFnZ3JlZ2F0b3IuZ2V0QWxsKClcbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLnRpbWVFbmQoXCJnZXQgYWxsIGRhdGFcIilcbiAgICB9XG4gICAgY29uc3QgYWxsRGF0YSA9IGFnZ3JlZ2F0b3IudG9Kc29uKClcblxuICAgIGNvbnN0IGxvaVJlb3JnYW5pemVkUm9vdERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmRhdGFiYXNlKVxuICAgIGVuc3VyZUFuZENsZWFyRGlyKGxvaVJlb3JnYW5pemVkUm9vdERpcilcblxuICAgIGZvciAoY29uc3QgbG9pIG9mIGxvaXMpIHtcbiAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENvbnZlcnRpbmcgJHtsb2kuc2lnbmV0fSBmaWxl4oCmYClcbiAgICAgIH1cblxuICAgICAgaW5zZXJ0TG9pUmVmZXJlbmNlcyhsb2ksIGFsbERhdGEsIHt9KVxuXG4gICAgICBsZXQgbG9pRmlsZU5hbWUgPSBgJHtsb2kubG9pY29kfS5qc29uYFxuICAgICAgbGV0IGxvaVJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGxvaVJlb3JnYW5pemVkUm9vdERpciwgbG9pLnR5cGxvaWNvZClcbiAgICAgIGlmIChsb2kuc2lnbmV0KSB7XG4gICAgICAgIGxvaUZpbGVOYW1lID0gYCR7bG9pLnNpZ25ldH0uanNvbmBcbiAgICAgICAgbGV0IHNpZ25ldFBhcnRzID0gU0lHTkVUX1NUUlVDVFVSRV9SRUdFWFAuZXhlYyhsb2kuc2lnbmV0KT8uZ3JvdXBzXG4gICAgICAgIGlmIChzaWduZXRQYXJ0cykge1xuICAgICAgICAgIGNvbnN0IHsgc2Vzc2lvbn0gPSBzaWduZXRQYXJ0c1xuICAgICAgICAgIGxvaVJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGxvaVJlb3JnYW5pemVkRGlyLCBzZXNzaW9uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvaVJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGxvaVJlb3JnYW5pemVkRGlyLCBcIm5vbiBkZWZpbmlcIilcbiAgICAgICAgfVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKGxvaVJlb3JnYW5pemVkRGlyKVxuICAgICAgfVxuXG4gICAgICBmcy53cml0ZUpTT05TeW5jKHBhdGguam9pbihsb2lSZW9yZ2FuaXplZERpciwgbG9pRmlsZU5hbWUpLCBsb2ksIHtzcGFjZXM6IDJ9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzLnF1ZXN0aW9uc1xuXG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coYENvbnZlcnRpbmcgZGF0YWJhc2UgJHtkYXRhc2V0LmRhdGFiYXNlfSBkYXRhIGludG8gZmlsZXPigKZgKVxuICAgIH1cblxuICAgIGNvbnN0IHF1ZXN0aW9ucyA9IGF3YWl0IGdldEFsbFF1ZXN0aW9ucygpXG4gICAgY29uc3QgYWdncmVnYXRvciA9IG5ldyBBZ2dyZWdhdG9yKG5ldyBTZXQoYWxsRm9sbG93cykpXG4gICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBxdWVzdGlvbnMpIHtcbiAgICAgIGFnZ3JlZ2F0b3IuYWRkUXVlc3Rpb24ocXVlc3Rpb24pXG4gICAgfVxuICAgIGF3YWl0IGFnZ3JlZ2F0b3IuZ2V0QWxsKClcbiAgICBjb25zdCBhbGxEYXRhID0gYWdncmVnYXRvci50b0pzb24oKVxuXG4gICAgY29uc3QgcXVlc3Rpb25SZW9yZ2FuaXplZFJvb3REaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5kYXRhYmFzZSlcbiAgICBlbnN1cmVBbmRDbGVhckRpcihxdWVzdGlvblJlb3JnYW5pemVkUm9vdERpcilcblxuICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2YgcXVlc3Rpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBDb252ZXJ0aW5nICR7cXVlc3Rpb24uaWR9IGZpbGXigKZgKVxuICAgICAgfVxuXG4gICAgICBpbnNlcnRRdWVzdGlvblJlZmVyZW5jZXMocXVlc3Rpb24sIGFsbERhdGEsIHt9KVxuXG4gICAgICBjb25zdCBsZWdpc2xhdHVyZSA9IHF1ZXN0aW9uLmxlZ2lzbGF0dXJlID8gcXVlc3Rpb24ubGVnaXNsYXR1cmUgOiAwXG4gICAgICBjb25zdCBxdWVzdGlvblJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKHF1ZXN0aW9uUmVvcmdhbml6ZWRSb290RGlyLCBTdHJpbmcobGVnaXNsYXR1cmUpKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhxdWVzdGlvblJlb3JnYW5pemVkRGlyKVxuICAgICAgbGV0IHF1ZXN0aW9uRmlsZU5hbWUgPSBgJHtxdWVzdGlvbi5yZWZlcmVuY2V9Lmpzb25gXG4gICAgICBmcy53cml0ZUpTT05TeW5jKHBhdGguam9pbihxdWVzdGlvblJlb3JnYW5pemVkRGlyLCBxdWVzdGlvbkZpbGVOYW1lKSwgcXVlc3Rpb24sIHtzcGFjZXM6IDJ9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2Vucykge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0cy5zZW5zXG5cbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29udmVydGluZyBkYXRhYmFzZSAke2RhdGFzZXQuZGF0YWJhc2V9IGRhdGEgaW50byBmaWxlc+KApmApXG4gICAgfVxuXG4gICAgY29uc3Qgc2VucyA9IGF3YWl0IGdldEFsbFNlbnMoKVxuICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSBuZXcgQWdncmVnYXRvcihuZXcgU2V0KGFsbEZvbGxvd3MpKVxuICAgIGZvciAoY29uc3Qgc2VuIG9mIHNlbnMpIHtcbiAgICAgIGFnZ3JlZ2F0b3IuYWRkU2VuKHNlbilcbiAgICB9XG4gICAgYXdhaXQgYWdncmVnYXRvci5nZXRBbGwoKVxuICAgIGNvbnN0IGFsbERhdGEgPSBhZ2dyZWdhdG9yLnRvSnNvbigpXG5cbiAgICBjb25zdCBzZW5SZW9yZ2FuaXplZFJvb3REaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5kYXRhYmFzZSlcbiAgICBlbnN1cmVBbmRDbGVhckRpcihzZW5SZW9yZ2FuaXplZFJvb3REaXIpXG5cbiAgICBmb3IgKGNvbnN0IHNlbiBvZiBzZW5zKSB7XG4gICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBDb252ZXJ0aW5nICR7c2VuLnNlbm1hdH0gZmlsZeKApmApXG4gICAgICB9XG5cbiAgICAgIGluc2VydFNlblJlZmVyZW5jZXMoc2VuLCBhbGxEYXRhLCB7fSlcblxuICAgICAgbGV0IHNlbkZpbGVOYW1lID0gYCR7c2VuLnNlbm1hdH0uanNvbmBcbiAgICAgIGZzLndyaXRlSlNPTlN5bmMocGF0aC5qb2luKHNlblJlb3JnYW5pemVkUm9vdERpciwgc2VuRmlsZU5hbWUpLCBzZW4sIHtzcGFjZXM6IDJ9KVxuICAgIH1cbiAgfVxufVxuXG5jb252ZXJ0RGF0YSgpXG4gIC50aGVuKCgpID0+IHByb2Nlc3MuZXhpdCgwKSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLGdCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRyxTQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFPQSxJQUFBSyxVQUFBLEdBQUFMLE9BQUE7QUFJcUIsU0FBQUQsdUJBQUFPLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxnQkFBQUEsQ0FBQTtBQUFBLFNBQUFFLG9CQUFBLGtCQWZyQixxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUYsQ0FBQSxTQUFBRyxDQUFBLEVBQUFILENBQUEsT0FBQUksQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEsRUFBQUMsQ0FBQSxHQUFBSixNQUFBLENBQUFLLGNBQUEsY0FBQVAsQ0FBQSxFQUFBSCxDQUFBLEVBQUFJLENBQUEsSUFBQUQsQ0FBQSxDQUFBSCxDQUFBLElBQUFJLENBQUEsQ0FBQU8sS0FBQSxLQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxhQUFBLHVCQUFBQyxDQUFBLEdBQUFOLENBQUEsQ0FBQU8sV0FBQSw4QkFBQUMsT0FBQWpCLENBQUEsRUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFdBQUFDLE1BQUEsQ0FBQUssY0FBQSxDQUFBUCxDQUFBLEVBQUFILENBQUEsSUFBQVcsS0FBQSxFQUFBUCxDQUFBLEVBQUFpQixVQUFBLE1BQUFDLFlBQUEsTUFBQUMsUUFBQSxTQUFBcEIsQ0FBQSxDQUFBSCxDQUFBLFdBQUFvQixNQUFBLG1CQUFBakIsQ0FBQSxJQUFBaUIsTUFBQSxZQUFBQSxPQUFBakIsQ0FBQSxFQUFBSCxDQUFBLEVBQUFJLENBQUEsV0FBQUQsQ0FBQSxDQUFBSCxDQUFBLElBQUFJLENBQUEsZ0JBQUFvQixLQUFBckIsQ0FBQSxFQUFBSCxDQUFBLEVBQUFJLENBQUEsRUFBQUcsQ0FBQSxRQUFBSyxDQUFBLEdBQUFaLENBQUEsSUFBQUEsQ0FBQSxDQUFBTSxTQUFBLFlBQUFtQixTQUFBLEdBQUF6QixDQUFBLEdBQUF5QixTQUFBLEVBQUFYLENBQUEsR0FBQVQsTUFBQSxDQUFBcUIsTUFBQSxDQUFBZCxDQUFBLENBQUFOLFNBQUEsR0FBQVUsQ0FBQSxPQUFBVyxPQUFBLENBQUFwQixDQUFBLGdCQUFBRSxDQUFBLENBQUFLLENBQUEsZUFBQUgsS0FBQSxFQUFBaUIsZ0JBQUEsQ0FBQXpCLENBQUEsRUFBQUMsQ0FBQSxFQUFBWSxDQUFBLE1BQUFGLENBQUEsYUFBQWUsU0FBQTFCLENBQUEsRUFBQUgsQ0FBQSxFQUFBSSxDQUFBLG1CQUFBMEIsSUFBQSxZQUFBQyxHQUFBLEVBQUE1QixDQUFBLENBQUE2QixJQUFBLENBQUFoQyxDQUFBLEVBQUFJLENBQUEsY0FBQUQsQ0FBQSxhQUFBMkIsSUFBQSxXQUFBQyxHQUFBLEVBQUE1QixDQUFBLFFBQUFILENBQUEsQ0FBQXdCLElBQUEsR0FBQUEsSUFBQSxNQUFBUyxDQUFBLHFCQUFBQyxDQUFBLHFCQUFBQyxDQUFBLGdCQUFBQyxDQUFBLGdCQUFBQyxDQUFBLGdCQUFBWixVQUFBLGNBQUFhLGtCQUFBLGNBQUFDLDJCQUFBLFNBQUFDLENBQUEsT0FBQXBCLE1BQUEsQ0FBQW9CLENBQUEsRUFBQTFCLENBQUEscUNBQUEyQixDQUFBLEdBQUFwQyxNQUFBLENBQUFxQyxjQUFBLEVBQUFDLENBQUEsR0FBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFBLENBQUEsQ0FBQUcsTUFBQSxRQUFBRCxDQUFBLElBQUFBLENBQUEsS0FBQXZDLENBQUEsSUFBQUcsQ0FBQSxDQUFBeUIsSUFBQSxDQUFBVyxDQUFBLEVBQUE3QixDQUFBLE1BQUEwQixDQUFBLEdBQUFHLENBQUEsT0FBQUUsQ0FBQSxHQUFBTiwwQkFBQSxDQUFBakMsU0FBQSxHQUFBbUIsU0FBQSxDQUFBbkIsU0FBQSxHQUFBRCxNQUFBLENBQUFxQixNQUFBLENBQUFjLENBQUEsWUFBQU0sc0JBQUEzQyxDQUFBLGdDQUFBNEMsT0FBQSxXQUFBL0MsQ0FBQSxJQUFBb0IsTUFBQSxDQUFBakIsQ0FBQSxFQUFBSCxDQUFBLFlBQUFHLENBQUEsZ0JBQUE2QyxPQUFBLENBQUFoRCxDQUFBLEVBQUFHLENBQUEsc0JBQUE4QyxjQUFBOUMsQ0FBQSxFQUFBSCxDQUFBLGFBQUFrRCxPQUFBOUMsQ0FBQSxFQUFBSyxDQUFBLEVBQUFHLENBQUEsRUFBQUUsQ0FBQSxRQUFBRSxDQUFBLEdBQUFhLFFBQUEsQ0FBQTFCLENBQUEsQ0FBQUMsQ0FBQSxHQUFBRCxDQUFBLEVBQUFNLENBQUEsbUJBQUFPLENBQUEsQ0FBQWMsSUFBQSxRQUFBWixDQUFBLEdBQUFGLENBQUEsQ0FBQWUsR0FBQSxFQUFBRSxDQUFBLEdBQUFmLENBQUEsQ0FBQVAsS0FBQSxTQUFBc0IsQ0FBQSxnQkFBQWtCLE9BQUEsQ0FBQWxCLENBQUEsS0FBQTFCLENBQUEsQ0FBQXlCLElBQUEsQ0FBQUMsQ0FBQSxlQUFBakMsQ0FBQSxDQUFBb0QsT0FBQSxDQUFBbkIsQ0FBQSxDQUFBb0IsT0FBQSxFQUFBQyxJQUFBLFdBQUFuRCxDQUFBLElBQUErQyxNQUFBLFNBQUEvQyxDQUFBLEVBQUFTLENBQUEsRUFBQUUsQ0FBQSxnQkFBQVgsQ0FBQSxJQUFBK0MsTUFBQSxVQUFBL0MsQ0FBQSxFQUFBUyxDQUFBLEVBQUFFLENBQUEsUUFBQWQsQ0FBQSxDQUFBb0QsT0FBQSxDQUFBbkIsQ0FBQSxFQUFBcUIsSUFBQSxXQUFBbkQsQ0FBQSxJQUFBZSxDQUFBLENBQUFQLEtBQUEsR0FBQVIsQ0FBQSxFQUFBUyxDQUFBLENBQUFNLENBQUEsZ0JBQUFmLENBQUEsV0FBQStDLE1BQUEsVUFBQS9DLENBQUEsRUFBQVMsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsQ0FBQUUsQ0FBQSxDQUFBZSxHQUFBLFNBQUEzQixDQUFBLEVBQUFLLENBQUEsb0JBQUFFLEtBQUEsV0FBQUEsTUFBQVIsQ0FBQSxFQUFBSSxDQUFBLGFBQUFnRCwyQkFBQSxlQUFBdkQsQ0FBQSxXQUFBQSxDQUFBLEVBQUFJLENBQUEsSUFBQThDLE1BQUEsQ0FBQS9DLENBQUEsRUFBQUksQ0FBQSxFQUFBUCxDQUFBLEVBQUFJLENBQUEsZ0JBQUFBLENBQUEsR0FBQUEsQ0FBQSxHQUFBQSxDQUFBLENBQUFrRCxJQUFBLENBQUFDLDBCQUFBLEVBQUFBLDBCQUFBLElBQUFBLDBCQUFBLHFCQUFBM0IsaUJBQUE1QixDQUFBLEVBQUFJLENBQUEsRUFBQUcsQ0FBQSxRQUFBRSxDQUFBLEdBQUF3QixDQUFBLG1CQUFBckIsQ0FBQSxFQUFBRSxDQUFBLFFBQUFMLENBQUEsS0FBQTBCLENBQUEsUUFBQXFCLEtBQUEsc0NBQUEvQyxDQUFBLEtBQUEyQixDQUFBLG9CQUFBeEIsQ0FBQSxRQUFBRSxDQUFBLFdBQUFILEtBQUEsRUFBQVIsQ0FBQSxFQUFBc0QsSUFBQSxlQUFBbEQsQ0FBQSxDQUFBbUQsTUFBQSxHQUFBOUMsQ0FBQSxFQUFBTCxDQUFBLENBQUF3QixHQUFBLEdBQUFqQixDQUFBLFVBQUFFLENBQUEsR0FBQVQsQ0FBQSxDQUFBb0QsUUFBQSxNQUFBM0MsQ0FBQSxRQUFBRSxDQUFBLEdBQUEwQyxtQkFBQSxDQUFBNUMsQ0FBQSxFQUFBVCxDQUFBLE9BQUFXLENBQUEsUUFBQUEsQ0FBQSxLQUFBbUIsQ0FBQSxtQkFBQW5CLENBQUEscUJBQUFYLENBQUEsQ0FBQW1ELE1BQUEsRUFBQW5ELENBQUEsQ0FBQXNELElBQUEsR0FBQXRELENBQUEsQ0FBQXVELEtBQUEsR0FBQXZELENBQUEsQ0FBQXdCLEdBQUEsc0JBQUF4QixDQUFBLENBQUFtRCxNQUFBLFFBQUFqRCxDQUFBLEtBQUF3QixDQUFBLFFBQUF4QixDQUFBLEdBQUEyQixDQUFBLEVBQUE3QixDQUFBLENBQUF3QixHQUFBLEVBQUF4QixDQUFBLENBQUF3RCxpQkFBQSxDQUFBeEQsQ0FBQSxDQUFBd0IsR0FBQSx1QkFBQXhCLENBQUEsQ0FBQW1ELE1BQUEsSUFBQW5ELENBQUEsQ0FBQXlELE1BQUEsV0FBQXpELENBQUEsQ0FBQXdCLEdBQUEsR0FBQXRCLENBQUEsR0FBQTBCLENBQUEsTUFBQUssQ0FBQSxHQUFBWCxRQUFBLENBQUE3QixDQUFBLEVBQUFJLENBQUEsRUFBQUcsQ0FBQSxvQkFBQWlDLENBQUEsQ0FBQVYsSUFBQSxRQUFBckIsQ0FBQSxHQUFBRixDQUFBLENBQUFrRCxJQUFBLEdBQUFyQixDQUFBLEdBQUFGLENBQUEsRUFBQU0sQ0FBQSxDQUFBVCxHQUFBLEtBQUFNLENBQUEscUJBQUExQixLQUFBLEVBQUE2QixDQUFBLENBQUFULEdBQUEsRUFBQTBCLElBQUEsRUFBQWxELENBQUEsQ0FBQWtELElBQUEsa0JBQUFqQixDQUFBLENBQUFWLElBQUEsS0FBQXJCLENBQUEsR0FBQTJCLENBQUEsRUFBQTdCLENBQUEsQ0FBQW1ELE1BQUEsWUFBQW5ELENBQUEsQ0FBQXdCLEdBQUEsR0FBQVMsQ0FBQSxDQUFBVCxHQUFBLG1CQUFBNkIsb0JBQUE1RCxDQUFBLEVBQUFJLENBQUEsUUFBQUcsQ0FBQSxHQUFBSCxDQUFBLENBQUFzRCxNQUFBLEVBQUFqRCxDQUFBLEdBQUFULENBQUEsQ0FBQWUsUUFBQSxDQUFBUixDQUFBLE9BQUFFLENBQUEsS0FBQU4sQ0FBQSxTQUFBQyxDQUFBLENBQUF1RCxRQUFBLHFCQUFBcEQsQ0FBQSxJQUFBUCxDQUFBLENBQUFlLFFBQUEsZUFBQVgsQ0FBQSxDQUFBc0QsTUFBQSxhQUFBdEQsQ0FBQSxDQUFBMkIsR0FBQSxHQUFBNUIsQ0FBQSxFQUFBeUQsbUJBQUEsQ0FBQTVELENBQUEsRUFBQUksQ0FBQSxlQUFBQSxDQUFBLENBQUFzRCxNQUFBLGtCQUFBbkQsQ0FBQSxLQUFBSCxDQUFBLENBQUFzRCxNQUFBLFlBQUF0RCxDQUFBLENBQUEyQixHQUFBLE9BQUFrQyxTQUFBLHVDQUFBMUQsQ0FBQSxpQkFBQThCLENBQUEsTUFBQXpCLENBQUEsR0FBQWlCLFFBQUEsQ0FBQXBCLENBQUEsRUFBQVQsQ0FBQSxDQUFBZSxRQUFBLEVBQUFYLENBQUEsQ0FBQTJCLEdBQUEsbUJBQUFuQixDQUFBLENBQUFrQixJQUFBLFNBQUExQixDQUFBLENBQUFzRCxNQUFBLFlBQUF0RCxDQUFBLENBQUEyQixHQUFBLEdBQUFuQixDQUFBLENBQUFtQixHQUFBLEVBQUEzQixDQUFBLENBQUF1RCxRQUFBLFNBQUF0QixDQUFBLE1BQUF2QixDQUFBLEdBQUFGLENBQUEsQ0FBQW1CLEdBQUEsU0FBQWpCLENBQUEsR0FBQUEsQ0FBQSxDQUFBMkMsSUFBQSxJQUFBckQsQ0FBQSxDQUFBSixDQUFBLENBQUFrRSxVQUFBLElBQUFwRCxDQUFBLENBQUFILEtBQUEsRUFBQVAsQ0FBQSxDQUFBK0QsSUFBQSxHQUFBbkUsQ0FBQSxDQUFBb0UsT0FBQSxlQUFBaEUsQ0FBQSxDQUFBc0QsTUFBQSxLQUFBdEQsQ0FBQSxDQUFBc0QsTUFBQSxXQUFBdEQsQ0FBQSxDQUFBMkIsR0FBQSxHQUFBNUIsQ0FBQSxHQUFBQyxDQUFBLENBQUF1RCxRQUFBLFNBQUF0QixDQUFBLElBQUF2QixDQUFBLElBQUFWLENBQUEsQ0FBQXNELE1BQUEsWUFBQXRELENBQUEsQ0FBQTJCLEdBQUEsT0FBQWtDLFNBQUEsc0NBQUE3RCxDQUFBLENBQUF1RCxRQUFBLFNBQUF0QixDQUFBLGNBQUFnQyxhQUFBbEUsQ0FBQSxRQUFBSCxDQUFBLEtBQUFzRSxNQUFBLEVBQUFuRSxDQUFBLFlBQUFBLENBQUEsS0FBQUgsQ0FBQSxDQUFBdUUsUUFBQSxHQUFBcEUsQ0FBQSxXQUFBQSxDQUFBLEtBQUFILENBQUEsQ0FBQXdFLFVBQUEsR0FBQXJFLENBQUEsS0FBQUgsQ0FBQSxDQUFBeUUsUUFBQSxHQUFBdEUsQ0FBQSxXQUFBdUUsVUFBQSxDQUFBQyxJQUFBLENBQUEzRSxDQUFBLGNBQUE0RSxjQUFBekUsQ0FBQSxRQUFBSCxDQUFBLEdBQUFHLENBQUEsQ0FBQTBFLFVBQUEsUUFBQTdFLENBQUEsQ0FBQThCLElBQUEsb0JBQUE5QixDQUFBLENBQUErQixHQUFBLEVBQUE1QixDQUFBLENBQUEwRSxVQUFBLEdBQUE3RSxDQUFBLGFBQUEyQixRQUFBeEIsQ0FBQSxTQUFBdUUsVUFBQSxNQUFBSixNQUFBLGFBQUFuRSxDQUFBLENBQUE0QyxPQUFBLENBQUFzQixZQUFBLGNBQUFTLEtBQUEsaUJBQUFsQyxPQUFBNUMsQ0FBQSxRQUFBQSxDQUFBLFdBQUFBLENBQUEsUUFBQUksQ0FBQSxHQUFBSixDQUFBLENBQUFjLENBQUEsT0FBQVYsQ0FBQSxTQUFBQSxDQUFBLENBQUE0QixJQUFBLENBQUFoQyxDQUFBLDRCQUFBQSxDQUFBLENBQUFtRSxJQUFBLFNBQUFuRSxDQUFBLE9BQUErRSxLQUFBLENBQUEvRSxDQUFBLENBQUFnRixNQUFBLFNBQUF2RSxDQUFBLE9BQUFHLENBQUEsWUFBQXVELEtBQUEsYUFBQTFELENBQUEsR0FBQVQsQ0FBQSxDQUFBZ0YsTUFBQSxPQUFBekUsQ0FBQSxDQUFBeUIsSUFBQSxDQUFBaEMsQ0FBQSxFQUFBUyxDQUFBLFVBQUEwRCxJQUFBLENBQUF4RCxLQUFBLEdBQUFYLENBQUEsQ0FBQVMsQ0FBQSxHQUFBMEQsSUFBQSxDQUFBVixJQUFBLE9BQUFVLElBQUEsU0FBQUEsSUFBQSxDQUFBeEQsS0FBQSxHQUFBUixDQUFBLEVBQUFnRSxJQUFBLENBQUFWLElBQUEsT0FBQVUsSUFBQSxZQUFBdkQsQ0FBQSxDQUFBdUQsSUFBQSxHQUFBdkQsQ0FBQSxnQkFBQXFELFNBQUEsQ0FBQWQsT0FBQSxDQUFBbkQsQ0FBQSxrQ0FBQXNDLGlCQUFBLENBQUFoQyxTQUFBLEdBQUFpQywwQkFBQSxFQUFBOUIsQ0FBQSxDQUFBb0MsQ0FBQSxtQkFBQWxDLEtBQUEsRUFBQTRCLDBCQUFBLEVBQUFqQixZQUFBLFNBQUFiLENBQUEsQ0FBQThCLDBCQUFBLG1CQUFBNUIsS0FBQSxFQUFBMkIsaUJBQUEsRUFBQWhCLFlBQUEsU0FBQWdCLGlCQUFBLENBQUEyQyxXQUFBLEdBQUE3RCxNQUFBLENBQUFtQiwwQkFBQSxFQUFBckIsQ0FBQSx3QkFBQWxCLENBQUEsQ0FBQWtGLG1CQUFBLGFBQUEvRSxDQUFBLFFBQUFILENBQUEsd0JBQUFHLENBQUEsSUFBQUEsQ0FBQSxDQUFBZ0YsV0FBQSxXQUFBbkYsQ0FBQSxLQUFBQSxDQUFBLEtBQUFzQyxpQkFBQSw2QkFBQXRDLENBQUEsQ0FBQWlGLFdBQUEsSUFBQWpGLENBQUEsQ0FBQW9GLElBQUEsT0FBQXBGLENBQUEsQ0FBQXFGLElBQUEsYUFBQWxGLENBQUEsV0FBQUUsTUFBQSxDQUFBaUYsY0FBQSxHQUFBakYsTUFBQSxDQUFBaUYsY0FBQSxDQUFBbkYsQ0FBQSxFQUFBb0MsMEJBQUEsS0FBQXBDLENBQUEsQ0FBQW9GLFNBQUEsR0FBQWhELDBCQUFBLEVBQUFuQixNQUFBLENBQUFqQixDQUFBLEVBQUFlLENBQUEseUJBQUFmLENBQUEsQ0FBQUcsU0FBQSxHQUFBRCxNQUFBLENBQUFxQixNQUFBLENBQUFtQixDQUFBLEdBQUExQyxDQUFBLEtBQUFILENBQUEsQ0FBQXdGLEtBQUEsYUFBQXJGLENBQUEsYUFBQWtELE9BQUEsRUFBQWxELENBQUEsT0FBQTJDLHFCQUFBLENBQUFHLGFBQUEsQ0FBQTNDLFNBQUEsR0FBQWMsTUFBQSxDQUFBNkIsYUFBQSxDQUFBM0MsU0FBQSxFQUFBVSxDQUFBLGlDQUFBaEIsQ0FBQSxDQUFBaUQsYUFBQSxHQUFBQSxhQUFBLEVBQUFqRCxDQUFBLENBQUF5RixLQUFBLGFBQUF0RixDQUFBLEVBQUFDLENBQUEsRUFBQUcsQ0FBQSxFQUFBRSxDQUFBLEVBQUFHLENBQUEsZUFBQUEsQ0FBQSxLQUFBQSxDQUFBLEdBQUE4RSxPQUFBLE9BQUE1RSxDQUFBLE9BQUFtQyxhQUFBLENBQUF6QixJQUFBLENBQUFyQixDQUFBLEVBQUFDLENBQUEsRUFBQUcsQ0FBQSxFQUFBRSxDQUFBLEdBQUFHLENBQUEsVUFBQVosQ0FBQSxDQUFBa0YsbUJBQUEsQ0FBQTlFLENBQUEsSUFBQVUsQ0FBQSxHQUFBQSxDQUFBLENBQUFxRCxJQUFBLEdBQUFiLElBQUEsV0FBQW5ELENBQUEsV0FBQUEsQ0FBQSxDQUFBc0QsSUFBQSxHQUFBdEQsQ0FBQSxDQUFBUSxLQUFBLEdBQUFHLENBQUEsQ0FBQXFELElBQUEsV0FBQXJCLHFCQUFBLENBQUFELENBQUEsR0FBQXpCLE1BQUEsQ0FBQXlCLENBQUEsRUFBQTNCLENBQUEsZ0JBQUFFLE1BQUEsQ0FBQXlCLENBQUEsRUFBQS9CLENBQUEsaUNBQUFNLE1BQUEsQ0FBQXlCLENBQUEsNkRBQUE3QyxDQUFBLENBQUEyRixJQUFBLGFBQUF4RixDQUFBLFFBQUFILENBQUEsR0FBQUssTUFBQSxDQUFBRixDQUFBLEdBQUFDLENBQUEsZ0JBQUFHLENBQUEsSUFBQVAsQ0FBQSxFQUFBSSxDQUFBLENBQUF1RSxJQUFBLENBQUFwRSxDQUFBLFVBQUFILENBQUEsQ0FBQXdGLE9BQUEsYUFBQXpCLEtBQUEsV0FBQS9ELENBQUEsQ0FBQTRFLE1BQUEsU0FBQTdFLENBQUEsR0FBQUMsQ0FBQSxDQUFBeUYsR0FBQSxRQUFBMUYsQ0FBQSxJQUFBSCxDQUFBLFNBQUFtRSxJQUFBLENBQUF4RCxLQUFBLEdBQUFSLENBQUEsRUFBQWdFLElBQUEsQ0FBQVYsSUFBQSxPQUFBVSxJQUFBLFdBQUFBLElBQUEsQ0FBQVYsSUFBQSxPQUFBVSxJQUFBLFFBQUFuRSxDQUFBLENBQUE0QyxNQUFBLEdBQUFBLE1BQUEsRUFBQWpCLE9BQUEsQ0FBQXJCLFNBQUEsS0FBQTZFLFdBQUEsRUFBQXhELE9BQUEsRUFBQW1ELEtBQUEsV0FBQUEsTUFBQTlFLENBQUEsYUFBQThGLElBQUEsV0FBQTNCLElBQUEsV0FBQU4sSUFBQSxRQUFBQyxLQUFBLEdBQUEzRCxDQUFBLE9BQUFzRCxJQUFBLFlBQUFFLFFBQUEsY0FBQUQsTUFBQSxnQkFBQTNCLEdBQUEsR0FBQTVCLENBQUEsT0FBQXVFLFVBQUEsQ0FBQTNCLE9BQUEsQ0FBQTZCLGFBQUEsSUFBQTVFLENBQUEsV0FBQUksQ0FBQSxrQkFBQUEsQ0FBQSxDQUFBMkYsTUFBQSxPQUFBeEYsQ0FBQSxDQUFBeUIsSUFBQSxPQUFBNUIsQ0FBQSxNQUFBMkUsS0FBQSxFQUFBM0UsQ0FBQSxDQUFBNEYsS0FBQSxjQUFBNUYsQ0FBQSxJQUFBRCxDQUFBLE1BQUE4RixJQUFBLFdBQUFBLEtBQUEsU0FBQXhDLElBQUEsV0FBQXRELENBQUEsUUFBQXVFLFVBQUEsSUFBQUcsVUFBQSxrQkFBQTFFLENBQUEsQ0FBQTJCLElBQUEsUUFBQTNCLENBQUEsQ0FBQTRCLEdBQUEsY0FBQW1FLElBQUEsS0FBQW5DLGlCQUFBLFdBQUFBLGtCQUFBL0QsQ0FBQSxhQUFBeUQsSUFBQSxRQUFBekQsQ0FBQSxNQUFBSSxDQUFBLGtCQUFBK0YsT0FBQTVGLENBQUEsRUFBQUUsQ0FBQSxXQUFBSyxDQUFBLENBQUFnQixJQUFBLFlBQUFoQixDQUFBLENBQUFpQixHQUFBLEdBQUEvQixDQUFBLEVBQUFJLENBQUEsQ0FBQStELElBQUEsR0FBQTVELENBQUEsRUFBQUUsQ0FBQSxLQUFBTCxDQUFBLENBQUFzRCxNQUFBLFdBQUF0RCxDQUFBLENBQUEyQixHQUFBLEdBQUE1QixDQUFBLEtBQUFNLENBQUEsYUFBQUEsQ0FBQSxRQUFBaUUsVUFBQSxDQUFBTSxNQUFBLE1BQUF2RSxDQUFBLFNBQUFBLENBQUEsUUFBQUcsQ0FBQSxRQUFBOEQsVUFBQSxDQUFBakUsQ0FBQSxHQUFBSyxDQUFBLEdBQUFGLENBQUEsQ0FBQWlFLFVBQUEsaUJBQUFqRSxDQUFBLENBQUEwRCxNQUFBLFNBQUE2QixNQUFBLGFBQUF2RixDQUFBLENBQUEwRCxNQUFBLFNBQUF3QixJQUFBLFFBQUE5RSxDQUFBLEdBQUFULENBQUEsQ0FBQXlCLElBQUEsQ0FBQXBCLENBQUEsZUFBQU0sQ0FBQSxHQUFBWCxDQUFBLENBQUF5QixJQUFBLENBQUFwQixDQUFBLHFCQUFBSSxDQUFBLElBQUFFLENBQUEsYUFBQTRFLElBQUEsR0FBQWxGLENBQUEsQ0FBQTJELFFBQUEsU0FBQTRCLE1BQUEsQ0FBQXZGLENBQUEsQ0FBQTJELFFBQUEsZ0JBQUF1QixJQUFBLEdBQUFsRixDQUFBLENBQUE0RCxVQUFBLFNBQUEyQixNQUFBLENBQUF2RixDQUFBLENBQUE0RCxVQUFBLGNBQUF4RCxDQUFBLGFBQUE4RSxJQUFBLEdBQUFsRixDQUFBLENBQUEyRCxRQUFBLFNBQUE0QixNQUFBLENBQUF2RixDQUFBLENBQUEyRCxRQUFBLHFCQUFBckQsQ0FBQSxRQUFBc0MsS0FBQSxxREFBQXNDLElBQUEsR0FBQWxGLENBQUEsQ0FBQTRELFVBQUEsU0FBQTJCLE1BQUEsQ0FBQXZGLENBQUEsQ0FBQTRELFVBQUEsWUFBQVIsTUFBQSxXQUFBQSxPQUFBN0QsQ0FBQSxFQUFBSCxDQUFBLGFBQUFJLENBQUEsUUFBQXNFLFVBQUEsQ0FBQU0sTUFBQSxNQUFBNUUsQ0FBQSxTQUFBQSxDQUFBLFFBQUFLLENBQUEsUUFBQWlFLFVBQUEsQ0FBQXRFLENBQUEsT0FBQUssQ0FBQSxDQUFBNkQsTUFBQSxTQUFBd0IsSUFBQSxJQUFBdkYsQ0FBQSxDQUFBeUIsSUFBQSxDQUFBdkIsQ0FBQSx3QkFBQXFGLElBQUEsR0FBQXJGLENBQUEsQ0FBQStELFVBQUEsUUFBQTVELENBQUEsR0FBQUgsQ0FBQSxhQUFBRyxDQUFBLGlCQUFBVCxDQUFBLG1CQUFBQSxDQUFBLEtBQUFTLENBQUEsQ0FBQTBELE1BQUEsSUFBQXRFLENBQUEsSUFBQUEsQ0FBQSxJQUFBWSxDQUFBLENBQUE0RCxVQUFBLEtBQUE1RCxDQUFBLGNBQUFFLENBQUEsR0FBQUYsQ0FBQSxHQUFBQSxDQUFBLENBQUFpRSxVQUFBLGNBQUEvRCxDQUFBLENBQUFnQixJQUFBLEdBQUEzQixDQUFBLEVBQUFXLENBQUEsQ0FBQWlCLEdBQUEsR0FBQS9CLENBQUEsRUFBQVksQ0FBQSxTQUFBOEMsTUFBQSxnQkFBQVMsSUFBQSxHQUFBdkQsQ0FBQSxDQUFBNEQsVUFBQSxFQUFBbkMsQ0FBQSxTQUFBK0QsUUFBQSxDQUFBdEYsQ0FBQSxNQUFBc0YsUUFBQSxXQUFBQSxTQUFBakcsQ0FBQSxFQUFBSCxDQUFBLG9CQUFBRyxDQUFBLENBQUEyQixJQUFBLFFBQUEzQixDQUFBLENBQUE0QixHQUFBLHFCQUFBNUIsQ0FBQSxDQUFBMkIsSUFBQSxtQkFBQTNCLENBQUEsQ0FBQTJCLElBQUEsUUFBQXFDLElBQUEsR0FBQWhFLENBQUEsQ0FBQTRCLEdBQUEsZ0JBQUE1QixDQUFBLENBQUEyQixJQUFBLFNBQUFvRSxJQUFBLFFBQUFuRSxHQUFBLEdBQUE1QixDQUFBLENBQUE0QixHQUFBLE9BQUEyQixNQUFBLGtCQUFBUyxJQUFBLHlCQUFBaEUsQ0FBQSxDQUFBMkIsSUFBQSxJQUFBOUIsQ0FBQSxVQUFBbUUsSUFBQSxHQUFBbkUsQ0FBQSxHQUFBcUMsQ0FBQSxLQUFBZ0UsTUFBQSxXQUFBQSxPQUFBbEcsQ0FBQSxhQUFBSCxDQUFBLFFBQUEwRSxVQUFBLENBQUFNLE1BQUEsTUFBQWhGLENBQUEsU0FBQUEsQ0FBQSxRQUFBSSxDQUFBLFFBQUFzRSxVQUFBLENBQUExRSxDQUFBLE9BQUFJLENBQUEsQ0FBQW9FLFVBQUEsS0FBQXJFLENBQUEsY0FBQWlHLFFBQUEsQ0FBQWhHLENBQUEsQ0FBQXlFLFVBQUEsRUFBQXpFLENBQUEsQ0FBQXFFLFFBQUEsR0FBQUcsYUFBQSxDQUFBeEUsQ0FBQSxHQUFBaUMsQ0FBQSx5QkFBQWlFLE9BQUFuRyxDQUFBLGFBQUFILENBQUEsUUFBQTBFLFVBQUEsQ0FBQU0sTUFBQSxNQUFBaEYsQ0FBQSxTQUFBQSxDQUFBLFFBQUFJLENBQUEsUUFBQXNFLFVBQUEsQ0FBQTFFLENBQUEsT0FBQUksQ0FBQSxDQUFBa0UsTUFBQSxLQUFBbkUsQ0FBQSxRQUFBSSxDQUFBLEdBQUFILENBQUEsQ0FBQXlFLFVBQUEsa0JBQUF0RSxDQUFBLENBQUF1QixJQUFBLFFBQUFyQixDQUFBLEdBQUFGLENBQUEsQ0FBQXdCLEdBQUEsRUFBQTZDLGFBQUEsQ0FBQXhFLENBQUEsWUFBQUssQ0FBQSxZQUFBK0MsS0FBQSw4QkFBQStDLGFBQUEsV0FBQUEsY0FBQXZHLENBQUEsRUFBQUksQ0FBQSxFQUFBRyxDQUFBLGdCQUFBb0QsUUFBQSxLQUFBNUMsUUFBQSxFQUFBNkIsTUFBQSxDQUFBNUMsQ0FBQSxHQUFBa0UsVUFBQSxFQUFBOUQsQ0FBQSxFQUFBZ0UsT0FBQSxFQUFBN0QsQ0FBQSxvQkFBQW1ELE1BQUEsVUFBQTNCLEdBQUEsR0FBQTVCLENBQUEsR0FBQWtDLENBQUEsT0FBQXJDLENBQUE7QUFBQSxTQUFBd0csMkJBQUFwRyxDQUFBLEVBQUFKLENBQUEsUUFBQUcsQ0FBQSx5QkFBQVUsTUFBQSxJQUFBVCxDQUFBLENBQUFTLE1BQUEsQ0FBQUUsUUFBQSxLQUFBWCxDQUFBLHFCQUFBRCxDQUFBLFFBQUFzRyxLQUFBLENBQUFDLE9BQUEsQ0FBQXRHLENBQUEsTUFBQUQsQ0FBQSxHQUFBd0csMkJBQUEsQ0FBQXZHLENBQUEsTUFBQUosQ0FBQSxJQUFBSSxDQUFBLHVCQUFBQSxDQUFBLENBQUE0RSxNQUFBLElBQUE3RSxDQUFBLEtBQUFDLENBQUEsR0FBQUQsQ0FBQSxPQUFBeUcsRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQXpFLENBQUEsRUFBQXlFLENBQUEsRUFBQXRHLENBQUEsV0FBQUEsRUFBQSxXQUFBcUcsRUFBQSxJQUFBeEcsQ0FBQSxDQUFBNEUsTUFBQSxLQUFBdkIsSUFBQSxXQUFBQSxJQUFBLE1BQUE5QyxLQUFBLEVBQUFQLENBQUEsQ0FBQXdHLEVBQUEsVUFBQTVHLENBQUEsV0FBQUEsRUFBQUksQ0FBQSxVQUFBQSxDQUFBLEtBQUErQixDQUFBLEVBQUEwRSxDQUFBLGdCQUFBNUMsU0FBQSxpSkFBQXhELENBQUEsRUFBQUssQ0FBQSxPQUFBSSxDQUFBLGdCQUFBa0IsQ0FBQSxXQUFBQSxFQUFBLElBQUFqQyxDQUFBLEdBQUFBLENBQUEsQ0FBQTZCLElBQUEsQ0FBQTVCLENBQUEsTUFBQUcsQ0FBQSxXQUFBQSxFQUFBLFFBQUFILENBQUEsR0FBQUQsQ0FBQSxDQUFBZ0UsSUFBQSxXQUFBckQsQ0FBQSxHQUFBVixDQUFBLENBQUFxRCxJQUFBLEVBQUFyRCxDQUFBLEtBQUFKLENBQUEsV0FBQUEsRUFBQUksQ0FBQSxJQUFBYyxDQUFBLE9BQUFULENBQUEsR0FBQUwsQ0FBQSxLQUFBK0IsQ0FBQSxXQUFBQSxFQUFBLFVBQUFyQixDQUFBLFlBQUFYLENBQUEsY0FBQUEsQ0FBQSw4QkFBQWUsQ0FBQSxRQUFBVCxDQUFBO0FBQUEsU0FBQWtHLDRCQUFBdkcsQ0FBQSxFQUFBVSxDQUFBLFFBQUFWLENBQUEsMkJBQUFBLENBQUEsU0FBQTBHLGlCQUFBLENBQUExRyxDQUFBLEVBQUFVLENBQUEsT0FBQVgsQ0FBQSxNQUFBNEcsUUFBQSxDQUFBL0UsSUFBQSxDQUFBNUIsQ0FBQSxFQUFBNEYsS0FBQSw2QkFBQTdGLENBQUEsSUFBQUMsQ0FBQSxDQUFBK0UsV0FBQSxLQUFBaEYsQ0FBQSxHQUFBQyxDQUFBLENBQUErRSxXQUFBLENBQUFDLElBQUEsYUFBQWpGLENBQUEsY0FBQUEsQ0FBQSxHQUFBc0csS0FBQSxDQUFBTyxJQUFBLENBQUE1RyxDQUFBLG9CQUFBRCxDQUFBLCtDQUFBOEcsSUFBQSxDQUFBOUcsQ0FBQSxJQUFBMkcsaUJBQUEsQ0FBQTFHLENBQUEsRUFBQVUsQ0FBQTtBQUFBLFNBQUFnRyxrQkFBQTFHLENBQUEsRUFBQVUsQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQVYsQ0FBQSxDQUFBNEUsTUFBQSxNQUFBbEUsQ0FBQSxHQUFBVixDQUFBLENBQUE0RSxNQUFBLFlBQUFoRixDQUFBLE1BQUFPLENBQUEsR0FBQWtHLEtBQUEsQ0FBQTNGLENBQUEsR0FBQWQsQ0FBQSxHQUFBYyxDQUFBLEVBQUFkLENBQUEsSUFBQU8sQ0FBQSxDQUFBUCxDQUFBLElBQUFJLENBQUEsQ0FBQUosQ0FBQSxVQUFBTyxDQUFBO0FBQUEsU0FBQTJHLG1CQUFBM0csQ0FBQSxFQUFBSixDQUFBLEVBQUFILENBQUEsRUFBQUksQ0FBQSxFQUFBSyxDQUFBLEVBQUFLLENBQUEsRUFBQUUsQ0FBQSxjQUFBSixDQUFBLEdBQUFMLENBQUEsQ0FBQU8sQ0FBQSxFQUFBRSxDQUFBLEdBQUFFLENBQUEsR0FBQU4sQ0FBQSxDQUFBRCxLQUFBLFdBQUFKLENBQUEsZ0JBQUFQLENBQUEsQ0FBQU8sQ0FBQSxLQUFBSyxDQUFBLENBQUE2QyxJQUFBLEdBQUF0RCxDQUFBLENBQUFlLENBQUEsSUFBQXdFLE9BQUEsQ0FBQXRDLE9BQUEsQ0FBQWxDLENBQUEsRUFBQW9DLElBQUEsQ0FBQWxELENBQUEsRUFBQUssQ0FBQTtBQUFBLFNBQUEwRyxrQkFBQTVHLENBQUEsNkJBQUFKLENBQUEsU0FBQUgsQ0FBQSxHQUFBb0gsU0FBQSxhQUFBMUIsT0FBQSxXQUFBdEYsQ0FBQSxFQUFBSyxDQUFBLFFBQUFLLENBQUEsR0FBQVAsQ0FBQSxDQUFBOEcsS0FBQSxDQUFBbEgsQ0FBQSxFQUFBSCxDQUFBLFlBQUFzSCxNQUFBL0csQ0FBQSxJQUFBMkcsa0JBQUEsQ0FBQXBHLENBQUEsRUFBQVYsQ0FBQSxFQUFBSyxDQUFBLEVBQUE2RyxLQUFBLEVBQUFDLE1BQUEsVUFBQWhILENBQUEsY0FBQWdILE9BQUFoSCxDQUFBLElBQUEyRyxrQkFBQSxDQUFBcEcsQ0FBQSxFQUFBVixDQUFBLEVBQUFLLENBQUEsRUFBQTZHLEtBQUEsRUFBQUMsTUFBQSxXQUFBaEgsQ0FBQSxLQUFBK0csS0FBQTtBQUFBLFNBQUFFLFlBQUEsSUFBQUEsV0FBQSxZQUFBQSxZQUFBeEgsQ0FBQSxFQUFBSSxDQUFBLGVBQUFxSCxXQUFBLENBQUF6SCxDQUFBLFVBQUFJLENBQUEsVUFBQUosQ0FBQSxHQUFBMEgsTUFBQSxDQUFBcEgsU0FBQSxFQUFBRixDQUFBLE9BQUF1SCxPQUFBLGFBQUFGLFlBQUF6SCxDQUFBLEVBQUFHLENBQUEsRUFBQXFDLENBQUEsUUFBQS9CLENBQUEsR0FBQWlILE1BQUEsQ0FBQTFILENBQUEsRUFBQUcsQ0FBQSxVQUFBQyxDQUFBLENBQUF3SCxHQUFBLENBQUFuSCxDQUFBLEVBQUErQixDQUFBLElBQUFwQyxDQUFBLENBQUF5SCxHQUFBLENBQUE3SCxDQUFBLElBQUE4SCxlQUFBLENBQUFySCxDQUFBLEVBQUFnSCxXQUFBLENBQUFuSCxTQUFBLGNBQUF5SCxZQUFBL0gsQ0FBQSxFQUFBRyxDQUFBLFFBQUFxQyxDQUFBLEdBQUFwQyxDQUFBLENBQUF5SCxHQUFBLENBQUExSCxDQUFBLFVBQUFFLE1BQUEsQ0FBQXNGLElBQUEsQ0FBQW5ELENBQUEsRUFBQXdGLE1BQUEsV0FBQTVILENBQUEsRUFBQUQsQ0FBQSxRQUFBTSxDQUFBLEdBQUErQixDQUFBLENBQUFyQyxDQUFBLDBCQUFBTSxDQUFBLEVBQUFMLENBQUEsQ0FBQUQsQ0FBQSxJQUFBSCxDQUFBLENBQUFTLENBQUEsa0JBQUFHLENBQUEsaUJBQUFaLENBQUEsQ0FBQVMsQ0FBQSxDQUFBRyxDQUFBLE1BQUFBLENBQUEsT0FBQUgsQ0FBQSxDQUFBdUUsTUFBQSxHQUFBcEUsQ0FBQSxJQUFBUixDQUFBLENBQUFELENBQUEsSUFBQUgsQ0FBQSxDQUFBUyxDQUFBLENBQUFHLENBQUEsYUFBQVIsQ0FBQSxLQUFBQyxNQUFBLENBQUFxQixNQUFBLGtCQUFBdUcsU0FBQSxDQUFBUixXQUFBLEVBQUFDLE1BQUEsR0FBQUQsV0FBQSxDQUFBbkgsU0FBQSxDQUFBNEgsSUFBQSxhQUFBOUgsQ0FBQSxRQUFBRCxDQUFBLEdBQUFILENBQUEsQ0FBQWtJLElBQUEsQ0FBQWxHLElBQUEsT0FBQTVCLENBQUEsT0FBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFnSSxNQUFBLEdBQUFKLFdBQUEsQ0FBQTVILENBQUEsYUFBQXFDLENBQUEsR0FBQXJDLENBQUEsQ0FBQWlJLE9BQUEsRUFBQTVGLENBQUEsS0FBQUEsQ0FBQSxDQUFBMkYsTUFBQSxHQUFBSixXQUFBLENBQUF2RixDQUFBLG1CQUFBckMsQ0FBQSxLQUFBc0gsV0FBQSxDQUFBbkgsU0FBQSxDQUFBTyxNQUFBLENBQUF3SCxPQUFBLGNBQUFsSSxDQUFBLEVBQUFxQyxDQUFBLDJCQUFBQSxDQUFBLFFBQUEvQixDQUFBLEdBQUFMLENBQUEsQ0FBQXlILEdBQUEsZUFBQTdILENBQUEsQ0FBQWEsTUFBQSxDQUFBd0gsT0FBQSxFQUFBckcsSUFBQSxPQUFBN0IsQ0FBQSxFQUFBcUMsQ0FBQSxDQUFBNkYsT0FBQSwyQkFBQXJJLENBQUEsRUFBQUksQ0FBQSxRQUFBRCxDQUFBLEdBQUFNLENBQUEsQ0FBQUwsQ0FBQSxpQkFBQXFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBdkcsQ0FBQSxJQUFBQSxDQUFBLENBQUFtSSxJQUFBLFFBQUFuSSxDQUFBLG1DQUFBcUMsQ0FBQSxRQUFBNUIsQ0FBQSxnQkFBQVosQ0FBQSxDQUFBYSxNQUFBLENBQUF3SCxPQUFBLEVBQUFyRyxJQUFBLE9BQUE3QixDQUFBLG9CQUFBSCxDQUFBLEdBQUFvSCxTQUFBLHFCQUFBakUsT0FBQSxDQUFBbkQsQ0FBQSxDQUFBQSxDQUFBLENBQUFnRixNQUFBLFdBQUFoRixDQUFBLE1BQUFnRyxLQUFBLENBQUFoRSxJQUFBLENBQUFoQyxDQUFBLEdBQUEyRSxJQUFBLENBQUFvRCxXQUFBLENBQUEvSCxDQUFBLEVBQUFZLENBQUEsSUFBQTRCLENBQUEsQ0FBQTZFLEtBQUEsT0FBQXJILENBQUEsZ0JBQUFBLENBQUEsQ0FBQWEsTUFBQSxDQUFBd0gsT0FBQSxFQUFBckcsSUFBQSxPQUFBN0IsQ0FBQSxFQUFBcUMsQ0FBQSxNQUFBZ0YsV0FBQSxDQUFBSCxLQUFBLE9BQUFELFNBQUE7QUFBQSxTQUFBYSxVQUFBOUgsQ0FBQSxFQUFBSCxDQUFBLDZCQUFBQSxDQUFBLGFBQUFBLENBQUEsWUFBQWlFLFNBQUEsd0RBQUE5RCxDQUFBLENBQUFHLFNBQUEsR0FBQUQsTUFBQSxDQUFBcUIsTUFBQSxDQUFBMUIsQ0FBQSxJQUFBQSxDQUFBLENBQUFNLFNBQUEsSUFBQTZFLFdBQUEsSUFBQXhFLEtBQUEsRUFBQVIsQ0FBQSxFQUFBb0IsUUFBQSxNQUFBRCxZQUFBLFdBQUFqQixNQUFBLENBQUFLLGNBQUEsQ0FBQVAsQ0FBQSxpQkFBQW9CLFFBQUEsU0FBQXZCLENBQUEsSUFBQThILGVBQUEsQ0FBQTNILENBQUEsRUFBQUgsQ0FBQTtBQUFBLFNBQUE4SCxnQkFBQTNILENBQUEsRUFBQUgsQ0FBQSxXQUFBOEgsZUFBQSxHQUFBekgsTUFBQSxDQUFBaUYsY0FBQSxHQUFBakYsTUFBQSxDQUFBaUYsY0FBQSxDQUFBaUQsSUFBQSxlQUFBcEksQ0FBQSxFQUFBSCxDQUFBLFdBQUFHLENBQUEsQ0FBQW9GLFNBQUEsR0FBQXZGLENBQUEsRUFBQUcsQ0FBQSxLQUFBMkgsZUFBQSxDQUFBM0gsQ0FBQSxFQUFBSCxDQUFBO0FBaUJBLElBQU13SSxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FBRztFQUNWQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDckJDLElBQUksRUFBRSxzQ0FBc0M7RUFDNUNDLFFBQVEsRUFBRSxJQUFJO0VBQ2R4RCxJQUFJLEVBQUUsWUFBWTtFQUNsQnRELElBQUksRUFBRStHO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VKLEtBQUssRUFBRSxHQUFHO0VBQ1ZFLElBQUksRUFBRSxxQkFBcUI7RUFDM0J2RCxJQUFJLEVBQUUsUUFBUTtFQUNkdEQsSUFBSSxFQUFFZ0g7QUFDUixDQUFDLEVBQ0Q7RUFDRUwsS0FBSyxFQUFFLEdBQUc7RUFDVkUsSUFBSSxFQUFFLGNBQWM7RUFDcEJ2RCxJQUFJLEVBQUUsU0FBUztFQUNmdEQsSUFBSSxFQUFFZ0g7QUFDUixDQUFDLEVBQ0Q7RUFDRUMsYUFBYSxFQUFFLElBQUk7RUFDbkJKLElBQUksRUFBRSw0Q0FBNEM7RUFDbER2RCxJQUFJLEVBQUUsU0FBUztFQUNmdEQsSUFBSSxFQUFFK0c7QUFDUixDQUFDLENBQ0Y7QUFDRCxJQUFNRyxPQUFPLEdBQUcsSUFBQUMsMkJBQWUsRUFBQ1Qsa0JBQWtCLENBQUM7QUFFbkQsSUFBTVUsdUJBQXVCLGdCQUFBMUIsV0FBQSxDQUFHLDRCQUF3RDtFQUFBMUYsSUFBQTtFQUFBcUgsT0FBQTtFQUFBQyxRQUFBO0FBQUE7QUFFeEYsU0FBU0MsaUJBQWlCQSxDQUFDQyxJQUFZLEVBQUU7RUFDdkMsSUFBSSxDQUFDQyxtQkFBRSxDQUFDQyxVQUFVLENBQUNGLElBQUksQ0FBQyxFQUFFO0lBQ3hCQyxtQkFBRSxDQUFDRSxTQUFTLENBQUNILElBQUksQ0FBQztFQUNwQixDQUFDLE1BQU07SUFDTEMsbUJBQUUsQ0FBQ0csWUFBWSxDQUFDSixJQUFJLENBQUM7RUFDdkI7QUFDRjtBQUFDLFNBRWNLLFdBQVdBLENBQUE7RUFBQSxPQUFBQyxZQUFBLENBQUF2QyxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUFBLFNBQUF3QyxhQUFBO0VBQUFBLFlBQUEsR0FBQXpDLGlCQUFBLGNBQUFqSCxtQkFBQSxHQUFBbUYsSUFBQSxDQUExQixTQUFBd0UsUUFBQTtJQUFBLElBQUFDLGVBQUEsRUFBQUMsT0FBQSxFQUFBQyxPQUFBLEVBQUFDLElBQUEsRUFBQUMsVUFBQSxFQUFBQyxTQUFBLEVBQUFDLEtBQUEsRUFBQUMsR0FBQSxFQUFBQyxPQUFBLEVBQUFDLHFCQUFBLEVBQUFDLFVBQUEsRUFBQUMsTUFBQSxFQUFBQyxJQUFBLEVBQUFDLFdBQUEsRUFBQUMsaUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsV0FBQSxFQUFBM0IsT0FBQSxFQUFBNEIsUUFBQSxFQUFBQyxTQUFBLEVBQUFDLFdBQUEsRUFBQUMsVUFBQSxFQUFBQyxNQUFBLEVBQUFDLFFBQUEsRUFBQUMsUUFBQSxFQUFBQywwQkFBQSxFQUFBQyxVQUFBLEVBQUFDLE1BQUEsRUFBQUMsU0FBQSxFQUFBQyxXQUFBLEVBQUFDLHNCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLFNBQUEsRUFBQUMsSUFBQSxFQUFBQyxZQUFBLEVBQUFDLFVBQUEsRUFBQUMsTUFBQSxFQUFBQyxHQUFBLEVBQUFDLFNBQUEsRUFBQUMscUJBQUEsRUFBQUMsVUFBQSxFQUFBQyxNQUFBLEVBQUFDLElBQUEsRUFBQUMsV0FBQTtJQUFBLE9BQUF0TSxtQkFBQSxHQUFBc0IsSUFBQSxVQUFBaUwsU0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUE1RyxJQUFBLEdBQUE0RyxRQUFBLENBQUF2SSxJQUFBO1FBQUE7VUFDUTJGLGVBQWUsR0FBRyxJQUFBNkMsNEJBQWtCLEVBQUMzRCxPQUFPLENBQUM0RCxVQUFVLENBQUM7VUFDeEQ3QyxPQUFlLEdBQUdmLE9BQU8sQ0FBQ2UsT0FBTztVQUFBLE1BRW5DRCxlQUFlLEdBQUcrQyx5QkFBZSxDQUFDQyxNQUFNO1lBQUFKLFFBQUEsQ0FBQXZJLElBQUE7WUFBQTtVQUFBO1VBQ3BDNkYsT0FBTyxHQUFHK0Msa0JBQVEsQ0FBQ0MsTUFBTTtVQUUvQixJQUFJLENBQUNoRSxPQUFPLENBQUNpRSxNQUFNLEVBQUU7WUFDbkJDLE9BQU8sQ0FBQ0MsR0FBRyx3QkFBQUMsTUFBQSxDQUF3QnBELE9BQU8sQ0FBQ3FELFFBQVEsMkJBQW1CLENBQUM7VUFDekU7VUFBQ1gsUUFBQSxDQUFBdkksSUFBQTtVQUFBLE9BRWtCLElBQUFtSixpQkFBVSxFQUFDLENBQUM7UUFBQTtVQUF6QnJELElBQUksR0FBQXlDLFFBQUEsQ0FBQTdJLElBQUE7VUFDSnFHLFVBQVUsR0FBRyxJQUFJcUQsaUJBQVUsQ0FBQyxJQUFJQyxHQUFHLENBQUNDLGlCQUFVLENBQUMsQ0FBQztVQUFBdEQsU0FBQSxHQUFBM0QsMEJBQUEsQ0FDcEN5RCxJQUFJO1VBQUE7WUFBdEIsS0FBQUUsU0FBQSxDQUFBL0gsQ0FBQSxNQUFBZ0ksS0FBQSxHQUFBRCxTQUFBLENBQUE1SixDQUFBLElBQUFrRCxJQUFBLEdBQXdCO2NBQWI0RyxHQUFHLEdBQUFELEtBQUEsQ0FBQXpKLEtBQUE7Y0FDWnVKLFVBQVUsQ0FBQ3dELE1BQU0sQ0FBQ3JELEdBQUcsQ0FBQztZQUN4QjtVQUFDLFNBQUFzRCxHQUFBO1lBQUF4RCxTQUFBLENBQUFuSyxDQUFBLENBQUEyTixHQUFBO1VBQUE7WUFBQXhELFNBQUEsQ0FBQWhJLENBQUE7VUFBQTtVQUNELElBQUk2RyxPQUFPLENBQUM0RSxPQUFPLEVBQUU7WUFDbkJWLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO1lBQzdDRCxPQUFPLENBQUNXLElBQUksQ0FBQyxjQUFjLENBQUM7VUFDOUI7VUFBQ25CLFFBQUEsQ0FBQXZJLElBQUE7VUFBQSxPQUNLK0YsVUFBVSxDQUFDNEQsTUFBTSxDQUFDLENBQUM7UUFBQTtVQUN6QixJQUFJOUUsT0FBTyxDQUFDNEUsT0FBTyxFQUFFO1lBQ25CVixPQUFPLENBQUNhLE9BQU8sQ0FBQyxjQUFjLENBQUM7VUFDakM7VUFDTXpELE9BQU8sR0FBR0osVUFBVSxDQUFDOEQsTUFBTSxDQUFDLENBQUM7VUFFN0J6RCxxQkFBcUIsR0FBR2pCLGdCQUFJLENBQUNoQixJQUFJLENBQUN5QixPQUFPLEVBQUVDLE9BQU8sQ0FBQ3FELFFBQVEsQ0FBQztVQUNsRWhFLGlCQUFpQixDQUFDa0IscUJBQXFCLENBQUM7VUFBQUMsVUFBQSxHQUFBaEUsMEJBQUEsQ0FFdEJ5RCxJQUFJO1VBQUE7WUFBdEIsS0FBQU8sVUFBQSxDQUFBcEksQ0FBQSxNQUFBcUksTUFBQSxHQUFBRCxVQUFBLENBQUFqSyxDQUFBLElBQUFrRCxJQUFBLEdBQXdCO2NBQWI0RyxJQUFHLEdBQUFJLE1BQUEsQ0FBQTlKLEtBQUE7Y0FDWixJQUFJcUksT0FBTyxDQUFDNEUsT0FBTyxFQUFFO2dCQUNuQlYsT0FBTyxDQUFDQyxHQUFHLGVBQUFDLE1BQUEsQ0FBZS9DLElBQUcsQ0FBQzRELE1BQU0sZ0JBQVEsQ0FBQztjQUMvQztjQUVBLElBQUFDLDhCQUFtQixFQUFDN0QsSUFBRyxFQUFFQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FFakNLLFdBQVcsTUFBQXlDLE1BQUEsQ0FBTS9DLElBQUcsQ0FBQzhELE1BQU07Y0FDM0J2RCxpQkFBaUIsR0FBR3RCLGdCQUFJLENBQUNoQixJQUFJLENBQUNpQyxxQkFBcUIsRUFBRUYsSUFBRyxDQUFDK0QsU0FBUyxDQUFDO2NBQ3ZFLElBQUkvRCxJQUFHLENBQUM0RCxNQUFNLEVBQUU7Z0JBQ2R0RCxXQUFXLE1BQUF5QyxNQUFBLENBQU0vQyxJQUFHLENBQUM0RCxNQUFNLFVBQU87Z0JBQzlCbkQsV0FBVyxJQUFBRCxxQkFBQSxHQUFHM0IsdUJBQXVCLENBQUNoQixJQUFJLENBQUNtQyxJQUFHLENBQUM0RCxNQUFNLENBQUMsY0FBQXBELHFCQUFBLHVCQUF4Q0EscUJBQUEsQ0FBMEMxQyxNQUFNO2dCQUNsRSxJQUFJMkMsV0FBVyxFQUFFO2tCQUNQM0IsT0FBTyxHQUFJMkIsV0FBVyxDQUF0QjNCLE9BQU87a0JBQ2Z5QixpQkFBaUIsR0FBR3RCLGdCQUFJLENBQUNoQixJQUFJLENBQUNzQyxpQkFBaUIsRUFBRXpCLE9BQU8sQ0FBQztnQkFDM0QsQ0FBQyxNQUFNO2tCQUNMeUIsaUJBQWlCLEdBQUd0QixnQkFBSSxDQUFDaEIsSUFBSSxDQUFDc0MsaUJBQWlCLEVBQUUsWUFBWSxDQUFDO2dCQUNoRTtnQkFDQXJCLG1CQUFFLENBQUM4RSxhQUFhLENBQUN6RCxpQkFBaUIsQ0FBQztjQUNyQztjQUVBckIsbUJBQUUsQ0FBQytFLGFBQWEsQ0FBQ2hGLGdCQUFJLENBQUNoQixJQUFJLENBQUNzQyxpQkFBaUIsRUFBRUQsV0FBVyxDQUFDLEVBQUVOLElBQUcsRUFBRTtnQkFBQ2tFLE1BQU0sRUFBRTtjQUFDLENBQUMsQ0FBQztZQUMvRTtVQUFDLFNBQUFaLEdBQUE7WUFBQW5ELFVBQUEsQ0FBQXhLLENBQUEsQ0FBQTJOLEdBQUE7VUFBQTtZQUFBbkQsVUFBQSxDQUFBckksQ0FBQTtVQUFBO1FBQUE7VUFBQSxNQUdDMkgsZUFBZSxHQUFHK0MseUJBQWUsQ0FBQzJCLFNBQVM7WUFBQTlCLFFBQUEsQ0FBQXZJLElBQUE7WUFBQTtVQUFBO1VBQ3ZDNkYsUUFBTyxHQUFHK0Msa0JBQVEsQ0FBQy9CLFNBQVM7VUFFbEMsSUFBSSxDQUFDaEMsT0FBTyxDQUFDaUUsTUFBTSxFQUFFO1lBQ25CQyxPQUFPLENBQUNDLEdBQUcsd0JBQUFDLE1BQUEsQ0FBd0JwRCxRQUFPLENBQUNxRCxRQUFRLDJCQUFtQixDQUFDO1VBQ3pFO1VBQUNYLFFBQUEsQ0FBQXZJLElBQUE7VUFBQSxPQUV1QixJQUFBc0ssc0JBQWUsRUFBQyxDQUFDO1FBQUE7VUFBbkN6RCxTQUFTLEdBQUEwQixRQUFBLENBQUE3SSxJQUFBO1VBQ1RxRyxXQUFVLEdBQUcsSUFBSXFELGlCQUFVLENBQUMsSUFBSUMsR0FBRyxDQUFDQyxpQkFBVSxDQUFDLENBQUM7VUFBQXZDLFVBQUEsR0FBQTFFLDBCQUFBLENBQy9Cd0UsU0FBUztVQUFBO1lBQWhDLEtBQUFFLFVBQUEsQ0FBQTlJLENBQUEsTUFBQStJLE1BQUEsR0FBQUQsVUFBQSxDQUFBM0ssQ0FBQSxJQUFBa0QsSUFBQSxHQUFrQztjQUF2QjJILFFBQVEsR0FBQUQsTUFBQSxDQUFBeEssS0FBQTtjQUNqQnVKLFdBQVUsQ0FBQ3dFLFdBQVcsQ0FBQ3RELFFBQVEsQ0FBQztZQUNsQztVQUFDLFNBQUF1QyxHQUFBO1lBQUF6QyxVQUFBLENBQUFsTCxDQUFBLENBQUEyTixHQUFBO1VBQUE7WUFBQXpDLFVBQUEsQ0FBQS9JLENBQUE7VUFBQTtVQUFBdUssUUFBQSxDQUFBdkksSUFBQTtVQUFBLE9BQ0srRixXQUFVLENBQUM0RCxNQUFNLENBQUMsQ0FBQztRQUFBO1VBQ25CeEQsUUFBTyxHQUFHSixXQUFVLENBQUM4RCxNQUFNLENBQUMsQ0FBQztVQUU3QjFDLDBCQUEwQixHQUFHaEMsZ0JBQUksQ0FBQ2hCLElBQUksQ0FBQ3lCLE9BQU8sRUFBRUMsUUFBTyxDQUFDcUQsUUFBUSxDQUFDO1VBQ3ZFaEUsaUJBQWlCLENBQUNpQywwQkFBMEIsQ0FBQztVQUFBQyxVQUFBLEdBQUEvRSwwQkFBQSxDQUV0QndFLFNBQVM7VUFBQTtZQUFoQyxLQUFBTyxVQUFBLENBQUFuSixDQUFBLE1BQUFvSixNQUFBLEdBQUFELFVBQUEsQ0FBQWhMLENBQUEsSUFBQWtELElBQUEsR0FBa0M7Y0FBdkIySCxTQUFRLEdBQUFJLE1BQUEsQ0FBQTdLLEtBQUE7Y0FDakIsSUFBSXFJLE9BQU8sQ0FBQzRFLE9BQU8sRUFBRTtnQkFDbkJWLE9BQU8sQ0FBQ0MsR0FBRyxlQUFBQyxNQUFBLENBQWVoQyxTQUFRLENBQUN1RCxFQUFFLGdCQUFRLENBQUM7Y0FDaEQ7Y0FFQSxJQUFBQyxtQ0FBd0IsRUFBQ3hELFNBQVEsRUFBRWQsUUFBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBRXpDb0IsV0FBVyxHQUFHTixTQUFRLENBQUNNLFdBQVcsR0FBR04sU0FBUSxDQUFDTSxXQUFXLEdBQUcsQ0FBQztjQUM3REMsc0JBQXNCLEdBQUdyQyxnQkFBSSxDQUFDaEIsSUFBSSxDQUFDZ0QsMEJBQTBCLEVBQUV6QyxNQUFNLENBQUM2QyxXQUFXLENBQUMsQ0FBQztjQUN6Rm5DLG1CQUFFLENBQUM4RSxhQUFhLENBQUMxQyxzQkFBc0IsQ0FBQztjQUNwQ0MsZ0JBQWdCLE1BQUF3QixNQUFBLENBQU1oQyxTQUFRLENBQUN5RCxTQUFTO2NBQzVDdEYsbUJBQUUsQ0FBQytFLGFBQWEsQ0FBQ2hGLGdCQUFJLENBQUNoQixJQUFJLENBQUNxRCxzQkFBc0IsRUFBRUMsZ0JBQWdCLENBQUMsRUFBRVIsU0FBUSxFQUFFO2dCQUFDbUQsTUFBTSxFQUFFO2NBQUMsQ0FBQyxDQUFDO1lBQzlGO1VBQUMsU0FBQVosR0FBQTtZQUFBcEMsVUFBQSxDQUFBdkwsQ0FBQSxDQUFBMk4sR0FBQTtVQUFBO1lBQUFwQyxVQUFBLENBQUFwSixDQUFBO1VBQUE7UUFBQTtVQUFBLE1BR0MySCxlQUFlLEdBQUcrQyx5QkFBZSxDQUFDaUMsSUFBSTtZQUFBcEMsUUFBQSxDQUFBdkksSUFBQTtZQUFBO1VBQUE7VUFDbEM2RixTQUFPLEdBQUcrQyxrQkFBUSxDQUFDakIsSUFBSTtVQUU3QixJQUFJLENBQUM5QyxPQUFPLENBQUNpRSxNQUFNLEVBQUU7WUFDbkJDLE9BQU8sQ0FBQ0MsR0FBRyx3QkFBQUMsTUFBQSxDQUF3QnBELFNBQU8sQ0FBQ3FELFFBQVEsMkJBQW1CLENBQUM7VUFDekU7VUFBQ1gsUUFBQSxDQUFBdkksSUFBQTtVQUFBLE9BRWtCLElBQUE0SyxpQkFBVSxFQUFDLENBQUM7UUFBQTtVQUF6QmpELElBQUksR0FBQVksUUFBQSxDQUFBN0ksSUFBQTtVQUNKcUcsWUFBVSxHQUFHLElBQUlxRCxpQkFBVSxDQUFDLElBQUlDLEdBQUcsQ0FBQ0MsaUJBQVUsQ0FBQyxDQUFDO1VBQUF6QixVQUFBLEdBQUF4RiwwQkFBQSxDQUNwQ3NGLElBQUk7VUFBQTtZQUF0QixLQUFBRSxVQUFBLENBQUE1SixDQUFBLE1BQUE2SixNQUFBLEdBQUFELFVBQUEsQ0FBQXpMLENBQUEsSUFBQWtELElBQUEsR0FBd0I7Y0FBYnlJLEdBQUcsR0FBQUQsTUFBQSxDQUFBdEwsS0FBQTtjQUNadUosWUFBVSxDQUFDOEUsTUFBTSxDQUFDOUMsR0FBRyxDQUFDO1lBQ3hCO1VBQUMsU0FBQXlCLEdBQUE7WUFBQTNCLFVBQUEsQ0FBQWhNLENBQUEsQ0FBQTJOLEdBQUE7VUFBQTtZQUFBM0IsVUFBQSxDQUFBN0osQ0FBQTtVQUFBO1VBQUF1SyxRQUFBLENBQUF2SSxJQUFBO1VBQUEsT0FDSytGLFlBQVUsQ0FBQzRELE1BQU0sQ0FBQyxDQUFDO1FBQUE7VUFDbkJ4RCxTQUFPLEdBQUdKLFlBQVUsQ0FBQzhELE1BQU0sQ0FBQyxDQUFDO1VBRTdCNUIscUJBQXFCLEdBQUc5QyxnQkFBSSxDQUFDaEIsSUFBSSxDQUFDeUIsT0FBTyxFQUFFQyxTQUFPLENBQUNxRCxRQUFRLENBQUM7VUFDbEVoRSxpQkFBaUIsQ0FBQytDLHFCQUFxQixDQUFDO1VBQUFDLFVBQUEsR0FBQTdGLDBCQUFBLENBRXRCc0YsSUFBSTtVQUFBO1lBQXRCLEtBQUFPLFVBQUEsQ0FBQWpLLENBQUEsTUFBQWtLLE1BQUEsR0FBQUQsVUFBQSxDQUFBOUwsQ0FBQSxJQUFBa0QsSUFBQSxHQUF3QjtjQUFieUksSUFBRyxHQUFBSSxNQUFBLENBQUEzTCxLQUFBO2NBQ1osSUFBSXFJLE9BQU8sQ0FBQzRFLE9BQU8sRUFBRTtnQkFDbkJWLE9BQU8sQ0FBQ0MsR0FBRyxlQUFBQyxNQUFBLENBQWVsQixJQUFHLENBQUMrQyxNQUFNLGdCQUFRLENBQUM7Y0FDL0M7Y0FFQSxJQUFBQyw4QkFBbUIsRUFBQ2hELElBQUcsRUFBRTVCLFNBQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztjQUVqQ2tDLFdBQVcsTUFBQVksTUFBQSxDQUFNbEIsSUFBRyxDQUFDK0MsTUFBTTtjQUMvQjFGLG1CQUFFLENBQUMrRSxhQUFhLENBQUNoRixnQkFBSSxDQUFDaEIsSUFBSSxDQUFDOEQscUJBQXFCLEVBQUVJLFdBQVcsQ0FBQyxFQUFFTixJQUFHLEVBQUU7Z0JBQUNxQyxNQUFNLEVBQUU7Y0FBQyxDQUFDLENBQUM7WUFDbkY7VUFBQyxTQUFBWixHQUFBO1lBQUF0QixVQUFBLENBQUFyTSxDQUFBLENBQUEyTixHQUFBO1VBQUE7WUFBQXRCLFVBQUEsQ0FBQWxLLENBQUE7VUFBQTtRQUFBO1FBQUE7VUFBQSxPQUFBdUssUUFBQSxDQUFBekcsSUFBQTtNQUFBO0lBQUEsR0FBQTRELE9BQUE7RUFBQSxDQUVKO0VBQUEsT0FBQUQsWUFBQSxDQUFBdkMsS0FBQSxPQUFBRCxTQUFBO0FBQUE7QUFFRHVDLFdBQVcsQ0FBQyxDQUFDLENBQ1ZyRyxJQUFJLENBQUM7RUFBQSxPQUFNNkwsT0FBTyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFBQyxTQUN0QixDQUFDLFVBQUNDLEtBQUssRUFBSztFQUNoQm5DLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDa0MsS0FBSyxDQUFDO0VBQ2xCRixPQUFPLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import commandLineArgs from 'command-line-args';
|
|
4
|
+
import { datasets, EnabledDatasets, getEnabledDatasets, } from '../datasets';
|
|
5
|
+
import { Aggregator, allFollows, getAllLois, getAllQuestions, getAllSens } from '../model';
|
|
6
|
+
import { insertLoiReferences, insertQuestionReferences, insertSenReferences } from '../inserters';
|
|
7
|
+
const optionsDefinitions = [
|
|
8
|
+
{
|
|
9
|
+
alias: 'k',
|
|
10
|
+
defaultValue: ['All'],
|
|
11
|
+
help: 'categories of datasets to reorganize',
|
|
12
|
+
multiple: true,
|
|
13
|
+
name: 'categories',
|
|
14
|
+
type: String,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
alias: 's',
|
|
18
|
+
help: 'don\'t log anything',
|
|
19
|
+
name: 'silent',
|
|
20
|
+
type: Boolean,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
alias: "v",
|
|
24
|
+
help: "verbose logs",
|
|
25
|
+
name: "verbose",
|
|
26
|
+
type: Boolean,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
defaultOption: true,
|
|
30
|
+
help: 'directory containing Sénat open data files',
|
|
31
|
+
name: 'dataDir',
|
|
32
|
+
type: String,
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
const options = commandLineArgs(optionsDefinitions);
|
|
36
|
+
const SIGNET_STRUCTURE_REGEXP = /^(?<type>[a-z]+)(?<session>\d{2,4})-?(?<numTexte>\d+)?/;
|
|
37
|
+
function ensureAndClearDir(path) {
|
|
38
|
+
if (!fs.existsSync(path)) {
|
|
39
|
+
fs.mkdirSync(path);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
fs.emptyDirSync(path);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function convertData() {
|
|
46
|
+
const enabledDatasets = getEnabledDatasets(options.categories);
|
|
47
|
+
const dataDir = options.dataDir;
|
|
48
|
+
if (enabledDatasets & EnabledDatasets.DosLeg) {
|
|
49
|
+
const dataset = datasets.dosleg;
|
|
50
|
+
if (!options.silent) {
|
|
51
|
+
console.log(`Converting database ${dataset.database} data into files…`);
|
|
52
|
+
}
|
|
53
|
+
const lois = await getAllLois();
|
|
54
|
+
const aggregator = new Aggregator(new Set(allFollows));
|
|
55
|
+
for (const loi of lois) {
|
|
56
|
+
aggregator.addLoi(loi);
|
|
57
|
+
}
|
|
58
|
+
if (options.verbose) {
|
|
59
|
+
console.log("Starting getting all the data…");
|
|
60
|
+
console.time("get all data");
|
|
61
|
+
}
|
|
62
|
+
await aggregator.getAll();
|
|
63
|
+
if (options.verbose) {
|
|
64
|
+
console.timeEnd("get all data");
|
|
65
|
+
}
|
|
66
|
+
const allData = aggregator.toJson();
|
|
67
|
+
const loiReorganizedRootDir = path.join(dataDir, dataset.database);
|
|
68
|
+
ensureAndClearDir(loiReorganizedRootDir);
|
|
69
|
+
for (const loi of lois) {
|
|
70
|
+
if (options.verbose) {
|
|
71
|
+
console.log(`Converting ${loi.signet} file…`);
|
|
72
|
+
}
|
|
73
|
+
insertLoiReferences(loi, allData, {});
|
|
74
|
+
let loiFileName = `${loi.loicod}.json`;
|
|
75
|
+
let loiReorganizedDir = path.join(loiReorganizedRootDir, loi.typloicod);
|
|
76
|
+
if (loi.signet) {
|
|
77
|
+
loiFileName = `${loi.signet}.json`;
|
|
78
|
+
let signetParts = SIGNET_STRUCTURE_REGEXP.exec(loi.signet)?.groups;
|
|
79
|
+
if (signetParts) {
|
|
80
|
+
const { session } = signetParts;
|
|
81
|
+
loiReorganizedDir = path.join(loiReorganizedDir, session);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
loiReorganizedDir = path.join(loiReorganizedDir, "non defini");
|
|
85
|
+
}
|
|
86
|
+
fs.ensureDirSync(loiReorganizedDir);
|
|
87
|
+
}
|
|
88
|
+
fs.writeJSONSync(path.join(loiReorganizedDir, loiFileName), loi, { spaces: 2 });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (enabledDatasets & EnabledDatasets.Questions) {
|
|
92
|
+
const dataset = datasets.questions;
|
|
93
|
+
if (!options.silent) {
|
|
94
|
+
console.log(`Converting database ${dataset.database} data into files…`);
|
|
95
|
+
}
|
|
96
|
+
const questions = await getAllQuestions();
|
|
97
|
+
const aggregator = new Aggregator(new Set(allFollows));
|
|
98
|
+
for (const question of questions) {
|
|
99
|
+
aggregator.addQuestion(question);
|
|
100
|
+
}
|
|
101
|
+
await aggregator.getAll();
|
|
102
|
+
const allData = aggregator.toJson();
|
|
103
|
+
const questionReorganizedRootDir = path.join(dataDir, dataset.database);
|
|
104
|
+
ensureAndClearDir(questionReorganizedRootDir);
|
|
105
|
+
for (const question of questions) {
|
|
106
|
+
if (options.verbose) {
|
|
107
|
+
console.log(`Converting ${question.id} file…`);
|
|
108
|
+
}
|
|
109
|
+
insertQuestionReferences(question, allData, {});
|
|
110
|
+
const legislature = question.legislature ? question.legislature : 0;
|
|
111
|
+
const questionReorganizedDir = path.join(questionReorganizedRootDir, String(legislature));
|
|
112
|
+
fs.ensureDirSync(questionReorganizedDir);
|
|
113
|
+
let questionFileName = `${question.reference}.json`;
|
|
114
|
+
fs.writeJSONSync(path.join(questionReorganizedDir, questionFileName), question, { spaces: 2 });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (enabledDatasets & EnabledDatasets.Sens) {
|
|
118
|
+
const dataset = datasets.sens;
|
|
119
|
+
if (!options.silent) {
|
|
120
|
+
console.log(`Converting database ${dataset.database} data into files…`);
|
|
121
|
+
}
|
|
122
|
+
const sens = await getAllSens();
|
|
123
|
+
const aggregator = new Aggregator(new Set(allFollows));
|
|
124
|
+
for (const sen of sens) {
|
|
125
|
+
aggregator.addSen(sen);
|
|
126
|
+
}
|
|
127
|
+
await aggregator.getAll();
|
|
128
|
+
const allData = aggregator.toJson();
|
|
129
|
+
const senReorganizedRootDir = path.join(dataDir, dataset.database);
|
|
130
|
+
ensureAndClearDir(senReorganizedRootDir);
|
|
131
|
+
for (const sen of sens) {
|
|
132
|
+
if (options.verbose) {
|
|
133
|
+
console.log(`Converting ${sen.senmat} file…`);
|
|
134
|
+
}
|
|
135
|
+
insertSenReferences(sen, allData, {});
|
|
136
|
+
let senFileName = `${sen.senmat}.json`;
|
|
137
|
+
fs.writeJSONSync(path.join(senReorganizedRootDir, senFileName), sen, { spaces: 2 });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
convertData()
|
|
142
|
+
.then(() => process.exit(0))
|
|
143
|
+
.catch((error) => {
|
|
144
|
+
console.log(error);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
});
|