text-to-map 1.1.47 → 1.1.48
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/dist/db/address-points.js +11 -6
- package/dist/db/db.d.ts +9 -1
- package/dist/db/db.js +24 -3
- package/dist/db/street-sync.js +4 -2
- package/package.json +1 -1
|
@@ -130,31 +130,36 @@ function sanitizeValue(value) {
|
|
|
130
130
|
}
|
|
131
131
|
return value;
|
|
132
132
|
}
|
|
133
|
+
// names of cities, streets etc. can change while their code stays the same
|
|
134
|
+
const updateNameOnConflict = {
|
|
135
|
+
conflictColumns: ["code"],
|
|
136
|
+
updateColumns: ["name"],
|
|
137
|
+
};
|
|
133
138
|
export const insertCities = async (buffer) => {
|
|
134
|
-
return await insertMultipleRows(extractKeyValuesPairs(buffer, Column.cityCode, [Column.cityName]), "city", ["code", "name"]);
|
|
139
|
+
return await insertMultipleRows(extractKeyValuesPairs(buffer, Column.cityCode, [Column.cityName]), "city", ["code", "name"], true, updateNameOnConflict);
|
|
135
140
|
};
|
|
136
141
|
export const insertDistricts = async (buffer) => {
|
|
137
142
|
return await insertMultipleRows(extractKeyValuesPairs(buffer, Column.districtCode, [
|
|
138
143
|
Column.cityCode,
|
|
139
144
|
Column.districtName,
|
|
140
|
-
]), "city_district", ["code", "city_code", "name"]);
|
|
145
|
+
]), "city_district", ["code", "city_code", "name"], true, updateNameOnConflict);
|
|
141
146
|
};
|
|
142
147
|
export const insertMunicipalityParts = async (buffer) => {
|
|
143
148
|
return await insertMultipleRows(extractKeyValuesPairs(buffer, Column.municipalityPartCode, [
|
|
144
149
|
Column.municipalityPartName,
|
|
145
150
|
Column.cityCode,
|
|
146
|
-
]), "municipality_part", ["code", "name", "city_code"]);
|
|
151
|
+
]), "municipality_part", ["code", "name", "city_code"], true, updateNameOnConflict);
|
|
147
152
|
};
|
|
148
153
|
export const insertPragueDistricts = async (buffer) => {
|
|
149
154
|
return await insertMultipleRows(extractKeyValuesPairs(buffer, Column.pragueDistrictCode, [
|
|
150
155
|
Column.pragueDistrictName,
|
|
151
|
-
]), "prague_district", ["code", "name"]);
|
|
156
|
+
]), "prague_district", ["code", "name"], true, updateNameOnConflict);
|
|
152
157
|
};
|
|
153
158
|
export const insertStreets = async (buffer) => {
|
|
154
159
|
return await insertMultipleRows(extractKeyValuesPairs(buffer, Column.streetCode, [
|
|
155
160
|
Column.cityCode,
|
|
156
161
|
Column.streetName,
|
|
157
|
-
]), "street", ["code", "city_code", "name"]);
|
|
162
|
+
]), "street", ["code", "city_code", "name"], true, updateNameOnConflict);
|
|
158
163
|
};
|
|
159
164
|
export const areAddressPointsSynced = async () => {
|
|
160
165
|
const result = await getKnexDb()
|
|
@@ -398,4 +403,4 @@ const rowToAddressPoint = (row) => {
|
|
|
398
403
|
point.address = createSingleLineAddress(point);
|
|
399
404
|
return point;
|
|
400
405
|
};
|
|
401
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFLTCxVQUFVLEVBR1Ysb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxpQkFBaUIsR0FDbEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQXlCLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xFLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUVqQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7QUFFakMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO0lBQ3BCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO0NBQ3RCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsQ0FBQztJQUNYLFFBQVEsRUFBRSxDQUFDO0lBQ1gsWUFBWSxFQUFFLENBQUM7SUFDZixZQUFZLEVBQUUsQ0FBQztJQUNmLGtCQUFrQixFQUFFLENBQUM7SUFD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R0FBRyxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7UUFDOUIsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0tBQ3BDO0lBQ0QsSUFBSSxHQUFHLENBQUMsb0JBQW9CLEtBQUssSUFBSSxFQUFFO1FBQ3JDLEtBQUssQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0tBQ2pEO0lBQ0QsS0FBSyxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NQb2ludFR5cGUsIGNyZWF0ZVNpbmdsZUxpbmVBZGRyZXNzIH0gZnJvbSBcImN6ZWNoLWFkZHJlc3NcIjtcbmltcG9ydCB7XG4gIEFkZHJlc3NQb2ludCxcbiAgRnVsbFN0cmVldE51bWJlcixcbiAgUmFuZ2VTcGVjLFxuICBTZXJpZXNTcGVjLFxuICBTZXJpZXNUeXBlLFxuICBTbWRFcnJvcixcbiAgU21kTGluZSxcbiAgaXNOZWdhdGl2ZVNlcmllc1NwZWMsXG4gIGlzUmFuZ2UsXG4gIGlzU2VyaWVzU3BlY0FycmF5LFxufSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XG5pbXBvcnQgeyBmaW5kQ2xvc2VzdFN0cmluZywgcm91bmRUb05EZWNpbWFsUGxhY2VzIH0gZnJvbSBcIi4uL3V0aWxzL2hlbHBlcnNcIjtcbmltcG9ydCBqdHNrMndnczg0IGZyb20gXCIuLi91dGlscy9qdHNrMndnczg0XCI7XG5pbXBvcnQge1xuICBleHRyYWN0S2V5VmFsdWVzUGFpcnMsXG4gIGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMsXG4gIGdldEtuZXhEYixcbiAgaW5zZXJ0TXVsdGlwbGVSb3dzLFxuICBpc015c3FsLFxuICBpc1NxbGl0ZSxcbiAgbm9uRW1wdHlPck51bGwsXG4gIHJhd1F1ZXJ5LFxufSBmcm9tIFwiLi9kYlwiO1xuaW1wb3J0IHsgZ2V0Rm91bmRlckNpdHlDb2RlIH0gZnJvbSBcIi4vZm91bmRlcnNcIjtcbmltcG9ydCB7IEZvdW5kZXIsIE11bmljaXBhbGl0eSwgTXVuaWNpcGFsaXR5VHlwZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgY2h1bmsgZnJvbSBcImxvZGFzaC9jaHVua1wiO1xuXG5jb25zdCBEZXNjcmlwdGl2ZVR5cGUgPSBcIsSNLnAuXCI7XG5jb25zdCBSZWdpc3RyYXRpb25UeXBlID0gXCLEjS5ldi5cIjtcblxuY29uc3QgT2JqZWN0VHlwZXMgPSB7XG4gIFtEZXNjcmlwdGl2ZVR5cGVdOiAxLFxuICBbUmVnaXN0cmF0aW9uVHlwZV06IDIsXG59O1xuXG5leHBvcnQgY29uc3QgQ29sdW1uID0ge1xuICBhZG1Db2RlOiAwLFxuICBjaXR5Q29kZTogMSxcbiAgY2l0eU5hbWU6IDIsXG4gIGRpc3RyaWN0Q29kZTogMyxcbiAgZGlzdHJpY3ROYW1lOiA0LFxuICBwcmFndWVEaXN0cmljdENvZGU6IDUsXG4gIHByYWd1ZURpc3RyaWN0TmFtZTogNixcbiAgbXVuaWNpcGFsaXR5UGFydENvZGU6IDcsXG4gIG11bmljaXBhbGl0eVBhcnROYW1lOiA4LFxuICBzdHJlZXRDb2RlOiA5LFxuICBzdHJlZXROYW1lOiAxMCxcbiAgb2JqZWN0VHlwZTogMTEsXG4gIGhvdXNlTnVtYmVyOiAxMixcbiAgb3JpZW50YXRpb25hbE51bWJlcjogMTMsXG4gIG9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXI6IDE0LFxuICBwb3N0YWxDb2RlOiAxNSxcbiAgeUNvb3JkaW5hdGU6IDE2LFxuICB4Q29vcmRpbmF0ZTogMTcsXG4gIHZhbGlkRnJvbTogMTgsXG59O1xuXG5jb25zdCBjb2x1bW5OYW1lcyA9IFtcbiAgXCJpZFwiLFxuICBcInN0cmVldF9jb2RlXCIsXG4gIFwib2JqZWN0X3R5cGVfaWRcIixcbiAgXCJkZXNjcmlwdGl2ZV9udW1iZXJcIixcbiAgXCJvcmllbnRhdGlvbmFsX251bWJlclwiLFxuICBcIm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlclwiLFxuICBcImNpdHlfY29kZVwiLFxuICBcImNpdHlfZGlzdHJpY3RfY29kZVwiLFxuICBcIm11bmljaXBhbGl0eV9wYXJ0X2NvZGVcIixcbiAgXCJwcmFndWVfZGlzdHJpY3RfY29kZVwiLFxuICBcInBvc3RhbF9jb2RlXCIsXG4gIFwianRza194XCIsXG4gIFwianRza195XCIsXG4gIFwid2dzODRfbGF0aXR1ZGVcIixcbiAgXCJ3Z3M4NF9sb25naXR1ZGVcIixcbl07XG5cbmV4cG9ydCBjb25zdCBjb21taXRBZGRyZXNzUG9pbnRzID0gYXN5bmMgKFxuICBidWZmZXI6IHN0cmluZ1tdW11cbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgYXdhaXQgaW5zZXJ0Q2l0aWVzKGJ1ZmZlcik7XG4gIGF3YWl0IGluc2VydERpc3RyaWN0cyhidWZmZXIpO1xuICBhd2FpdCBpbnNlcnRNdW5pY2lwYWxpdHlQYXJ0cyhidWZmZXIpO1xuICBhd2FpdCBpbnNlcnRTdHJlZXRzKGJ1ZmZlcik7XG4gIGF3YWl0IGluc2VydFByYWd1ZURpc3RyaWN0cyhidWZmZXIpO1xuXG4gIGNvbnN0IHBhcmFtczogUmVjb3JkPHN0cmluZywgKHN0cmluZyB8IG51bGwpW10+ID0ge307XG4gIGJ1ZmZlci5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgbGV0IGxhdE9yTnVsbDogc3RyaW5nLCBsb25Pck51bGw6IHN0cmluZztcbiAgICBsYXRPck51bGwgPSBudWxsO1xuICAgIGxvbk9yTnVsbCA9IG51bGw7XG4gICAgaWYgKGRhdGFbQ29sdW1uLnhDb29yZGluYXRlXSAmJiBkYXRhW0NvbHVtbi55Q29vcmRpbmF0ZV0pIHtcbiAgICAgIGNvbnN0IHsgbGF0LCBsb24gfSA9IGp0c2syd2dzODQoXG4gICAgICAgIHBhcnNlRmxvYXQoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdKSxcbiAgICAgICAgcGFyc2VGbG9hdChkYXRhW0NvbHVtbi55Q29vcmRpbmF0ZV0pXG4gICAgICApO1xuICAgICAgW2xhdE9yTnVsbCwgbG9uT3JOdWxsXSA9IFtsYXQudG9TdHJpbmcoKSwgbG9uLnRvU3RyaW5nKCldO1xuICAgIH1cbiAgICBwYXJhbXNbZGF0YVtDb2x1bW4uYWRtQ29kZV1dID0gW1xuICAgICAgZGF0YVtDb2x1bW4uYWRtQ29kZV0sXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5zdHJlZXRDb2RlXSksXG4gICAgICBPYmplY3RUeXBlc1tkYXRhW0NvbHVtbi5vYmplY3RUeXBlXV0sXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5ob3VzZU51bWJlcl0pLFxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ub3JpZW50YXRpb25hbE51bWJlcl0pLFxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ub3JpZW50YXRpb25hbE51bWJlckxldHRlcl0pLFxuICAgICAgZGF0YVtDb2x1bW4uY2l0eUNvZGVdLFxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4uZGlzdHJpY3RDb2RlXSksXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5tdW5pY2lwYWxpdHlQYXJ0Q29kZV0pLFxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ucHJhZ3VlRGlzdHJpY3RDb2RlXSksXG4gICAgICBkYXRhW0NvbHVtbi5wb3N0YWxDb2RlXSxcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLnhDb29yZGluYXRlXSksXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi55Q29vcmRpbmF0ZV0pLFxuICAgICAgbGF0T3JOdWxsLFxuICAgICAgbG9uT3JOdWxsLFxuICAgIF07XG4gIH0pO1xuXG4gIC8vIGZpbmQgYWxyZWFkeSBleGlzdGluZyByb3dzXG4gIGNvbnN0IGV4aXN0aW5nUm93cyA9IGF3YWl0IHJhd1F1ZXJ5KFxuICAgIGBTRUxFQ1QgKiBGUk9NIGFkZHJlc3NfcG9pbnQgV0hFUkUgaWQgSU4gKCR7YnVmZmVyXG4gICAgICAubWFwKChkYXRhKSA9PiBkYXRhW0NvbHVtbi5hZG1Db2RlXSlcbiAgICAgIC5qb2luKFwiLFwiKX0pYFxuICApO1xuXG4gIGNvbnN0IHF1ZXJpZXMgPSBbXTtcbiAgZm9yIChjb25zdCByb3cgb2YgZXhpc3RpbmdSb3dzKSB7XG4gICAgY29uc3QgdG9JbnNlcnQgPSBwYXJhbXNbcm93LmlkXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKHJvdyk7XG4gICAgaWYgKCF0b0luc2VydC5ldmVyeSgodiwgaSkgPT4gdmFsdWVzRXF1YWwodiwgdmFsdWVzW2ldKSkpIHtcbiAgICAgIC8vIHVwZGF0ZSB0aG9zZSB3aG9zZSB2YWx1ZXMgZGlmZmVyXG4gICAgICBxdWVyaWVzLnB1c2goXG4gICAgICAgIHJhd1F1ZXJ5KFxuICAgICAgICAgIGBVUERBVEUgYWRkcmVzc19wb2ludCBTRVQgJHtjb2x1bW5OYW1lc1xuICAgICAgICAgICAgLm1hcCgoYykgPT4gYCR7Y30gPSA/YClcbiAgICAgICAgICAgIC5qb2luKFwiLCBcIil9IFdIRVJFIGlkID0gP2AsXG4gICAgICAgICAgWy4uLnRvSW5zZXJ0LCByb3cuaWRdXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocXVlcmllcyk7XG5cbiAgY29uc3QgcGxhY2VIb2xkZXJzID0gZ2VuZXJhdGUyRFBsYWNlaG9sZGVycyhcbiAgICBjb2x1bW5OYW1lcy5sZW5ndGgsXG4gICAgYnVmZmVyLmxlbmd0aFxuICApO1xuXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcbiAgYXdhaXQgcmF3UXVlcnkoXG4gICAgYElOU0VSVCAke1xuICAgICAgaXNNeXNxbChrbmV4KSA/IFwiSUdOT1JFXCIgOiBcIlwiXG4gICAgfSBJTlRPIGFkZHJlc3NfcG9pbnQgKCR7Y29sdW1uTmFtZXMuam9pbihcIixcIil9KSBWQUxVRVMgJHtwbGFjZUhvbGRlcnN9ICR7XG4gICAgICAhaXNNeXNxbChrbmV4KSA/IFwiT04gQ09ORkxJQ1QgKGlkKSBETyBOT1RISU5HXCIgOiBcIlwiXG4gICAgfWAsXG4gICAgT2JqZWN0LnZhbHVlcyhwYXJhbXMpLmZsYXQoKVxuICApO1xuXG4gIHJldHVybiBidWZmZXIubGVuZ3RoO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZURlcHJlY2F0ZWRBZGRyZXNzUG9pbnRzKFxuICBhbGxJZHM6IFNldDxudW1iZXI+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xuICBjb25zdCBleGlzdGluZ0lkcyA9IGF3YWl0IGtuZXgucGx1Y2soXCJpZFwiKS5mcm9tKFwiYWRkcmVzc19wb2ludFwiKTtcbiAgY29uc3QgdG9SZW1vdmUgPSBleGlzdGluZ0lkcy5maWx0ZXIoKGlkKSA9PiAhYWxsSWRzLmhhcyhpZCkpO1xuICBjb25zdCBjaHVua3MgPSBjaHVuayh0b1JlbW92ZSwgMTAwMCk7XG4gIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgYXdhaXQga25leChcImFkZHJlc3NfcG9pbnRcIikud2hlcmVJbihcImlkXCIsIGNodW5rKS5kZWxldGUoKTtcbiAgfVxuICBjb25zb2xlLmxvZyhgUmVtb3ZlZCAke3RvUmVtb3ZlLmxlbmd0aH0gZGVwcmVjYXRlZCBhZGRyZXNzIHBvaW50cy5gKTtcbn1cblxuZnVuY3Rpb24gdmFsdWVzRXF1YWwoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNhbml0aXplVmFsdWUoYSkgPT09IHNhbml0aXplVmFsdWUoYik7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICBpZiAoL1xcZCtcXC5cXGQrLy50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiByb3VuZFRvTkRlY2ltYWxQbGFjZXMocGFyc2VGbG9hdCh2YWx1ZSksIDYpLnRvU3RyaW5nKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2l0aWVzID0gYXN5bmMgKGJ1ZmZlcjogc3RyaW5nW11bXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLmNpdHlDb2RlLCBbQ29sdW1uLmNpdHlOYW1lXSksXG4gICAgXCJjaXR5XCIsXG4gICAgW1wiY29kZVwiLCBcIm5hbWVcIl1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnREaXN0cmljdHMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4uZGlzdHJpY3RDb2RlLCBbXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXG4gICAgICBDb2x1bW4uZGlzdHJpY3ROYW1lLFxuICAgIF0pLFxuICAgIFwiY2l0eV9kaXN0cmljdFwiLFxuICAgIFtcImNvZGVcIiwgXCJjaXR5X2NvZGVcIiwgXCJuYW1lXCJdXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0TXVuaWNpcGFsaXR5UGFydHMgPSBhc3luYyAoXG4gIGJ1ZmZlcjogc3RyaW5nW11bXVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4ubXVuaWNpcGFsaXR5UGFydENvZGUsIFtcbiAgICAgIENvbHVtbi5tdW5pY2lwYWxpdHlQYXJ0TmFtZSxcbiAgICAgIENvbHVtbi5jaXR5Q29kZSxcbiAgICBdKSxcbiAgICBcIm11bmljaXBhbGl0eV9wYXJ0XCIsXG4gICAgW1wiY29kZVwiLCBcIm5hbWVcIiwgXCJjaXR5X2NvZGVcIl1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRQcmFndWVEaXN0cmljdHMgPSBhc3luYyAoXG4gIGJ1ZmZlcjogc3RyaW5nW11bXVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4ucHJhZ3VlRGlzdHJpY3RDb2RlLCBbXG4gICAgICBDb2x1bW4ucHJhZ3VlRGlzdHJpY3ROYW1lLFxuICAgIF0pLFxuICAgIFwicHJhZ3VlX2Rpc3RyaWN0XCIsXG4gICAgW1wiY29kZVwiLCBcIm5hbWVcIl1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRTdHJlZXRzID0gYXN5bmMgKGJ1ZmZlcjogc3RyaW5nW11bXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLnN0cmVldENvZGUsIFtcbiAgICAgIENvbHVtbi5jaXR5Q29kZSxcbiAgICAgIENvbHVtbi5zdHJlZXROYW1lLFxuICAgIF0pLFxuICAgIFwic3RyZWV0XCIsXG4gICAgW1wiY29kZVwiLCBcImNpdHlfY29kZVwiLCBcIm5hbWVcIl1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhcmVBZGRyZXNzUG9pbnRzU3luY2VkID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxuICAgIC5jb3VudChcIipcIiwgeyBhczogXCJjb3VudEFsbFwiIH0pXG4gICAgLmZyb20oXCJhZGRyZXNzX3BvaW50XCIpXG4gICAgLmZpcnN0KCk7XG4gIHJldHVybiBOdW1iZXIocmVzdWx0LmNvdW50QWxsKSA+PSAyOTAwMDAwOyAvLyB0b3RhbCBpcyBhbG1vc3QgMyBtaWxsaW9uXG59O1xuXG5jb25zdCBhZGRyZXNzUG9pbnRTZWxlY3QgPSBgXG4gIFNFTEVDVCBhLmlkLCBzLm5hbWUgQVMgc3RyZWV0X25hbWUsIG8ubmFtZSBBUyBvYmplY3RfdHlwZV9uYW1lLCBhLmRlc2NyaXB0aXZlX251bWJlcixcbiAgICAgICAgYS5vcmllbnRhdGlvbmFsX251bWJlciwgYS5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIsIGMubmFtZSBBUyBjaXR5X25hbWUsXG4gICAgICAgIG0ubmFtZSBBUyBtdW5pY2lwYWxpdHlfcGFydF9uYW1lLCBwLm5hbWUgQVMgcHJhZ3VlX2Rpc3RyaWN0X25hbWUsXG4gICAgICAgIGQubmFtZSBBUyBkaXN0cmljdF9uYW1lLCBhLnBvc3RhbF9jb2RlLCBhLndnczg0X2xhdGl0dWRlLCBhLndnczg0X2xvbmdpdHVkZVxuICBGUk9NIGFkZHJlc3NfcG9pbnQgYVxuICBMRUZUIEpPSU4gc3RyZWV0IHMgT04gYS5zdHJlZXRfY29kZSA9IHMuY29kZVxuICBJTk5FUiBKT0lOIG9iamVjdF90eXBlIG8gT04gby5pZCA9IGEub2JqZWN0X3R5cGVfaWRcbiAgSU5ORVIgSk9JTiBjaXR5IGMgT04gYy5jb2RlID0gYS5jaXR5X2NvZGVcbiAgTEVGVCBKT0lOIGNpdHlfZGlzdHJpY3QgZCBPTiBhLmNpdHlfZGlzdHJpY3RfY29kZSA9IGQuY29kZVxuICBMRUZUIEpPSU4gcHJhZ3VlX2Rpc3RyaWN0IHAgT04gYS5wcmFndWVfZGlzdHJpY3RfY29kZSA9IHAuY29kZVxuICBMRUZUIEpPSU4gbXVuaWNpcGFsaXR5X3BhcnQgbSBPTiBhLm11bmljaXBhbGl0eV9wYXJ0X2NvZGUgPSBtLmNvZGVgO1xuXG5leHBvcnQgY29uc3QgZ2V0QWRkcmVzc1BvaW50QnlJZCA9IGFzeW5jIChcbiAgYWRkcmVzc1BvaW50SWQ6IG51bWJlclxuKTogUHJvbWlzZTxBZGRyZXNzUG9pbnQgfCBudWxsPiA9PiB7XG4gIGNvbnN0IHJvdyA9IGF3YWl0IHJhd1F1ZXJ5KFxuICAgIGAke2FkZHJlc3NQb2ludFNlbGVjdH1cbiAgICAgIFdIRVJFIGEuaWQgPSA/YCxcbiAgICBbYWRkcmVzc1BvaW50SWRdXG4gICk7XG4gIGlmIChyb3cubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHJvd1RvQWRkcmVzc1BvaW50KHJvd1swXSk7XG59O1xuXG5sZXQgbGFzdEZvdW5kZXI6IEZvdW5kZXIgfCBudWxsID0gbnVsbDtcbmxldCBhbGxTdHJlZXRzOiBzdHJpbmdbXSA9IFtdO1xuXG5leHBvcnQgY29uc3QgY2hlY2tTdHJlZXRFeGlzdHMgPSBhc3luYyAoXG4gIHN0cmVldE5hbWU6IHN0cmluZyxcbiAgZm91bmRlcjogRm91bmRlclxuKTogUHJvbWlzZTx7IGV4aXN0czogYm9vbGVhbjsgZXJyb3JzOiBTbWRFcnJvcltdIH0+ID0+IHtcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcblxuICAvLyB3ZSBjaGVjayB0aGUgd2hvbGUgY2l0eVxuICBjb25zdCBjaXR5Q29kZSA9IGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShcbiAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsXG4gICAgZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlXG4gICk7XG4gIGNvbnN0IHJvd0xpc3QgPSBhd2FpdCByYXdRdWVyeShcbiAgICBgU0VMRUNUIG5hbWUgQVMgc3RyZWV0X25hbWVcbiAgICBGUk9NIHN0cmVldFxuICAgIFdIRVJFIGNpdHlfY29kZSA9ID8gQU5EIG5hbWUgPSA/ICAke1xuICAgICAgaXNTcWxpdGUoa25leCkgPyBcIkNPTExBVEUgTk9DQVNFXCIgOiBcIlwiXG4gICAgfWAsXG4gICAgW2NpdHlDb2RlLCBzdHJlZXROYW1lXVxuICApO1xuXG4gIGlmIChyb3dMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCByb3cgPSByb3dMaXN0WzBdO1xuICAgIGlmIChyb3cuc3RyZWV0X25hbWUgIT09IHN0cmVldE5hbWUpIHtcbiAgICAgIC8vIGVycm9ycy5wdXNoKFxuICAgICAgLy8gICBgU3RyZWV0ICcke3N0cmVldE5hbWV9JyBoYXMgd3JvbmcgY2FzZSwgY29ycmVjdCBjYXNlOiAnJHtyb3cuc3RyZWV0X25hbWV9Jy5gXG4gICAgICAvLyApO1xuICAgIH1cbiAgICByZXR1cm4geyBleGlzdHM6IHRydWUsIGVycm9ycyB9O1xuICB9XG5cbiAgaWYgKGxhc3RGb3VuZGVyICE9PSBmb3VuZGVyKSB7XG4gICAgYWxsU3RyZWV0cyA9IGF3YWl0IGdldEFsbFN0cmVldHMoY2l0eUNvZGUpO1xuICAgIGxhc3RGb3VuZGVyID0gZm91bmRlcjtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gYWxsU3RyZWV0cy5maW5kKFxuICAgIChzKSA9PlxuICAgICAgcy50b0xvY2FsZUxvd2VyQ2FzZShcImNzLUNaXCIpID09PSBzdHJlZXROYW1lLnRvTG9jYWxlTG93ZXJDYXNlKFwiY3MtQ1pcIilcbiAgKTtcbiAgbGV0IGV4aXN0cyA9IGZhbHNlO1xuICBpZiAobWF0Y2gpIHtcbiAgICBleGlzdHMgPSB0cnVlO1xuICAgIGlmIChzdHJlZXROYW1lICE9PSBtYXRjaCkge1xuICAgICAgLy8gZXJyb3JzLnB1c2goXG4gICAgICAvLyAgIGBTdHJlZXQgJyR7c3RyZWV0TmFtZX0nIGhhcyB3cm9uZyBjYXNlLCBjb3JyZWN0IGNhc2U6ICcke21hdGNofScuYFxuICAgICAgLy8gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2xvc2VzdCA9IGZpbmRDbG9zZXN0U3RyaW5nKHN0cmVldE5hbWUsIGFsbFN0cmVldHMpO1xuICAgIGVycm9ycy5wdXNoKHtcbiAgICAgIG1lc3NhZ2U6IGBVbGljZSAnJHtzdHJlZXROYW1lfScgdiB0w6l0byBvYmNpIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtjbG9zZXN0fSc/YCxcbiAgICAgIHN0YXJ0T2Zmc2V0OiAwLFxuICAgICAgZW5kT2Zmc2V0OiBzdHJlZXROYW1lLmxlbmd0aCArIDEsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHsgZXhpc3RzOiBmYWxzZSwgZXJyb3JzIH07XG59O1xuXG5jb25zdCBnZXRBbGxTdHJlZXRzID0gYXN5bmMgKGNpdHlDb2RlOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcbiAgcmV0dXJuIGF3YWl0IGtuZXgucGx1Y2soXCJuYW1lXCIpLmZyb20oXCJzdHJlZXRcIikud2hlcmUoXCJjaXR5X2NvZGVcIiwgY2l0eUNvZGUpO1xufTtcblxuZXhwb3J0IHR5cGUgRmluZEFkZHJlc3NQb2ludHNQYXJhbXMgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwic21kTGluZVwiO1xuICAgICAgc21kTGluZTogU21kTGluZTtcbiAgICAgIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5O1xuICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGU/OiBudW1iZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCI7XG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVtYmVyO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5XCI7XG4gICAgICBtdW5pY2lwYWxpdHk6IE11bmljaXBhbGl0eTtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJ3aG9sZU11bmljaXBhbGl0eU5vU3RyZWV0TmFtZVwiO1xuICAgICAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHk7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGZpbmRBZGRyZXNzUG9pbnRzID0gYXN5bmMgKFxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXG4pOiBQcm9taXNlPEFkZHJlc3NQb2ludFtdPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gZ2V0UXVlcnlQYXJhbXMocGFyYW1zKTtcbiAgY29uc3Qgc3RyZWV0Sm9pbkNvbmRpdGlvbiA9IGdldFN0cmVldEpvaW5Db25kaXRpb24ocGFyYW1zKTtcblxuICBjb25zdCB3aGVyZUNvbmRpdGlvbiA9IGdldFdoZXJlQ29uZGl0aW9uKHBhcmFtcyk7XG5cbiAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCByYXdRdWVyeShcbiAgICBgU0VMRUNUIGEuaWQsIHMubmFtZSBBUyBzdHJlZXRfbmFtZSwgby5uYW1lIEFTIG9iamVjdF90eXBlX25hbWUsIGEuZGVzY3JpcHRpdmVfbnVtYmVyLFxuICAgICAgYS5vcmllbnRhdGlvbmFsX251bWJlciwgYS5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIsIGMubmFtZSBBUyBjaXR5X25hbWUsXG4gICAgICBkLm5hbWUgQVMgZGlzdHJpY3RfbmFtZSwgbS5uYW1lIEFTIG11bmljaXBhbGl0eV9wYXJ0X25hbWUsIHAubmFtZSBBUyBwcmFndWVfZGlzdHJpY3RfbmFtZSxcbiAgICAgIGEucG9zdGFsX2NvZGUsIGEud2dzODRfbGF0aXR1ZGUsIGEud2dzODRfbG9uZ2l0dWRlXG4gICAgRlJPTSBhZGRyZXNzX3BvaW50IGFcbiAgICAke3N0cmVldEpvaW5Db25kaXRpb259XG4gICAgSU5ORVIgSk9JTiBvYmplY3RfdHlwZSBvIE9OIG8uaWQgPSBhLm9iamVjdF90eXBlX2lkXG4gICAgSU5ORVIgSk9JTiBjaXR5IGMgT04gYy5jb2RlID0gYS5jaXR5X2NvZGVcbiAgICBMRUZUIEpPSU4gY2l0eV9kaXN0cmljdCBkIE9OIGEuY2l0eV9kaXN0cmljdF9jb2RlID0gZC5jb2RlXG4gICAgTEVGVCBKT0lOIG11bmljaXBhbGl0eV9wYXJ0IG0gT04gYS5tdW5pY2lwYWxpdHlfcGFydF9jb2RlID0gbS5jb2RlXG4gICAgTEVGVCBKT0lOIHByYWd1ZV9kaXN0cmljdCBwIE9OIGEucHJhZ3VlX2Rpc3RyaWN0X2NvZGUgPSBwLmNvZGVcbiAgICBXSEVSRSAke3doZXJlQ29uZGl0aW9ufWAsXG4gICAgcXVlcnlQYXJhbXNcbiAgKTtcblxuICByZXR1cm4gZmlsdGVyQWRkcmVzc1BvaW50cyhxdWVyeVJlc3VsdC5tYXAocm93VG9BZGRyZXNzUG9pbnQpLCBwYXJhbXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckFkZHJlc3NQb2ludHMgPSAoXG4gIGFkZHJlc3NQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXG4pOiBBZGRyZXNzUG9pbnRbXSA9PiB7XG4gIGlmIChcbiAgICBwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eVwiIHx8XG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlOb1N0cmVldE5hbWVcIiB8fFxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiXG4gICkge1xuICAgIHJldHVybiBhZGRyZXNzUG9pbnRzO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBBZGRyZXNzUG9pbnRbXSA9IFtdO1xuICBjb25zdCBudW1iZXJTcGVjID0gcGFyYW1zLnNtZExpbmUubnVtYmVyU3BlYztcbiAgaWYgKGlzU2VyaWVzU3BlY0FycmF5KG51bWJlclNwZWMpKSB7XG4gICAgbnVtYmVyU3BlYy5mb3JFYWNoKChzZXJpZXNTcGVjKSA9PiB7XG4gICAgICByZXN1bHQucHVzaCguLi5maWx0ZXJBZGRyZXNzUG9pbnRzQnlSYW5nZXMoYWRkcmVzc1BvaW50cywgc2VyaWVzU3BlYykpO1xuICAgIH0pO1xuXG4gICAgLy8gd2hlbiBubyBudW1iZXIgc3BlY3MgYXJlIHByZXNlbnQsIHdlIHRha2UgZXZlcnl0aGluZ1xuICAgIGlmIChudW1iZXJTcGVjLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LnB1c2goLi4uYWRkcmVzc1BvaW50cyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTmVnYXRpdmVTZXJpZXNTcGVjKG51bWJlclNwZWMpKSB7XG4gICAgLy8gbmVnYXRpdmUgbnVtYmVyIHNwZWMgKGUuZy4gb2RkIG51bWJlcnMgZXhjZXB0IDEzLTE3KVxuICAgIGNvbnN0IHRvRXhjbHVkZSA9IGZpbHRlckFkZHJlc3NQb2ludHNCeVJhbmdlcyhhZGRyZXNzUG9pbnRzLCBudW1iZXJTcGVjKTtcbiAgICByZXN1bHQucHVzaChcbiAgICAgIC4uLmFkZHJlc3NQb2ludHMuZmlsdGVyKFxuICAgICAgICAoYWRkcmVzc1BvaW50KSA9PiAhdG9FeGNsdWRlLmluY2x1ZGVzKGFkZHJlc3NQb2ludClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IGZpbHRlckFkZHJlc3NQb2ludHNCeVJhbmdlcyA9IChcbiAgYWRkcmVzc1BvaW50czogQWRkcmVzc1BvaW50W10sXG4gIHNlcmllc1NwZWM6IFNlcmllc1NwZWNcbik6IEFkZHJlc3NQb2ludFtdID0+IHtcbiAgY29uc3QgcmVzdWx0OiBBZGRyZXNzUG9pbnRbXSA9IFtdO1xuICBzZXJpZXNTcGVjLnJhbmdlcy5mb3JFYWNoKChyYW5nZSkgPT4ge1xuICAgIHJlc3VsdC5wdXNoKFxuICAgICAgLi4uYWRkcmVzc1BvaW50cy5maWx0ZXIoKGFkZHJlc3NQb2ludCkgPT4ge1xuICAgICAgICBpZiAoaXNSYW5nZShyYW5nZSkpIHtcbiAgICAgICAgICBjb25zdCBudW1iZXIgPSBnZXROdW1iZXJCeVR5cGUoc2VyaWVzU3BlYy50eXBlLCBhZGRyZXNzUG9pbnQpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc0luUmFuZ2UoXG4gICAgICAgICAgICAgIG51bWJlcixcbiAgICAgICAgICAgICAgc2VyaWVzU3BlYy50eXBlICE9PSBTZXJpZXNUeXBlLkRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgPyBhZGRyZXNzUG9pbnQub3JpZW50YXRpb25hbE51bWJlckxldHRlciA/PyBudWxsXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICByYW5nZVxuICAgICAgICAgICAgKSAmJiBmaXRzVHlwZShudW1iZXIsIHNlcmllc1NwZWMudHlwZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZ1bGxTdHJlZXROdW1iZXI6IEZ1bGxTdHJlZXROdW1iZXIgPSByYW5nZTtcbiAgICAgICAgICByZXR1cm4gZXF1YWxzRnVsbFN0cmVldE51bWJlcihmdWxsU3RyZWV0TnVtYmVyLCBhZGRyZXNzUG9pbnQpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIHdoZW4gbm8gc2VyaWVzIHNwZWNzIGFyZSBwcmVzZW50LCB3ZSB0YWtlIGV2ZXJ5dGhpbmcgdGhhdCBmaXRzIHRoZSB0eXBlXG4gIGlmIChzZXJpZXNTcGVjLnJhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQucHVzaChcbiAgICAgIC4uLmFkZHJlc3NQb2ludHMuZmlsdGVyKChhZGRyZXNzUG9pbnQpID0+XG4gICAgICAgIGZpdHNUeXBlKFxuICAgICAgICAgIGdldE51bWJlckJ5VHlwZShzZXJpZXNTcGVjLnR5cGUsIGFkZHJlc3NQb2ludCksXG4gICAgICAgICAgc2VyaWVzU3BlYy50eXBlXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtcyA9IChcbiAgcGFyYW1zOiBGaW5kQWRkcmVzc1BvaW50c1BhcmFtc1xuKTogKHN0cmluZyB8IG51bWJlcilbXSA9PiB7XG4gIGlmIChwYXJhbXMudHlwZSA9PT0gXCJzbWRMaW5lXCIgJiYgcGFyYW1zLnNtZExpbmUudHlwZSA9PT0gXCJzdHJlZXRcIikge1xuICAgIHJldHVybiBbcGFyYW1zLnNtZExpbmUuc3RyZWV0LCBwYXJhbXMubXVuaWNpcGFsaXR5LmNvZGVdO1xuICB9XG5cbiAgaWYgKFxuICAgIChwYXJhbXMudHlwZSA9PT0gXCJzbWRMaW5lXCIgJiYgcGFyYW1zLnNtZExpbmUudHlwZSA9PT0gXCJtdW5pY2lwYWxpdHlQYXJ0XCIpIHx8XG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCJcbiAgKSB7XG4gICAgcmV0dXJuIFtwYXJhbXMubXVuaWNpcGFsaXR5UGFydENvZGVdO1xuICB9XG5cbiAgcmV0dXJuIFtwYXJhbXMubXVuaWNpcGFsaXR5LmNvZGVdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN0cmVldEpvaW5Db25kaXRpb24gPSAoXG4gIHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXNcbik6IHN0cmluZyA9PiB7XG4gIGlmIChwYXJhbXMudHlwZSA9PT0gXCJzbWRMaW5lXCIgJiYgcGFyYW1zLnNtZExpbmUudHlwZSA9PT0gXCJzdHJlZXRcIikge1xuICAgIHJldHVybiBgSk9JTiBzdHJlZXQgcyBPTiBhLnN0cmVldF9jb2RlID0gcy5jb2RlIEFORCBzLm5hbWUgPSA/ICR7XG4gICAgICBpc1NxbGl0ZShnZXRLbmV4RGIoKSkgPyBcIkNPTExBVEUgTk9DQVNFXCIgOiBcIlwiXG4gICAgfWA7XG4gIH1cbiAgcmV0dXJuIFwiTEVGVCBKT0lOIHN0cmVldCBzIE9OIGEuc3RyZWV0X2NvZGUgPSBzLmNvZGVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRXaGVyZUNvbmRpdGlvbiA9IChwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zKTogc3RyaW5nID0+IHtcbiAgaWYgKFxuICAgIChwYXJhbXMudHlwZSA9PT0gXCJzbWRMaW5lXCIgJiYgcGFyYW1zLnNtZExpbmUudHlwZSA9PT0gXCJtdW5pY2lwYWxpdHlQYXJ0XCIpIHx8XG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCJcbiAgKSB7XG4gICAgcmV0dXJuIFwiYS5tdW5pY2lwYWxpdHlfcGFydF9jb2RlID0gP1wiO1xuICB9XG5cbiAgaWYgKHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5Tm9TdHJlZXROYW1lXCIpIHtcbiAgICByZXR1cm4gYCR7Z2V0TXVuaWNpcGFsaXR5V2hlcmUoXG4gICAgICBcImFcIixcbiAgICAgIHBhcmFtcy5tdW5pY2lwYWxpdHlcbiAgICApfSBBTkQgYS5zdHJlZXRfY29kZSBJUyBOVUxMYDtcbiAgfVxuXG4gIHJldHVybiBnZXRNdW5pY2lwYWxpdHlXaGVyZShcImFcIiwgcGFyYW1zLm11bmljaXBhbGl0eSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJblJhbmdlID0gKFxuICBudW1iZXI6IG51bWJlciB8IG51bGwsXG4gIGxldHRlcjogc3RyaW5nIHwgbnVsbCxcbiAgcmFuZ2U6IFJhbmdlU3BlY1xuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChudW1iZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gIXJhbmdlLmZyb20gJiYgIXJhbmdlLnRvO1xuICB9XG5cbiAgLy8gZXhwbGFpbmVyOiBlaXRoZXIgdGhlIGxvd2VyIGJvdW5kIGlzIG5vdCBzZXQsIG9yIGl0IGlzIGxvd2VyIHRoYW4gdGhlIG51bWJlclxuICAvLyBpZiBpdCdzIGVxdWFsIHRvIHRoZSBudW1iZXIsIHdlIGFsc28gaGF2ZSB0byBjaGVjayB0aGUgbGV0dGVyIC0gaWYgaXQncyBub3Qgc2V0LCB3ZSBkb24ndCBjYXJlXG4gIC8vIGlmIGZyb20ubGV0dGVyIGlzIHNldCwgd2UgbmVlZCB0byBoYXZlIGEgbGV0dGVyIHNldCBhbmQgaXQgaGFzIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWw6XG4gIC8vIG51bWJlciB3aXRob3V0IGxldHRlciBjb3VudHMgbG93ZXIgdGhhbiBudW1iZXIgd2l0aCBsZXR0ZXIgJ2EnIChlLmcuIDIzIDwgMjNhKVxuICBjb25zdCBzYXRpc2ZpZXNGcm9tID1cbiAgICAhcmFuZ2UuZnJvbSB8fFxuICAgIG51bWJlciA+IHJhbmdlLmZyb20ubnVtYmVyIHx8XG4gICAgKG51bWJlciA9PT0gcmFuZ2UuZnJvbS5udW1iZXIgJiZcbiAgICAgICghcmFuZ2UuZnJvbS5sZXR0ZXIgfHwgKCEhbGV0dGVyICYmIGxldHRlciA+PSByYW5nZS5mcm9tLmxldHRlcikpKTtcblxuICBjb25zdCBzYXRpc2ZpZXNUbyA9XG4gICAgIXJhbmdlLnRvIHx8XG4gICAgbnVtYmVyIDwgcmFuZ2UudG8ubnVtYmVyIHx8XG4gICAgKG51bWJlciA9PT0gcmFuZ2UudG8ubnVtYmVyICYmXG4gICAgICAoIWxldHRlciB8fFxuICAgICAgICAoISFyYW5nZS50by5sZXR0ZXIgJiYgISFsZXR0ZXIgJiYgbGV0dGVyIDw9IHJhbmdlLnRvLmxldHRlcikpKTtcblxuICByZXR1cm4gc2F0aXNmaWVzRnJvbSAmJiBzYXRpc2ZpZXNUbztcbn07XG5cbmV4cG9ydCBjb25zdCBmaXRzVHlwZSA9IChudW1iZXI6IG51bWJlciB8IG51bGwsIHR5cGU6IFNlcmllc1R5cGUpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlID09PSBTZXJpZXNUeXBlLkRlc2NyaXB0aW9uIHx8XG4gICAgdHlwZSA9PT0gU2VyaWVzVHlwZS5BbGwgfHxcbiAgICAvLyBhIG1pc3NpbmcgbnVtYmVyIChlLmcuIG5vIG9yaWVudGF0aW9uYWwgbnVtYmVyKSBpcyBuZWl0aGVyIG9kZCBub3IgZXZlbixcbiAgICAvLyBjYXJlZnVsOiBudWxsICUgMiA9PT0gMCBpbiBKU1xuICAgICh0eXBlID09PSBTZXJpZXNUeXBlLk9kZCAmJiBudW1iZXIgIT09IG51bGwgJiYgbnVtYmVyICUgMiA9PT0gMSkgfHxcbiAgICAodHlwZSA9PT0gU2VyaWVzVHlwZS5FdmVuICYmIG51bWJlciAhPT0gbnVsbCAmJiBudW1iZXIgJSAyID09PSAwKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGVxdWFsc0Z1bGxTdHJlZXROdW1iZXIgPSAoXG4gIGZ1bGxTdHJlZXROdW1iZXI6IEZ1bGxTdHJlZXROdW1iZXIsXG4gIGFkZHJlc3NQb2ludDogQWRkcmVzc1BvaW50XG4pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICBmdWxsU3RyZWV0TnVtYmVyLmRlc2NyaXB0aW9uTnVtYmVyLm51bWJlciA9PT0gYWRkcmVzc1BvaW50LmhvdXNlTnVtYmVyICYmXG4gICAgZnVsbFN0cmVldE51bWJlci5vcmllbnRhdGlvbmFsTnVtYmVyLm51bWJlciA9PT1cbiAgICAgIGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyICYmXG4gICAgKCghZnVsbFN0cmVldE51bWJlci5vcmllbnRhdGlvbmFsTnVtYmVyLmxldHRlciAmJlxuICAgICAgIWFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyKSB8fFxuICAgICAgZnVsbFN0cmVldE51bWJlci5vcmllbnRhdGlvbmFsTnVtYmVyLmxldHRlciA9PT1cbiAgICAgICAgYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXIpXG4gICk7XG59O1xuXG5jb25zdCBnZXROdW1iZXJCeVR5cGUgPSAoXG4gIHR5cGU6IFNlcmllc1R5cGUsXG4gIGFkZHJlc3NQb2ludDogQWRkcmVzc1BvaW50XG4pOiBudW1iZXIgfCBudWxsID0+IHtcbiAgcmV0dXJuIHR5cGUgPT09IFNlcmllc1R5cGUuRGVzY3JpcHRpb25cbiAgICA/IGFkZHJlc3NQb2ludC5ob3VzZU51bWJlclxuICAgIDogYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgPz8gbnVsbDtcbn07XG5cbmNvbnN0IGdldE11bmljaXBhbGl0eVdoZXJlID0gKFxuICBhbGlhczogc3RyaW5nLFxuICBtdW5pY2lwYWxpdHk6IE11bmljaXBhbGl0eVxuKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIG11bmljaXBhbGl0eS50eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcbiAgICA/IGAke2FsaWFzfS5jaXR5X2NvZGUgPSA/YFxuICAgIDogYCR7YWxpYXN9LmNpdHlfZGlzdHJpY3RfY29kZSA9ID9gO1xufTtcblxuY29uc3Qgcm93VG9BZGRyZXNzUG9pbnQgPSAocm93OiBhbnkpOiBBZGRyZXNzUG9pbnQgPT4ge1xuICBjb25zdCBwb2ludDogQWRkcmVzc1BvaW50ID0ge1xuICAgIGlkOiByb3cuaWQsXG4gICAgYWRkcmVzczogXCJcIixcbiAgICB0eXBlOlxuICAgICAgcm93Lm9iamVjdF90eXBlX25hbWUgPT09IERlc2NyaXB0aXZlVHlwZVxuICAgICAgICA/IEFkZHJlc3NQb2ludFR5cGUuRGVzY3JpcHRpb25cbiAgICAgICAgOiBBZGRyZXNzUG9pbnRUeXBlLlJlZ2lzdHJhdGlvbixcbiAgICBob3VzZU51bWJlcjogcm93LmRlc2NyaXB0aXZlX251bWJlcixcbiAgICBjaXR5OiByb3cuY2l0eV9uYW1lLFxuICAgIG11bmljaXBhbGl0eVBhcnQ6IHJvdy5tdW5pY2lwYWxpdHlfcGFydF9uYW1lLFxuICAgIHBvc3RhbENvZGU6IHJvdy5wb3N0YWxfY29kZSxcbiAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcbiAgICBsbmc6IHJvdy53Z3M4NF9sb25naXR1ZGUsXG4gIH07XG4gIGlmIChyb3cuc3RyZWV0X25hbWUgIT09IG51bGwpIHtcbiAgICBwb2ludC5zdHJlZXQgPSByb3cuc3RyZWV0X25hbWU7XG4gIH1cbiAgaWYgKHJvdy5vcmllbnRhdGlvbmFsX251bWJlciAhPT0gbnVsbCkge1xuICAgIHBvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgPSByb3cub3JpZW50YXRpb25hbF9udW1iZXI7XG4gIH1cbiAgaWYgKHJvdy5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIgIT09IG51bGwpIHtcbiAgICBwb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyID0gcm93Lm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlcjtcbiAgfVxuICBpZiAocm93LmRpc3RyaWN0X25hbWUgIT09IG51bGwpIHtcbiAgICBwb2ludC5kaXN0cmljdCA9IHJvdy5kaXN0cmljdF9uYW1lO1xuICB9XG4gIGlmIChyb3cucHJhZ3VlX2Rpc3RyaWN0X25hbWUgIT09IG51bGwpIHtcbiAgICBwb2ludC5wcmFndWVEaXN0cmljdCA9IHJvdy5wcmFndWVfZGlzdHJpY3RfbmFtZTtcbiAgfVxuICBwb2ludC5hZGRyZXNzID0gY3JlYXRlU2luZ2xlTGluZUFkZHJlc3MocG9pbnQpO1xuICByZXR1cm4gcG9pbnQ7XG59O1xuIl19
|
|
406
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFLTCxVQUFVLEVBR1Ysb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxpQkFBaUIsR0FDbEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQXlCLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xFLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUVqQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7QUFFakMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO0lBQ3BCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO0NBQ3RCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsQ0FBQztJQUNYLFFBQVEsRUFBRSxDQUFDO0lBQ1gsWUFBWSxFQUFFLENBQUM7SUFDZixZQUFZLEVBQUUsQ0FBQztJQUNmLGtCQUFrQixFQUFFLENBQUM7SUFD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LFdBQVcsQ0FBQztLQUNoQztJQUNELElBQUksR0FBRyxDQUFDLG9CQUFvQixLQUFLLElBQUksRUFBRTtRQUNyQyxLQUFLLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0tBQ3REO0lBQ0QsSUFBSSxHQUFHLENBQUMsMkJBQTJCLEtBQUssSUFBSSxFQUFFO1FBQzVDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUMsMkJBQTJCLENBQUM7S0FDbkU7SUFDRCxJQUFJLEdBQUcsQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO1FBQzlCLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQztLQUNwQztJQUNELElBQUksR0FBRyxDQUFDLG9CQUFvQixLQUFLLElBQUksRUFBRTtRQUNyQyxLQUFLLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztLQUNqRDtJQUNELEtBQUssQ0FBQyxPQUFPLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZGRyZXNzUG9pbnRUeXBlLCBjcmVhdGVTaW5nbGVMaW5lQWRkcmVzcyB9IGZyb20gXCJjemVjaC1hZGRyZXNzXCI7XG5pbXBvcnQge1xuICBBZGRyZXNzUG9pbnQsXG4gIEZ1bGxTdHJlZXROdW1iZXIsXG4gIFJhbmdlU3BlYyxcbiAgU2VyaWVzU3BlYyxcbiAgU2VyaWVzVHlwZSxcbiAgU21kRXJyb3IsXG4gIFNtZExpbmUsXG4gIGlzTmVnYXRpdmVTZXJpZXNTcGVjLFxuICBpc1JhbmdlLFxuICBpc1Nlcmllc1NwZWNBcnJheSxcbn0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi90eXBlc1wiO1xuaW1wb3J0IHsgZmluZENsb3Nlc3RTdHJpbmcsIHJvdW5kVG9ORGVjaW1hbFBsYWNlcyB9IGZyb20gXCIuLi91dGlscy9oZWxwZXJzXCI7XG5pbXBvcnQganRzazJ3Z3M4NCBmcm9tIFwiLi4vdXRpbHMvanRzazJ3Z3M4NFwiO1xuaW1wb3J0IHtcbiAgZXh0cmFjdEtleVZhbHVlc1BhaXJzLFxuICBnZW5lcmF0ZTJEUGxhY2Vob2xkZXJzLFxuICBnZXRLbmV4RGIsXG4gIGluc2VydE11bHRpcGxlUm93cyxcbiAgaXNNeXNxbCxcbiAgaXNTcWxpdGUsXG4gIG5vbkVtcHR5T3JOdWxsLFxuICByYXdRdWVyeSxcbn0gZnJvbSBcIi4vZGJcIjtcbmltcG9ydCB7IGdldEZvdW5kZXJDaXR5Q29kZSB9IGZyb20gXCIuL2ZvdW5kZXJzXCI7XG5pbXBvcnQgeyBGb3VuZGVyLCBNdW5pY2lwYWxpdHksIE11bmljaXBhbGl0eVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IGNodW5rIGZyb20gXCJsb2Rhc2gvY2h1bmtcIjtcblxuY29uc3QgRGVzY3JpcHRpdmVUeXBlID0gXCLEjS5wLlwiO1xuY29uc3QgUmVnaXN0cmF0aW9uVHlwZSA9IFwixI0uZXYuXCI7XG5cbmNvbnN0IE9iamVjdFR5cGVzID0ge1xuICBbRGVzY3JpcHRpdmVUeXBlXTogMSxcbiAgW1JlZ2lzdHJhdGlvblR5cGVdOiAyLFxufTtcblxuZXhwb3J0IGNvbnN0IENvbHVtbiA9IHtcbiAgYWRtQ29kZTogMCxcbiAgY2l0eUNvZGU6IDEsXG4gIGNpdHlOYW1lOiAyLFxuICBkaXN0cmljdENvZGU6IDMsXG4gIGRpc3RyaWN0TmFtZTogNCxcbiAgcHJhZ3VlRGlzdHJpY3RDb2RlOiA1LFxuICBwcmFndWVEaXN0cmljdE5hbWU6IDYsXG4gIG11bmljaXBhbGl0eVBhcnRDb2RlOiA3LFxuICBtdW5pY2lwYWxpdHlQYXJ0TmFtZTogOCxcbiAgc3RyZWV0Q29kZTogOSxcbiAgc3RyZWV0TmFtZTogMTAsXG4gIG9iamVjdFR5cGU6IDExLFxuICBob3VzZU51bWJlcjogMTIsXG4gIG9yaWVudGF0aW9uYWxOdW1iZXI6IDEzLFxuICBvcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyOiAxNCxcbiAgcG9zdGFsQ29kZTogMTUsXG4gIHlDb29yZGluYXRlOiAxNixcbiAgeENvb3JkaW5hdGU6IDE3LFxuICB2YWxpZEZyb206IDE4LFxufTtcblxuY29uc3QgY29sdW1uTmFtZXMgPSBbXG4gIFwiaWRcIixcbiAgXCJzdHJlZXRfY29kZVwiLFxuICBcIm9iamVjdF90eXBlX2lkXCIsXG4gIFwiZGVzY3JpcHRpdmVfbnVtYmVyXCIsXG4gIFwib3JpZW50YXRpb25hbF9udW1iZXJcIixcbiAgXCJvcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXJcIixcbiAgXCJjaXR5X2NvZGVcIixcbiAgXCJjaXR5X2Rpc3RyaWN0X2NvZGVcIixcbiAgXCJtdW5pY2lwYWxpdHlfcGFydF9jb2RlXCIsXG4gIFwicHJhZ3VlX2Rpc3RyaWN0X2NvZGVcIixcbiAgXCJwb3N0YWxfY29kZVwiLFxuICBcImp0c2tfeFwiLFxuICBcImp0c2tfeVwiLFxuICBcIndnczg0X2xhdGl0dWRlXCIsXG4gIFwid2dzODRfbG9uZ2l0dWRlXCIsXG5dO1xuXG5leHBvcnQgY29uc3QgY29tbWl0QWRkcmVzc1BvaW50cyA9IGFzeW5jIChcbiAgYnVmZmVyOiBzdHJpbmdbXVtdXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGF3YWl0IGluc2VydENpdGllcyhidWZmZXIpO1xuICBhd2FpdCBpbnNlcnREaXN0cmljdHMoYnVmZmVyKTtcbiAgYXdhaXQgaW5zZXJ0TXVuaWNpcGFsaXR5UGFydHMoYnVmZmVyKTtcbiAgYXdhaXQgaW5zZXJ0U3RyZWV0cyhidWZmZXIpO1xuICBhd2FpdCBpbnNlcnRQcmFndWVEaXN0cmljdHMoYnVmZmVyKTtcblxuICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBudWxsKVtdPiA9IHt9O1xuICBidWZmZXIuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgIGxldCBsYXRPck51bGw6IHN0cmluZywgbG9uT3JOdWxsOiBzdHJpbmc7XG4gICAgbGF0T3JOdWxsID0gbnVsbDtcbiAgICBsb25Pck51bGwgPSBudWxsO1xuICAgIGlmIChkYXRhW0NvbHVtbi54Q29vcmRpbmF0ZV0gJiYgZGF0YVtDb2x1bW4ueUNvb3JkaW5hdGVdKSB7XG4gICAgICBjb25zdCB7IGxhdCwgbG9uIH0gPSBqdHNrMndnczg0KFxuICAgICAgICBwYXJzZUZsb2F0KGRhdGFbQ29sdW1uLnhDb29yZGluYXRlXSksXG4gICAgICAgIHBhcnNlRmxvYXQoZGF0YVtDb2x1bW4ueUNvb3JkaW5hdGVdKVxuICAgICAgKTtcbiAgICAgIFtsYXRPck51bGwsIGxvbk9yTnVsbF0gPSBbbGF0LnRvU3RyaW5nKCksIGxvbi50b1N0cmluZygpXTtcbiAgICB9XG4gICAgcGFyYW1zW2RhdGFbQ29sdW1uLmFkbUNvZGVdXSA9IFtcbiAgICAgIGRhdGFbQ29sdW1uLmFkbUNvZGVdLFxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4uc3RyZWV0Q29kZV0pLFxuICAgICAgT2JqZWN0VHlwZXNbZGF0YVtDb2x1bW4ub2JqZWN0VHlwZV1dLFxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4uaG91c2VOdW1iZXJdKSxcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLm9yaWVudGF0aW9uYWxOdW1iZXJdKSxcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXJdKSxcbiAgICAgIGRhdGFbQ29sdW1uLmNpdHlDb2RlXSxcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLmRpc3RyaWN0Q29kZV0pLFxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ubXVuaWNpcGFsaXR5UGFydENvZGVdKSxcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLnByYWd1ZURpc3RyaWN0Q29kZV0pLFxuICAgICAgZGF0YVtDb2x1bW4ucG9zdGFsQ29kZV0sXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi54Q29vcmRpbmF0ZV0pLFxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ueUNvb3JkaW5hdGVdKSxcbiAgICAgIGxhdE9yTnVsbCxcbiAgICAgIGxvbk9yTnVsbCxcbiAgICBdO1xuICB9KTtcblxuICAvLyBmaW5kIGFscmVhZHkgZXhpc3Rpbmcgcm93c1xuICBjb25zdCBleGlzdGluZ1Jvd3MgPSBhd2FpdCByYXdRdWVyeShcbiAgICBgU0VMRUNUICogRlJPTSBhZGRyZXNzX3BvaW50IFdIRVJFIGlkIElOICgke2J1ZmZlclxuICAgICAgLm1hcCgoZGF0YSkgPT4gZGF0YVtDb2x1bW4uYWRtQ29kZV0pXG4gICAgICAuam9pbihcIixcIil9KWBcbiAgKTtcblxuICBjb25zdCBxdWVyaWVzID0gW107XG4gIGZvciAoY29uc3Qgcm93IG9mIGV4aXN0aW5nUm93cykge1xuICAgIGNvbnN0IHRvSW5zZXJ0ID0gcGFyYW1zW3Jvdy5pZF07XG4gICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhyb3cpO1xuICAgIGlmICghdG9JbnNlcnQuZXZlcnkoKHYsIGkpID0+IHZhbHVlc0VxdWFsKHYsIHZhbHVlc1tpXSkpKSB7XG4gICAgICAvLyB1cGRhdGUgdGhvc2Ugd2hvc2UgdmFsdWVzIGRpZmZlclxuICAgICAgcXVlcmllcy5wdXNoKFxuICAgICAgICByYXdRdWVyeShcbiAgICAgICAgICBgVVBEQVRFIGFkZHJlc3NfcG9pbnQgU0VUICR7Y29sdW1uTmFtZXNcbiAgICAgICAgICAgIC5tYXAoKGMpID0+IGAke2N9ID0gP2ApXG4gICAgICAgICAgICAuam9pbihcIiwgXCIpfSBXSEVSRSBpZCA9ID9gLFxuICAgICAgICAgIFsuLi50b0luc2VydCwgcm93LmlkXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHF1ZXJpZXMpO1xuXG4gIGNvbnN0IHBsYWNlSG9sZGVycyA9IGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMoXG4gICAgY29sdW1uTmFtZXMubGVuZ3RoLFxuICAgIGJ1ZmZlci5sZW5ndGhcbiAgKTtcblxuICBjb25zdCBrbmV4ID0gZ2V0S25leERiKCk7XG4gIGF3YWl0IHJhd1F1ZXJ5KFxuICAgIGBJTlNFUlQgJHtcbiAgICAgIGlzTXlzcWwoa25leCkgPyBcIklHTk9SRVwiIDogXCJcIlxuICAgIH0gSU5UTyBhZGRyZXNzX3BvaW50ICgke2NvbHVtbk5hbWVzLmpvaW4oXCIsXCIpfSkgVkFMVUVTICR7cGxhY2VIb2xkZXJzfSAke1xuICAgICAgIWlzTXlzcWwoa25leCkgPyBcIk9OIENPTkZMSUNUIChpZCkgRE8gTk9USElOR1wiIDogXCJcIlxuICAgIH1gLFxuICAgIE9iamVjdC52YWx1ZXMocGFyYW1zKS5mbGF0KClcbiAgKTtcblxuICByZXR1cm4gYnVmZmVyLmxlbmd0aDtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVEZXByZWNhdGVkQWRkcmVzc1BvaW50cyhcbiAgYWxsSWRzOiBTZXQ8bnVtYmVyPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBhd2FpdCBrbmV4LnBsdWNrKFwiaWRcIikuZnJvbShcImFkZHJlc3NfcG9pbnRcIik7XG4gIGNvbnN0IHRvUmVtb3ZlID0gZXhpc3RpbmdJZHMuZmlsdGVyKChpZCkgPT4gIWFsbElkcy5oYXMoaWQpKTtcbiAgY29uc3QgY2h1bmtzID0gY2h1bmsodG9SZW1vdmUsIDEwMDApO1xuICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgIGF3YWl0IGtuZXgoXCJhZGRyZXNzX3BvaW50XCIpLndoZXJlSW4oXCJpZFwiLCBjaHVuaykuZGVsZXRlKCk7XG4gIH1cbiAgY29uc29sZS5sb2coYFJlbW92ZWQgJHt0b1JlbW92ZS5sZW5ndGh9IGRlcHJlY2F0ZWQgYWRkcmVzcyBwb2ludHMuYCk7XG59XG5cbmZ1bmN0aW9uIHZhbHVlc0VxdWFsKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBzYW5pdGl6ZVZhbHVlKGEpID09PSBzYW5pdGl6ZVZhbHVlKGIpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgaWYgKC9cXGQrXFwuXFxkKy8udGVzdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gcm91bmRUb05EZWNpbWFsUGxhY2VzKHBhcnNlRmxvYXQodmFsdWUpLCA2KS50b1N0cmluZygpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLy8gbmFtZXMgb2YgY2l0aWVzLCBzdHJlZXRzIGV0Yy4gY2FuIGNoYW5nZSB3aGlsZSB0aGVpciBjb2RlIHN0YXlzIHRoZSBzYW1lXG5jb25zdCB1cGRhdGVOYW1lT25Db25mbGljdCA9IHtcbiAgY29uZmxpY3RDb2x1bW5zOiBbXCJjb2RlXCJdLFxuICB1cGRhdGVDb2x1bW5zOiBbXCJuYW1lXCJdLFxufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydENpdGllcyA9IGFzeW5jIChidWZmZXI6IHN0cmluZ1tdW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5jaXR5Q29kZSwgW0NvbHVtbi5jaXR5TmFtZV0pLFxuICAgIFwiY2l0eVwiLFxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdLFxuICAgIHRydWUsXG4gICAgdXBkYXRlTmFtZU9uQ29uZmxpY3RcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnREaXN0cmljdHMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4uZGlzdHJpY3RDb2RlLCBbXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXG4gICAgICBDb2x1bW4uZGlzdHJpY3ROYW1lLFxuICAgIF0pLFxuICAgIFwiY2l0eV9kaXN0cmljdFwiLFxuICAgIFtcImNvZGVcIiwgXCJjaXR5X2NvZGVcIiwgXCJuYW1lXCJdLFxuICAgIHRydWUsXG4gICAgdXBkYXRlTmFtZU9uQ29uZmxpY3RcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRNdW5pY2lwYWxpdHlQYXJ0cyA9IGFzeW5jIChcbiAgYnVmZmVyOiBzdHJpbmdbXVtdXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5tdW5pY2lwYWxpdHlQYXJ0Q29kZSwgW1xuICAgICAgQ29sdW1uLm11bmljaXBhbGl0eVBhcnROYW1lLFxuICAgICAgQ29sdW1uLmNpdHlDb2RlLFxuICAgIF0pLFxuICAgIFwibXVuaWNpcGFsaXR5X3BhcnRcIixcbiAgICBbXCJjb2RlXCIsIFwibmFtZVwiLCBcImNpdHlfY29kZVwiXSxcbiAgICB0cnVlLFxuICAgIHVwZGF0ZU5hbWVPbkNvbmZsaWN0XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0UHJhZ3VlRGlzdHJpY3RzID0gYXN5bmMgKFxuICBidWZmZXI6IHN0cmluZ1tdW11cbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLnByYWd1ZURpc3RyaWN0Q29kZSwgW1xuICAgICAgQ29sdW1uLnByYWd1ZURpc3RyaWN0TmFtZSxcbiAgICBdKSxcbiAgICBcInByYWd1ZV9kaXN0cmljdFwiLFxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdLFxuICAgIHRydWUsXG4gICAgdXBkYXRlTmFtZU9uQ29uZmxpY3RcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRTdHJlZXRzID0gYXN5bmMgKGJ1ZmZlcjogc3RyaW5nW11bXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLnN0cmVldENvZGUsIFtcbiAgICAgIENvbHVtbi5jaXR5Q29kZSxcbiAgICAgIENvbHVtbi5zdHJlZXROYW1lLFxuICAgIF0pLFxuICAgIFwic3RyZWV0XCIsXG4gICAgW1wiY29kZVwiLCBcImNpdHlfY29kZVwiLCBcIm5hbWVcIl0sXG4gICAgdHJ1ZSxcbiAgICB1cGRhdGVOYW1lT25Db25mbGljdFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFyZUFkZHJlc3NQb2ludHNTeW5jZWQgPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXG4gICAgLmNvdW50KFwiKlwiLCB7IGFzOiBcImNvdW50QWxsXCIgfSlcbiAgICAuZnJvbShcImFkZHJlc3NfcG9pbnRcIilcbiAgICAuZmlyc3QoKTtcbiAgcmV0dXJuIE51bWJlcihyZXN1bHQuY291bnRBbGwpID49IDI5MDAwMDA7IC8vIHRvdGFsIGlzIGFsbW9zdCAzIG1pbGxpb25cbn07XG5cbmNvbnN0IGFkZHJlc3NQb2ludFNlbGVjdCA9IGBcbiAgU0VMRUNUIGEuaWQsIHMubmFtZSBBUyBzdHJlZXRfbmFtZSwgby5uYW1lIEFTIG9iamVjdF90eXBlX25hbWUsIGEuZGVzY3JpcHRpdmVfbnVtYmVyLFxuICAgICAgICBhLm9yaWVudGF0aW9uYWxfbnVtYmVyLCBhLm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlciwgYy5uYW1lIEFTIGNpdHlfbmFtZSxcbiAgICAgICAgbS5uYW1lIEFTIG11bmljaXBhbGl0eV9wYXJ0X25hbWUsIHAubmFtZSBBUyBwcmFndWVfZGlzdHJpY3RfbmFtZSxcbiAgICAgICAgZC5uYW1lIEFTIGRpc3RyaWN0X25hbWUsIGEucG9zdGFsX2NvZGUsIGEud2dzODRfbGF0aXR1ZGUsIGEud2dzODRfbG9uZ2l0dWRlXG4gIEZST00gYWRkcmVzc19wb2ludCBhXG4gIExFRlQgSk9JTiBzdHJlZXQgcyBPTiBhLnN0cmVldF9jb2RlID0gcy5jb2RlXG4gIElOTkVSIEpPSU4gb2JqZWN0X3R5cGUgbyBPTiBvLmlkID0gYS5vYmplY3RfdHlwZV9pZFxuICBJTk5FUiBKT0lOIGNpdHkgYyBPTiBjLmNvZGUgPSBhLmNpdHlfY29kZVxuICBMRUZUIEpPSU4gY2l0eV9kaXN0cmljdCBkIE9OIGEuY2l0eV9kaXN0cmljdF9jb2RlID0gZC5jb2RlXG4gIExFRlQgSk9JTiBwcmFndWVfZGlzdHJpY3QgcCBPTiBhLnByYWd1ZV9kaXN0cmljdF9jb2RlID0gcC5jb2RlXG4gIExFRlQgSk9JTiBtdW5pY2lwYWxpdHlfcGFydCBtIE9OIGEubXVuaWNpcGFsaXR5X3BhcnRfY29kZSA9IG0uY29kZWA7XG5cbmV4cG9ydCBjb25zdCBnZXRBZGRyZXNzUG9pbnRCeUlkID0gYXN5bmMgKFxuICBhZGRyZXNzUG9pbnRJZDogbnVtYmVyXG4pOiBQcm9taXNlPEFkZHJlc3NQb2ludCB8IG51bGw+ID0+IHtcbiAgY29uc3Qgcm93ID0gYXdhaXQgcmF3UXVlcnkoXG4gICAgYCR7YWRkcmVzc1BvaW50U2VsZWN0fVxuICAgICAgV0hFUkUgYS5pZCA9ID9gLFxuICAgIFthZGRyZXNzUG9pbnRJZF1cbiAgKTtcbiAgaWYgKHJvdy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gcm93VG9BZGRyZXNzUG9pbnQocm93WzBdKTtcbn07XG5cbmxldCBsYXN0Rm91bmRlcjogRm91bmRlciB8IG51bGwgPSBudWxsO1xubGV0IGFsbFN0cmVldHM6IHN0cmluZ1tdID0gW107XG5cbmV4cG9ydCBjb25zdCBjaGVja1N0cmVldEV4aXN0cyA9IGFzeW5jIChcbiAgc3RyZWV0TmFtZTogc3RyaW5nLFxuICBmb3VuZGVyOiBGb3VuZGVyXG4pOiBQcm9taXNlPHsgZXhpc3RzOiBib29sZWFuOyBlcnJvcnM6IFNtZEVycm9yW10gfT4gPT4ge1xuICBjb25zdCBrbmV4ID0gZ2V0S25leERiKCk7XG4gIGNvbnN0IGVycm9yczogU21kRXJyb3JbXSA9IFtdO1xuXG4gIC8vIHdlIGNoZWNrIHRoZSB3aG9sZSBjaXR5XG4gIGNvbnN0IGNpdHlDb2RlID0gYXdhaXQgZ2V0Rm91bmRlckNpdHlDb2RlKFxuICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSxcbiAgICBmb3VuZGVyLm11bmljaXBhbGl0eUNvZGVcbiAgKTtcbiAgY29uc3Qgcm93TGlzdCA9IGF3YWl0IHJhd1F1ZXJ5KFxuICAgIGBTRUxFQ1QgbmFtZSBBUyBzdHJlZXRfbmFtZVxuICAgIEZST00gc3RyZWV0XG4gICAgV0hFUkUgY2l0eV9jb2RlID0gPyBBTkQgbmFtZSA9ID8gICR7XG4gICAgICBpc1NxbGl0ZShrbmV4KSA/IFwiQ09MTEFURSBOT0NBU0VcIiA6IFwiXCJcbiAgICB9YCxcbiAgICBbY2l0eUNvZGUsIHN0cmVldE5hbWVdXG4gICk7XG5cbiAgaWYgKHJvd0xpc3QubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHJvdyA9IHJvd0xpc3RbMF07XG4gICAgaWYgKHJvdy5zdHJlZXRfbmFtZSAhPT0gc3RyZWV0TmFtZSkge1xuICAgICAgLy8gZXJyb3JzLnB1c2goXG4gICAgICAvLyAgIGBTdHJlZXQgJyR7c3RyZWV0TmFtZX0nIGhhcyB3cm9uZyBjYXNlLCBjb3JyZWN0IGNhc2U6ICcke3Jvdy5zdHJlZXRfbmFtZX0nLmBcbiAgICAgIC8vICk7XG4gICAgfVxuICAgIHJldHVybiB7IGV4aXN0czogdHJ1ZSwgZXJyb3JzIH07XG4gIH1cblxuICBpZiAobGFzdEZvdW5kZXIgIT09IGZvdW5kZXIpIHtcbiAgICBhbGxTdHJlZXRzID0gYXdhaXQgZ2V0QWxsU3RyZWV0cyhjaXR5Q29kZSk7XG4gICAgbGFzdEZvdW5kZXIgPSBmb3VuZGVyO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBhbGxTdHJlZXRzLmZpbmQoXG4gICAgKHMpID0+XG4gICAgICBzLnRvTG9jYWxlTG93ZXJDYXNlKFwiY3MtQ1pcIikgPT09IHN0cmVldE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoXCJjcy1DWlwiKVxuICApO1xuICBsZXQgZXhpc3RzID0gZmFsc2U7XG4gIGlmIChtYXRjaCkge1xuICAgIGV4aXN0cyA9IHRydWU7XG4gICAgaWYgKHN0cmVldE5hbWUgIT09IG1hdGNoKSB7XG4gICAgICAvLyBlcnJvcnMucHVzaChcbiAgICAgIC8vICAgYFN0cmVldCAnJHtzdHJlZXROYW1lfScgaGFzIHdyb25nIGNhc2UsIGNvcnJlY3QgY2FzZTogJyR7bWF0Y2h9Jy5gXG4gICAgICAvLyApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjbG9zZXN0ID0gZmluZENsb3Nlc3RTdHJpbmcoc3RyZWV0TmFtZSwgYWxsU3RyZWV0cyk7XG4gICAgZXJyb3JzLnB1c2goe1xuICAgICAgbWVzc2FnZTogYFVsaWNlICcke3N0cmVldE5hbWV9JyB2IHTDqXRvIG9iY2kgbmVleGlzdHVqZSwgbXlzbGVsaSBqc3RlICcke2Nsb3Nlc3R9Jz9gLFxuICAgICAgc3RhcnRPZmZzZXQ6IDAsXG4gICAgICBlbmRPZmZzZXQ6IHN0cmVldE5hbWUubGVuZ3RoICsgMSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4geyBleGlzdHM6IGZhbHNlLCBlcnJvcnMgfTtcbn07XG5cbmNvbnN0IGdldEFsbFN0cmVldHMgPSBhc3luYyAoY2l0eUNvZGU6IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xuICByZXR1cm4gYXdhaXQga25leC5wbHVjayhcIm5hbWVcIikuZnJvbShcInN0cmVldFwiKS53aGVyZShcImNpdHlfY29kZVwiLCBjaXR5Q29kZSk7XG59O1xuXG5leHBvcnQgdHlwZSBGaW5kQWRkcmVzc1BvaW50c1BhcmFtcyA9XG4gIHwge1xuICAgICAgdHlwZTogXCJzbWRMaW5lXCI7XG4gICAgICBzbWRMaW5lOiBTbWRMaW5lO1xuICAgICAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHk7XG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZT86IG51bWJlcjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJ3aG9sZU11bmljaXBhbGl0eVBhcnRcIjtcbiAgICAgIG11bmljaXBhbGl0eVBhcnRDb2RlOiBudW1iZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlcIjtcbiAgICAgIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5O1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5Tm9TdHJlZXROYW1lXCI7XG4gICAgICBtdW5pY2lwYWxpdHk6IE11bmljaXBhbGl0eTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgZmluZEFkZHJlc3NQb2ludHMgPSBhc3luYyAoXG4gIHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXNcbik6IFByb21pc2U8QWRkcmVzc1BvaW50W10+ID0+IHtcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSBnZXRRdWVyeVBhcmFtcyhwYXJhbXMpO1xuICBjb25zdCBzdHJlZXRKb2luQ29uZGl0aW9uID0gZ2V0U3RyZWV0Sm9pbkNvbmRpdGlvbihwYXJhbXMpO1xuXG4gIGNvbnN0IHdoZXJlQ29uZGl0aW9uID0gZ2V0V2hlcmVDb25kaXRpb24ocGFyYW1zKTtcblxuICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHJhd1F1ZXJ5KFxuICAgIGBTRUxFQ1QgYS5pZCwgcy5uYW1lIEFTIHN0cmVldF9uYW1lLCBvLm5hbWUgQVMgb2JqZWN0X3R5cGVfbmFtZSwgYS5kZXNjcmlwdGl2ZV9udW1iZXIsXG4gICAgICBhLm9yaWVudGF0aW9uYWxfbnVtYmVyLCBhLm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlciwgYy5uYW1lIEFTIGNpdHlfbmFtZSxcbiAgICAgIGQubmFtZSBBUyBkaXN0cmljdF9uYW1lLCBtLm5hbWUgQVMgbXVuaWNpcGFsaXR5X3BhcnRfbmFtZSwgcC5uYW1lIEFTIHByYWd1ZV9kaXN0cmljdF9uYW1lLFxuICAgICAgYS5wb3N0YWxfY29kZSwgYS53Z3M4NF9sYXRpdHVkZSwgYS53Z3M4NF9sb25naXR1ZGVcbiAgICBGUk9NIGFkZHJlc3NfcG9pbnQgYVxuICAgICR7c3RyZWV0Sm9pbkNvbmRpdGlvbn1cbiAgICBJTk5FUiBKT0lOIG9iamVjdF90eXBlIG8gT04gby5pZCA9IGEub2JqZWN0X3R5cGVfaWRcbiAgICBJTk5FUiBKT0lOIGNpdHkgYyBPTiBjLmNvZGUgPSBhLmNpdHlfY29kZVxuICAgIExFRlQgSk9JTiBjaXR5X2Rpc3RyaWN0IGQgT04gYS5jaXR5X2Rpc3RyaWN0X2NvZGUgPSBkLmNvZGVcbiAgICBMRUZUIEpPSU4gbXVuaWNpcGFsaXR5X3BhcnQgbSBPTiBhLm11bmljaXBhbGl0eV9wYXJ0X2NvZGUgPSBtLmNvZGVcbiAgICBMRUZUIEpPSU4gcHJhZ3VlX2Rpc3RyaWN0IHAgT04gYS5wcmFndWVfZGlzdHJpY3RfY29kZSA9IHAuY29kZVxuICAgIFdIRVJFICR7d2hlcmVDb25kaXRpb259YCxcbiAgICBxdWVyeVBhcmFtc1xuICApO1xuXG4gIHJldHVybiBmaWx0ZXJBZGRyZXNzUG9pbnRzKHF1ZXJ5UmVzdWx0Lm1hcChyb3dUb0FkZHJlc3NQb2ludCksIHBhcmFtcyk7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQWRkcmVzc1BvaW50cyA9IChcbiAgYWRkcmVzc1BvaW50czogQWRkcmVzc1BvaW50W10sXG4gIHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXNcbik6IEFkZHJlc3NQb2ludFtdID0+IHtcbiAgaWYgKFxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5XCIgfHxcbiAgICBwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eU5vU3RyZWV0TmFtZVwiIHx8XG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCJcbiAgKSB7XG4gICAgcmV0dXJuIGFkZHJlc3NQb2ludHM7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IEFkZHJlc3NQb2ludFtdID0gW107XG4gIGNvbnN0IG51bWJlclNwZWMgPSBwYXJhbXMuc21kTGluZS5udW1iZXJTcGVjO1xuICBpZiAoaXNTZXJpZXNTcGVjQXJyYXkobnVtYmVyU3BlYykpIHtcbiAgICBudW1iZXJTcGVjLmZvckVhY2goKHNlcmllc1NwZWMpID0+IHtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmZpbHRlckFkZHJlc3NQb2ludHNCeVJhbmdlcyhhZGRyZXNzUG9pbnRzLCBzZXJpZXNTcGVjKSk7XG4gICAgfSk7XG5cbiAgICAvLyB3aGVuIG5vIG51bWJlciBzcGVjcyBhcmUgcHJlc2VudCwgd2UgdGFrZSBldmVyeXRoaW5nXG4gICAgaWYgKG51bWJlclNwZWMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hZGRyZXNzUG9pbnRzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNOZWdhdGl2ZVNlcmllc1NwZWMobnVtYmVyU3BlYykpIHtcbiAgICAvLyBuZWdhdGl2ZSBudW1iZXIgc3BlYyAoZS5nLiBvZGQgbnVtYmVycyBleGNlcHQgMTMtMTcpXG4gICAgY29uc3QgdG9FeGNsdWRlID0gZmlsdGVyQWRkcmVzc1BvaW50c0J5UmFuZ2VzKGFkZHJlc3NQb2ludHMsIG51bWJlclNwZWMpO1xuICAgIHJlc3VsdC5wdXNoKFxuICAgICAgLi4uYWRkcmVzc1BvaW50cy5maWx0ZXIoXG4gICAgICAgIChhZGRyZXNzUG9pbnQpID0+ICF0b0V4Y2x1ZGUuaW5jbHVkZXMoYWRkcmVzc1BvaW50KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgZmlsdGVyQWRkcmVzc1BvaW50c0J5UmFuZ2VzID0gKFxuICBhZGRyZXNzUG9pbnRzOiBBZGRyZXNzUG9pbnRbXSxcbiAgc2VyaWVzU3BlYzogU2VyaWVzU3BlY1xuKTogQWRkcmVzc1BvaW50W10gPT4ge1xuICBjb25zdCByZXN1bHQ6IEFkZHJlc3NQb2ludFtdID0gW107XG4gIHNlcmllc1NwZWMucmFuZ2VzLmZvckVhY2goKHJhbmdlKSA9PiB7XG4gICAgcmVzdWx0LnB1c2goXG4gICAgICAuLi5hZGRyZXNzUG9pbnRzLmZpbHRlcigoYWRkcmVzc1BvaW50KSA9PiB7XG4gICAgICAgIGlmIChpc1JhbmdlKHJhbmdlKSkge1xuICAgICAgICAgIGNvbnN0IG51bWJlciA9IGdldE51bWJlckJ5VHlwZShzZXJpZXNTcGVjLnR5cGUsIGFkZHJlc3NQb2ludCk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzSW5SYW5nZShcbiAgICAgICAgICAgICAgbnVtYmVyLFxuICAgICAgICAgICAgICBzZXJpZXNTcGVjLnR5cGUgIT09IFNlcmllc1R5cGUuRGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICA/IGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyID8/IG51bGxcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgIHJhbmdlXG4gICAgICAgICAgICApICYmIGZpdHNUeXBlKG51bWJlciwgc2VyaWVzU3BlYy50eXBlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZnVsbFN0cmVldE51bWJlcjogRnVsbFN0cmVldE51bWJlciA9IHJhbmdlO1xuICAgICAgICAgIHJldHVybiBlcXVhbHNGdWxsU3RyZWV0TnVtYmVyKGZ1bGxTdHJlZXROdW1iZXIsIGFkZHJlc3NQb2ludCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gd2hlbiBubyBzZXJpZXMgc3BlY3MgYXJlIHByZXNlbnQsIHdlIHRha2UgZXZlcnl0aGluZyB0aGF0IGZpdHMgdGhlIHR5cGVcbiAgaWYgKHNlcmllc1NwZWMucmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKFxuICAgICAgLi4uYWRkcmVzc1BvaW50cy5maWx0ZXIoKGFkZHJlc3NQb2ludCkgPT5cbiAgICAgICAgZml0c1R5cGUoXG4gICAgICAgICAgZ2V0TnVtYmVyQnlUeXBlKHNlcmllc1NwZWMudHlwZSwgYWRkcmVzc1BvaW50KSxcbiAgICAgICAgICBzZXJpZXNTcGVjLnR5cGVcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5UGFyYW1zID0gKFxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXG4pOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcbiAgaWYgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcInN0cmVldFwiKSB7XG4gICAgcmV0dXJuIFtwYXJhbXMuc21kTGluZS5zdHJlZXQsIHBhcmFtcy5tdW5pY2lwYWxpdHkuY29kZV07XG4gIH1cblxuICBpZiAoXG4gICAgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcIm11bmljaXBhbGl0eVBhcnRcIikgfHxcbiAgICBwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eVBhcnRcIlxuICApIHtcbiAgICByZXR1cm4gW3BhcmFtcy5tdW5pY2lwYWxpdHlQYXJ0Q29kZV07XG4gIH1cblxuICByZXR1cm4gW3BhcmFtcy5tdW5pY2lwYWxpdHkuY29kZV07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3RyZWV0Sm9pbkNvbmRpdGlvbiA9IChcbiAgcGFyYW1zOiBGaW5kQWRkcmVzc1BvaW50c1BhcmFtc1xuKTogc3RyaW5nID0+IHtcbiAgaWYgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcInN0cmVldFwiKSB7XG4gICAgcmV0dXJuIGBKT0lOIHN0cmVldCBzIE9OIGEuc3RyZWV0X2NvZGUgPSBzLmNvZGUgQU5EIHMubmFtZSA9ID8gJHtcbiAgICAgIGlzU3FsaXRlKGdldEtuZXhEYigpKSA/IFwiQ09MTEFURSBOT0NBU0VcIiA6IFwiXCJcbiAgICB9YDtcbiAgfVxuICByZXR1cm4gXCJMRUZUIEpPSU4gc3RyZWV0IHMgT04gYS5zdHJlZXRfY29kZSA9IHMuY29kZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFdoZXJlQ29uZGl0aW9uID0gKHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXMpOiBzdHJpbmcgPT4ge1xuICBpZiAoXG4gICAgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcIm11bmljaXBhbGl0eVBhcnRcIikgfHxcbiAgICBwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eVBhcnRcIlxuICApIHtcbiAgICByZXR1cm4gXCJhLm11bmljaXBhbGl0eV9wYXJ0X2NvZGUgPSA/XCI7XG4gIH1cblxuICBpZiAocGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlOb1N0cmVldE5hbWVcIikge1xuICAgIHJldHVybiBgJHtnZXRNdW5pY2lwYWxpdHlXaGVyZShcbiAgICAgIFwiYVwiLFxuICAgICAgcGFyYW1zLm11bmljaXBhbGl0eVxuICAgICl9IEFORCBhLnN0cmVldF9jb2RlIElTIE5VTExgO1xuICB9XG5cbiAgcmV0dXJuIGdldE11bmljaXBhbGl0eVdoZXJlKFwiYVwiLCBwYXJhbXMubXVuaWNpcGFsaXR5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0luUmFuZ2UgPSAoXG4gIG51bWJlcjogbnVtYmVyIHwgbnVsbCxcbiAgbGV0dGVyOiBzdHJpbmcgfCBudWxsLFxuICByYW5nZTogUmFuZ2VTcGVjXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKG51bWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiAhcmFuZ2UuZnJvbSAmJiAhcmFuZ2UudG87XG4gIH1cblxuICAvLyBleHBsYWluZXI6IGVpdGhlciB0aGUgbG93ZXIgYm91bmQgaXMgbm90IHNldCwgb3IgaXQgaXMgbG93ZXIgdGhhbiB0aGUgbnVtYmVyXG4gIC8vIGlmIGl0J3MgZXF1YWwgdG8gdGhlIG51bWJlciwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBsZXR0ZXIgLSBpZiBpdCdzIG5vdCBzZXQsIHdlIGRvbid0IGNhcmVcbiAgLy8gaWYgZnJvbS5sZXR0ZXIgaXMgc2V0LCB3ZSBuZWVkIHRvIGhhdmUgYSBsZXR0ZXIgc2V0IGFuZCBpdCBoYXMgdG8gYmUgZ3JlYXRlciBvciBlcXVhbDpcbiAgLy8gbnVtYmVyIHdpdGhvdXQgbGV0dGVyIGNvdW50cyBsb3dlciB0aGFuIG51bWJlciB3aXRoIGxldHRlciAnYScgKGUuZy4gMjMgPCAyM2EpXG4gIGNvbnN0IHNhdGlzZmllc0Zyb20gPVxuICAgICFyYW5nZS5mcm9tIHx8XG4gICAgbnVtYmVyID4gcmFuZ2UuZnJvbS5udW1iZXIgfHxcbiAgICAobnVtYmVyID09PSByYW5nZS5mcm9tLm51bWJlciAmJlxuICAgICAgKCFyYW5nZS5mcm9tLmxldHRlciB8fCAoISFsZXR0ZXIgJiYgbGV0dGVyID49IHJhbmdlLmZyb20ubGV0dGVyKSkpO1xuXG4gIGNvbnN0IHNhdGlzZmllc1RvID1cbiAgICAhcmFuZ2UudG8gfHxcbiAgICBudW1iZXIgPCByYW5nZS50by5udW1iZXIgfHxcbiAgICAobnVtYmVyID09PSByYW5nZS50by5udW1iZXIgJiZcbiAgICAgICghbGV0dGVyIHx8XG4gICAgICAgICghIXJhbmdlLnRvLmxldHRlciAmJiAhIWxldHRlciAmJiBsZXR0ZXIgPD0gcmFuZ2UudG8ubGV0dGVyKSkpO1xuXG4gIHJldHVybiBzYXRpc2ZpZXNGcm9tICYmIHNhdGlzZmllc1RvO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpdHNUeXBlID0gKG51bWJlcjogbnVtYmVyIHwgbnVsbCwgdHlwZTogU2VyaWVzVHlwZSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGUgPT09IFNlcmllc1R5cGUuRGVzY3JpcHRpb24gfHxcbiAgICB0eXBlID09PSBTZXJpZXNUeXBlLkFsbCB8fFxuICAgIC8vIGEgbWlzc2luZyBudW1iZXIgKGUuZy4gbm8gb3JpZW50YXRpb25hbCBudW1iZXIpIGlzIG5laXRoZXIgb2RkIG5vciBldmVuLFxuICAgIC8vIGNhcmVmdWw6IG51bGwgJSAyID09PSAwIGluIEpTXG4gICAgKHR5cGUgPT09IFNlcmllc1R5cGUuT2RkICYmIG51bWJlciAhPT0gbnVsbCAmJiBudW1iZXIgJSAyID09PSAxKSB8fFxuICAgICh0eXBlID09PSBTZXJpZXNUeXBlLkV2ZW4gJiYgbnVtYmVyICE9PSBudWxsICYmIG51bWJlciAlIDIgPT09IDApXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZXF1YWxzRnVsbFN0cmVldE51bWJlciA9IChcbiAgZnVsbFN0cmVldE51bWJlcjogRnVsbFN0cmVldE51bWJlcixcbiAgYWRkcmVzc1BvaW50OiBBZGRyZXNzUG9pbnRcbik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIGZ1bGxTdHJlZXROdW1iZXIuZGVzY3JpcHRpb25OdW1iZXIubnVtYmVyID09PSBhZGRyZXNzUG9pbnQuaG91c2VOdW1iZXIgJiZcbiAgICBmdWxsU3RyZWV0TnVtYmVyLm9yaWVudGF0aW9uYWxOdW1iZXIubnVtYmVyID09PVxuICAgICAgYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgJiZcbiAgICAoKCFmdWxsU3RyZWV0TnVtYmVyLm9yaWVudGF0aW9uYWxOdW1iZXIubGV0dGVyICYmXG4gICAgICAhYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXIpIHx8XG4gICAgICBmdWxsU3RyZWV0TnVtYmVyLm9yaWVudGF0aW9uYWxOdW1iZXIubGV0dGVyID09PVxuICAgICAgICBhZGRyZXNzUG9pbnQub3JpZW50YXRpb25hbE51bWJlckxldHRlcilcbiAgKTtcbn07XG5cbmNvbnN0IGdldE51bWJlckJ5VHlwZSA9IChcbiAgdHlwZTogU2VyaWVzVHlwZSxcbiAgYWRkcmVzc1BvaW50OiBBZGRyZXNzUG9pbnRcbik6IG51bWJlciB8IG51bGwgPT4ge1xuICByZXR1cm4gdHlwZSA9PT0gU2VyaWVzVHlwZS5EZXNjcmlwdGlvblxuICAgID8gYWRkcmVzc1BvaW50LmhvdXNlTnVtYmVyXG4gICAgOiBhZGRyZXNzUG9pbnQub3JpZW50YXRpb25hbE51bWJlciA/PyBudWxsO1xufTtcblxuY29uc3QgZ2V0TXVuaWNpcGFsaXR5V2hlcmUgPSAoXG4gIGFsaWFzOiBzdHJpbmcsXG4gIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5XG4pOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gbXVuaWNpcGFsaXR5LnR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxuICAgID8gYCR7YWxpYXN9LmNpdHlfY29kZSA9ID9gXG4gICAgOiBgJHthbGlhc30uY2l0eV9kaXN0cmljdF9jb2RlID0gP2A7XG59O1xuXG5jb25zdCByb3dUb0FkZHJlc3NQb2ludCA9IChyb3c6IGFueSk6IEFkZHJlc3NQb2ludCA9PiB7XG4gIGNvbnN0IHBvaW50OiBBZGRyZXNzUG9pbnQgPSB7XG4gICAgaWQ6IHJvdy5pZCxcbiAgICBhZGRyZXNzOiBcIlwiLFxuICAgIHR5cGU6XG4gICAgICByb3cub2JqZWN0X3R5cGVfbmFtZSA9PT0gRGVzY3JpcHRpdmVUeXBlXG4gICAgICAgID8gQWRkcmVzc1BvaW50VHlwZS5EZXNjcmlwdGlvblxuICAgICAgICA6IEFkZHJlc3NQb2ludFR5cGUuUmVnaXN0cmF0aW9uLFxuICAgIGhvdXNlTnVtYmVyOiByb3cuZGVzY3JpcHRpdmVfbnVtYmVyLFxuICAgIGNpdHk6IHJvdy5jaXR5X25hbWUsXG4gICAgbXVuaWNpcGFsaXR5UGFydDogcm93Lm11bmljaXBhbGl0eV9wYXJ0X25hbWUsXG4gICAgcG9zdGFsQ29kZTogcm93LnBvc3RhbF9jb2RlLFxuICAgIGxhdDogcm93Lndnczg0X2xhdGl0dWRlLFxuICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcbiAgfTtcbiAgaWYgKHJvdy5zdHJlZXRfbmFtZSAhPT0gbnVsbCkge1xuICAgIHBvaW50LnN0cmVldCA9IHJvdy5zdHJlZXRfbmFtZTtcbiAgfVxuICBpZiAocm93Lm9yaWVudGF0aW9uYWxfbnVtYmVyICE9PSBudWxsKSB7XG4gICAgcG9pbnQub3JpZW50YXRpb25hbE51bWJlciA9IHJvdy5vcmllbnRhdGlvbmFsX251bWJlcjtcbiAgfVxuICBpZiAocm93Lm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlciAhPT0gbnVsbCkge1xuICAgIHBvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXIgPSByb3cub3JpZW50YXRpb25hbF9udW1iZXJfbGV0dGVyO1xuICB9XG4gIGlmIChyb3cuZGlzdHJpY3RfbmFtZSAhPT0gbnVsbCkge1xuICAgIHBvaW50LmRpc3RyaWN0ID0gcm93LmRpc3RyaWN0X25hbWU7XG4gIH1cbiAgaWYgKHJvdy5wcmFndWVfZGlzdHJpY3RfbmFtZSAhPT0gbnVsbCkge1xuICAgIHBvaW50LnByYWd1ZURpc3RyaWN0ID0gcm93LnByYWd1ZV9kaXN0cmljdF9uYW1lO1xuICB9XG4gIHBvaW50LmFkZHJlc3MgPSBjcmVhdGVTaW5nbGVMaW5lQWRkcmVzcyhwb2ludCk7XG4gIHJldHVybiBwb2ludDtcbn07XG4iXX0=
|
package/dist/db/db.d.ts
CHANGED
|
@@ -25,7 +25,15 @@ export declare const rawQuery: (query: string, ...bindings: readonly Knex.RawBin
|
|
|
25
25
|
* Efficiently insert multiple rows. If preventDuplicatesByFirstColumn is true, the first
|
|
26
26
|
* column should be unique (PK or UNIQUE).
|
|
27
27
|
*/
|
|
28
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Insert multiple rows. Existing rows (same primary key) are kept as they are,
|
|
30
|
+
* unless `upsert` is set - then their `upsert.updateColumns` are overwritten
|
|
31
|
+
* (e.g. a street renamed in RÚIAN keeps its code, only the name changes).
|
|
32
|
+
*/
|
|
33
|
+
export declare const insertMultipleRows: (rows: string[][], table: string, columnNames: string[], preventDuplicates?: boolean, upsert?: {
|
|
34
|
+
conflictColumns: string[];
|
|
35
|
+
updateColumns: string[];
|
|
36
|
+
}) => Promise<number>;
|
|
29
37
|
/**
|
|
30
38
|
* Insert a single row and return the autoincremented ID.
|
|
31
39
|
*/
|
package/dist/db/db.js
CHANGED
|
@@ -143,13 +143,34 @@ export const rawQuery = async (query, ...bindings) => {
|
|
|
143
143
|
* Efficiently insert multiple rows. If preventDuplicatesByFirstColumn is true, the first
|
|
144
144
|
* column should be unique (PK or UNIQUE).
|
|
145
145
|
*/
|
|
146
|
-
|
|
146
|
+
/**
|
|
147
|
+
* Insert multiple rows. Existing rows (same primary key) are kept as they are,
|
|
148
|
+
* unless `upsert` is set - then their `upsert.updateColumns` are overwritten
|
|
149
|
+
* (e.g. a street renamed in RÚIAN keeps its code, only the name changes).
|
|
150
|
+
*/
|
|
151
|
+
export const insertMultipleRows = async (rows, table, columnNames, preventDuplicates = true, upsert) => {
|
|
147
152
|
if (rows.length === 0) {
|
|
148
153
|
return 0;
|
|
149
154
|
}
|
|
150
155
|
const insertPlaceholders = generate2DPlaceholders(columnNames.length, rows.length);
|
|
151
156
|
const knex = getKnexDb();
|
|
152
|
-
|
|
157
|
+
let onConfict = "";
|
|
158
|
+
if (upsert && isMysql(knex)) {
|
|
159
|
+
onConfict = `ON DUPLICATE KEY UPDATE ${upsert.updateColumns
|
|
160
|
+
.map((c) => `${c} = VALUES(${c})`)
|
|
161
|
+
.join(", ")}`;
|
|
162
|
+
}
|
|
163
|
+
else if (upsert) {
|
|
164
|
+
// the WHERE clause skips rewriting rows that haven't changed
|
|
165
|
+
onConfict = `ON CONFLICT (${upsert.conflictColumns.join(",")}) DO UPDATE SET ${upsert.updateColumns
|
|
166
|
+
.map((c) => `${c} = excluded.${c}`)
|
|
167
|
+
.join(", ")} WHERE ${upsert.updateColumns
|
|
168
|
+
.map((c) => `${table}.${c} IS DISTINCT FROM excluded.${c}`)
|
|
169
|
+
.join(" OR ")}`;
|
|
170
|
+
}
|
|
171
|
+
else if (preventDuplicates && !isMysql(knex)) {
|
|
172
|
+
onConfict = `ON CONFLICT DO NOTHING`;
|
|
173
|
+
}
|
|
153
174
|
await rawQuery(`INSERT ${isMysql(knex) ? "IGNORE" : ""} INTO ${table} (${columnNames.join(",")}) VALUES ${insertPlaceholders} ${onConfict}`, rows.flat());
|
|
154
175
|
return rows.length;
|
|
155
176
|
};
|
|
@@ -188,4 +209,4 @@ export const extractKeyValuesPairs = (array, keyIndex, valuesIndices) => {
|
|
|
188
209
|
}, {});
|
|
189
210
|
return Object.keys(object).map((key) => [key, ...object[key]]);
|
|
190
211
|
};
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN0QyxPQUFPLElBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQVdwQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFdEMsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixvQ0FBaUIsQ0FBQTtJQUNqQix3Q0FBcUIsQ0FBQTtJQUNyQixrQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxlQUFlLEtBQWYsZUFBZSxRQUkxQjtBQUVELE1BQU0sNEJBQTRCLEdBQUcseUNBQXlDLENBQUM7QUFFL0UsTUFBTSxRQUFRLEdBQUc7SUFDZixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxnQkFBZ0I7SUFDMUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSTtJQUNoQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO0NBQ2pDLENBQUM7QUFFRixNQUFNLFFBQVEsR0FBYTtJQUN6QixNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU07SUFDOUIsUUFBUSxFQUFFLG1CQUFtQjtJQUM3QixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLENBQUM7SUFDN0QsT0FBTyxFQUFFLEtBQUs7Q0FDZixDQUFDO0FBRUYsSUFBSSxPQUFPLEdBQVMsU0FBUyxDQUFDO0FBQzlCLElBQUks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Q0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25maWdEb3RlbnYgfSBmcm9tIFwiZG90ZW52XCI7XG5pbXBvcnQga25leCwgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJ1cmxcIjtcblxuaW50ZXJmYWNlIERiQ29uZmlnIHtcbiAgZGJUeXBlOiBTdXBwb3J0ZWREYlR5cGU7XG4gIHBnQ29ubmVjdGlvblN0cmluZz86IHN0cmluZztcbiAgbXlzcWxDb25uZWN0aW9uU3RyaW5nPzogc3RyaW5nO1xuICBpbml0RmlsZVBhdGg6IHN0cmluZztcbiAgZmlsZVBhdGg/OiBzdHJpbmc7XG4gIHZlcmJvc2U6IGJvb2xlYW47XG59XG5cbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKF9fZmlsZW5hbWUpO1xuXG5leHBvcnQgZW51bSBTdXBwb3J0ZWREYlR5cGUge1xuICBzcWxpdGUgPSBcInNxbGl0ZVwiLFxuICBwb3N0Z3JlcyA9IFwicG9zdGdyZXNcIixcbiAgbXlzcWwgPSBcIm15c3FsXCIsXG59XG5cbmNvbnN0IG15c3FsQ29ubmVjdGlvblN0cmluZ1BhdHRlcm4gPSAvXihbXjpdKyk6KFxcZCspOihbXjpdKyk6KFteOl0rKTooW146XSspJC87XG5cbmNvbnN0IERiQ2xpZW50ID0ge1xuICBbU3VwcG9ydGVkRGJUeXBlLnNxbGl0ZV06IFwiYmV0dGVyLXNxbGl0ZTNcIixcbiAgW1N1cHBvcnRlZERiVHlwZS5wb3N0Z3Jlc106IFwicGdcIixcbiAgW1N1cHBvcnRlZERiVHlwZS5teXNxbF06IFwibXlzcWxcIixcbn07XG5cbmNvbnN0IGRlZmF1bHRzOiBEYkNvbmZpZyA9IHtcbiAgZGJUeXBlOiBTdXBwb3J0ZWREYlR5cGUuc3FsaXRlLFxuICBmaWxlUGF0aDogXCJhZGRyZXNzX3BvaW50cy5kYlwiLFxuICBpbml0RmlsZVBhdGg6IGpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiYWRkcmVzc19wb2ludHNfaW5pdC5kYlwiKSxcbiAgdmVyYm9zZTogZmFsc2UsXG59O1xuXG5sZXQgX2tuZXhEYjogS25leCA9IHVuZGVmaW5lZDtcbmxldCBfa25leERiQ29uZmlnOiBEYkNvbmZpZyA9IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGdldEtuZXhEYiA9IChjb25maWc6IFBhcnRpYWw8RGJDb25maWc+ID0ge30pOiBLbmV4ID0+IHtcbiAgaWYgKF9rbmV4RGIgPT09IHVuZGVmaW5lZCkge1xuICAgIF9rbmV4RGJDb25maWcgPSB7IC4uLmRlZmF1bHRzLCAuLi5nZXRFbnZDb25maWcoKSwgLi4uY29uZmlnIH07XG5cbiAgICBpZiAoX2tuZXhEYkNvbmZpZy5kYlR5cGUgPT09IFN1cHBvcnRlZERiVHlwZS5zcWxpdGUpIHtcbiAgICAgIF9rbmV4RGIgPSBrbmV4KHtcbiAgICAgICAgY2xpZW50OiBEYkNsaWVudFtTdXBwb3J0ZWREYlR5cGUuc3FsaXRlXSxcbiAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgIGZpbGVuYW1lOiBfa25leERiQ29uZmlnLmZpbGVQYXRoLFxuICAgICAgICB9LFxuICAgICAgICBwb29sOiB7XG4gICAgICAgICAgYWZ0ZXJDcmVhdGU6IChkYjogYW55LCBkb25lOiBGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgZGIucHJhZ21hKFwiam91cm5hbF9tb2RlID0gV0FMO1wiKTtcbiAgICAgICAgICAgIGRvbmUoZmFsc2UsIGRvbmUpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZU51bGxBc0RlZmF1bHQ6IHRydWUsXG4gICAgICAgIGRlYnVnOiBfa25leERiQ29uZmlnLnZlcmJvc2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKF9rbmV4RGJDb25maWcuZGJUeXBlID09PSBTdXBwb3J0ZWREYlR5cGUucG9zdGdyZXMpIHtcbiAgICAgIF9rbmV4RGIgPSBrbmV4KHtcbiAgICAgICAgY2xpZW50OiBEYkNsaWVudFtTdXBwb3J0ZWREYlR5cGUucG9zdGdyZXNdLFxuICAgICAgICBjb25uZWN0aW9uOiBfa25leERiQ29uZmlnLnBnQ29ubmVjdGlvblN0cmluZyxcbiAgICAgICAgdXNlTnVsbEFzRGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgZGVidWc6IF9rbmV4RGJDb25maWcudmVyYm9zZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoX2tuZXhEYkNvbmZpZy5kYlR5cGUgPT09IFN1cHBvcnRlZERiVHlwZS5teXNxbCkge1xuICAgICAgY29uc3QgW2hvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkLCBkYXRhYmFzZV0gPVxuICAgICAgICBfa25leERiQ29uZmlnLm15c3FsQ29ubmVjdGlvblN0cmluZy5zcGxpdChcIjpcIik7XG4gICAgICBfa25leERiID0ga25leCh7XG4gICAgICAgIGNsaWVudDogRGJDbGllbnRbU3VwcG9ydGVkRGJUeXBlLm15c3FsXSxcbiAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgcG9ydDogTnVtYmVyKHBvcnQpLFxuICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgZGF0YWJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHVzZU51bGxBc0RlZmF1bHQ6IHRydWUsXG4gICAgICAgIGRlYnVnOiBfa25leERiQ29uZmlnLnZlcmJvc2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBEQiB0eXBlOiAke19rbmV4RGJDb25maWcuZGJUeXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfa25leERiO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUG9zdGdyZXMgPSAoa25leDogS25leCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4ga25leC5jbGllbnQuY29uZmlnLmNsaWVudCA9PT0gRGJDbGllbnRbU3VwcG9ydGVkRGJUeXBlLnBvc3RncmVzXTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NxbGl0ZSA9IChrbmV4OiBLbmV4KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBrbmV4LmNsaWVudC5jb25maWcuY2xpZW50ID09PSBEYkNsaWVudFtTdXBwb3J0ZWREYlR5cGUuc3FsaXRlXTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc015c3FsID0gKGtuZXg6IEtuZXgpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGtuZXguY2xpZW50LmNvbmZpZy5jbGllbnQgPT09IERiQ2xpZW50W1N1cHBvcnRlZERiVHlwZS5teXNxbF07XG59O1xuXG5jb25zdCBnZXRNaWdyYXRpb25Db25maWcgPSAoKTogS25leC5NaWdyYXRvckNvbmZpZyA9PiB7XG4gIHJldHVybiB7IGRpcmVjdG9yeTogam9pbihfX2Rpcm5hbWUsIFwibWlncmF0aW9uc1wiKSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXREYiA9IGFzeW5jIChjb25maWc6IFBhcnRpYWw8RGJDb25maWc+ID0ge30pOiBQcm9taXNlPEtuZXg+ID0+IHtcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYihjb25maWcpO1xuICBhd2FpdCBrbmV4Lm1pZ3JhdGUubGF0ZXN0KGdldE1pZ3JhdGlvbkNvbmZpZygpKTtcbiAgcmV0dXJuIGtuZXg7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJEYiA9IGFzeW5jIChcbiAgY29uZmlnOiBQYXJ0aWFsPERiQ29uZmlnPiA9IHt9XG4pOiBQcm9taXNlPEtuZXg+ID0+IHtcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYihjb25maWcpO1xuICBhd2FpdCBrbmV4Lm1pZ3JhdGUucm9sbGJhY2soZ2V0TWlncmF0aW9uQ29uZmlnKCksIHRydWUpO1xuICBhd2FpdCBrbmV4Lm1pZ3JhdGUubGF0ZXN0KGdldE1pZ3JhdGlvbkNvbmZpZygpKTtcbiAgcmV0dXJuIGtuZXg7XG59O1xuXG5leHBvcnQgY29uc3QgZGlzY29ubmVjdEtuZXggPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmIChfa25leERiKSB7XG4gICAgYXdhaXQgX2tuZXhEYi5kZXN0cm95KCk7XG4gICAgX2tuZXhEYiA9IHVuZGVmaW5lZDtcbiAgfVxufTtcblxuY29uc3QgZ2V0RW52Q29uZmlnID0gKCk6IFBhcnRpYWw8RGJDb25maWc+ID0+IHtcbiAgY29uZmlnRG90ZW52KHsgcGF0aDogXCIuZW52LmxvY2FsXCIgfSk7XG4gIGNvbnN0IGVudkNvbmZpZzogUGFydGlhbDxEYkNvbmZpZz4gPSB7fTtcbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52LlRFWFRUT01BUF9EQl9UWVBFICYmXG4gICAgT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWREYlR5cGUpLmluY2x1ZGVzKFxuICAgICAgcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX0RCX1RZUEUgYXMgU3VwcG9ydGVkRGJUeXBlXG4gICAgKVxuICApIHtcbiAgICBlbnZDb25maWcuZGJUeXBlID0gcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX0RCX1RZUEUgYXMgU3VwcG9ydGVkRGJUeXBlO1xuICAgIGlmIChlbnZDb25maWcuZGJUeXBlID09PSBTdXBwb3J0ZWREYlR5cGUucG9zdGdyZXMpIHtcbiAgICAgIGlmICghcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX1BHX0NPTk5FQ1RJT05fU1RSSU5HKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkVudmlyb25tZW50YWwgdmFyaWFibGUgJ1RFWFRUT01BUF9QR19DT05ORUNUSU9OX1NUUklORycgbXVzdCBiZSBzZXQgZm9yIFBvc3RncmVTUUwuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGVudkNvbmZpZy5wZ0Nvbm5lY3Rpb25TdHJpbmcgPSBwcm9jZXNzLmVudi5URVhUVE9NQVBfUEdfQ09OTkVDVElPTl9TVFJJTkc7XG4gICAgfSBlbHNlIGlmIChlbnZDb25maWcuZGJUeXBlID09PSBTdXBwb3J0ZWREYlR5cGUubXlzcWwpIHtcbiAgICAgIGlmICghcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFbnZpcm9ubWVudGFsIHZhcmlhYmxlICdURVhUVE9NQVBfTVlTUUxfQ09OTkVDVElPTl9EQVRBJyBtdXN0IGJlIHNldCBmb3IgTXlTUUwgb3IgTWFyaWFEQi5cIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgICFteXNxbENvbm5lY3Rpb25TdHJpbmdQYXR0ZXJuLnRlc3QoXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiRW52aXJvbm1lbnRhbCB2YXJpYWJsZSAnVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQScgbXVzdCBiZSBpbiBmb3JtYXQgJ2hvc3Q6cG9ydDp1c2VyOnBhc3N3b3JkOmRhdGFiYXNlJy5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZW52Q29uZmlnLm15c3FsQ29ubmVjdGlvblN0cmluZyA9XG4gICAgICAgIHByb2Nlc3MuZW52LlRFWFRUT01BUF9NWVNRTF9DT05ORUNUSU9OX0RBVEE7XG4gICAgfSBlbHNlIGlmIChlbnZDb25maWcuZGJUeXBlID09PSBTdXBwb3J0ZWREYlR5cGUuc3FsaXRlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuVEVYVFRPTUFQX1NRTElURV9QQVRIKSB7XG4gICAgICAgIGVudkNvbmZpZy5maWxlUGF0aCA9IHByb2Nlc3MuZW52LlRFWFRUT01BUF9TUUxJVEVfUEFUSDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudkNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBub25FbXB0eU9yTnVsbCA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIHJldHVybiB2YWx1ZSA/IHZhbHVlIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCByYXdRdWVyeSA9IGFzeW5jIChcbiAgcXVlcnk6IHN0cmluZyxcbiAgLi4uYmluZGluZ3M6IHJlYWRvbmx5IEtuZXguUmF3QmluZGluZ1tdXG4pOiBQcm9taXNlPGFueVtdPiA9PiB7XG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQga25leC5yYXcocXVlcnksIC4uLmJpbmRpbmdzKTtcbiAgcmV0dXJuIGlzTXlzcWwoa25leCkgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEVmZmljaWVudGx5IGluc2VydCBtdWx0aXBsZSByb3dzLiBJZiBwcmV2ZW50RHVwbGljYXRlc0J5Rmlyc3RDb2x1bW4gaXMgdHJ1ZSwgdGhlIGZpcnN0XG4gKiBjb2x1bW4gc2hvdWxkIGJlIHVuaXF1ZSAoUEsgb3IgVU5JUVVFKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc2VydE11bHRpcGxlUm93cyA9IGFzeW5jIChcbiAgcm93czogc3RyaW5nW11bXSxcbiAgdGFibGU6IHN0cmluZyxcbiAgY29sdW1uTmFtZXM6IHN0cmluZ1tdLFxuICBwcmV2ZW50RHVwbGljYXRlczogYm9vbGVhbiA9IHRydWVcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgaW5zZXJ0UGxhY2Vob2xkZXJzID0gZ2VuZXJhdGUyRFBsYWNlaG9sZGVycyhcbiAgICBjb2x1bW5OYW1lcy5sZW5ndGgsXG4gICAgcm93cy5sZW5ndGhcbiAgKTtcblxuICBjb25zdCBrbmV4ID0gZ2V0S25leERiKCk7XG5cbiAgY29uc3Qgb25Db25maWN0ID1cbiAgICBwcmV2ZW50RHVwbGljYXRlcyAmJiAhaXNNeXNxbChrbmV4KSA/IGBPTiBDT05GTElDVCBETyBOT1RISU5HYCA6IFwiXCI7XG5cbiAgYXdhaXQgcmF3UXVlcnkoXG4gICAgYElOU0VSVCAke2lzTXlzcWwoa25leCkgPyBcIklHTk9SRVwiIDogXCJcIn0gSU5UTyAke3RhYmxlfSAoJHtjb2x1bW5OYW1lcy5qb2luKFxuICAgICAgXCIsXCJcbiAgICApfSkgVkFMVUVTICR7aW5zZXJ0UGxhY2Vob2xkZXJzfSAke29uQ29uZmljdH1gLFxuICAgIHJvd3MuZmxhdCgpXG4gICk7XG5cbiAgcmV0dXJuIHJvd3MubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBJbnNlcnQgYSBzaW5nbGUgcm93IGFuZCByZXR1cm4gdGhlIGF1dG9pbmNyZW1lbnRlZCBJRC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc2VydEF1dG9pbmNyZW1lbnRSb3cgPSBhc3luYyAoXG4gIHJvdzogYW55W10sXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGNvbHVtbk5hbWVzOiBzdHJpbmdbXVxuKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGRhdGEgPSBjb2x1bW5OYW1lcy5yZWR1Y2UoKG9iaiwgY29sdW1uTmFtZSwgaW5kZXgpID0+IHtcbiAgICBvYmpbY29sdW1uTmFtZV0gPSByb3dbaW5kZXhdO1xuICAgIHJldHVybiBvYmo7XG4gIH0sIHt9KTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKS5pbnNlcnQoZGF0YSkuaW50byh0YWJsZSk7XG5cbiAgcmV0dXJuIHJlc3VsdCA/IE51bWJlcihyZXN1bHQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVNdWx0aXBsZVJvd3NLbmV4ID0gYXN5bmMgKFxuICBrZXlzOiBzdHJpbmdbXSxcbiAgdGFibGU6IHN0cmluZyxcbiAga2V5Q29sdW1uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGdldEtuZXhEYigpLmZyb20odGFibGUpLndoZXJlSW4oa2V5Q29sdW1uTmFtZSwga2V5cykuZGVsKCk7XG59O1xuXG5jb25zdCBnZW5lcmF0ZVJlcGV0aXRpdmVTdHJpbmcgPSAoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGdsdWU6IHN0cmluZyxcbiAgbjogbnVtYmVyXG4pOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gbmV3IEFycmF5KG4pLmZpbGwodmFsdWUpLmpvaW4oZ2x1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVQbGFjZWhvbGRlcnMgPSAobjogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGdlbmVyYXRlUmVwZXRpdGl2ZVN0cmluZyhcIj9cIiwgXCIsXCIsIG4pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMgPSAoXG4gIGlubmVyOiBudW1iZXIsXG4gIG91dGVyOiBudW1iZXJcbik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBnZW5lcmF0ZVJlcGV0aXRpdmVTdHJpbmcoXG4gICAgYCgke2dlbmVyYXRlUGxhY2Vob2xkZXJzKGlubmVyKX0pYCxcbiAgICBcIixcIixcbiAgICBvdXRlclxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RLZXlWYWx1ZXNQYWlycyA9IChcbiAgYXJyYXk6IHN0cmluZ1tdW10sXG4gIGtleUluZGV4OiBudW1iZXIsXG4gIHZhbHVlc0luZGljZXM6IG51bWJlcltdXG4pOiBzdHJpbmdbXVtdID0+IHtcbiAgY29uc3Qgb2JqZWN0ID0gYXJyYXkucmVkdWNlKChhY2M6IG9iamVjdCwgZGF0YTogc3RyaW5nW10pID0+IHtcbiAgICBpZiAoZGF0YVtrZXlJbmRleF0pIHtcbiAgICAgIGFjY1tkYXRhW2tleUluZGV4XV0gPSB2YWx1ZXNJbmRpY2VzLm1hcCgoaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtpbmRleF0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKChrZXkpID0+IFtrZXksIC4uLm9iamVjdFtrZXldXSk7XG59O1xuIl19
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN0QyxPQUFPLElBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQVdwQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFdEMsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixvQ0FBaUIsQ0FBQTtJQUNqQix3Q0FBcUIsQ0FBQTtJQUNyQixrQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxlQUFlLEtBQWYsZUFBZSxRQUkxQjtBQUVELE1BQU0sNEJBQTRCLEdBQUcseUNBQXlDLENBQUM7QUFFL0UsTUFBTSxRQUFRLEdBQUc7SUFDZixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxnQkFBZ0I7SUFDMUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSTtJQUNoQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO0NBQ2pDLENBQUM7QUFFRixNQUFNLFFBQVEsR0FBYTtJQUN6QixNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU07SUFDOUIsUUFBUSxFQUFFLG1CQUFtQjtJQUM3QixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLENBQUM7SUFDN0QsT0FBTyxFQUFFLEtBQUs7Q0FDZixDQUFDO0FBRUYsSUFBSSxPQUFPLEdBQVMsU0FBUyxDQUFDO0FBQzlCLElBQUks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RUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsS0FBYSxFQUNiLEtBQWEsRUFDTCxFQUFFO0lBQ1YsT0FBTyx3QkFBd0IsQ0FDN0IsSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUNsQyxHQUFHLEVBQ0gsS0FBSyxDQUNOLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNuQyxLQUFpQixFQUNqQixRQUFnQixFQUNoQixhQUF1QixFQUNYLEVBQUU7SUFDZCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLElBQWMsRUFBRSxFQUFFO1FBQzFELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDeEQsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUM1QixDQUFDO1NBQ0g7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVQLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25maWdEb3RlbnYgfSBmcm9tIFwiZG90ZW52XCI7XG5pbXBvcnQga25leCwgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJ1cmxcIjtcblxuaW50ZXJmYWNlIERiQ29uZmlnIHtcbiAgZGJUeXBlOiBTdXBwb3J0ZWREYlR5cGU7XG4gIHBnQ29ubmVjdGlvblN0cmluZz86IHN0cmluZztcbiAgbXlzcWxDb25uZWN0aW9uU3RyaW5nPzogc3RyaW5nO1xuICBpbml0RmlsZVBhdGg6IHN0cmluZztcbiAgZmlsZVBhdGg/OiBzdHJpbmc7XG4gIHZlcmJvc2U6IGJvb2xlYW47XG59XG5cbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKF9fZmlsZW5hbWUpO1xuXG5leHBvcnQgZW51bSBTdXBwb3J0ZWREYlR5cGUge1xuICBzcWxpdGUgPSBcInNxbGl0ZVwiLFxuICBwb3N0Z3JlcyA9IFwicG9zdGdyZXNcIixcbiAgbXlzcWwgPSBcIm15c3FsXCIsXG59XG5cbmNvbnN0IG15c3FsQ29ubmVjdGlvblN0cmluZ1BhdHRlcm4gPSAvXihbXjpdKyk6KFxcZCspOihbXjpdKyk6KFteOl0rKTooW146XSspJC87XG5cbmNvbnN0IERiQ2xpZW50ID0ge1xuICBbU3VwcG9ydGVkRGJUeXBlLnNxbGl0ZV06IFwiYmV0dGVyLXNxbGl0ZTNcIixcbiAgW1N1cHBvcnRlZERiVHlwZS5wb3N0Z3Jlc106IFwicGdcIixcbiAgW1N1cHBvcnRlZERiVHlwZS5teXNxbF06IFwibXlzcWxcIixcbn07XG5cbmNvbnN0IGRlZmF1bHRzOiBEYkNvbmZpZyA9IHtcbiAgZGJUeXBlOiBTdXBwb3J0ZWREYlR5cGUuc3FsaXRlLFxuICBmaWxlUGF0aDogXCJhZGRyZXNzX3BvaW50cy5kYlwiLFxuICBpbml0RmlsZVBhdGg6IGpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiYWRkcmVzc19wb2ludHNfaW5pdC5kYlwiKSxcbiAgdmVyYm9zZTogZmFsc2UsXG59O1xuXG5sZXQgX2tuZXhEYjogS25leCA9IHVuZGVmaW5lZDtcbmxldCBfa25leERiQ29uZmlnOiBEYkNvbmZpZyA9IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGdldEtuZXhEYiA9IChjb25maWc6IFBhcnRpYWw8RGJDb25maWc+ID0ge30pOiBLbmV4ID0+IHtcbiAgaWYgKF9rbmV4RGIgPT09IHVuZGVmaW5lZCkge1xuICAgIF9rbmV4RGJDb25maWcgPSB7IC4uLmRlZmF1bHRzLCAuLi5nZXRFbnZDb25maWcoKSwgLi4uY29uZmlnIH07XG5cbiAgICBpZiAoX2tuZXhEYkNvbmZpZy5kYlR5cGUgPT09IFN1cHBvcnRlZERiVHlwZS5zcWxpdGUpIHtcbiAgICAgIF9rbmV4RGIgPSBrbmV4KHtcbiAgICAgICAgY2xpZW50OiBEYkNsaWVudFtTdXBwb3J0ZWREYlR5cGUuc3FsaXRlXSxcbiAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgIGZpbGVuYW1lOiBfa25leERiQ29uZmlnLmZpbGVQYXRoLFxuICAgICAgICB9LFxuICAgICAgICBwb29sOiB7XG4gICAgICAgICAgYWZ0ZXJDcmVhdGU6IChkYjogYW55LCBkb25lOiBGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgZGIucHJhZ21hKFwiam91cm5hbF9tb2RlID0gV0FMO1wiKTtcbiAgICAgICAgICAgIGRvbmUoZmFsc2UsIGRvbmUpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZU51bGxBc0RlZmF1bHQ6IHRydWUsXG4gICAgICAgIGRlYnVnOiBfa25leERiQ29uZmlnLnZlcmJvc2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKF9rbmV4RGJDb25maWcuZGJUeXBlID09PSBTdXBwb3J0ZWREYlR5cGUucG9zdGdyZXMpIHtcbiAgICAgIF9rbmV4RGIgPSBrbmV4KHtcbiAgICAgICAgY2xpZW50OiBEYkNsaWVudFtTdXBwb3J0ZWREYlR5cGUucG9zdGdyZXNdLFxuICAgICAgICBjb25uZWN0aW9uOiBfa25leERiQ29uZmlnLnBnQ29ubmVjdGlvblN0cmluZyxcbiAgICAgICAgdXNlTnVsbEFzRGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgZGVidWc6IF9rbmV4RGJDb25maWcudmVyYm9zZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoX2tuZXhEYkNvbmZpZy5kYlR5cGUgPT09IFN1cHBvcnRlZERiVHlwZS5teXNxbCkge1xuICAgICAgY29uc3QgW2hvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkLCBkYXRhYmFzZV0gPVxuICAgICAgICBfa25leERiQ29uZmlnLm15c3FsQ29ubmVjdGlvblN0cmluZy5zcGxpdChcIjpcIik7XG4gICAgICBfa25leERiID0ga25leCh7XG4gICAgICAgIGNsaWVudDogRGJDbGllbnRbU3VwcG9ydGVkRGJUeXBlLm15c3FsXSxcbiAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgcG9ydDogTnVtYmVyKHBvcnQpLFxuICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgZGF0YWJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHVzZU51bGxBc0RlZmF1bHQ6IHRydWUsXG4gICAgICAgIGRlYnVnOiBfa25leERiQ29uZmlnLnZlcmJvc2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBEQiB0eXBlOiAke19rbmV4RGJDb25maWcuZGJUeXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfa25leERiO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUG9zdGdyZXMgPSAoa25leDogS25leCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4ga25leC5jbGllbnQuY29uZmlnLmNsaWVudCA9PT0gRGJDbGllbnRbU3VwcG9ydGVkRGJUeXBlLnBvc3RncmVzXTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NxbGl0ZSA9IChrbmV4OiBLbmV4KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBrbmV4LmNsaWVudC5jb25maWcuY2xpZW50ID09PSBEYkNsaWVudFtTdXBwb3J0ZWREYlR5cGUuc3FsaXRlXTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc015c3FsID0gKGtuZXg6IEtuZXgpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGtuZXguY2xpZW50LmNvbmZpZy5jbGllbnQgPT09IERiQ2xpZW50W1N1cHBvcnRlZERiVHlwZS5teXNxbF07XG59O1xuXG5jb25zdCBnZXRNaWdyYXRpb25Db25maWcgPSAoKTogS25leC5NaWdyYXRvckNvbmZpZyA9PiB7XG4gIHJldHVybiB7IGRpcmVjdG9yeTogam9pbihfX2Rpcm5hbWUsIFwibWlncmF0aW9uc1wiKSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXREYiA9IGFzeW5jIChjb25maWc6IFBhcnRpYWw8RGJDb25maWc+ID0ge30pOiBQcm9taXNlPEtuZXg+ID0+IHtcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYihjb25maWcpO1xuICBhd2FpdCBrbmV4Lm1pZ3JhdGUubGF0ZXN0KGdldE1pZ3JhdGlvbkNvbmZpZygpKTtcbiAgcmV0dXJuIGtuZXg7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJEYiA9IGFzeW5jIChcbiAgY29uZmlnOiBQYXJ0aWFsPERiQ29uZmlnPiA9IHt9XG4pOiBQcm9taXNlPEtuZXg+ID0+IHtcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYihjb25maWcpO1xuICBhd2FpdCBrbmV4Lm1pZ3JhdGUucm9sbGJhY2soZ2V0TWlncmF0aW9uQ29uZmlnKCksIHRydWUpO1xuICBhd2FpdCBrbmV4Lm1pZ3JhdGUubGF0ZXN0KGdldE1pZ3JhdGlvbkNvbmZpZygpKTtcbiAgcmV0dXJuIGtuZXg7XG59O1xuXG5leHBvcnQgY29uc3QgZGlzY29ubmVjdEtuZXggPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmIChfa25leERiKSB7XG4gICAgYXdhaXQgX2tuZXhEYi5kZXN0cm95KCk7XG4gICAgX2tuZXhEYiA9IHVuZGVmaW5lZDtcbiAgfVxufTtcblxuY29uc3QgZ2V0RW52Q29uZmlnID0gKCk6IFBhcnRpYWw8RGJDb25maWc+ID0+IHtcbiAgY29uZmlnRG90ZW52KHsgcGF0aDogXCIuZW52LmxvY2FsXCIgfSk7XG4gIGNvbnN0IGVudkNvbmZpZzogUGFydGlhbDxEYkNvbmZpZz4gPSB7fTtcbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52LlRFWFRUT01BUF9EQl9UWVBFICYmXG4gICAgT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWREYlR5cGUpLmluY2x1ZGVzKFxuICAgICAgcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX0RCX1RZUEUgYXMgU3VwcG9ydGVkRGJUeXBlXG4gICAgKVxuICApIHtcbiAgICBlbnZDb25maWcuZGJUeXBlID0gcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX0RCX1RZUEUgYXMgU3VwcG9ydGVkRGJUeXBlO1xuICAgIGlmIChlbnZDb25maWcuZGJUeXBlID09PSBTdXBwb3J0ZWREYlR5cGUucG9zdGdyZXMpIHtcbiAgICAgIGlmICghcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX1BHX0NPTk5FQ1RJT05fU1RSSU5HKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkVudmlyb25tZW50YWwgdmFyaWFibGUgJ1RFWFRUT01BUF9QR19DT05ORUNUSU9OX1NUUklORycgbXVzdCBiZSBzZXQgZm9yIFBvc3RncmVTUUwuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGVudkNvbmZpZy5wZ0Nvbm5lY3Rpb25TdHJpbmcgPSBwcm9jZXNzLmVudi5URVhUVE9NQVBfUEdfQ09OTkVDVElPTl9TVFJJTkc7XG4gICAgfSBlbHNlIGlmIChlbnZDb25maWcuZGJUeXBlID09PSBTdXBwb3J0ZWREYlR5cGUubXlzcWwpIHtcbiAgICAgIGlmICghcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFbnZpcm9ubWVudGFsIHZhcmlhYmxlICdURVhUVE9NQVBfTVlTUUxfQ09OTkVDVElPTl9EQVRBJyBtdXN0IGJlIHNldCBmb3IgTXlTUUwgb3IgTWFyaWFEQi5cIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgICFteXNxbENvbm5lY3Rpb25TdHJpbmdQYXR0ZXJuLnRlc3QoXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiRW52aXJvbm1lbnRhbCB2YXJpYWJsZSAnVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQScgbXVzdCBiZSBpbiBmb3JtYXQgJ2hvc3Q6cG9ydDp1c2VyOnBhc3N3b3JkOmRhdGFiYXNlJy5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZW52Q29uZmlnLm15c3FsQ29ubmVjdGlvblN0cmluZyA9XG4gICAgICAgIHByb2Nlc3MuZW52LlRFWFRUT01BUF9NWVNRTF9DT05ORUNUSU9OX0RBVEE7XG4gICAgfSBlbHNlIGlmIChlbnZDb25maWcuZGJUeXBlID09PSBTdXBwb3J0ZWREYlR5cGUuc3FsaXRlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuVEVYVFRPTUFQX1NRTElURV9QQVRIKSB7XG4gICAgICAgIGVudkNvbmZpZy5maWxlUGF0aCA9IHByb2Nlc3MuZW52LlRFWFRUT01BUF9TUUxJVEVfUEFUSDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudkNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBub25FbXB0eU9yTnVsbCA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIHJldHVybiB2YWx1ZSA/IHZhbHVlIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCByYXdRdWVyeSA9IGFzeW5jIChcbiAgcXVlcnk6IHN0cmluZyxcbiAgLi4uYmluZGluZ3M6IHJlYWRvbmx5IEtuZXguUmF3QmluZGluZ1tdXG4pOiBQcm9taXNlPGFueVtdPiA9PiB7XG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQga25leC5yYXcocXVlcnksIC4uLmJpbmRpbmdzKTtcbiAgcmV0dXJuIGlzTXlzcWwoa25leCkgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEVmZmljaWVudGx5IGluc2VydCBtdWx0aXBsZSByb3dzLiBJZiBwcmV2ZW50RHVwbGljYXRlc0J5Rmlyc3RDb2x1bW4gaXMgdHJ1ZSwgdGhlIGZpcnN0XG4gKiBjb2x1bW4gc2hvdWxkIGJlIHVuaXF1ZSAoUEsgb3IgVU5JUVVFKS5cbiAqL1xuLyoqXG4gKiBJbnNlcnQgbXVsdGlwbGUgcm93cy4gRXhpc3Rpbmcgcm93cyAoc2FtZSBwcmltYXJ5IGtleSkgYXJlIGtlcHQgYXMgdGhleSBhcmUsXG4gKiB1bmxlc3MgYHVwc2VydGAgaXMgc2V0IC0gdGhlbiB0aGVpciBgdXBzZXJ0LnVwZGF0ZUNvbHVtbnNgIGFyZSBvdmVyd3JpdHRlblxuICogKGUuZy4gYSBzdHJlZXQgcmVuYW1lZCBpbiBSw5pJQU4ga2VlcHMgaXRzIGNvZGUsIG9ubHkgdGhlIG5hbWUgY2hhbmdlcykuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnNlcnRNdWx0aXBsZVJvd3MgPSBhc3luYyAoXG4gIHJvd3M6IHN0cmluZ1tdW10sXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSxcbiAgcHJldmVudER1cGxpY2F0ZXM6IGJvb2xlYW4gPSB0cnVlLFxuICB1cHNlcnQ/OiB7IGNvbmZsaWN0Q29sdW1uczogc3RyaW5nW107IHVwZGF0ZUNvbHVtbnM6IHN0cmluZ1tdIH1cbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgaW5zZXJ0UGxhY2Vob2xkZXJzID0gZ2VuZXJhdGUyRFBsYWNlaG9sZGVycyhcbiAgICBjb2x1bW5OYW1lcy5sZW5ndGgsXG4gICAgcm93cy5sZW5ndGhcbiAgKTtcblxuICBjb25zdCBrbmV4ID0gZ2V0S25leERiKCk7XG5cbiAgbGV0IG9uQ29uZmljdCA9IFwiXCI7XG4gIGlmICh1cHNlcnQgJiYgaXNNeXNxbChrbmV4KSkge1xuICAgIG9uQ29uZmljdCA9IGBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSAke3Vwc2VydC51cGRhdGVDb2x1bW5zXG4gICAgICAubWFwKChjKSA9PiBgJHtjfSA9IFZBTFVFUygke2N9KWApXG4gICAgICAuam9pbihcIiwgXCIpfWA7XG4gIH0gZWxzZSBpZiAodXBzZXJ0KSB7XG4gICAgLy8gdGhlIFdIRVJFIGNsYXVzZSBza2lwcyByZXdyaXRpbmcgcm93cyB0aGF0IGhhdmVuJ3QgY2hhbmdlZFxuICAgIG9uQ29uZmljdCA9IGBPTiBDT05GTElDVCAoJHt1cHNlcnQuY29uZmxpY3RDb2x1bW5zLmpvaW4oXG4gICAgICBcIixcIlxuICAgICl9KSBETyBVUERBVEUgU0VUICR7dXBzZXJ0LnVwZGF0ZUNvbHVtbnNcbiAgICAgIC5tYXAoKGMpID0+IGAke2N9ID0gZXhjbHVkZWQuJHtjfWApXG4gICAgICAuam9pbihcIiwgXCIpfSBXSEVSRSAke3Vwc2VydC51cGRhdGVDb2x1bW5zXG4gICAgICAubWFwKChjKSA9PiBgJHt0YWJsZX0uJHtjfSBJUyBESVNUSU5DVCBGUk9NIGV4Y2x1ZGVkLiR7Y31gKVxuICAgICAgLmpvaW4oXCIgT1IgXCIpfWA7XG4gIH0gZWxzZSBpZiAocHJldmVudER1cGxpY2F0ZXMgJiYgIWlzTXlzcWwoa25leCkpIHtcbiAgICBvbkNvbmZpY3QgPSBgT04gQ09ORkxJQ1QgRE8gTk9USElOR2A7XG4gIH1cblxuICBhd2FpdCByYXdRdWVyeShcbiAgICBgSU5TRVJUICR7aXNNeXNxbChrbmV4KSA/IFwiSUdOT1JFXCIgOiBcIlwifSBJTlRPICR7dGFibGV9ICgke2NvbHVtbk5hbWVzLmpvaW4oXG4gICAgICBcIixcIlxuICAgICl9KSBWQUxVRVMgJHtpbnNlcnRQbGFjZWhvbGRlcnN9ICR7b25Db25maWN0fWAsXG4gICAgcm93cy5mbGF0KClcbiAgKTtcblxuICByZXR1cm4gcm93cy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEluc2VydCBhIHNpbmdsZSByb3cgYW5kIHJldHVybiB0aGUgYXV0b2luY3JlbWVudGVkIElELlxuICovXG5leHBvcnQgY29uc3QgaW5zZXJ0QXV0b2luY3JlbWVudFJvdyA9IGFzeW5jIChcbiAgcm93OiBhbnlbXSxcbiAgdGFibGU6IHN0cmluZyxcbiAgY29sdW1uTmFtZXM6IHN0cmluZ1tdXG4pOiBQcm9taXNlPG51bWJlciB8IG51bGw+ID0+IHtcbiAgY29uc3QgZGF0YSA9IGNvbHVtbk5hbWVzLnJlZHVjZSgob2JqLCBjb2x1bW5OYW1lLCBpbmRleCkgPT4ge1xuICAgIG9ialtjb2x1bW5OYW1lXSA9IHJvd1tpbmRleF07XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpLmluc2VydChkYXRhKS5pbnRvKHRhYmxlKTtcblxuICByZXR1cm4gcmVzdWx0ID8gTnVtYmVyKHJlc3VsdCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZU11bHRpcGxlUm93c0tuZXggPSBhc3luYyAoXG4gIGtleXM6IHN0cmluZ1tdLFxuICB0YWJsZTogc3RyaW5nLFxuICBrZXlDb2x1bW5OYW1lOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgZ2V0S25leERiKCkuZnJvbSh0YWJsZSkud2hlcmVJbihrZXlDb2x1bW5OYW1lLCBrZXlzKS5kZWwoKTtcbn07XG5cbmNvbnN0IGdlbmVyYXRlUmVwZXRpdGl2ZVN0cmluZyA9IChcbiAgdmFsdWU6IHN0cmluZyxcbiAgZ2x1ZTogc3RyaW5nLFxuICBuOiBudW1iZXJcbik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBuZXcgQXJyYXkobikuZmlsbCh2YWx1ZSkuam9pbihnbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVBsYWNlaG9sZGVycyA9IChuOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gZ2VuZXJhdGVSZXBldGl0aXZlU3RyaW5nKFwiP1wiLCBcIixcIiwgbik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGUyRFBsYWNlaG9sZGVycyA9IChcbiAgaW5uZXI6IG51bWJlcixcbiAgb3V0ZXI6IG51bWJlclxuKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGdlbmVyYXRlUmVwZXRpdGl2ZVN0cmluZyhcbiAgICBgKCR7Z2VuZXJhdGVQbGFjZWhvbGRlcnMoaW5uZXIpfSlgLFxuICAgIFwiLFwiLFxuICAgIG91dGVyXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdEtleVZhbHVlc1BhaXJzID0gKFxuICBhcnJheTogc3RyaW5nW11bXSxcbiAga2V5SW5kZXg6IG51bWJlcixcbiAgdmFsdWVzSW5kaWNlczogbnVtYmVyW11cbik6IHN0cmluZ1tdW10gPT4ge1xuICBjb25zdCBvYmplY3QgPSBhcnJheS5yZWR1Y2UoKGFjYzogb2JqZWN0LCBkYXRhOiBzdHJpbmdbXSkgPT4ge1xuICAgIGlmIChkYXRhW2tleUluZGV4XSkge1xuICAgICAgYWNjW2RhdGFba2V5SW5kZXhdXSA9IHZhbHVlc0luZGljZXMubWFwKChpbmRleDogbnVtYmVyKSA9PlxuICAgICAgICBub25FbXB0eU9yTnVsbChkYXRhW2luZGV4XSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5tYXAoKGtleSkgPT4gW2tleSwgLi4ub2JqZWN0W2tleV1dKTtcbn07XG4iXX0=
|
package/dist/db/street-sync.js
CHANGED
|
@@ -14,9 +14,11 @@ export const deleteStreets = async (streetUrls) => {
|
|
|
14
14
|
await deleteMultipleRowsKnex(streetUrls, "street_sync", "feed_url");
|
|
15
15
|
};
|
|
16
16
|
export const insertStreetsFromDbf = async (data) => {
|
|
17
|
-
return await insertMultipleRows(data.map((street) => [street.KOD, street.OBEC_KOD, street.NAZEV]), "street", ["code", "city_code", "name"]
|
|
17
|
+
return await insertMultipleRows(data.map((street) => [street.KOD, street.OBEC_KOD, street.NAZEV]), "street", ["code", "city_code", "name"], true,
|
|
18
|
+
// a renamed street keeps its code, so the name has to be updated
|
|
19
|
+
{ conflictColumns: ["code"], updateColumns: ["name"] });
|
|
18
20
|
};
|
|
19
21
|
export const clearStreetSyncTable = async () => {
|
|
20
22
|
await getKnexDb()("street_sync").del();
|
|
21
23
|
};
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0LXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvc3RyZWV0LXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ25CLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUNwQyxhQUFxQixFQUNOLEVBQUU7SUFDakIsTUFBTSxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDN0IsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO1NBQ25DLFVBQVUsQ0FBQyxVQUFVLENBQUM7U0FDdEIsTUFBTSxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLElBQTBCLEVBQUU7SUFDbEUsT0FBTyxJQUFJLEdBQUcsQ0FDWixNQUFNLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztTQUM3QixNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ25ELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLFVBQW9CLEVBQWlCLEVBQUU7SUFDekUsTUFBTSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFDdkMsSUFBaUIsRUFDQSxFQUFFO0lBQ25CLE9BQU8sTUFBTSxrQkFBa0IsQ0FDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ2pFLFFBQVEsRUFDUixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQzdCLElBQUk7SUFDSixpRUFBaUU7SUFDakUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUN2RCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxJQUFtQixFQUFFO0lBQzVELE1BQU0sU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZGVsZXRlTXVsdGlwbGVSb3dzS25leCxcbiAgZ2V0S25leERiLFxuICBpbnNlcnRNdWx0aXBsZVJvd3Ncbn0gZnJvbSBcIi4vZGJcIjtcbmltcG9ydCB7IERiZlN0cmVldCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBzZXRTdHJlZXRBc1N5bmNlZCA9IGFzeW5jIChcbiAgc3RyZWV0RmVlZFVybDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgYXdhaXQgZ2V0S25leERiKCkoXCJzdHJlZXRfc3luY1wiKVxuICAgIC5pbnNlcnQoeyBmZWVkX3VybDogc3RyZWV0RmVlZFVybCB9KVxuICAgIC5vbkNvbmZsaWN0KFwiZmVlZF91cmxcIilcbiAgICAuaWdub3JlKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsU3luY2VkU3RyZWV0cyA9IGFzeW5jICgpOiBQcm9taXNlPFNldDxzdHJpbmc+PiA9PiB7XG4gIHJldHVybiBuZXcgU2V0PHN0cmluZz4oXG4gICAgYXdhaXQgZ2V0S25leERiKCkoXCJzdHJlZXRfc3luY1wiKVxuICAgICAgLnNlbGVjdChcImZlZWRfdXJsXCIpXG4gICAgICAudGhlbigocm93cykgPT4gcm93cy5tYXAoKHJvdykgPT4gcm93LmZlZWRfdXJsKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVTdHJlZXRzID0gYXN5bmMgKHN0cmVldFVybHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGF3YWl0IGRlbGV0ZU11bHRpcGxlUm93c0tuZXgoc3RyZWV0VXJscywgXCJzdHJlZXRfc3luY1wiLCBcImZlZWRfdXJsXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydFN0cmVldHNGcm9tRGJmID0gYXN5bmMgKFxuICBkYXRhOiBEYmZTdHJlZXRbXVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcbiAgICBkYXRhLm1hcCgoc3RyZWV0KSA9PiBbc3RyZWV0LktPRCwgc3RyZWV0Lk9CRUNfS09ELCBzdHJlZXQuTkFaRVZdKSxcbiAgICBcInN0cmVldFwiLFxuICAgIFtcImNvZGVcIiwgXCJjaXR5X2NvZGVcIiwgXCJuYW1lXCJdLFxuICAgIHRydWUsXG4gICAgLy8gYSByZW5hbWVkIHN0cmVldCBrZWVwcyBpdHMgY29kZSwgc28gdGhlIG5hbWUgaGFzIHRvIGJlIHVwZGF0ZWRcbiAgICB7IGNvbmZsaWN0Q29sdW1uczogW1wiY29kZVwiXSwgdXBkYXRlQ29sdW1uczogW1wibmFtZVwiXSB9XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJTdHJlZXRTeW5jVGFibGUgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGF3YWl0IGdldEtuZXhEYigpKFwic3RyZWV0X3N5bmNcIikuZGVsKCk7XG59O1xuIl19
|
package/package.json
CHANGED
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
},
|
|
76
76
|
"name": "text-to-map",
|
|
77
77
|
"description": "Text To Map usiluje o lepší, strojově zpracovatelné využití částí vyhlášek s výčtem ulic a dalších lokací. Jde o rozšiřitelnou sadu konceptů a nástrojů, které zajistí hladký převod výčtu ulic a jejich rozsahů v lidsky srozumitelném jazyce do strojově zpracovatelného, uchopitelného formátu.",
|
|
78
|
-
"version": "1.1.
|
|
78
|
+
"version": "1.1.48",
|
|
79
79
|
"main": "dist/index.js",
|
|
80
80
|
"types": "dist/index.d.ts",
|
|
81
81
|
"files": [
|