@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
619 lines (616 loc) • 69.5 kB
JavaScript
"use strict";
require("core-js/modules/es.symbol.js");
require("core-js/modules/es.symbol.description.js");
require("core-js/modules/es.symbol.iterator.js");
require("core-js/modules/es.array.iterator.js");
require("core-js/modules/es.object.define-property.js");
require("core-js/modules/es.string.iterator.js");
require("core-js/modules/web.dom-collections.iterator.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Decision = exports.Convert = void 0;
require("core-js/modules/es.symbol.to-primitive.js");
require("core-js/modules/es.array.concat.js");
require("core-js/modules/es.array.for-each.js");
require("core-js/modules/es.array.index-of.js");
require("core-js/modules/es.array.is-array.js");
require("core-js/modules/es.array.join.js");
require("core-js/modules/es.array.map.js");
require("core-js/modules/es.date.to-json.js");
require("core-js/modules/es.date.to-primitive.js");
require("core-js/modules/es.date.to-string.js");
require("core-js/modules/es.number.constructor.js");
require("core-js/modules/es.object.get-own-property-names.js");
require("core-js/modules/es.object.keys.js");
require("core-js/modules/es.object.to-string.js");
require("core-js/modules/web.dom-collections.for-each.js");
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); }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
// To parse this data:
//
// import { Convert, ComptesRendus } from "./file";
//
// const compteRendu = Convert.toComptesRendus(json);
//
// These functions will throw an error if the JSON doesn't
// match the expected interface, even if the JSON is valid.
var Decision = exports.Decision = /*#__PURE__*/function (Decision) {
Decision["AdoptionAmendementMainLev\xE9eAdt"] = "ADOPTION amendement (main lev\xE9e) adt";
Decision["AdoptionDUnArticleVote\xC0MainLev\xE9e"] = "ADOPTION d\u2019un article (vote \xE0 main lev\xE9e)";
Decision["AdoptionDUnSousAmendementMainLev\xE9eSsAdt"] = "ADOPTION d\u2019un sous-amendement (main lev\xE9e) ss-adt";
Decision["AdoptionDePlusieursAmendementsMainLev\xE9eAdts"] = "ADOPTION de plusieurs amendements (main lev\xE9e) adts";
Decision["AdoptionDePlusieursSousAmendementsMainLev\xE9eSsAdts"] = "ADOPTION de plusieurs sous-amendements (main lev\xE9e) ss-adts";
Decision["Empty"] = "";
Decision["RejetDUnAmendementMainLev\xE9eAdt"] = "REJET d\u2019un amendement (main lev\xE9e) adt";
Decision["RejetDUnArticleVote\xC0MainLev\xE9e"] = "REJET d\u2019un article (vote \xE0 main lev\xE9e)";
Decision["RejetDUnSousAmendementMainLev\xE9eSsAdt"] = "REJET d\u2019un sous-amendement (main lev\xE9e) ss-adt";
Decision["RejetDePlusieursAmendementsMainLev\xE9eAdts"] = "REJET de plusieurs amendements (main lev\xE9e) adts";
Decision["RejetDePlusieursSousAmendementsMainLev\xE9eSsAdts"] = "REJET de plusieurs sous-amendements (main lev\xE9e) ss-adts";
Decision["RejetMotionDeRejetPr\xE9alableMainLev\xE9e"] = "REJET motion de rejet pr\xE9alable (main lev\xE9e)";
return Decision;
}({});
// Converts JSON strings to/from your types
// and asserts the results of JSON.parse at runtime
var Convert = exports.Convert = /*#__PURE__*/function () {
function Convert() {
_classCallCheck(this, Convert);
}
return _createClass(Convert, null, [{
key: "toComptesRendus",
value: function toComptesRendus(json) {
return cast(JSON.parse(json), r("ComptesRendus"));
}
}, {
key: "comptesRendusToJson",
value: function comptesRendusToJson(value) {
return JSON.stringify(uncast(value, r("ComptesRendus")), null, 2);
}
}, {
key: "toCompteRendu",
value: function toCompteRendu(json) {
return cast(JSON.parse(json), r("CompteRendu"));
}
}, {
key: "compteRenduToJson",
value: function compteRenduToJson(value) {
return JSON.stringify(uncast(value, r("CompteRendu")), null, 2);
}
}]);
}();
function invalidValue(typ, val, key) {
var parent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
var prettyTyp = prettyTypeName(typ);
var parentText = parent ? " on ".concat(parent) : "";
var keyText = key ? " for key \"".concat(key, "\"") : "";
throw Error("Invalid value".concat(keyText).concat(parentText, ". Expected ").concat(prettyTyp, " but got ").concat(JSON.stringify(val)));
}
function prettyTypeName(typ) {
if (Array.isArray(typ)) {
if (typ.length === 2 && typ[0] === undefined) {
return "an optional ".concat(prettyTypeName(typ[1]));
} else {
return "one of [".concat(typ.map(function (a) {
return prettyTypeName(a);
}).join(", "), "]");
}
} else if (_typeof(typ) === "object" && typ.literal !== undefined) {
return typ.literal;
} else {
return _typeof(typ);
}
}
function jsonToJSProps(typ) {
if (typ.jsonToJS === undefined) {
var map = {};
typ.props.forEach(function (p) {
return map[p.json] = {
key: p.js,
typ: p.typ
};
});
typ.jsonToJS = map;
}
return typ.jsonToJS;
}
function jsToJSONProps(typ) {
if (typ.jsToJSON === undefined) {
var map = {};
typ.props.forEach(function (p) {
return map[p.js] = {
key: p.json,
typ: p.typ
};
});
typ.jsToJSON = map;
}
return typ.jsToJSON;
}
function transform(val, typ, getProps) {
var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
var parent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "";
function transformPrimitive(typ, val) {
if (_typeof(typ) === _typeof(val)) return val;
return invalidValue(typ, val, key, parent);
}
function transformUnion(typs, val) {
// val must validate against one typ in typs
var l = typs.length;
for (var i = 0; i < l; i++) {
var _typ = typs[i];
try {
return transform(val, _typ, getProps);
} catch (_) {}
}
return invalidValue(typs, val, key, parent);
}
function transformEnum(cases, val) {
if (cases.indexOf(val) !== -1) return val;
return invalidValue(cases.map(function (a) {
return l(a);
}), val, key, parent);
}
function transformArray(typ, val) {
// val must be an array with no invalid elements
if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
return val.map(function (el) {
return transform(el, typ, getProps);
});
}
function transformDate(val) {
if (val === null) {
return null;
}
var d = new Date(val);
if (isNaN(d.valueOf())) {
return invalidValue(l("Date"), val, key, parent);
}
return d;
}
function transformObject(props, additional, val) {
if (val === null || _typeof(val) !== "object" || Array.isArray(val)) {
return invalidValue(l(ref || "object"), val, key, parent);
}
var result = {};
Object.getOwnPropertyNames(props).forEach(function (key) {
var prop = props[key];
var v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
result[prop.key] = transform(v, prop.typ, getProps, key, ref);
});
Object.getOwnPropertyNames(val).forEach(function (key) {
if (!Object.prototype.hasOwnProperty.call(props, key)) {
result[key] = transform(val[key], additional, getProps, key, ref);
}
});
return result;
}
if (typ === "any") return val;
if (typ === null) {
if (val === null) return val;
return invalidValue(typ, val, key, parent);
}
if (typ === false) return invalidValue(typ, val, key, parent);
var ref = undefined;
while (_typeof(typ) === "object" && typ.ref !== undefined) {
ref = typ.ref;
typ = typeMap[typ.ref];
}
if (Array.isArray(typ)) return transformEnum(typ, val);
if (_typeof(typ) === "object") {
return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) : invalidValue(typ, val, key, parent);
}
// Numbers can be parsed by Date but shouldn't be.
if (typ === Date && typeof val !== "number") return transformDate(val);
return transformPrimitive(typ, val);
}
function cast(val, typ) {
return transform(val, typ, jsonToJSProps);
}
function uncast(val, typ) {
return transform(val, typ, jsToJSONProps);
}
function l(typ) {
return {
literal: typ
};
}
function a(typ) {
return {
arrayItems: typ
};
}
function u() {
for (var _len = arguments.length, typs = new Array(_len), _key = 0; _key < _len; _key++) {
typs[_key] = arguments[_key];
}
return {
unionMembers: typs
};
}
function o(props, additional) {
return {
props: props,
additional: additional
};
}
// function m(additional: any) {
// return { props: [], additional };
// }
function r(name) {
return {
ref: name
};
}
var typeMap = {
ComptesRendus: o([{
json: "comptesRendus",
js: "comptesRendus",
typ: a(r("CompteRendu"))
}], false),
CompteRendu: o([{
json: "schemaVersion",
js: "schemaVersion",
typ: u(undefined, "")
}, {
json: "uid",
js: "uid",
typ: u(undefined, "")
}, {
json: "seanceRef",
js: "seanceRef",
typ: ""
}, {
json: "sessionRef",
js: "sessionRef",
typ: ""
}, {
json: "metadonnees",
js: "metadonnees",
typ: r("Metadonnees")
}, {
json: "contenu",
js: "contenu",
typ: r("Contenu")
}], false),
Contenu: o([{
json: "quantiemes",
js: "quantiemes",
typ: r("Quantiemes")
}, {
json: "ouvertureSeance",
js: "ouvertureSeance",
typ: u(a(r("Point")), r("Point"))
}, {
json: "point",
js: "point",
typ: u(a(r("Point")), r("Point"))
}, {
json: "finSeance",
js: "finSeance",
typ: u(undefined, r("FinSeance"))
}, {
json: "paragraphe",
js: "paragraphe",
typ: u(undefined, a(r("Point")))
}], false),
FinSeance: o([{
json: "point",
js: "point",
typ: r("Point")
}], false),
Orateurs: o([{
json: "orateur",
js: "orateur",
typ: u(a(r("OrateurElement")), r("OrateurElement"))
}], false),
OrateurElement: o([{
json: "nom",
js: "nom",
typ: u(undefined, "")
}, {
json: "id",
js: "id",
typ: u(undefined, "")
}, {
json: "qualite",
js: "qualite",
typ: u(undefined, "")
}], false),
Texte: o([{
json: "_",
js: "_",
typ: u(undefined, "")
}, {
json: "id_syceron",
js: "id_syceron",
typ: u(undefined, "")
}, {
json: "stime",
js: "stime",
typ: u(undefined, "")
}, {
json: "sup",
js: "sup",
typ: u(undefined, "")
}, {
json: "lienAdt",
js: "lienAdt",
typ: u(undefined, u(a(r("Texte")), r("Texte")))
}], false),
Point: o([{
json: "nivpoint",
js: "nivpoint",
typ: u(undefined, "")
}, {
json: "valeur_ptsodj",
js: "valeur_ptsodj",
typ: u(undefined, "")
}, {
json: "ordinal_prise",
js: "ordinal_prise",
typ: u(undefined, "")
}, {
json: "id_preparation",
js: "id_preparation",
typ: u(undefined, "")
}, {
json: "ordre_absolu_seance",
js: "ordre_absolu_seance",
typ: u(undefined, "")
}, {
json: "code_grammaire",
js: "code_grammaire",
typ: u(undefined, "")
}, {
json: "code_style",
js: "code_style",
typ: u(undefined, "")
}, {
json: "code_parole",
js: "code_parole",
typ: u(undefined, "")
}, {
json: "sommaire",
js: "sommaire",
typ: u(undefined, "")
}, {
json: "id_syceron",
js: "id_syceron",
typ: u(undefined, "")
}, {
json: "valeur",
js: "valeur",
typ: u(undefined, "")
}, {
json: "orateurs",
js: "orateurs",
typ: u(r("Orateurs"), u("", undefined))
}, {
json: "texte",
js: "texte",
typ: u(r("Texte"), u("", undefined))
}, {
json: "paragraphe",
js: "paragraphe",
typ: u(undefined, u(a(r("Point")), r("Point")))
}, {
json: "interExtraction",
js: "interExtraction",
typ: u(undefined, u(a(r("Point")), r("Point")))
}, {
json: "point",
js: "point",
typ: u(undefined, u(a(r("Point")), r("Point")))
}, {
json: "structure",
js: "structure",
typ: u(undefined, "")
}, {
json: "id_acteur",
js: "id_acteur",
typ: u(undefined, "")
}, {
json: "id_mandat",
js: "id_mandat",
typ: u(undefined, "")
}, {
json: "id_nomination_oe",
js: "id_nomination_oe",
typ: u(undefined, "")
}, {
json: "id_nomination_op",
js: "id_nomination_op",
typ: u(undefined, "")
}, {
json: "orateur",
js: "orateur",
typ: u(undefined, "")
}, {
json: "bibard",
js: "bibard",
typ: u(undefined, "")
}, {
json: "art",
js: "art",
typ: u(undefined, "")
}, {
json: "adt",
js: "adt",
typ: u(undefined, "")
}, {
json: "ssadt",
js: "ssadt",
typ: u(undefined, "")
}, {
json: "roledebat",
js: "roledebat",
typ: u(undefined, "")
}, {
json: "type_debat",
js: "type_debat",
typ: u(undefined, "")
}, {
json: "changementPresidence",
js: "changementPresidence",
typ: u(undefined, r("Point"))
}, {
json: "decision",
js: "decision",
typ: u(undefined, r("Decision"))
}, {
json: "ouvertureSeance",
js: "ouvertureSeance",
typ: u(undefined, r("Point"))
}, {
json: "nom_orateur",
js: "nom_orateur",
typ: u(undefined, "")
}, {
json: "qualite",
js: "qualite",
typ: u(undefined, "")
}], false),
Quantiemes: o([{
json: "journee",
js: "journee",
typ: ""
}, {
json: "session",
js: "session",
typ: ""
}], false),
Metadonnees: o([{
json: "dateSeance",
js: "dateSeance",
typ: ""
}, {
json: "dateSeanceJour",
js: "dateSeanceJour",
typ: ""
}, {
json: "numSeanceJour",
js: "numSeanceJour",
typ: ""
}, {
json: "numSeance",
js: "numSeance",
typ: ""
}, {
json: "typeAssemblee",
js: "typeAssemblee",
typ: ""
}, {
json: "legislature",
js: "legislature",
typ: ""
}, {
json: "session",
js: "session",
typ: ""
}, {
json: "nomFichierJo",
js: "nomFichierJo",
typ: ""
}, {
json: "validite",
js: "validite",
typ: ""
}, {
json: "etat",
js: "etat",
typ: ""
}, {
json: "diffusion",
js: "diffusion",
typ: ""
}, {
json: "version",
js: "version",
typ: ""
}, {
json: "environnement",
js: "environnement",
typ: ""
}, {
json: "heureGeneration",
js: "heureGeneration",
typ: Date
}, {
json: "sommaire",
js: "sommaire",
typ: r("Sommaire")
}], false),
Sommaire: o([{
json: "presidentSeance",
js: "presidentSeance",
typ: r("Texte")
}, {
json: "sommaire1",
js: "sommaire1",
typ: u(a(r("SommaireElement")), r("SommaireElement"))
}, {
json: "sommaire3",
js: "sommaire3",
typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement")))
}, {
json: "sommaire2",
js: "sommaire2",
typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement")))
}, {
json: "para",
js: "para",
typ: u(undefined, u(a(r("Texte")), r("Texte")))
}], false),
SommaireElement: o([{
json: "valeur_pts_odj",
js: "valeur_pts_odj",
typ: u(undefined, "")
}, {
json: "titreStruct",
js: "titreStruct",
typ: u(undefined, r("TitreStruct"))
}, {
json: "para",
js: "para",
typ: u(undefined, u(a(u(r("Texte"), "")), r("Texte")))
}, {
json: "sommaire2",
js: "sommaire2",
typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement")))
}, {
json: "sommaire3",
js: "sommaire3",
typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement")))
}, {
json: "presidentSeance",
js: "presidentSeance",
typ: u(undefined, u(a(r("Texte")), r("Texte")))
}, {
json: "type_debat",
js: "type_debat",
typ: u(undefined, "")
}], false),
TitreStruct: o([{
json: "id_syceron",
js: "id_syceron",
typ: ""
}, {
json: "intitule",
js: "intitule",
typ: u(undefined, "")
}, {
json: "sousIntitule",
js: "sousIntitule",
typ: u(undefined, "")
}, {
json: "type_debat",
js: "type_debat",
typ: u(undefined, "")
}], false),
Decision: ["ADOPTION amendement (main levée) adt", "ADOPTION d’un article (vote à main levée)", "ADOPTION d’un sous-amendement (main levée) ss-adt", "ADOPTION de plusieurs amendements (main levée) adts", "ADOPTION de plusieurs sous-amendements (main levée) ss-adts", "", "REJET d’un amendement (main levée) adt", "REJET d’un article (vote à main levée)", "REJET d’un sous-amendement (main levée) ss-adt", "REJET de plusieurs amendements (main levée) adts", "REJET de plusieurs sous-amendements (main levée) ss-adts", "REJET motion de rejet préalable (main levée)"]
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWNpc2lvbiIsImV4cG9ydHMiLCJDb252ZXJ0IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwidmFsdWUiLCJ0b0NvbXB0ZXNSZW5kdXMiLCJqc29uIiwiY2FzdCIsIkpTT04iLCJwYXJzZSIsInIiLCJjb21wdGVzUmVuZHVzVG9Kc29uIiwic3RyaW5naWZ5IiwidW5jYXN0IiwidG9Db21wdGVSZW5kdSIsImNvbXB0ZVJlbmR1VG9Kc29uIiwiaW52YWxpZFZhbHVlIiwidHlwIiwidmFsIiwicGFyZW50IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwicHJldHR5VHlwIiwicHJldHR5VHlwZU5hbWUiLCJwYXJlbnRUZXh0IiwiY29uY2F0Iiwia2V5VGV4dCIsIkVycm9yIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiYSIsImpvaW4iLCJfdHlwZW9mIiwibGl0ZXJhbCIsImpzb25Ub0pTUHJvcHMiLCJqc29uVG9KUyIsInByb3BzIiwiZm9yRWFjaCIsInAiLCJqcyIsImpzVG9KU09OUHJvcHMiLCJqc1RvSlNPTiIsInRyYW5zZm9ybSIsImdldFByb3BzIiwidHJhbnNmb3JtUHJpbWl0aXZlIiwidHJhbnNmb3JtVW5pb24iLCJ0eXBzIiwibCIsImkiLCJfIiwidHJhbnNmb3JtRW51bSIsImNhc2VzIiwiaW5kZXhPZiIsInRyYW5zZm9ybUFycmF5IiwiZWwiLCJ0cmFuc2Zvcm1EYXRlIiwiZCIsIkRhdGUiLCJpc05hTiIsInZhbHVlT2YiLCJ0cmFuc2Zvcm1PYmplY3QiLCJhZGRpdGlvbmFsIiwicmVmIiwicmVzdWx0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJ2IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidHlwZU1hcCIsInVuaW9uTWVtYmVycyIsImFycmF5SXRlbXMiLCJ1IiwiX2xlbiIsIl9rZXkiLCJvIiwibmFtZSIsIkNvbXB0ZXNSZW5kdXMiLCJDb21wdGVSZW5kdSIsIkNvbnRlbnUiLCJGaW5TZWFuY2UiLCJPcmF0ZXVycyIsIk9yYXRldXJFbGVtZW50IiwiVGV4dGUiLCJQb2ludCIsIlF1YW50aWVtZXMiLCJNZXRhZG9ubmVlcyIsIlNvbW1haXJlIiwiU29tbWFpcmVFbGVtZW50IiwiVGl0cmVTdHJ1Y3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZGViYXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRvIHBhcnNlIHRoaXMgZGF0YTpcbi8vXG4vLyAgIGltcG9ydCB7IENvbnZlcnQsIENvbXB0ZXNSZW5kdXMgfSBmcm9tIFwiLi9maWxlXCI7XG4vL1xuLy8gICBjb25zdCBjb21wdGVSZW5kdSA9IENvbnZlcnQudG9Db21wdGVzUmVuZHVzKGpzb24pO1xuLy9cbi8vIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBKU09OIGRvZXNuJ3Rcbi8vIG1hdGNoIHRoZSBleHBlY3RlZCBpbnRlcmZhY2UsIGV2ZW4gaWYgdGhlIEpTT04gaXMgdmFsaWQuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHRlc1JlbmR1cyB7XG4gIGNvbXB0ZXNSZW5kdXM6IENvbXB0ZVJlbmR1W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdGVSZW5kdSB7XG4gIHNjaGVtYVZlcnNpb24/OiBzdHJpbmdcbiAgdWlkOiBzdHJpbmdcbiAgc2VhbmNlUmVmOiBzdHJpbmdcbiAgc2Vzc2lvblJlZjogc3RyaW5nXG4gIG1ldGFkb25uZWVzOiBNZXRhZG9ubmVlc1xuICBjb250ZW51OiBDb250ZW51XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudSB7XG4gIHF1YW50aWVtZXM6IFF1YW50aWVtZXNcbiAgb3V2ZXJ0dXJlU2VhbmNlOiBQb2ludFtdIHwgUG9pbnRcbiAgcG9pbnQ6IFBvaW50W10gfCBQb2ludFxuICBmaW5TZWFuY2U/OiBGaW5TZWFuY2VcbiAgcGFyYWdyYXBoZT86IFBvaW50W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaW5TZWFuY2Uge1xuICBwb2ludDogUG9pbnRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmF0ZXVycyB7XG4gIG9yYXRldXI6IE9yYXRldXJFbGVtZW50W10gfCBPcmF0ZXVyRWxlbWVudFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yYXRldXJFbGVtZW50IHtcbiAgbm9tOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBxdWFsaXRlOiBzdHJpbmcgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXh0ZSB7XG4gIF8/OiBzdHJpbmdcbiAgaWRfc3ljZXJvbj86IHN0cmluZ1xuICBzdGltZT86IHN0cmluZ1xuICBzdXA/OiBzdHJpbmdcbiAgbGllbkFkdD86IFRleHRlW10gfCBUZXh0ZVxufVxuXG5leHBvcnQgZW51bSBEZWNpc2lvbiB7XG4gIEFkb3B0aW9uQW1lbmRlbWVudE1haW5MZXbDqWVBZHQgPSBcIkFET1BUSU9OIGFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBhZHRcIixcbiAgQWRvcHRpb25EVW5BcnRpY2xlVm90ZcOATWFpbkxldsOpZSA9IFwiQURPUFRJT04gZOKAmXVuIGFydGljbGUgKHZvdGUgw6AgbWFpbiBsZXbDqWUpXCIsXG4gIEFkb3B0aW9uRFVuU291c0FtZW5kZW1lbnRNYWluTGV2w6llU3NBZHQgPSBcIkFET1BUSU9OIGTigJl1biBzb3VzLWFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBzcy1hZHRcIixcbiAgQWRvcHRpb25EZVBsdXNpZXVyc0FtZW5kZW1lbnRzTWFpbkxldsOpZUFkdHMgPSBcIkFET1BUSU9OIGRlIHBsdXNpZXVycyBhbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIGFkdHNcIixcbiAgQWRvcHRpb25EZVBsdXNpZXVyc1NvdXNBbWVuZGVtZW50c01haW5MZXbDqWVTc0FkdHMgPSBcIkFET1BUSU9OIGRlIHBsdXNpZXVycyBzb3VzLWFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgc3MtYWR0c1wiLFxuICBFbXB0eSA9IFwiXCIsXG4gIFJlamV0RFVuQW1lbmRlbWVudE1haW5MZXbDqWVBZHQgPSBcIlJFSkVUIGTigJl1biBhbWVuZGVtZW50IChtYWluIGxldsOpZSkgYWR0XCIsXG4gIFJlamV0RFVuQXJ0aWNsZVZvdGXDgE1haW5MZXbDqWUgPSBcIlJFSkVUIGTigJl1biBhcnRpY2xlICh2b3RlIMOgIG1haW4gbGV2w6llKVwiLFxuICBSZWpldERVblNvdXNBbWVuZGVtZW50TWFpbkxldsOpZVNzQWR0ID0gXCJSRUpFVCBk4oCZdW4gc291cy1hbWVuZGVtZW50IChtYWluIGxldsOpZSkgc3MtYWR0XCIsXG4gIFJlamV0RGVQbHVzaWV1cnNBbWVuZGVtZW50c01haW5MZXbDqWVBZHRzID0gXCJSRUpFVCBkZSBwbHVzaWV1cnMgYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBhZHRzXCIsXG4gIFJlamV0RGVQbHVzaWV1cnNTb3VzQW1lbmRlbWVudHNNYWluTGV2w6llU3NBZHRzID0gXCJSRUpFVCBkZSBwbHVzaWV1cnMgc291cy1hbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIHNzLWFkdHNcIixcbiAgUmVqZXRNb3Rpb25EZVJlamV0UHLDqWFsYWJsZU1haW5MZXbDqWUgPSBcIlJFSkVUIG1vdGlvbiBkZSByZWpldCBwcsOpYWxhYmxlIChtYWluIGxldsOpZSlcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb2ludCB7XG4gIG5pdnBvaW50Pzogc3RyaW5nXG4gIHZhbGV1cl9wdHNvZGo/OiBzdHJpbmdcbiAgb3JkaW5hbF9wcmlzZT86IHN0cmluZ1xuICBpZF9wcmVwYXJhdGlvbj86IHN0cmluZ1xuICBvcmRyZV9hYnNvbHVfc2VhbmNlPzogc3RyaW5nXG4gIGNvZGVfZ3JhbW1haXJlPzogc3RyaW5nXG4gIGNvZGVfc3R5bGU/OiBzdHJpbmdcbiAgY29kZV9wYXJvbGU/OiBzdHJpbmdcbiAgc29tbWFpcmU/OiBzdHJpbmdcbiAgaWRfc3ljZXJvbj86IHN0cmluZ1xuICB2YWxldXI/OiBzdHJpbmdcbiAgb3JhdGV1cnM/OiBPcmF0ZXVycyB8IHN0cmluZ1xuICB0ZXh0ZT86IFRleHRlIHwgc3RyaW5nXG4gIHBhcmFncmFwaGU/OiBQb2ludFtdIHwgUG9pbnRcbiAgaW50ZXJFeHRyYWN0aW9uPzogUG9pbnRbXSB8IFBvaW50XG4gIHBvaW50PzogUG9pbnRbXSB8IFBvaW50XG4gIHN0cnVjdHVyZT86IHN0cmluZ1xuICBpZF9hY3RldXI/OiBzdHJpbmdcbiAgaWRfbWFuZGF0Pzogc3RyaW5nXG4gIGlkX25vbWluYXRpb25fb2U/OiBzdHJpbmdcbiAgaWRfbm9taW5hdGlvbl9vcD86IHN0cmluZ1xuICBvcmF0ZXVyPzogc3RyaW5nXG4gIGJpYmFyZD86IHN0cmluZ1xuICBhcnQ/OiBzdHJpbmdcbiAgYWR0Pzogc3RyaW5nXG4gIHNzYWR0Pzogc3RyaW5nXG4gIHJvbGVkZWJhdD86IHN0cmluZ1xuICBjaGFuZ2VtZW50UHJlc2lkZW5jZT86IFBvaW50XG4gIHR5cGVfZGViYXQ/OiBzdHJpbmdcbiAgZGVjaXNpb24/OiBEZWNpc2lvblxuICBvdXZlcnR1cmVTZWFuY2U/OiBQb2ludFxuICBub21fb3JhdGV1cj86IHN0cmluZ1xuICBxdWFsaXRlPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbnRpZW1lcyB7XG4gIGpvdXJuZWU6IHN0cmluZ1xuICBzZXNzaW9uOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZG9ubmVlcyB7XG4gIGRhdGVTZWFuY2U6IHN0cmluZ1xuICBkYXRlU2VhbmNlSm91cjogc3RyaW5nXG4gIG51bVNlYW5jZUpvdXI6IHN0cmluZ1xuICBudW1TZWFuY2U6IHN0cmluZ1xuICB0eXBlQXNzZW1ibGVlOiBzdHJpbmdcbiAgbGVnaXNsYXR1cmU6IHN0cmluZ1xuICBzZXNzaW9uOiBzdHJpbmdcbiAgbm9tRmljaGllckpvOiBzdHJpbmdcbiAgdmFsaWRpdGU6IHN0cmluZ1xuICBldGF0OiBzdHJpbmdcbiAgZGlmZnVzaW9uOiBzdHJpbmdcbiAgdmVyc2lvbjogc3RyaW5nXG4gIGVudmlyb25uZW1lbnQ6IHN0cmluZ1xuICBoZXVyZUdlbmVyYXRpb246IERhdGVcbiAgc29tbWFpcmU6IFNvbW1haXJlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29tbWFpcmUge1xuICBwcmVzaWRlbnRTZWFuY2U6IFRleHRlXG4gIHNvbW1haXJlMTogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgc29tbWFpcmUzPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgc29tbWFpcmUyPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgcGFyYT86IFRleHRlW10gfCBUZXh0ZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvbW1haXJlRWxlbWVudCB7XG4gIHZhbGV1cl9wdHNfb2RqPzogc3RyaW5nXG4gIHRpdHJlU3RydWN0OiBUaXRyZVN0cnVjdFxuICBwYXJhPzogQXJyYXk8VGV4dGUgfCBzdHJpbmc+IHwgVGV4dGVcbiAgc29tbWFpcmUyPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgc29tbWFpcmUzPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgcHJlc2lkZW50U2VhbmNlPzogVGV4dGVbXSB8IFRleHRlXG4gIHR5cGVfZGViYXQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaXRyZVN0cnVjdCB7XG4gIGlkX3N5Y2Vyb246IHN0cmluZ1xuICBpbnRpdHVsZT86IHN0cmluZ1xuICBzb3VzSW50aXR1bGU/OiBzdHJpbmdcbiAgdHlwZV9kZWJhdD86IHN0cmluZ1xufVxuXG4vLyBDb252ZXJ0cyBKU09OIHN0cmluZ3MgdG8vZnJvbSB5b3VyIHR5cGVzXG4vLyBhbmQgYXNzZXJ0cyB0aGUgcmVzdWx0cyBvZiBKU09OLnBhcnNlIGF0IHJ1bnRpbWVcbmV4cG9ydCBjbGFzcyBDb252ZXJ0IHtcbiAgcHVibGljIHN0YXRpYyB0b0NvbXB0ZXNSZW5kdXMoanNvbjogc3RyaW5nKTogQ29tcHRlc1JlbmR1cyB7XG4gICAgcmV0dXJuIGNhc3QoSlNPTi5wYXJzZShqc29uKSwgcihcIkNvbXB0ZXNSZW5kdXNcIikpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbXB0ZXNSZW5kdXNUb0pzb24odmFsdWU6IENvbXB0ZXNSZW5kdXMpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh1bmNhc3QodmFsdWUsIHIoXCJDb21wdGVzUmVuZHVzXCIpKSwgbnVsbCwgMilcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdG9Db21wdGVSZW5kdShqc29uOiBzdHJpbmcpOiBDb21wdGVSZW5kdSB7XG4gICAgcmV0dXJuIGNhc3QoSlNPTi5wYXJzZShqc29uKSwgcihcIkNvbXB0ZVJlbmR1XCIpKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjb21wdGVSZW5kdVRvSnNvbih2YWx1ZTogQ29tcHRlUmVuZHUpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh1bmNhc3QodmFsdWUsIHIoXCJDb21wdGVSZW5kdVwiKSksIG51bGwsIDIpXG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZFZhbHVlKHR5cDogYW55LCB2YWw6IGFueSwga2V5OiBhbnksIHBhcmVudDogYW55ID0gXCJcIik6IG5ldmVyIHtcbiAgY29uc3QgcHJldHR5VHlwID0gcHJldHR5VHlwZU5hbWUodHlwKVxuICBjb25zdCBwYXJlbnRUZXh0ID0gcGFyZW50ID8gYCBvbiAke3BhcmVudH1gIDogXCJcIlxuICBjb25zdCBrZXlUZXh0ID0ga2V5ID8gYCBmb3Iga2V5IFwiJHtrZXl9XCJgIDogXCJcIlxuICB0aHJvdyBFcnJvcihcbiAgICBgSW52YWxpZCB2YWx1ZSR7a2V5VGV4dH0ke3BhcmVudFRleHR9LiBFeHBlY3RlZCAke3ByZXR0eVR5cH0gYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgdmFsLFxuICAgICl9YCxcbiAgKVxufVxuXG5mdW5jdGlvbiBwcmV0dHlUeXBlTmFtZSh0eXA6IGFueSk6IHN0cmluZyB7XG4gIGlmIChBcnJheS5pc0FycmF5KHR5cCkpIHtcbiAgICBpZiAodHlwLmxlbmd0aCA9PT0gMiAmJiB0eXBbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGBhbiBvcHRpb25hbCAke3ByZXR0eVR5cGVOYW1lKHR5cFsxXSl9YFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYG9uZSBvZiBbJHt0eXBcbiAgICAgICAgLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwcmV0dHlUeXBlTmFtZShhKVxuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiwgXCIpfV1gXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB0eXAgPT09IFwib2JqZWN0XCIgJiYgdHlwLmxpdGVyYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0eXAubGl0ZXJhbFxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0eXBlb2YgdHlwXG4gIH1cbn1cblxuZnVuY3Rpb24ganNvblRvSlNQcm9wcyh0eXA6IGFueSk6IGFueSB7XG4gIGlmICh0eXAuanNvblRvSlMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG1hcDogYW55ID0ge31cbiAgICB0eXAucHJvcHMuZm9yRWFjaCgocDogYW55KSA9PiAobWFwW3AuanNvbl0gPSB7IGtleTogcC5qcywgdHlwOiBwLnR5cCB9KSlcbiAgICB0eXAuanNvblRvSlMgPSBtYXBcbiAgfVxuICByZXR1cm4gdHlwLmpzb25Ub0pTXG59XG5cbmZ1bmN0aW9uIGpzVG9KU09OUHJvcHModHlwOiBhbnkpOiBhbnkge1xuICBpZiAodHlwLmpzVG9KU09OID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBtYXA6IGFueSA9IHt9XG4gICAgdHlwLnByb3BzLmZvckVhY2goKHA6IGFueSkgPT4gKG1hcFtwLmpzXSA9IHsga2V5OiBwLmpzb24sIHR5cDogcC50eXAgfSkpXG4gICAgdHlwLmpzVG9KU09OID0gbWFwXG4gIH1cbiAgcmV0dXJuIHR5cC5qc1RvSlNPTlxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm0oXG4gIHZhbDogYW55LFxuICB0eXA6IGFueSxcbiAgZ2V0UHJvcHM6IGFueSxcbiAga2V5OiBhbnkgPSBcIlwiLFxuICBwYXJlbnQ6IGFueSA9IFwiXCIsXG4pOiBhbnkge1xuICBmdW5jdGlvbiB0cmFuc2Zvcm1QcmltaXRpdmUodHlwOiBzdHJpbmcsIHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIHR5cCA9PT0gdHlwZW9mIHZhbCkgcmV0dXJuIHZhbFxuICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwsIGtleSwgcGFyZW50KVxuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtVW5pb24odHlwczogYW55W10sIHZhbDogYW55KTogYW55IHtcbiAgICAvLyB2YWwgbXVzdCB2YWxpZGF0ZSBhZ2FpbnN0IG9uZSB0eXAgaW4gdHlwc1xuICAgIGNvbnN0IGwgPSB0eXBzLmxlbmd0aFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCB0eXAgPSB0eXBzW2ldXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtKHZhbCwgdHlwLCBnZXRQcm9wcylcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwcywgdmFsLCBrZXksIHBhcmVudClcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybUVudW0oY2FzZXM6IHN0cmluZ1tdLCB2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKGNhc2VzLmluZGV4T2YodmFsKSAhPT0gLTEpIHJldHVybiB2YWxcbiAgICByZXR1cm4gaW52YWxpZFZhbHVlKFxuICAgICAgY2FzZXMubWFwKChhKSA9PiB7XG4gICAgICAgIHJldHVybiBsKGEpXG4gICAgICB9KSxcbiAgICAgIHZhbCxcbiAgICAgIGtleSxcbiAgICAgIHBhcmVudCxcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1BcnJheSh0eXA6IGFueSwgdmFsOiBhbnkpOiBhbnkge1xuICAgIC8vIHZhbCBtdXN0IGJlIGFuIGFycmF5IHdpdGggbm8gaW52YWxpZCBlbGVtZW50c1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gaW52YWxpZFZhbHVlKGwoXCJhcnJheVwiKSwgdmFsLCBrZXksIHBhcmVudClcbiAgICByZXR1cm4gdmFsLm1hcCgoZWwpID0+IHRyYW5zZm9ybShlbCwgdHlwLCBnZXRQcm9wcykpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBjb25zdCBkID0gbmV3IERhdGUodmFsKVxuICAgIGlmIChpc05hTihkLnZhbHVlT2YoKSkpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUobChcIkRhdGVcIiksIHZhbCwga2V5LCBwYXJlbnQpXG4gICAgfVxuICAgIHJldHVybiBkXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1PYmplY3QoXG4gICAgcHJvcHM6IHsgW2s6IHN0cmluZ106IGFueSB9LFxuICAgIGFkZGl0aW9uYWw6IGFueSxcbiAgICB2YWw6IGFueSxcbiAgKTogYW55IHtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFZhbHVlKGwocmVmIHx8IFwib2JqZWN0XCIpLCB2YWwsIGtleSwgcGFyZW50KVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvcHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IHByb3BzW2tleV1cbiAgICAgIGNvbnN0IHYgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsLCBrZXkpXG4gICAgICAgID8gdmFsW2tleV1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJlc3VsdFtwcm9wLmtleV0gPSB0cmFuc2Zvcm0odiwgcHJvcC50eXAsIGdldFByb3BzLCBrZXksIHJlZilcbiAgICB9KVxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zZm9ybSh2YWxba2V5XSwgYWRkaXRpb25hbCwgZ2V0UHJvcHMsIGtleSwgcmVmKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaWYgKHR5cCA9PT0gXCJhbnlcIikgcmV0dXJuIHZhbFxuICBpZiAodHlwID09PSBudWxsKSB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCkgcmV0dXJuIHZhbFxuICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwsIGtleSwgcGFyZW50KVxuICB9XG4gIGlmICh0eXAgPT09IGZhbHNlKSByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsLCBrZXksIHBhcmVudClcbiAgbGV0IHJlZjogYW55ID0gdW5kZWZpbmVkXG4gIHdoaWxlICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiICYmIHR5cC5yZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlZiA9IHR5cC5yZWZcbiAgICB0eXAgPSB0eXBlTWFwW3R5cC5yZWZdXG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwKSkgcmV0dXJuIHRyYW5zZm9ybUVudW0odHlwLCB2YWwpXG4gIGlmICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHR5cC5oYXNPd25Qcm9wZXJ0eShcInVuaW9uTWVtYmVyc1wiKVxuICAgICAgPyB0cmFuc2Zvcm1Vbmlvbih0eXAudW5pb25NZW1iZXJzLCB2YWwpXG4gICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcImFycmF5SXRlbXNcIilcbiAgICAgICAgPyB0cmFuc2Zvcm1BcnJheSh0eXAuYXJyYXlJdGVtcywgdmFsKVxuICAgICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcInByb3BzXCIpXG4gICAgICAgICAgPyB0cmFuc2Zvcm1PYmplY3QoZ2V0UHJvcHModHlwKSwgdHlwLmFkZGl0aW9uYWwsIHZhbClcbiAgICAgICAgICA6IGludmFsaWRWYWx1ZSh0eXAsIHZhbCwga2V5LCBwYXJlbnQpXG4gIH1cbiAgLy8gTnVtYmVycyBjYW4gYmUgcGFyc2VkIGJ5IERhdGUgYnV0IHNob3VsZG4ndCBiZS5cbiAgaWYgKHR5cCA9PT0gRGF0ZSAmJiB0eXBlb2YgdmFsICE9PSBcIm51bWJlclwiKSByZXR1cm4gdHJhbnNmb3JtRGF0ZSh2YWwpXG4gIHJldHVybiB0cmFuc2Zvcm1QcmltaXRpdmUodHlwLCB2YWwpXG59XG5cbmZ1bmN0aW9uIGNhc3Q8VD4odmFsOiBhbnksIHR5cDogYW55KTogVCB7XG4gIHJldHVybiB0cmFuc2Zvcm0odmFsLCB0eXAsIGpzb25Ub0pTUHJvcHMpXG59XG5cbmZ1bmN0aW9uIHVuY2FzdDxUPih2YWw6IFQsIHR5cDogYW55KTogYW55IHtcbiAgcmV0dXJuIHRyYW5zZm9ybSh2YWwsIHR5cCwganNUb0pTT05Qcm9wcylcbn1cblxuZnVuY3Rpb24gbCh0eXA6IGFueSkge1xuICByZXR1cm4geyBsaXRlcmFsOiB0eXAgfVxufVxuXG5mdW5jdGlvbiBhKHR5cDogYW55KSB7XG4gIHJldHVybiB7IGFycmF5SXRlbXM6IHR5cCB9XG59XG5cbmZ1bmN0aW9uIHUoLi4udHlwczogYW55W10pIHtcbiAgcmV0dXJuIHsgdW5pb25NZW1iZXJzOiB0eXBzIH1cbn1cblxuZnVuY3Rpb24gbyhwcm9wczogYW55W10sIGFkZGl0aW9uYWw6IGFueSkge1xuICByZXR1cm4geyBwcm9wcywgYWRkaXRpb25hbCB9XG59XG5cbi8vIGZ1bmN0aW9uIG0oYWRkaXRpb25hbDogYW55KSB7XG4vLyAgICAgcmV0dXJuIHsgcHJvcHM6IFtdLCBhZGRpdGlvbmFsIH07XG4vLyB9XG5cbmZ1bmN0aW9uIHIobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiB7IHJlZjogbmFtZSB9XG59XG5cbmNvbnN0IHR5cGVNYXA6IGFueSA9IHtcbiAgQ29tcHRlc1JlbmR1czogbyhcbiAgICBbeyBqc29uOiBcImNvbXB0ZXNSZW5kdXNcIiwganM6IFwiY29tcHRlc1JlbmR1c1wiLCB0eXA6IGEocihcIkNvbXB0ZVJlbmR1XCIpKSB9XSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgQ29tcHRlUmVuZHU6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcInNjaGVtYVZlcnNpb25cIiwganM6IFwic2NoZW1hVmVyc2lvblwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInVpZFwiLCBqczogXCJ1aWRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJzZWFuY2VSZWZcIiwganM6IFwic2VhbmNlUmVmXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInNlc3Npb25SZWZcIiwganM6IFwic2Vzc2lvblJlZlwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJtZXRhZG9ubmVlc1wiLCBqczogXCJtZXRhZG9ubmVlc1wiLCB0eXA6IHIoXCJNZXRhZG9ubmVlc1wiKSB9LFxuICAgICAgeyBqc29uOiBcImNvbnRlbnVcIiwganM6IFwiY29udGVudVwiLCB0eXA6IHIoXCJDb250ZW51XCIpIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgQ29udGVudTogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwicXVhbnRpZW1lc1wiLCBqczogXCJxdWFudGllbWVzXCIsIHR5cDogcihcIlF1YW50aWVtZXNcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJvdXZlcnR1cmVTZWFuY2VcIixcbiAgICAgICAganM6IFwib3V2ZXJ0dXJlU2VhbmNlXCIsXG4gICAgICAgIHR5cDogdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcInBvaW50XCIsIGpzOiBcInBvaW50XCIsIHR5cDogdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkgfSxcbiAgICAgIHsganNvbjogXCJmaW5TZWFuY2VcIiwganM6IFwiZmluU2VhbmNlXCIsIHR5cDogdSh1bmRlZmluZWQsIHIoXCJGaW5TZWFuY2VcIikpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwicGFyYWdyYXBoZVwiLFxuICAgICAgICBqczogXCJwYXJhZ3JhcGhlXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIGEocihcIlBvaW50XCIpKSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIEZpblNlYW5jZTogbyhbeyBqc29uOiBcInBvaW50XCIsIGpzOiBcInBvaW50XCIsIHR5cDogcihcIlBvaW50XCIpIH1dLCBmYWxzZSksXG4gIE9yYXRldXJzOiBvKFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJvcmF0ZXVyXCIsXG4gICAgICAgIGpzOiBcIm9yYXRldXJcIixcbiAgICAgICAgdHlwOiB1KGEocihcIk9yYXRldXJFbGVtZW50XCIpKSwgcihcIk9yYXRldXJFbGVtZW50XCIpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgT3JhdGV1ckVsZW1lbnQ6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcIm5vbVwiLCBqczogXCJub21cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJpZFwiLCBqczogXCJpZFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInF1YWxpdGVcIiwganM6IFwicXVhbGl0ZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFRleHRlOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJfXCIsIGpzOiBcIl9cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJpZF9zeWNlcm9uXCIsIGpzOiBcImlkX3N5Y2Vyb25cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJzdGltZVwiLCBqczogXCJzdGltZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInN1cFwiLCBqczogXCJzdXBcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJsaWVuQWR0XCIsXG4gICAgICAgIGpzOiBcImxpZW5BZHRcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJUZXh0ZVwiKSksIHIoXCJUZXh0ZVwiKSkpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBQb2ludDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwibml2cG9pbnRcIiwganM6IFwibml2cG9pbnRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJ2YWxldXJfcHRzb2RqXCIsIGpzOiBcInZhbGV1cl9wdHNvZGpcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJvcmRpbmFsX3ByaXNlXCIsIGpzOiBcIm9yZGluYWxfcHJpc2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJpZF9wcmVwYXJhdGlvblwiLCBqczogXCJpZF9wcmVwYXJhdGlvblwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcIm9yZHJlX2Fic29sdV9zZWFuY2VcIixcbiAgICAgICAganM6IFwib3JkcmVfYWJzb2x1X3NlYW5jZVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwiY29kZV9ncmFtbWFpcmVcIiwganM6IFwiY29kZV9ncmFtbWFpcmVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJjb2RlX3N0eWxlXCIsIGpzOiBcImNvZGVfc3R5bGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJjb2RlX3Bhcm9sZVwiLCBqczogXCJjb2RlX3Bhcm9sZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInNvbW1haXJlXCIsIGpzOiBcInNvbW1haXJlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwiaWRfc3ljZXJvblwiLCBqczogXCJpZF9zeWNlcm9uXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwidmFsZXVyXCIsIGpzOiBcInZhbGV1clwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcIm9yYXRldXJzXCIsXG4gICAgICAgIGpzOiBcIm9yYXRldXJzXCIsXG4gICAgICAgIHR5cDogdShyKFwiT3JhdGV1cnNcIiksIHUoXCJcIiwgdW5kZWZpbmVkKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcInRleHRlXCIsIGpzOiBcInRleHRlXCIsIHR5cDogdShyKFwiVGV4dGVcIiksIHUoXCJcIiwgdW5kZWZpbmVkKSkgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJwYXJhZ3JhcGhlXCIsXG4gICAgICAgIGpzOiBcInBhcmFncmFwaGVcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJpbnRlckV4dHJhY3Rpb25cIixcbiAgICAgICAganM6IFwiaW50ZXJFeHRyYWN0aW9uXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiUG9pbnRcIikpLCByKFwiUG9pbnRcIikpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwicG9pbnRcIixcbiAgICAgICAganM6IFwicG9pbnRcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJzdHJ1Y3R1cmVcIiwganM6IFwic3RydWN0dXJlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwiaWRfYWN0ZXVyXCIsIGpzOiBcImlkX2FjdGV1clwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImlkX21hbmRhdFwiLCBqczogXCJpZF9tYW5kYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJpZF9ub21pbmF0aW9uX29lXCIsXG4gICAgICAgIGpzOiBcImlkX25vbWluYXRpb25fb2VcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIiksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImlkX25vbWluYXRpb25fb3BcIixcbiAgICAgICAganM6IFwiaWRfbm9taW5hdGlvbl9vcFwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwib3JhdGV1clwiLCBqczogXCJvcmF0ZXVyXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwiYmliYXJkXCIsIGpzOiBcImJpYmFyZFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImFydFwiLCBqczogXCJhcnRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJhZHRcIiwganM6IFwiYWR0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwic3NhZHRcIiwganM6IFwic3NhZHRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJyb2xlZGViYXRcIiwganM6IFwicm9sZWRlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwidHlwZV9kZWJhdFwiLCBqczogXCJ0eXBlX2RlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiY2hhbmdlbWVudFByZXNpZGVuY2VcIixcbiAgICAgICAganM6IFwiY2hhbmdlbWVudFByZXNpZGVuY2VcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIlBvaW50XCIpKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwiZGVjaXNpb25cIiwganM6IFwiZGVjaXNpb25cIiwgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkRlY2lzaW9uXCIpKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcIm91dmVydHVyZVNlYW5jZVwiLFxuICAgICAgICBqczogXCJvdXZlcnR1cmVTZWFuY2VcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIlBvaW50XCIpKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwibm9tX29yYXRldXJcIiwganM6IFwibm9tX29yYXRldXJcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJxdWFsaXRlXCIsIGpzOiBcInF1YWxpdGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBRdWFudGllbWVzOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJqb3VybmVlXCIsIGpzOiBcImpvdXJuZWVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwic2Vzc2lvblwiLCBqczogXCJzZXNzaW9uXCIsIHR5cDogXCJcIiB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIE1ldGFkb25uZWVzOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJkYXRlU2VhbmNlXCIsIGpzOiBcImRhdGVTZWFuY2VcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiZGF0ZVNlYW5jZUpvdXJcIiwganM6IFwiZGF0ZVNlYW5jZUpvdXJcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwibnVtU2VhbmNlSm91clwiLCBqczogXCJudW1TZWFuY2VKb3VyXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcIm51bVNlYW5jZVwiLCBqczogXCJudW1TZWFuY2VcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwidHlwZUFzc2VtYmxlZVwiLCBqczogXCJ0eXBlQXNzZW1ibGVlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImxlZ2lzbGF0dXJlXCIsIGpzOiBcImxlZ2lzbGF0dXJlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInNlc3Npb25cIiwganM6IFwic2Vzc2lvblwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJub21GaWNoaWVySm9cIiwganM6IFwibm9tRmljaGllckpvXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInZhbGlkaXRlXCIsIGpzOiBcInZhbGlkaXRlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImV0YXRcIiwganM6IFwiZXRhdFwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJkaWZmdXNpb25cIiwganM6IFwiZGlmZnVzaW9uXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInZlcnNpb25cIiwganM6IFwidmVyc2lvblwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJlbnZpcm9ubmVtZW50XCIsIGpzOiBcImVudmlyb25uZW1lbnRcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiaGV1cmVHZW5lcmF0aW9uXCIsIGpzOiBcImhldXJlR2VuZXJhdGlvblwiLCB0eXA6IERhdGUgfSxcbiAgICAgIHsganNvbjogXCJzb21tYWlyZVwiLCBqczogXCJzb21tYWlyZVwiLCB0eXA6IHIoXCJTb21tYWlyZVwiKSB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFNvbW1haXJlOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJwcmVzaWRlbnRTZWFuY2VcIiwganM6IFwicHJlc2lkZW50U2VhbmNlXCIsIHR5cDogcihcIlRleHRlXCIpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwic29tbWFpcmUxXCIsXG4gICAgICAgIGpzOiBcInNvbW1haXJlMVwiLFxuICAgICAgICB0eXA6IHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInNvbW1haXJlM1wiLFxuICAgICAgICBqczogXCJzb21tYWlyZTNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInNvbW1haXJlMlwiLFxuICAgICAgICBqczogXCJzb21tYWlyZTJcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInBhcmFcIixcbiAgICAgICAganM6IFwicGFyYVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlRleHRlXCIpKSwgcihcIlRleHRlXCIpKSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFNvbW1haXJlRWxlbWVudDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwidmFsZXVyX3B0c19vZGpcIiwganM6IFwidmFsZXVyX3B0c19vZGpcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJ0aXRyZVN0cnVjdFwiLFxuICAgICAgICBqczogXCJ0aXRyZVN0cnVjdFwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCByKFwiVGl0cmVTdHJ1Y3RcIikpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJwYXJhXCIsXG4gICAgICAgIGpzOiBcInBhcmFcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHUocihcIlRleHRlXCIpLCBcIlwiKSksIHIoXCJUZXh0ZVwiKSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJzb21tYWlyZTJcIixcbiAgICAgICAganM6IFwic29tbWFpcmUyXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJzb21tYWlyZTNcIixcbiAgICAgICAganM6IFwic29tbWFpcmUzXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJwcmVzaWRlbnRTZWFuY2VcIixcbiAgICAgICAganM6IFwicHJlc2lkZW50U2VhbmNlXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiVGV4dGVcIikpLCByKFwiVGV4dGVcIikpKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwidHlwZV9kZWJhdFwiLCBqczogXCJ0eXBlX2RlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgVGl0cmVTdHJ1Y3Q6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImlkX3N5Y2Vyb25cIiwganM6IFwiaWRfc3ljZXJvblwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJpbnRpdHVsZVwiLCBqczogXCJpbnRpdHVsZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInNvdXNJbnRpdHVsZVwiLCBqczogXCJzb3VzSW50aXR1bGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJ0eXBlX2RlYmF0XCIsIGpzOiBcInR5cGVfZGViYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBEZWNpc2lvbjogW1xuICAgIFwiQURPUFRJT04gYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIGFkdFwiLFxuICAgIFwiQURPUFRJT04gZOKAmXVuIGFydGljbGUgKHZvdGUgw6AgbWFpbiBsZXbDqWUpXCIsXG4gICAgXCJBRE9QVElPTiBk4oCZdW4gc291cy1hbWVuZGVtZW50IChtYWluIGxldsOpZSkgc3MtYWR0XCIsXG4gICAgXCJBRE9QVElPTiBkZSBwbHVzaWV1cnMgYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBhZHRzXCIsXG4gICAgXCJBRE9QVElPTiBkZSBwbHVzaWV1cnMgc291cy1hbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIHNzLWFkdHNcIixcbiAgICBcIlwiLFxuICAgIFwiUkVKRVQgZOKAmXVuIGFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBhZHRcIixcbiAgICBcIlJFSkVUIGTigJl1biBhcnRpY2xlICh2b3RlIMOgIG1haW4gbGV2w6llKVwiLFxuICAgIFwiUkVKRVQgZOKAmXVuIHNvdXMtYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIHNzLWFkdFwiLFxuICAgIFwiUkVKRVQgZGUgcGx1c2lldXJzIGFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgYWR0c1wiLFxuICAgIFwiUkVKRVQgZGUgcGx1c2lldXJzIHNvdXMtYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBzcy1hZHRzXCIsXG4gICAgXCJSRUpFVCBtb3Rpb24gZGUgcmVqZXQgcHLDqWFsYWJsZSAobWFpbiBsZXbDqWUpXCIsXG4gIF0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEsSUE2Q1lBLFFBQVEsR0FBQUMsT0FBQSxDQUFBRCxRQUFBLDBCQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQUEsT0FBUkEsUUFBUTtBQUFBO0FBbUdwQjtBQUNBO0FBQUEsSUFDYUUsT0FBTyxHQUFBRCxPQUFBLENBQUFDLE9BQUE7RUFBQSxTQUFBQSxRQUFBO0lBQUFDLGVBQUEsT0FBQUQsT0FBQTtFQUFBO0VBQUEsT0FBQUUsWUFBQSxDQUFBRixPQUFBO0lBQUFHLEdBQUE7SUFBQUMsS0FBQSxFQUNsQixTQUFjQyxlQUFlQSxDQUFDQyxJQUFZLEVBQWlCO01BQ3pELE9BQU9DLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLENBQUNILElBQUksQ0FBQyxFQUFFSSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkQ7RUFBQztJQUFBUCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFjTyxtQkFBbUJBLENBQUNQLEtBQW9CLEVBQVU7TUFDOUQsT0FBT0ksSUFBSSxDQUFDSSxTQUFTLENBQUNDLE1BQU0sQ0FBQ1QsS0FBSyxFQUFFTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FO0VBQUM7SUFBQVAsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBY1UsYUFBYUEsQ0FBQ1IsSUFBWSxFQUFlO01BQ3JELE9BQU9DLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLENBQUNILElBQUksQ0FBQyxFQUFFSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQ7RUFBQztJQUFBUCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFjVyxpQkFBaUJBLENBQUNYLEtBQWtCLEVBQVU7TUFDMUQsT0FBT0ksSUFBSSxDQUFDSSxTQUFTLENBQUNDLE1BQU0sQ0FBQ1QsS0FBSyxFQUFFTSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFO0VBQUM7QUFBQTtBQUdILFNBQVNNLFlBQVlBLENBQUNDLEdBQVEsRUFBRUMsR0FBUSxFQUFFZixHQUFRLEVBQTJCO0VBQUEsSUFBekJnQixNQUFXLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEVBQUU7RUFDbEUsSUFBTUcsU0FBUyxHQUFHQyxjQUFjLENBQUNQLEdBQUcsQ0FBQztFQUNyQyxJQUFNUSxVQUFVLEdBQUdOLE1BQU0sVUFBQU8sTUFBQSxDQUFVUCxNQUFNLElBQUssRUFBRTtFQUNoRCxJQUFNUSxPQUFPLEdBQUd4QixHQUFHLGlCQUFBdUIsTUFBQSxDQUFnQnZCLEdBQUcsVUFBTSxFQUFFO0VBQzlDLE1BQU15QixLQUFLLGlCQUFBRixNQUFBLENBQ09DLE9BQU8sRUFBQUQsTUFBQSxDQUFHRCxVQUFVLGlCQUFBQyxNQUFBLENBQWNILFNBQVMsZUFBQUcsTUFBQSxDQUFZbEIsSUFBSSxDQUFDSSxTQUFTLENBQ25GTSxHQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0g7QUFFQSxTQUFTTSxjQUFjQSxDQUFDUCxHQUFRLEVBQVU7RUFDeEMsSUFBSVksS0FBSyxDQUFDQyxPQUFPLENBQUNiLEdBQUcsQ0FBQyxFQUFFO0lBQ3RCLElBQUlBLEdBQUcsQ0FBQ0ksTUFBTSxLQUFLLENBQUMsSUFBSUosR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLSyxTQUFTLEVBQUU7TUFDNUMsc0JBQUFJLE1BQUEsQ0FBc0JGLGNBQWMsQ0FBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUMsTUFBTTtNQUNMLGtCQUFBUyxNQUFBLENBQWtCVCxHQUFHLENBQ2xCYyxHQUFHLENBQUMsVUFBQ0MsQ0FBQyxFQUFLO1FBQ1YsT0FBT1IsY0FBYyxDQUFDUSxDQUFDLENBQUM7TUFDMUIsQ0FBQyxDQUFDLENBQ0RDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDZjtFQUNGLENBQUMsTUFBTSxJQUFJQyxPQUFBLENBQU9qQixHQUFHLE1BQUssUUFBUSxJQUFJQSxHQUFHLENBQUNrQixPQUFPLEtBQUtiLFNBQVMsRUFBRTtJQUMvRCxPQUFPTCxHQUFHLENBQUNrQixPQUFPO0VBQ3BCLENBQUMsTUFBTTtJQUNMLE9BQUFELE9BQUEsQ0FBY2pCLEdBQUc7RUFDbkI7QUFDRjtBQUVBLFNBQVNtQixhQUFhQSxDQUFDbkIsR0FBUSxFQUFPO0VBQ3BDLElBQUlBLEdBQUcsQ0FBQ29CLFFBQVEsS0FBS2YsU0FBUyxFQUFFO0lBQzlCLElBQU1TLEdBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkJkLEdBQUcsQ0FBQ3FCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLFVBQUNDLENBQU07TUFBQSxPQUFNVCxHQUFHLENBQUNTLENBQUMsQ0FBQ2xDLElBQUksQ0FBQyxHQUFHO1FBQUVILEdBQUcsRUFBRXFDLENBQUMsQ0FBQ0MsRUFBRTtRQUFFeEIsR0FBRyxFQUFFdUIsQ0FBQyxDQUFDdkI7TUFBSSxDQUFDO0lBQUEsQ0FBQyxDQUFDO0lBQ3hFQSxHQUFHLENBQUNvQixRQUFRLEdBQUdOLEdBQUc7RUFDcEI7RUFDQSxPQUFPZCxHQUFHLENBQUNvQixRQUFRO0FBQ3JCO0FBRUEsU0FBU0ssYUFBYUEsQ0FBQ3pCLEdBQVEsRUFBTztFQUNwQyxJQUFJQSxHQUFHLENBQUMwQixRQUFRLEtBQUtyQixTQUFTLEVBQUU7SUFDOUIsSUFBTVMsR0FBUSxHQUFHLENBQUMsQ0FBQztJQUNuQmQsR0FBRyxDQUFDcUIsS0FBSyxDQUFDQyxPQUFPLENBQUMsVUFBQ0MsQ0FBTTtNQUFBLE9BQU1ULEdBQUcsQ0FBQ1MsQ0FBQyxDQUFDQyxFQUFFLENBQUMsR0FBRztRQUFFdEMsR0FBRyxFQUFFcUMsQ0FBQyxDQUFDbEMsSUFBSTtRQUFFVyxHQUFHLEVBQUV1QixDQUFDLENBQUN2QjtNQUFJLENBQUM7SUFBQSxDQUFDLENBQUM7SUFDeEVBLEdBQUcsQ0FBQzBCLFFBQVEsR0FBR1osR0FBRztFQUNwQjtFQUNBLE9BQU9kLEdBQUcsQ0FBQzBCLFFBQVE7QUFDckI7QUFFQSxTQUFTQyxTQUFTQSxDQUNoQjFCLEdBQVEsRUFDUkQsR0FBUSxFQUNSNEIsUUFBYSxFQUdSO0VBQUEsSUFGTDFDLEdBQVEsR0FBQWlCLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUNiRCxNQUFXLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEVBQUU7RUFFaEIsU0FBUzBCLGtCQUFrQkEsQ0FBQzdCLEdBQVcsRUFBRUMsR0FBUSxFQUFPO0lBQ3RELElBQUlnQixPQUFBLENBQU9qQixHQUFHLE1BQUFpQixPQUFBLENBQVloQixHQUFHLEdBQUUsT0FBT0EsR0FBRztJQUN6QyxPQUFPRixZQUFZLENBQUNDLEdBQUcsRUFBRUMsR0FBRyxFQUFFZixHQUFHLEVBQUVnQixNQUFNLENBQUM7RUFDNUM7RUFFQSxTQUFTNEIsY0FBY0EsQ0FBQ0MsSUFBVyxFQUFFOUIsR0FBUSxFQUFPO0lBQ2xEO0lBQ0EsSUFBTStCLENBQUMsR0FBR0QsSUFBSSxDQUFDM0IsTUFBTTtJQUNyQixLQUFLLElBQUk2QixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELENBQUMsRUFBRUMsQ0FBQyxFQUFFLEVBQUU7TUFDMUIsSUFBTWpDLElBQUcsR0FBRytCLElBQUksQ0FBQ0UsQ0FBQyxDQUFDO01BQ25CLElBQUk7UUFDRixPQUFPTixTQUFTLENBQUMxQixHQUFHLEVBQUVELElBQUcsRUFBRTRCLFFBQVEsQ0FBQztNQUN0QyxDQUFDLENBQUMsT0FBT00sQ0FBQyxFQUFFLENBQUM7SUFDZjtJQUNBLE9BQU9uQyxZQUFZLENBQUNnQyxJQUFJLEVBQUU5QixHQUFHLEVBQUVmLEdBQUcsRUFBRWdCLE1BQU0sQ0FBQztFQUM3QztFQUVBLFNBQVNpQyxhQUFhQSxDQUFDQyxLQUFlLEVBQUVuQyxHQUFRLEVBQU87SUFDckQsSUFBSW1DLEtBQUssQ0FBQ0MsT0FBTyxDQUFDcEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBT0EsR0FBRztJQUN6QyxPQUFPRixZQUFZLENBQ2pCcUMsS0FBSyxDQUFDdEIsR0FBRyxDQU