@hestia-earth/ui-components 0.21.21 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/logs-utils.d.ts +1 -1
- package/common/utils.d.ts +3 -3
- package/esm2022/common/logs-utils.mjs +2 -2
- package/esm2022/common/utils.mjs +1 -1
- package/esm2022/files/files-error.model.mjs +13 -10
- package/esm2022/files/files-form.model.mjs +3 -3
- package/esm2022/files/files-upload-errors/files-upload-errors.component.mjs +2 -2
- package/esm2022/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.mjs +3 -3
- package/esm2022/node/node-csv-export-confirm/node-csv-export-confirm.component.mjs +3 -3
- package/esm2022/node/node-logs-file/node-logs-file.component.mjs +3 -3
- package/esm2022/node/node-logs-models/node-logs-models.component.mjs +3 -2
- package/esm2022/node/node-logs-models/node-logs-models.model.mjs +5 -3
- package/fesm2022/hestia-earth-ui-components.mjs +29 -23
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -242,9 +242,11 @@ const filterDeleted = (blankNodes) => (blankNodes || []).filter(value => !value.
|
|
|
242
242
|
const blankNodeValueByKey = {
|
|
243
243
|
property: (values, _k, id) => !!id && values?.length ? (values[0].properties || []).find(p => p.term['@id'] === id)?.value || '' : '',
|
|
244
244
|
input: (values, _k, id) => !!id && (values || []).filter(v => v['@type'] === SchemaType.Emission).length
|
|
245
|
-
?
|
|
245
|
+
? reduceValues(values.filter(({ inputs }) => (inputs || []).some(input => input['@id'] === id)), id)
|
|
246
|
+
: '',
|
|
247
|
+
transformation: (values, _k, id) => values.length
|
|
248
|
+
? reduceValues(values.filter(({ transformation }) => transformation?.['@id'] === id), id)
|
|
246
249
|
: '',
|
|
247
|
-
transformation: (values, _k, id) => values.length ? propertyValue(values.find(({ transformation }) => transformation?.['@id'] === id)?.value, id) : '',
|
|
248
250
|
default: (blankNodes, key) => {
|
|
249
251
|
const value = blankNodes?.length ? blankNodes[0][key] : null;
|
|
250
252
|
return ['string', 'number', 'boolean', 'undefined'].includes(typeof value)
|
|
@@ -607,4 +609,4 @@ export const logValueArray = (value) => [';', ':'].some(v => value.includes(v))
|
|
|
607
609
|
return res.length <= 1 ? res.flat() : Object.fromEntries(res);
|
|
608
610
|
})
|
|
609
611
|
: null;
|
|
610
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUVMLGtCQUFrQixFQUtsQixZQUFZLEVBRVosVUFBVSxFQUNWLFVBQVUsRUFLWCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBQzdCLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBR0wsVUFBVSxFQUVWLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsY0FBYyxFQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBdUNyRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRTlDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU3RSxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFFakYsTUFBTSx1QkFBdUIsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFFekUsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUU3QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFFdkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLE9BQU8sQ0FBQztBQUVsRSxNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtJQUN6QyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztJQUNyRyxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLFFBQVEsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxNQUFNO0lBQ2QsTUFBTTtDQUNQLENBQUMsQ0FBQztBQUVILE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFcEYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtJQUN2QyxJQUFJO1FBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDZCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLE9BQU87Z0JBQ0wsR0FBRyxJQUFJO2dCQUNQLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM3QyxDQUFDO1FBQ0osQ0FBQyxFQUNELEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FDeEIsQ0FBQztLQUNIO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixrREFBa0Q7UUFDbEQsT0FBTyxFQUFFLENBQUM7S0FDWDtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFrQixFQUFFLEVBQUUsQ0FDbkQsTUFBTTtLQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMvRCxNQUFNLENBQUMsT0FBTyxDQUFDO0tBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRWYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUM1QixDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUUsYUFBYSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ3hGLENBQUMsQ0FBQztRQUNFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUscUJBQXFCLENBQUM7WUFDakQsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNwQixDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQ2hDLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ2hELENBQUM7S0FDSDtJQUNILENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFdkIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFRLEVBQUUsR0FBRyxJQUFjLEVBQUUsRUFBRSxDQUNsRCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV4SCxNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0tBQ2IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BELE1BQU0sQ0FDTCxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDZCxHQUFHLElBQUk7SUFDUCxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDaEcsQ0FBQyxFQUNGLElBQUksQ0FDTCxDQUFDO0FBRU4sTUFBTSxRQUFRLEdBQUcsQ0FDZixLQUFLLEVBQ0wsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxFQUFPLEVBQzNGLEVBQUU7SUFDRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sS0FBSyxHQUFHLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNqRCxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDO1NBQ3pGLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLFdBQVcsR0FBRyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2RixHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsWUFBWSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsWUFBWSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25HLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxZQUFZLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsWUFBWSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFckQsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFdkMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVwQyxJQUFJLE9BQU8sVUFBVSxLQUFLLFdBQVcsRUFBRTtRQUNyQyxNQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUssTUFBTSxDQUFDO1FBRXhDLElBQUksR0FBRyxjQUFjO1lBQ25CLENBQUMsQ0FBQztnQkFDRSxHQUFHLElBQUk7Z0JBQ1AsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztnQkFDNUIscUJBQXFCLEVBQUUsU0FBUzthQUNqQztZQUNILENBQUMsQ0FBQztnQkFDRSxHQUFHLElBQUk7Z0JBQ1AsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO2dCQUNuQixTQUFTO2FBQ1YsQ0FBQztLQUNQO1NBQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDOUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxLQUFLLE1BQU0sQ0FBQztRQUU1QyxJQUFJLEdBQUc7WUFDTCxHQUFHLElBQUk7WUFDUCxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxXQUFXO1NBQ1osQ0FBQztLQUNIO1NBQU0sSUFBSSxjQUFjLElBQUksR0FBRyxFQUFFO1FBQ2hDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFFekMsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDNUIsR0FBRyxPQUFPO1NBQ1gsQ0FBQztLQUNIO1NBQU0sSUFBSSxtQkFBbUIsSUFBSSxHQUFHLEVBQUU7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xGO1NBQU0sSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHO1lBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDO0tBQ0g7SUFDRCxJQUFJLE9BQU8sWUFBWSxLQUFLLFdBQVcsRUFBRTtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksS0FBSyxNQUFNLENBQUM7S0FDNUM7SUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixLQUFLLFdBQVcsRUFBRTtRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixLQUFLLE1BQU0sQ0FBQztLQUN6RDtJQUNELElBQUksT0FBTyxHQUFHLENBQUMsZ0JBQWdCLEtBQUssV0FBVyxFQUFFO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxDQUFDO0tBQ3pEO0lBRUQsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUNuRCxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUVqQixJQUFJLEdBQUcsS0FBSyxnQkFBZ0IsRUFBRTtRQUM1QixtREFBbUQ7UUFDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlCLElBQUksT0FBTyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1RTtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7S0FDSDtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBWSxFQUFhLEVBQUUsQ0FDMUQsSUFBSTtLQUNELElBQUksRUFBRTtLQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDWCxHQUFHLENBQUMsWUFBWSxDQUFDO0tBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDdkYsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQ3JCLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxRQUFRO1FBQ2IsQ0FBQyxDQUFDLFFBQVEsS0FBSyxnQkFBZ0I7WUFDN0IsQ0FBQyxDQUFDLG9EQUFvRDtnQkFDcEQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUM7WUFDeEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUN6RCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFWCxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUMxQixjQUEyQixFQUMzQixrQkFBK0IsRUFDL0IsS0FBcUIsRUFDckIsZUFBZ0MsRUFDaEMsYUFBNEIsRUFBRSxFQUNOLEVBQUUsQ0FDMUIsSUFBSSxDQUFDO0lBQ0gsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNO1FBQ2YsQ0FBQyxDQUFDLEtBQUs7UUFDUCxDQUFDLENBQUM7WUFDRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDbEQsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDdkQsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxNQUFNLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxRixHQUFHLFVBQVU7Q0FDZCxDQUFDO0tBQ0MsSUFBSSxDQUNILFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN4QixPQUFPLEVBQUUsRUFDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3hDO0tBQ0EsU0FBUyxFQUFFLENBQUM7QUFFakIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsY0FBNEIsRUFBRSxrQkFBZ0MsRUFBRSxFQUFFLENBQzVGLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFLOUcsTUFBTSxDQUFOLElBQVksU0FNWDtBQU5ELFdBQVksU0FBUztJQUNuQixtQ0FBc0IsQ0FBQTtJQUN0Qiw2QkFBZ0IsQ0FBQTtJQUNoQiw4RUFBaUUsQ0FBQTtJQUNqRSxtRUFBc0QsQ0FBQTtJQUN0RCx5Q0FBNEIsQ0FBQTtBQUM5QixDQUFDLEVBTlcsU0FBUyxLQUFULFNBQVMsUUFNcEI7QUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVsSCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWlCLEVBQUUsSUFBbUIsRUFBRSxFQUFFLENBQy9ELENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRWpHLE1BQU0sU0FBUyxHQUFHLENBQ2hCLElBQThELEVBQzlELElBQW1CLEVBQ25CLGtCQUFrQixHQUFHLEtBQUssRUFDMUIsRUFBRTtJQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLFlBQVksR0FBRztRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssV0FBVztRQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQjtLQUN2QyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQiwyQ0FBMkM7SUFDM0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3hGLE9BQU8sUUFBUTtRQUNiLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDWCxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVc7WUFDdkIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDekIsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJO29CQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7d0JBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjOzRCQUNuQixDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU87NEJBQ25CLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQ0FDN0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLO2dDQUNqQixDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVk7d0JBQzFCLENBQUMsQ0FBQyxrQkFBa0I7NEJBQ3BCLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYTs0QkFDekIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLO29CQUNuQixDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVk7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYztvQkFDckIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhO29CQUN6QixDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVk7UUFDMUIsQ0FBQyxDQUFDLFlBQVk7WUFDZCxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWE7WUFDekIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBaUVGLE1BQU0seUJBQXlCLEdBQzdCLENBQUMsR0FBRyxRQUFxQixFQUFFLEVBQUUsQ0FDN0IsQ0FBQyxLQUFtQixFQUFFLEVBQUUsQ0FDdEIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUV0QyxNQUFNLHVCQUF1QixHQUMzQixDQUFDLEdBQUcsUUFBcUIsRUFBRSxFQUFFLENBQzdCLENBQUMsS0FBbUIsRUFBRSxFQUFFLENBQ3RCLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXJDLE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsTUFBd0QsRUFDeEQsVUFBNEMsRUFDNUMsRUFBRSxDQUNGLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV2RCxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQWEsRUFBUyxFQUFFLENBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQ1gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRTtJQUN6RCxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztRQUNoQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUM7UUFDM0MsRUFBRTtRQUNGLEdBQUc7UUFDSCxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDakcsQ0FBQztJQUNGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNQLENBQUM7QUFFSixNQUFNLFlBQVksR0FBRyxDQUFDLE1BQWEsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUNyRCxNQUFNLGNBQWMsR0FBRyxNQUFNO1NBQzFCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsb0dBQW9HO1NBQ25HLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUMzQixPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDdkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUM7QUFFaEgsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFpQixFQUFFLGdCQUFnQixHQUFHLElBQUksRUFBRSxFQUFFLENBQzVELENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxJQUFJLGFBQWEsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSx1QkFBdUIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRWhILE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQStCLEVBQUUsRUFBRSxDQUMxRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRW5FLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUErQixFQUFFLEVBQUUsQ0FDOUQsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFaEUsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQW1CLEVBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV0RyxNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUUsS0FBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRS9HLE1BQU0sbUJBQW1CLEdBRXJCO0lBQ0YsUUFBUSxFQUFFLENBQUMsTUFBNEMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FDakUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3pHLEtBQUssRUFBRSxDQUFDLE1BQWtCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQ3BDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNO1FBQzNFLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDMUcsQ0FBQyxDQUFDLEVBQUU7SUFDUixjQUFjLEVBQUUsQ0FBQyxNQUFrQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNwSCxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDM0IsTUFBTSxLQUFLLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0QsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssQ0FBQztZQUN4RSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxDQUFDLEtBQUs7WUFDVCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQkFDakIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1osQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxVQUF1QixFQUFFLEdBQVcsRUFBRSxFQUFXLEVBQUUsRUFBRSxDQUMzRSxtQkFBbUIsQ0FBQyxHQUFHLElBQUksbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUV6RixNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBeUIsRUFBVSxFQUFFLENBQ3BFLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQztBQUVyRCxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsS0FBVSxFQUFFLEVBQUUsRUFBRSxDQUN0RCxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFFM0UsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFtQixFQUFFLEdBQVcsRUFBRSxJQUFZLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxFQUFFO0lBQ3hGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRztRQUNSLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNsQixDQUFDLENBQUUsR0FBZ0IsQ0FBQyxHQUFHLENBQ25CLEVBQUUsQ0FBQyxFQUFFLENBQ0gsQ0FBQztnQkFDQyxHQUFHLEVBQUUsSUFBSTtnQkFDVCxFQUFFO2dCQUNGLFNBQVM7Z0JBQ1QsdURBQXVEO2FBQ3hELENBQTBCLENBQzlCO1lBQ0gsQ0FBQyxDQUFFO2dCQUNDLEdBQUcsRUFBRSxJQUFJO2dCQUNULEVBQUUsRUFBRSxHQUFHO2dCQUNQLFNBQVM7Z0JBQ1Qsd0RBQXdEO2FBQy9CO1FBQy9CLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFrQixFQUFFLE1BQWdCLEVBQUUsRUFBRSxDQUM3RCxLQUFLO0tBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBRSxJQUFZLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2hGLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDVixHQUFHLEVBQUUsVUFBVTtJQUNmLEVBQUU7SUFDRixTQUFTLEVBQUUsS0FBSztJQUNoQixZQUFZLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUM7Q0FDL0QsQ0FBQyxDQUFDLENBQUM7QUFFUjs7Ozs7R0FLRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxTQUFxQixFQUFFLEVBQUUsQ0FDM0QsU0FBUztLQUNOLE1BQU0sQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN6RCxHQUFHLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDM0IsR0FBRyxFQUFFLGdCQUFnQjtJQUNyQixTQUFTLEVBQUUsSUFBSTtJQUNmLFlBQVksRUFBRSxDQUFDLHNCQUFzQixDQUFDO0NBQ3ZDLENBQUMsQ0FBQyxDQUFDO0FBRVIsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFNBQWtDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBRS9HLE1BQU0sYUFBYSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBaUIsRUFBRSxFQUFFO0lBQy9HLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFDbkUsTUFBTSxDQUNQLENBQUM7SUFDRixNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkcsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkUsT0FBTyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUNuRSxDQUFDLENBQUU7WUFDQyxTQUFTLEVBQUUsSUFBSTtZQUNmLEdBQUcsRUFBRSxPQUFPO1lBQ1osU0FBUyxFQUFFLElBQUk7WUFDZixZQUFZO1lBQ1osVUFBVTtZQUNWLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsY0FBYyxFQUFFLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDO1NBQy9CO1FBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDWCxDQUFDLENBQUM7QUFFRixNQUFNLFlBQVksR0FBRyxDQUNuQixPQUFrQixFQUNsQixJQUFtQixFQUNuQixRQUFxQixFQUNyQixZQUF5QixFQUN6QixNQUFnQixFQUNoQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUF3QixFQUNoRCxFQUFFLENBQ0YsY0FBYyxDQUFDO0lBQ2IscUJBQXFCO0lBQ3JCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQztTQUNqQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1YsRUFBRTtRQUNGLEdBQUcsRUFBRSxVQUFVO1FBQ2YsU0FBUyxFQUFFLEtBQUs7UUFDaEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkUsQ0FBQyxDQUFDO0lBQ0wsR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxZQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvRixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ2pDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3hFLElBQUksRUFBRTtTQUNOLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsWUFBWSxFQUFHLENBQUMsQ0FBQyxZQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzFFO0lBQ0QsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNsQyxHQUFHLGFBQWEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDO0NBQ3ZDLENBQUM7S0FDQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFO0lBQzlFLGFBQWEsR0FBRyxhQUFhLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkUsaUJBQWlCLEdBQUcsaUJBQWlCLElBQUksY0FBYyxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0UsT0FBTztRQUNMLFNBQVMsRUFBRSxJQUFJO1FBQ2YsR0FBRztRQUNILEVBQUU7UUFDRixTQUFTO1FBQ1QsWUFBWSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQVMsQ0FBQyxDQUFDO1FBQzNHLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsY0FBYyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksaUJBQWlCLEtBQUssYUFBYTtRQUN0RixVQUFVLEVBQUUsSUFBSTtLQUNRLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0tBQ0QsTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxDQUM3RCxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLGFBQWEsS0FBSyxFQUFFLElBQUksaUJBQWlCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUMzRjtLQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUcsTUFBTSxPQUFPLEdBQUcsQ0FDZCxJQUFtQixFQUNuQixRQUFxQixFQUNyQixZQUF5QixFQUN6QixNQUFnQixFQUNoQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQzFCLEVBQUUsQ0FDRixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztLQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLGdCQUFnQixDQUFDO0tBQzFELEdBQUcsQ0FDRixHQUFHLENBQUMsRUFBRSxDQUNKLENBQUM7SUFDQyxTQUFTLEVBQUUsSUFBSTtJQUNmLEdBQUc7SUFDSCxTQUFTLEVBQUUsS0FBSztJQUNoQixZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUNuQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBUyxDQUFDLENBQUM7UUFDN0Usb0ZBQW9GO1NBQ25GLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztJQUM1QyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQztJQUNwRCxjQUFjLEVBQUUsb0JBQW9CLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQztJQUN2RCxVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUEwQixDQUM5QjtLQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUN0QyxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUV4QyxNQUFNLHNCQUFzQixHQUFHLENBQUMsSUFBZ0IsRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUMvRDtJQUNFLEdBQUcsS0FBSyxzQkFBc0I7SUFDOUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksS0FBSyxVQUFVLENBQUMsS0FBSztJQUNyRCxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxPQUFPO0NBQzFELENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRW5CLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFpQixFQUFFLEVBQUUsQ0FDOUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxrQkFBa0IsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUVuRixNQUFNLFVBQVUsR0FBRyxDQUFDLElBQW1CLEVBQUUsSUFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUM1RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsT0FBTyxDQUNMLENBQUMsQ0FBQyxHQUFHO1FBQ0w7WUFDRSwrQkFBK0I7WUFDL0Isc0JBQXNCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUNqQyxHQUFHLENBQUMsVUFBVSxLQUFLLGtCQUFrQixDQUFDLFVBQVU7WUFDaEQsQ0FBQyxHQUFHLENBQUMsS0FBSztZQUNWLGNBQWM7WUFDZCxDQUFDLEdBQUcsQ0FBQyxRQUFRO1NBQ2QsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2hCLENBQUMsV0FBVyxJQUFJLEdBQUcsRUFBRSx1QkFBdUIsSUFBSSxHQUFHLEVBQUUsYUFBYSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FDekYsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsUUFBZ0IsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBZ0MsRUFBRSxFQUFFLENBQ2pILENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFNUYsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsTUFBaUUsRUFDakUsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLEtBQWEsRUFDYixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFbkUsTUFBTSxnQkFBZ0IsR0FBRyxDQUN2QixNQUFpRSxFQUNqRSxNQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsS0FBYSxFQUNMLEVBQUU7SUFDVixNQUFNLE9BQU8sR0FBRyxNQUFNO1NBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNoQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hGLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFDLFVBQVU7Z0JBQ1YsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxFQUFFO1lBQ04sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7Z0JBQ1osQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFDLENBQUMsQ0FBQztBQVVGLE1BQU0sbUJBQW1CLEdBQ3ZCLENBQ0UsTUFBZ0IsRUFDaEIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUF3QixFQUMvRCxRQUFnQyxFQUNoQyxFQUFFLENBQ0osQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDbkIsTUFBTSxJQUFJLEdBQUc7UUFDWCxPQUFPLEVBQUUsUUFBUTtRQUNqQixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUU7UUFDdkMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtLQUMxQixDQUFDO0lBQ1QsT0FBTztRQUNMLFFBQVE7UUFDUixLQUFLLEVBQ0gsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxzQkFBc0I7WUFDdEIsQ0FBQyxRQUFRLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN2RSxvQ0FBb0M7WUFDcEMsQ0FBQyxHQUFHLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLHVCQUF1QjtZQUN2QixpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxRixzQ0FBc0M7WUFDdEMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNyRiwwQkFBMEI7WUFDMUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVGLGtFQUFrRTtZQUNsRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUNyQixDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFO29CQUN4QixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNqRCxDQUFDO2dCQUNKLENBQUMsQ0FBQyxTQUFTLENBQUM7S0FDakIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVKLE1BQU0sbUJBQW1CLEdBQ3ZCLENBQUMsSUFBOEQsRUFBRSxJQUFtQixFQUFFLG9CQUFvQixHQUFHLEtBQUssRUFBRSxFQUFFLENBQ3RILENBQUMsS0FBbUIsRUFBRSxFQUFFO0lBQ3RCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDN0UsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQzVCLE1BQU07UUFDTixRQUFRLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDeEMsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFSjs7Ozs7R0FLRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxNQUF5QyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUN2RixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsdUJBQXVCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7SUFDeEYsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFekUsTUFBTSx1QkFBdUIsR0FDM0IsQ0FBQyxJQUErQixFQUFFLEVBQUUsQ0FDcEMsQ0FBcUUsSUFBTyxFQUFFLEVBQUU7SUFDOUUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hGLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0MsTUFBTSxZQUFZLEdBQXNDLEVBQUUsQ0FBQztJQUUzRCwwRkFBMEY7SUFDMUYsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ3JDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDbEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNqRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDN0I7S0FDRjtJQUVELE9BQU87UUFDTCxHQUFHLElBQUk7UUFDUCxZQUFZLEVBQUUsa0JBQWtCLENBQzlCLFlBQVksRUFDWixDQUFDLEtBQW1CLEVBQUUsRUFBRSxDQUN0QixDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxxQkFBcUIsQ0FDL0Y7S0FDRyxDQUFDO0FBQ1QsQ0FBQyxDQUFDO0FBRUo7Ozs7O0dBS0c7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBMkIsRUFBRSxNQUFjLEVBQUUsUUFBZ0IsRUFBRSxNQUFzQixFQUFFLEVBQUU7SUFDcEgsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsS0FBSyxFQUFFO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNyRTtRQUNELEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztLQUN6RSxDQUFDLENBQUMsQ0FBQztJQUNKLE9BQU8sZUFBZTtTQUNuQixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUNqQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxFQUFFLEVBQXNCLENBQUM7U0FDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQXlDLEVBQUUsRUFBRSxDQUNoRSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRTFFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FDNUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxXQUFXO0lBQ3ZDLENBQUMsQ0FBRSxLQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztJQUN4QyxDQUFDLENBQUUsS0FBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRTFDLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBbUIsRUFBRSxRQUFnQixFQUFFLE1BQWMsRUFBRSxFQUFFLENBQ2hGLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLEVBQUUsS0FBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUUvRixNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBbUIsRUFBRSxNQUFxQyxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQ3pHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ25CLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBRVQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQzdCLFFBQWtCLEVBQ2xCLElBQWUsRUFDZixNQUFnQixFQUNoQixNQUEyQixFQUMzQixpQkFBOEIsRUFDOUIscUJBQWtDLEVBQ2xDLE9BQWdCLEVBQ2hCLEVBQUU7SUFDRixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbEcsTUFBTSxJQUFJLEdBQWUsY0FBYyxDQUFDLE1BQU07UUFDNUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUN0RCxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUMzQixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUM5RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWQsT0FBTyxDQUFDLElBQWlCLEVBQWlCLEVBQUU7UUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFrQixDQUFDO1FBQ3hELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0UsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQy9GLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUM5RCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FDdEMsTUFBTSxFQUNOLE1BQU0sRUFDTixPQUFRLEVBQ1IsTUFBTSxDQUFDO1lBQ0wsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0QsNEZBQTRGO1NBQzdGLENBQUMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FDdEQsQ0FBQztRQUNGLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDbkUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUV2QyxNQUFNLE9BQU8sR0FBa0IsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0QsU0FBUyxFQUFFLElBQUk7WUFDZixNQUFNLEVBQUUsSUFBSTtZQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDaEQsTUFBTTtZQUNOLElBQUk7WUFDSixJQUFJO1lBQ0osWUFBWTtZQUNaLFFBQVE7WUFDUixhQUFhLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDN0MsWUFBWTtZQUNaLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDO1lBQ3JELFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDN0IsY0FBYyxFQUFFLG9CQUFvQixDQUFDLFlBQVksQ0FBQztZQUNsRCxPQUFPO1lBQ1AsVUFBVTtZQUNWLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSTtZQUNKLFNBQVM7WUFDVCxXQUFXLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQztZQUN0Qyx1QkFBdUIsRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztZQUMvRSwyQkFBMkIsRUFBRSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztTQUN4RixDQUFDLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEMsT0FBTyxRQUFRLElBQUksU0FBUyxFQUFFLE1BQU07WUFDbEMsQ0FBQyxDQUFDO2dCQUNFLEdBQUcsT0FBTztnQkFDVixpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxTQUFTLENBQUM7YUFDcEMsQ0FBQyw2RUFBNkU7WUFDakYsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUM3QixRQUFrQixFQUNsQixJQUFlLEVBQ2YsTUFBZ0IsRUFDaEIsYUFBNEIsRUFDNUIsaUJBQWdDLEVBQ2hDLEVBQUU7SUFDRixNQUFNLElBQUksR0FDUixhQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFhLEVBQUUsSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksaUJBQWlCLEVBQUUsSUFBSSxDQUFDO0lBRTdHLE9BQU8sQ0FBQyxHQUFXLEVBQW9CLEVBQUU7UUFDdkMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFrQixDQUFDO1FBQ3BELE1BQU0sUUFBUSxHQUFHLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoRixNQUFNLGdCQUFnQixHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQzVGLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUM5QyxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUNuRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBRXZDLE9BQU8sdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsU0FBUyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxFQUFFLElBQUk7WUFDWixPQUFPLEVBQUUsS0FBSztZQUNkLEdBQUc7WUFDSCxJQUFJO1lBQ0osWUFBWTtZQUNaLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLGlCQUFpQixFQUFFLFlBQVk7WUFDL0IsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUNsQyxjQUFjLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1lBQ3RELE9BQU87WUFDUCxVQUFVO1lBQ1YsSUFBSSxFQUFFLE9BQU87WUFDYixXQUFXLEVBQUUsS0FBSztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUE4QixFQUFFLEVBQUUsQ0FDM0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUN2QixDQUFDO0lBQ0QsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO1FBQ3JCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDcEQsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztLQUNoRCxDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBRUwsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBYSxFQUFTLEVBQUUsQ0FDcEQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdCwgdG9BcnJheSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmlsZVRvRXh0LCBTdXBwb3J0ZWRFeHRlbnNpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHtcbiAgRW1pc3Npb24sXG4gIEVtaXNzaW9uTWV0aG9kVGllcixcbiAgSVRlcm1KU09OTEQsXG4gIFByb2R1Y3QsXG4gIElucHV0IGFzIEhlc3RpYUlucHV0LFxuICBOb2RlVHlwZSxcbiAgVGVybVRlcm1UeXBlLFxuICBQcm9wZXJ0eSxcbiAgU2NoZW1hVHlwZSxcbiAgaXNUeXBlTm9kZSxcbiAgSW5kaWNhdG9yLFxuICBQcmFjdGljZSxcbiAgTWVhc3VyZW1lbnQsXG4gIENvbXBsZXRlbmVzc1xufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUsIGlzVW5kZWZpbmVkLCBpc0VtcHR5LCBpc051bWJlciB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgcHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMvZGlzdC90ZXJtJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC5zZXQnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoLm9yZGVyYnknO1xuXG5pbXBvcnQge1xuICBJT3JjaGVzdHJhdG9yQ29uZmlnLFxuICBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcsXG4gIGZpbmRNb2RlbHMsXG4gIElNb2RlbCxcbiAgZmluZE1hdGNoaW5nTW9kZWwsXG4gIG1vZGVsUGFyYW1zLFxuICBtb2RlbEtleVBhcmFtc1xufSBmcm9tICcuLi8uLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNWYWxpZEtleSB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZU1pc3NpbmdMb29rdXBMb2cge1xuICBmaWxlbmFtZTogc3RyaW5nO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG4gIC8vIGF0dHJpYnV0ZXMgbGlua2VkIHRvIHRoZSBtb2RlbHNcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHRlcm0/OiBzdHJpbmc7XG4gIGtleT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZVRlcm1Mb2cge1xuICBydW5SZXF1aXJlZD86IGJvb2xlYW47XG4gIHNob3VsZFJ1bj86IGJvb2xlYW47XG4gIHNob3VsZFJ1bk9yY2hlc3RyYXRvcj86IGJvb2xlYW47XG4gIHNob3VsZE1lcmdlPzogYm9vbGVhbjtcbiAgcmVwbGFjZUxvd2VyVGllcj86IGJvb2xlYW47XG4gIHJlcGxhY2VUaHJlc2hvbGQ/OiBib29sZWFuO1xuICBtaXNzaW5nTG9va3Vwcz86IElOb2RlTWlzc2luZ0xvb2t1cExvZ1tdO1xuICByZXF1aXJlbWVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICBsb2dzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICAvLyBwb3NzaWJsZSBzdWIgdmFsdWVzXG4gIGlucHV0Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHByb3BlcnR5Pzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVUZXJtTG9ncyB7XG4gIFttb2RlbEtleTogc3RyaW5nXTogYW55IHwgSU5vZGVUZXJtTG9nO1xuICBtb2RlbHM6IHN0cmluZ1tdO1xuICBpc0tleT86IGJvb2xlYW47XG4gIGlzUHJvcGVydHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlTG9ncyB7XG4gIFt0ZXJtOiBzdHJpbmddOiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5jb25zdCB0ZXJtVHlwZXMgPSBPYmplY3QudmFsdWVzKFRlcm1UZXJtVHlwZSk7XG5cbmNvbnN0IGJsYW5rTm9kZVR5cGVzID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKS5maWx0ZXIodCA9PiAhaXNUeXBlTm9kZSh0KSk7XG5cbmNvbnN0IHNjaGVtYVR5cGVzTG93ZXJDYXNlID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKS5tYXAodiA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuXG5jb25zdCBibGFua05vZGVUeXBlc0xvd2VyQ2FzZSA9IGJsYW5rTm9kZVR5cGVzLm1hcCh2ID0+IHYudG9Mb3dlckNhc2UoKSk7XG5cbmNvbnN0IG1pc3NpbmdMb29rdXBQcmVmaXggPSAnTWlzc2luZyBsb29rdXAnO1xuXG5jb25zdCBub1ZhbHVlID0gJ05vbmUnO1xuXG5jb25zdCBoYXNWYWx1ZSA9ICh2YWx1ZT86IHN0cmluZykgPT4gISF2YWx1ZSAmJiB2YWx1ZSAhPT0gbm9WYWx1ZTtcblxuY29uc3QgcGFyc2VGaWxlbmFtZSA9IChmaWxlcGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IFtmaWxlbmFtZV0gPSBmaWxlcGF0aC5zcGxpdCgnLicpO1xuICBjb25zdCBleHQgPSB0ZXJtVHlwZXMuaW5jbHVkZXMoZmlsZW5hbWUgYXMgYW55KSA/IFN1cHBvcnRlZEV4dGVuc2lvbnMueGxzeCA6IFN1cHBvcnRlZEV4dGVuc2lvbnMuY3N2O1xuICByZXR1cm4gZmlsZVRvRXh0KGZpbGVuYW1lLCBleHQpO1xufTtcblxuY29uc3QgcGFyc2VMb29rdXAgPSAoeyBjb2x1bW4sIHRlcm1pZCwgW21pc3NpbmdMb29rdXBQcmVmaXhdOiBtaXNzaW5nTG9va3VwIH0pID0+ICh7XG4gIGZpbGVuYW1lOiBwYXJzZUZpbGVuYW1lKG1pc3NpbmdMb29rdXApLFxuICB0ZXJtSWQ6IHRlcm1pZCxcbiAgY29sdW1uXG59KTtcblxuY29uc3QgY3N2VmFsdWUgPSAodmFsdWU6IHN0cmluZykgPT4gKHZhbHVlIHx8ICcnKS5yZXBsYWNlKCdbJywgJycpLnJlcGxhY2UoJ10nLCAnJyk7XG5cbmNvbnN0IHBhcnNlTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShtZXNzYWdlKTtcbiAgICByZXR1cm4gZGF0YS5tZXNzYWdlLnNwbGl0KCcsJykucmVkdWNlKFxuICAgICAgKHByZXYsIHBhcnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhcnRzLnNwbGl0KCc9Jyk7XG4gICAgICAgIGNvbnN0IHZhbCA9IGNzdlZhbHVlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIC4uLihrZXkgJiYgdmFsID8geyBba2V5LnRyaW0oKV06IHZhbCB9IDoge30pXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgeyBsb2dnZXI6IGRhdGEubG9nZ2VyIH1cbiAgICApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBtYWtlIHN1cmUgaXQgd29ya3MgZXZlbiBpZiBvbmUgbG9nIGlzIG1hbGZvcm1lZFxuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuY29uc3QgcGFyc2VMb2dNdWx0aXBsZVZhbHVlID0gKHZhbHVlczogc3RyaW5nW11bXSkgPT5cbiAgdmFsdWVzXG4gICAgLm1hcCh2ID0+ICh2LmZpbHRlcihCb29sZWFuKS5sZW5ndGggPT09IDIgPyB2LmpvaW4oJzonKSA6IG51bGwpKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignXycpO1xuXG5jb25zdCBwYXJzZUxvZyA9IChsb2c6IGFueSkgPT5cbiAgWyd2YWx1ZScgaW4gbG9nLCAnY29lZmZpY2llbnQnIGluIGxvZywgJ25vZGUnIGluIGxvZyB8fCAnb3BlcmF0aW9uJyBpbiBsb2ddLmV2ZXJ5KEJvb2xlYW4pXG4gICAgPyB7XG4gICAgICAgIFtsb2cubm9kZSB8fCBsb2cub3BlcmF0aW9uXTogcGFyc2VMb2dNdWx0aXBsZVZhbHVlKFtcbiAgICAgICAgICBbJ3ZhbHVlJywgbG9nLnZhbHVlXSxcbiAgICAgICAgICBbJ2NvZWZmaWNpZW50JywgbG9nLmNvZWZmaWNpZW50XSxcbiAgICAgICAgICBbJ29wZXJhdGlvbicsICFsb2cubm9kZSA/IGxvZy5vcGVyYXRpb24gOiBudWxsXVxuICAgICAgICBdKVxuICAgICAgfVxuICAgIDogb21pdExvZ0tleXMobG9nKTtcblxuY29uc3Qgb21pdExvZ0tleXMgPSAobG9nOiBhbnksIC4uLmtleXM6IHN0cmluZ1tdKSA9PlxuICBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobG9nKS5maWx0ZXIoKFtrZXldKSA9PiAhc2NoZW1hVHlwZXNMb3dlckNhc2UuaW5jbHVkZXMoa2V5KSAmJiAha2V5cy5pbmNsdWRlcyhrZXkpKSk7XG5cbmNvbnN0IGluY2x1ZGVCbGFua05vZGVzID0gKGxvZ3MsIGxvZykgPT5cbiAgT2JqZWN0LmtleXMobG9nKVxuICAgIC5maWx0ZXIoa2V5ID0+IGJsYW5rTm9kZVR5cGVzTG93ZXJDYXNlLmluY2x1ZGVzKGtleSkpXG4gICAgLnJlZHVjZShcbiAgICAgIChwcmV2LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtrZXldOiB1bmlxdWUoWy4uLigodHlwZW9mIHByZXZba2V5XSA9PT0gJ3N0cmluZycgPyBbcHJldltrZXldXSA6IHByZXZba2V5XSkgfHwgW10pLCBsb2dba2V5XV0pXG4gICAgICB9KSxcbiAgICAgIGxvZ3NcbiAgICApO1xuXG5jb25zdCBncm91cExvZyA9IChcbiAgZ3JvdXAsXG4gIHsgbG9nZ2VyLCB0ZXJtLCBtb2RlbCwga2V5LCBzaG91bGRfcnVuLCBzaG91bGRfbWVyZ2UsIHJ1bl9yZXF1aXJlZCwgcHJvcGVydHksIC4uLmxvZyB9OiBhbnlcbikgPT4ge1xuICBjb25zdCBpc09yY2hlc3RyYXRvciA9IGxvZ2dlci5pbmNsdWRlcygnb3JjaGVzdHJhdG9yJyk7XG4gIGNvbnN0IGlzS2V5ID0gIWlzT3JjaGVzdHJhdG9yICYmICEha2V5O1xuICBjb25zdCBpc1Byb3BlcnR5ID0gIWlzT3JjaGVzdHJhdG9yICYmICEhcHJvcGVydHk7XG4gIGNvbnN0IHBhcmVudExvZ0tleSA9IFtoYXNWYWx1ZSh0ZXJtKSAmJiBgW1wiJHt0ZXJtfVwiXWAsICghaXNPcmNoZXN0cmF0b3IgJiYga2V5KSB8fCBwcm9wZXJ0eV1cbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmpvaW4oJy4nKTtcbiAgY29uc3QgbG9nTW9kZWxLZXkgPSBbcGFyZW50TG9nS2V5LCBoYXNWYWx1ZShtb2RlbCkgJiYgbW9kZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG5cbiAgc2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9Lm1vZGVsc2AsIHVuaXF1ZShbLi4uZ2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9Lm1vZGVsc2AsIFtdKSwgbW9kZWxdKSk7XG4gIHNldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5pc0tleWAsIGlzS2V5KTtcbiAgc2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9LmlzUHJvcGVydHlgLCBpc1Byb3BlcnR5KTtcblxuICBsZXQgZGF0YSA9IGdldChncm91cCwgbG9nTW9kZWxLZXksIHt9KTtcblxuICBkYXRhID0gaW5jbHVkZUJsYW5rTm9kZXMoZGF0YSwgbG9nKTtcblxuICBpZiAodHlwZW9mIHNob3VsZF9ydW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3Qgc2hvdWxkUnVuID0gc2hvdWxkX3J1biA9PT0gJ1RydWUnO1xuXG4gICAgZGF0YSA9IGlzT3JjaGVzdHJhdG9yXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIC4uLm9taXRMb2dLZXlzKGxvZywgJ3ZhbHVlJyksXG4gICAgICAgICAgc2hvdWxkUnVuT3JjaGVzdHJhdG9yOiBzaG91bGRSdW5cbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAuLi5vbWl0TG9nS2V5cyhsb2cpLFxuICAgICAgICAgIHNob3VsZFJ1blxuICAgICAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBydW5fcmVxdWlyZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgcnVuUmVxdWlyZWQgPSBydW5fcmVxdWlyZWQgPT09ICdUcnVlJztcblxuICAgIGRhdGEgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgLi4uKHJ1blJlcXVpcmVkID8ge30gOiBvbWl0TG9nS2V5cyhsb2cpKSwgLy8gbm8gbmVlZCB0byBzYXZlIGxvZ3MgaWYgd2UgbmVlZCB0byBydW4gdGhlIG1vZGVsXG4gICAgICBydW5SZXF1aXJlZFxuICAgIH07XG4gIH0gZWxzZSBpZiAoJ3JlcXVpcmVtZW50cycgaW4gbG9nKSB7XG4gICAgY29uc3QgeyByZXF1aXJlbWVudHMsIC4uLmxvZ0RhdGEgfSA9IGxvZztcblxuICAgIGRhdGEucmVxdWlyZW1lbnRzID0ge1xuICAgICAgLi4uKGRhdGEucmVxdWlyZW1lbnRzIHx8IHt9KSxcbiAgICAgIC4uLmxvZ0RhdGFcbiAgICB9O1xuICB9IGVsc2UgaWYgKG1pc3NpbmdMb29rdXBQcmVmaXggaW4gbG9nKSB7XG4gICAgZGF0YS5taXNzaW5nTG9va3VwcyA9IHVuaXF1ZShbLi4uKGRhdGEubWlzc2luZ0xvb2t1cHMgfHwgW10pLCBwYXJzZUxvb2t1cChsb2cpXSk7XG4gIH0gZWxzZSBpZiAoIWlzT3JjaGVzdHJhdG9yKSB7XG4gICAgZGF0YS5sb2dzID0ge1xuICAgICAgLi4uKGRhdGEubG9ncyB8fCB7fSksXG4gICAgICAuLi5wYXJzZUxvZyhsb2cpXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZW9mIHNob3VsZF9tZXJnZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkYXRhLnNob3VsZE1lcmdlID0gc2hvdWxkX21lcmdlID09PSAnVHJ1ZSc7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2cucmVwbGFjZUxvd2VyVGllciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkYXRhLnJlcGxhY2VMb3dlclRpZXIgPSBsb2cucmVwbGFjZUxvd2VyVGllciA9PT0gJ1RydWUnO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nLnJlcGxhY2VUaHJlc2hvbGQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGF0YS5yZXBsYWNlVGhyZXNob2xkID0gbG9nLnJlcGxhY2VUaHJlc2hvbGQgPT09ICdUcnVlJztcbiAgfVxuXG4gIHNldChncm91cCwgbG9nTW9kZWxLZXksIGRhdGEpO1xuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5jb25zdCBncm91cExvZ1N1YlZhbHVlID0gKGdyb3VwLCBsb2csIGtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGlkID0gbG9nW2tleV07XG4gIGNvbnN0IGRhdGEgPSBncm91cExvZyhncm91cFtpZF0gfHwge30sIGxvZyk7XG4gIGdyb3VwW2lkXSA9IGRhdGE7XG5cbiAgaWYgKGtleSA9PT0gJ3RyYW5zZm9ybWF0aW9uJykge1xuICAgIC8vIGFkZCB2YWx1ZSB0byB0aGUgc2FtZSB0ZXJtL21vZGVsIG9uIHBhcmVudCBncm91cFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwW2lkXSkubWFwKChbdGVybSwgbW9kZWxzXSkgPT5cbiAgICAgIE9iamVjdC5rZXlzKG1vZGVscykubWFwKG1vZGVsID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBncm91cD8uW3Rlcm1dPy5bbW9kZWxdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGdyb3VwW3Rlcm1dW21vZGVsXVtrZXldID0gdW5pcXVlKFsuLi4oZ3JvdXBbdGVybV1bbW9kZWxdW2tleV0gfHwgW10pLCBpZF0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5jb25zdCBzdWJWYWx1ZUtleXMgPSBbJ3RyYW5zZm9ybWF0aW9uJ107XG5cbmV4cG9ydCBjb25zdCBncm91cExvZ3NCeU1vZGVsID0gKGRhdGE6IHN0cmluZyk6IElOb2RlTG9ncyA9PlxuICBkYXRhXG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKHBhcnNlTWVzc2FnZSlcbiAgICAuZmlsdGVyKHYgPT4gW2hhc1ZhbHVlKHY/Lm1vZGVsKSwgaGFzVmFsdWUodj8udGVybSkgfHwgaGFzVmFsdWUodj8ua2V5KV0uZXZlcnkoQm9vbGVhbikpXG4gICAgLnJlZHVjZSgoZ3JvdXAsIGxvZykgPT4ge1xuICAgICAgY29uc3Qgc3ViVmFsdWUgPSBzdWJWYWx1ZUtleXMuZmluZCh2ID0+ICEhbG9nW3ZdKTtcbiAgICAgIHJldHVybiBzdWJWYWx1ZVxuICAgICAgICA/IHN1YlZhbHVlID09PSAndHJhbnNmb3JtYXRpb24nXG4gICAgICAgICAgPyAvLyBmb3IgdHJhbnNmb3JtYXRpb24sIGRvIG5vdCBhZGQgdG8gdG9wLWxldmVsIG1vZGVsXG4gICAgICAgICAgICBncm91cExvZ1N1YlZhbHVlKGdyb3VwLCBsb2csIHN1YlZhbHVlKVxuICAgICAgICAgIDogZ3JvdXBMb2coZ3JvdXBMb2dTdWJWYWx1ZShncm91cCwgbG9nLCBzdWJWYWx1ZSksIGxvZylcbiAgICAgICAgOiBncm91cExvZyhncm91cCwgbG9nKTtcbiAgICB9LCB7fSk7XG5cbmNvbnN0IGFzQXJyYXkgPSAodmFsdWVzOiBhbnlbXSkgPT4gKEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcyA6IFtdKTtcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVUZXJtcyA9IChcbiAgb3JpZ2luYWxWYWx1ZXM6IGJsYW5rTm9kZVtdLFxuICByZWNhbGN1bGF0ZWRWYWx1ZXM6IGJsYW5rTm9kZVtdLFxuICB0ZXJtcz86IElUZXJtSlNPTkxEW10sXG4gIGZpbHRlclRlcm1UeXBlcz86IFRlcm1UZXJtVHlwZVtdLFxuICBleHRyYVRlcm1zOiBJVGVybUpTT05MRFtdID0gW11cbik6IFByb21pc2U8SVRlcm1KU09OTERbXT4gPT5cbiAgZnJvbShbXG4gICAgLi4uKHRlcm1zPy5sZW5ndGhcbiAgICAgID8gdGVybXNcbiAgICAgIDogW1xuICAgICAgICAgIC4uLmFzQXJyYXkob3JpZ2luYWxWYWx1ZXMpLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0pLFxuICAgICAgICAgIC4uLmFzQXJyYXkocmVjYWxjdWxhdGVkVmFsdWVzKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKVxuICAgICAgICBdLmZpbHRlcihub2RlID0+ICFmaWx0ZXJUZXJtVHlwZXM/Lmxlbmd0aCB8fCBmaWx0ZXJUZXJtVHlwZXMuaW5jbHVkZXMobm9kZS50ZXJtVHlwZSkpKSxcbiAgICAuLi5leHRyYVRlcm1zXG4gIF0pXG4gICAgLnBpcGUoXG4gICAgICBkaXN0aW5jdCh2ID0+IHYhWydAaWQnXSksXG4gICAgICB0b0FycmF5KCksXG4gICAgICBtYXAodiA9PiBvcmRlckJ5KHYsIFsnbmFtZSddLCBbJ2FzYyddKSlcbiAgICApXG4gICAgLnRvUHJvbWlzZSgpO1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZUtleXMgPSAob3JpZ2luYWxWYWx1ZXM6IG5vbkJsYW5rTm9kZSwgcmVjYWxjdWxhdGVkVmFsdWVzOiBub25CbGFua05vZGUpID0+XG4gIHVuaXF1ZShbLi4uT2JqZWN0LmtleXMob3JpZ2luYWxWYWx1ZXMgfHwge30pLCAuLi5PYmplY3Qua2V5cyhyZWNhbGN1bGF0ZWRWYWx1ZXMgfHwge30pXS5maWx0ZXIoaXNWYWxpZEtleSkpO1xuXG5leHBvcnQgdHlwZSBibGFua05vZGUgPSBFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dCB8IFByb3BlcnR5IHwgUHJhY3RpY2UgfCBJbmRpY2F0b3IgfCBNZWFzdXJlbWVudDtcbmV4cG9ydCB0eXBlIG5vbkJsYW5rTm9kZSA9IENvbXBsZXRlbmVzcztcblxuZXhwb3J0IGVudW0gTG9nU3RhdHVzIHtcbiAgc3VjY2VzcyA9ICdzdWNjZXNzZnVsJyxcbiAgZXJyb3IgPSAnZmFpbGVkJyxcbiAgc2tpcEhpZXJhcmNoeSA9ICdub3QgcnVuIChtb2RlbCBoaWdoZXIgdXAgaGllcmFyY2h5IHJ1biBpbnN0ZWFkKScsXG4gIGRhdGFQcm92aWRlZCA9ICdub3QgcnVuICh1c2VyIHByb3ZpZGVkIGRhdGEgcmV0YWluZWQpJyxcbiAgbm90UmVxdWlyZWQgPSAnbm90IHJlbGV2YW50J1xufVxuXG5jb25zdCBoYXNMb2dzID0gKGxvZ3M/OiBJTm9kZVRlcm1Mb2cpID0+ICEhbG9ncz8ucmVxdWlyZW1lbnRzIHx8ICEhbG9ncz8ubG9ncyB8fCBsb2dzPy5taXNzaW5nTG9va3Vwcz8ubGVuZ3RoID4gMDtcblxuY29uc3QgaGFzTG9nRGV0YWlscyA9IChzdGF0dXM6IExvZ1N0YXR1cywgbG9ncz86IElOb2RlVGVybUxvZykgPT5cbiAgW0xvZ1N0YXR1cy5zdWNjZXNzLCBMb2dTdGF0dXMuZXJyb3IsIExvZ1N0YXR1cy5kYXRhUHJvdmlkZWRdLmluY2x1ZGVzKHN0YXR1cykgJiYgaGFzTG9ncyhsb2dzKTtcblxuY29uc3QgbG9nU3RhdHVzID0gKFxuICBkYXRhOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUgfCBJQmxhbmtOb2RlTG9nIHwgSU5vbkJsYW5rTm9kZUxvZyxcbiAgbG9ncz86IElOb2RlVGVybUxvZyxcbiAgaGFzUHJldmlvdXNTdWNjZXNzID0gZmFsc2VcbikgPT4ge1xuICBjb25zdCB3aXRoTG9ncyA9IGhhc0xvZyhsb2dzKTtcbiAgY29uc3QgaXNDYWxjdWxhdGVkID0gW1xuICAgIHR5cGVvZiBkYXRhLm9yaWdpbmFsVmFsdWUgPT09ICd1bmRlZmluZWQnLCAvLyBubyBvcmlnaW5hbCB2YWx1ZVxuICAgIGRhdGEuaXNSZWNhbGN1bGF0ZWQgLy8gaXMgcmVjYWxjdWxhdGVkXG4gIF0uZXZlcnkoQm9vbGVhbik7XG4gIC8vIGNhbiBiZSBub3QgcmVxdWlyZWQgZm9yIGEgc3BlY2lmaWMgbW9kZWxcbiAgY29uc3QgaXNSZXF1aXJlZCA9ICEhbG9ncyAmJiAncnVuUmVxdWlyZWQnIGluIGxvZ3MgPyBsb2dzLnJ1blJlcXVpcmVkIDogZGF0YS5pc1JlcXVpcmVkO1xuICByZXR1cm4gd2l0aExvZ3NcbiAgICA/ICFpc1JlcXVpcmVkXG4gICAgICA/IExvZ1N0YXR1cy5ub3RSZXF1aXJlZFxuICAgICAgOiBpc1J1bk9yY2hlc3RyYXRvcihsb2dzKVxuICAgICAgPyAnc2hvdWxkUnVuJyBpbiBsb2dzXG4gICAgICAgID8gbG9ncy5zaG91bGRSdW5cbiAgICAgICAgICA/IGRhdGEuaXNSZWNhbGN1bGF0ZWRcbiAgICAgICAgICAgID8gTG9nU3RhdHVzLnN1Y2Nlc3NcbiAgICAgICAgICAgIDogaXNFbXB0eShkYXRhLm9yaWdpbmFsVmFsdWUpXG4gICAgICAgICAgICA/IExvZ1N0YXR1cy5lcnJvclxuICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgICAgICAgOiBoYXNQcmV2aW91c1N1Y2Nlc3NcbiAgICAgICAgICA/IExvZ1N0YXR1cy5za2lwSGllcmFyY2h5XG4gICAgICAgICAgOiBMb2dTdGF0dXMuZXJyb3JcbiAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgICA6IGRhdGEuaXNSZWNhbGN1bGF0ZWRcbiAgICAgID8gTG9nU3RhdHVzLnNraXBIaWVyYXJjaHlcbiAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgIDogaXNDYWxjdWxhdGVkXG4gICAgPyBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmZpZ01vZGVsIHtcbiAgbWV0aG9kSWQ6IHN0cmluZztcbiAgbG9ncz86IElOb2RlVGVybUxvZztcbiAgc2hvd0xvZ3M/OiBib29sZWFuO1xuICBzdGF0dXM/OiBMb2dTdGF0dXM7XG4gIG1vZGVsPzogSU1vZGVsO1xuICBjb25maWc/OiBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHtcbiAgYmxhbmtOb2RlOiB0cnVlO1xuICBrZXk6IHN0cmluZztcbiAgc2hvd1VuaXRzOiBib29sZWFuO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpZD86IHN0cmluZztcbiAgY29uZmlnTW9kZWxzPzogSUNvbmZpZ01vZGVsW107XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMb2cge1xuICBsb2dzPzogSU5vZGVUZXJtTG9ncztcbiAgaXNPcGVuOiBib29sZWFuO1xuICBjYW5PcGVuOiBib29sZWFuO1xuICB0eXBlPzogU2NoZW1hVHlwZTtcbiAgY29uZmlnTW9kZWxzOiAoSUNvbmZpZ01vZGVsIHwgSUNvbmZpZ01vZGVsW10pW107XG4gIG9yaWdpbmFsVmFsdWU6IG51bWJlciB8IGJvb2xlYW47XG4gIHJlY2FsY3VsYXRlZFZhbHVlOiBudW1iZXIgfCBib29sZWFuO1xuICBpc09yaWdpbmFsOiBib29sZWFuO1xuICBpc1JlY2FsY3VsYXRlZDogYm9vbGVhbjtcbiAgaGFzRGF0YTogYm9vbGVhbjtcbiAgaXNSZXF1aXJlZDogYm9vbGVhbjtcbiAgLy8gY29udGFpbnMgbXVsdGlwbGUgbW9kZWxzIGFsbCBydW5uaW5nIGluIHBhcmFsbGVsXG4gIGFsbFBhcmFsbGVsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmxhbmtOb2RlTG9nIGV4dGVuZHMgSUxvZyB7XG4gIGJsYW5rTm9kZTogdHJ1ZTtcbiAgdGVybTogSVRlcm1KU09OTEQ7XG4gIHRlcm1JZDogc3RyaW5nO1xuICBrZXlzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgLy8gbW9kZWxzIGFyZSBwcmVzZW50IGFzIHdlbGwgaW4gb25lIG9mIHRoZSBTdWJWYWx1ZXMsIGRvIG5vdCBzaG93IHR3aWNlXG4gIG1vZGVsc0luU3ViVmFsdWVzPzogYm9vbGVhbjtcbiAgb3JpZ2luYWw6IGJsYW5rTm9kZVtdO1xuICAvLyB3aGVuIG11bHRpcGxlIG1vZGVscyBhcmUgcnVubmluZyBpbiBwYXJhbGxlbFxuICBvcmlnaW5hbFZhbHVlQnlNZXRob2RJZD86IHtcbiAgICBbbWV0aG9kSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcbiAgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXTtcbiAgLy8gd2hlbiBtdWx0aXBsZSBtb2RlbHMgYXJlIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgcmVjYWxjdWxhdGVkVmFsdWVCeU1ldGhvZElkPzoge1xuICAgIFttZXRob2RJZDogc3RyaW5nXTogbnVtYmVyO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb25CbGFua05vZGVMb2cgZXh0ZW5kcyBJTG9nIHtcbiAgYmxhbmtOb2RlOiBmYWxzZTtcbiAga2V5OiBzdHJpbmc7XG59XG5cbmNvbnN0IHJlbW92ZUNvbmZpZ01vZGVsQnlTdGF0dXMgPVxuICAoLi4uc3RhdHVzZXM6IExvZ1N0YXR1c1tdKSA9PlxuICAobW9kZWw6IElDb25maWdNb2RlbCkgPT5cbiAgICAhc3RhdHVzZXMuaW5jbHVkZXMobW9kZWw/LnN0YXR1cyk7XG5cbmNvbnN0IGtlZXBDb25maWdNb2RlbEJ5U3RhdHVzID1cbiAgKC4uLnN0YXR1c2VzOiBMb2dTdGF0dXNbXSkgPT5cbiAgKG1vZGVsOiBJQ29uZmlnTW9kZWwpID0+XG4gICAgc3RhdHVzZXMuaW5jbHVkZXMobW9kZWw/LnN0YXR1cyk7XG5cbmNvbnN0IGZpbHRlckNvbmZpZ01vZGVscyA9IChcbiAgbW9kZWxzOiBJQ29uZmlnTW9kZWwgfCAoSUNvbmZpZ01vZGVsIHwgSUNvbmZpZ01vZGVsW10pW10sXG4gIGZpbHRlckZ1bmM6IChtb2RlbDogSUNvbmZpZ01vZGVsKSA9PiBib29sZWFuXG4pID0+XG4gIChBcnJheS5pc0FycmF5KG1vZGVscykgPyBtb2RlbHMgOiBbbW9kZWxzXSlcbiAgICAuZmlsdGVyKHYgPT4gQXJyYXkuaXNBcnJheSh2KSB8fCBmaWx0ZXJGdW5jKHYpKVxuICAgIC5tYXAodiA9PiAoQXJyYXkuaXNBcnJheSh2KSA/IHYuZmlsdGVyKGZpbHRlckZ1bmMpIDogdikpXG4gICAgLmZpbHRlcih2ID0+IChBcnJheS5pc0FycmF5KHYpID8gdj8ubGVuZ3RoIDogISF2KSk7XG5cbmNvbnN0IG1lcmdlU3ViVmFsdWVzID0gKHZhbHVlczogYW55W10pOiBhbnlbXSA9PlxuICBPYmplY3QudmFsdWVzKFxuICAgIHZhbHVlcy5yZWR1Y2UoKHByZXYsIHsgaWQsIGtleSwgY29uZmlnTW9kZWxzLCAuLi5kYXRhIH0pID0+IHtcbiAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IFtrZXksIGlkXS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuICAgICAgcHJldlt1bmlxdWVLZXldID0ge1xuICAgICAgICAuLi5PYmplY3QuYXNzaWduKHt9LCBwcmV2W3VuaXF1ZUtleV0sIGRhdGEpLFxuICAgICAgICBpZCxcbiAgICAgICAga2V5LFxuICAgICAgICBjb25maWdNb2RlbHM6IHVuaXF1ZShbLi4uKChwcmV2W3VuaXF1ZUtleV0gfHwge30pLmNvbmZpZ01vZGVscyB8fCBbXSksIC4uLihjb25maWdNb2RlbHMgfHwgW10pXSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSlcbiAgKTtcblxuY29uc3QgcmVkdWNlVmFsdWVzID0gKHZhbHVlczogYW55W10sIHRlcm1JZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzID0gdmFsdWVzXG4gICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiBwcm9wZXJ0eVZhbHVlKHZhbHVlLCB0ZXJtSWQpKVxuICAgIC8vIHByb3BlcnR5VmFsdWUgbWF5IHJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gdG90YWxcbiAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG4gIHJldHVybiBwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LCAwKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGlzUnVuT3JjaGVzdHJhdG9yID0gKGxvZzogSU5vZGVUZXJtTG9nKSA9PiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcblxuY29uc3QgaGFzTG9nID0gKGxvZzogSU5vZGVUZXJtTG9nLCB3aXRoT3JjaGVzdHJhdG9yID0gdHJ1ZSkgPT5cbiAgISFsb2cgJiYgKCdzaG91bGRSdW4nIGluIGxvZyB8fCAncnVuUmVxdWlyZWQnIGluIGxvZyB8fCAod2l0aE9yY2hlc3RyYXRvciAmJiAnc2hvdWxkUnVuT3JjaGVzdHJhdG9yJyBpbiBsb2cpKTtcblxuY29uc3QgaXNSZWNhbGN1bGF0ZWQgPSAoa2V5OiBzdHJpbmcpID0+ICh2YWx1ZTogYmxhbmtOb2RlIHwgbm9uQmxhbmtOb2RlKSA9PlxuICBbLi4uKHZhbHVlLmFkZGVkIHx8IFtdKSwgLi4uKHZhbHVlLnVwZGF0ZWQgfHwgW10pXS5pbmNsdWRlcyhrZXkpO1xuXG5jb25zdCBoYXNSZWNhbGN1bGF0ZWRLZXlzID0gKHZhbHVlOiBibGFua05vZGUgfCBub25CbGFua05vZGUpID0+XG4gIFsuLi4odmFsdWUuYWRkZWQgfHwgW10pLCAuLi4odmFsdWUudXBkYXRlZCB8fCBbXSldLmxlbmd0aCA+IDA7XG5cbmNvbnN0IGhhc1JlY2FsY3VsYXRlZFZhbHVlID0gKHZhbHVlczogYmxhbmtOb2RlW10sIGtleSA9ICd2YWx1ZScpID0+IHZhbHVlcy5zb21lKGlzUmVjYWxjdWxhdGVkKGtleSkpO1xuXG5jb25zdCBmaWx0ZXJEZWxldGVkID0gKGJsYW5rTm9kZXM6IGJsYW5rTm9kZVtdKSA9PiAoYmxhbmtOb2RlcyB8fCBbXSkuZmlsdGVyKHZhbHVlID0+ICEodmFsdWUgYXMgYW55KS5kZWxldGVkKTtcblxuY29uc3QgYmxhbmtOb2RlVmFsdWVCeUtleToge1xuICBba2V5OiBzdHJpbmddOiAodmFsdWVzOiBibGFua05vZGVbXSwga2V5Pzogc3RyaW5nLCBpZD86IHN0cmluZykgPT4gbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbn0gPSB7XG4gIHByb3BlcnR5OiAodmFsdWVzOiAoRW1pc3Npb24gfCBQcm9kdWN0IHwgSGVzdGlhSW5wdXQpW10sIF9rLCBpZCkgPT5cbiAgICAhIWlkICYmIHZhbHVlcz8ubGVuZ3RoID8gKHZhbHVlc1swXS5wcm9wZXJ0aWVzIHx8IFtdKS5maW5kKHAgPT4gcC50ZXJtWydAaWQnXSA9PT0gaWQpPy52YWx1ZSB8fCAnJyA6ICcnLFxuICBpbnB1dDogKHZhbHVlczogRW1pc3Npb25bXSwgX2ssIGlkKSA9PlxuICAgICEhaWQgJiYgKHZhbHVlcyB8fCBbXSkuZmlsdGVyKHYgPT4gdlsnQHR5cGUnXSA9PT0gU2NoZW1hVHlwZS5FbWlzc2lvbikubGVuZ3RoXG4gICAgICA/IHByb3BlcnR5VmFsdWUodmFsdWVzLmZpbmQoKHsgaW5wdXRzIH0pID0+IChpbnB1dHMgfHwgW10pLnNvbWUoaW5wdXQgPT4gaW5wdXRbJ0BpZCddID09PSBpZCkpPy52YWx1ZSwgaWQpXG4gICAgICA6ICcnLFxuICB0cmFuc2Zvcm1hdGlvbjogKHZhbHVlczogRW1pc3Npb25bXSwgX2ssIGlkKSA9PlxuICAgIHZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlKHZhbHVlcy5maW5kKCh7IHRyYW5zZm9ybWF0aW9uIH0pID0+IHRyYW5zZm9ybWF0aW9uPy5bJ0BpZCddID09PSBpZCk/LnZhbHVlLCBpZCkgOiAnJyxcbiAgZGVmYXVsdDogKGJsYW5rTm9kZXMsIGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYmxhbmtOb2Rlcz8ubGVuZ3RoID8gYmxhbmtOb2Rlc1swXVtrZXldIDogbnVsbDtcbiAgICByZXR1cm4gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAndW5kZWZpbmVkJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKVxuICAgICAgPyBpc1VuZGVmaW5lZCh2YWx1ZSlcbiAgICAgICAgPyAnJ1xuICAgICAgICA6IHZhbHVlXG4gICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICA/IHZhbHVlLmxlbmd0aCA+IDFcbiAgICAgICAgPyB2YWx1ZS5qb2luKCc7JylcbiAgICAgICAgOiB2YWx1ZVswXVxuICAgICAgOiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBibGFua05vZGVWYWx1ZSA9IChibGFua05vZGVzOiBibGFua05vZGVbXSwga2V5OiBzdHJpbmcsIGlkPzogc3RyaW5nKSA9PlxuICBibGFua05vZGVWYWx1ZUJ5S2V5W2tleSBpbiBibGFua05vZGVWYWx1ZUJ5S2V5ID8ga2V5IDogJ2RlZmF1bHQnXShibGFua05vZGVzLCBrZXksIGlkKTtcblxuY29uc3Qgc3ViVmFsdWVMb2dLZXkgPSAoeyBrZXksIGlkIH06IElCbGFua05vZGVMb2dTdWJWYWx1ZSk6IHN0cmluZyA9PlxuICBrZXkgPT09ICd0cmFuc2Zvcm1hdGlvbicgPyBrZXkgOiBpZCB8fCBrZXkgfHwgbnVsbDtcblxuY29uc3QgaW5wdXRWYWx1ZSA9ICh7IHZhbHVlLCBjb2VmZmljaWVudCB9OiBhbnkgPSB7fSkgPT5cbiAgW3ZhbHVlLCBjb2VmZmljaWVudF0uZXZlcnkoaXNOdW1iZXIpID8gK3ZhbHVlICogK2NvZWZmaWNpZW50IDogdW5kZWZpbmVkO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3RyaW5nLCBzaG93VW5pdHMgPSBmYWxzZSkgPT4ge1xuICBjb25zdCBsb2cgPSBsb2dzW2tleV0/Lltwcm9wXTtcbiAgcmV0dXJuIGxvZ1xuICAgID8gQXJyYXkuaXNBcnJheShsb2cpXG4gICAgICA/IChsb2cgYXMgc3RyaW5nW10pLm1hcChcbiAgICAgICAgICBpZCA9PlxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAga2V5OiBwcm9wLFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgc2hvd1VuaXRzXG4gICAgICAgICAgICAgIC8vIHJlY2FsY3VsYXRlZFZhbHVlOiBpbnB1dFZhbHVlKGxvZ3Nba2V5XT8ubG9ncz8uW2lkXSlcbiAgICAgICAgICAgIH0pIGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZVxuICAgICAgICApXG4gICAgICA6ICh7XG4gICAgICAgICAga2V5OiBwcm9wLFxuICAgICAgICAgIGlkOiBsb2csXG4gICAgICAgICAgc2hvd1VuaXRzXG4gICAgICAgICAgLy8gcmVjYWxjdWxhdGVkVmFsdWU6IGlucHV0VmFsdWUobG9nc1trZXldPy5sb2dzPy5bbG9nXSlcbiAgICAgICAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpXG4gICAgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBsb2dQcm9wZXJ0aWVzID0gKG5vZGVzOiBibGFua05vZGVbXSwgbW9kZWxzOiBJTW9kZWxbXSkgPT5cbiAgbm9kZXNcbiAgICAuZmxhdE1hcChub2RlID0+ICgobm9kZSBhcyBhbnkpLnByb3BlcnRpZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm1bJ0BpZCddKSlcbiAgICAubWFwKGlkID0+ICh7XG4gICAgICBrZXk6ICdwcm9wZXJ0eScsXG4gICAgICBpZCxcbiAgICAgIHNob3dVbml0czogZmFsc2UsXG4gICAgICBjb25maWdNb2RlbHM6IGZpbmRNb2RlbHMobW9kZWxzLCBpZCkubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsKVxuICAgIH0pKTtcblxuLyoqXG4gKiBJbmNsdWRlIHRyYW5zZm9ybWF0aW9uIG1vZGVsIChjb3B5IEVtaXNzaW9ucyBmcm9tIFRyYW5zZm9ybWF0aW9uIHRvIEN5Y2xlKSBhcyBzdWJWYWx1ZS5cbiAqXG4gKiBAcGFyYW0gZW1pc3Npb25zXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBsb2dFbWlzc2lvblRyYW5zZm9ybWF0aW9ucyA9IChlbWlzc2lvbnM6IEVtaXNzaW9uW10pID0+XG4gIGVtaXNzaW9uc1xuICAgIC5maWx0ZXIoKHsgdHJhbnNmb3JtYXRpb24gfSkgPT4gISF0cmFuc2Zvcm1hdGlvbj8uWydAaWQnXSlcbiAgICAubWFwKCh7IHRyYW5zZm9ybWF0aW9uIH0pID0+ICh7XG4gICAgICBpZDogdHJhbnNmb3JtYXRpb24/LlsnQGlkJ10sXG4gICAgICBrZXk6ICd0cmFuc2Zvcm1hdGlvbicsXG4gICAgICBzaG93VW5pdHM6IHRydWUsXG4gICAgICBjb25maWdNb2RlbHM6IFsnY3ljbGUvdHJhbnNmb3JtYXRpb24nXVxuICAgIH0pKTtcblxuY29uc3QgaW5jbHVkZUN5Y2xlU3ViVmFsdWUgPSAoc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXSkgPT4gc3ViVmFsdWVzLnNvbWUodiA9PiB2LmtleSAhPT0gJ3Byb3BlcnR5Jyk7XG5cbmNvbnN0IGN5Y2xlU3ViVmFsdWUgPSAoeyB0ZXJtSWQsIGNvbmZpZ01vZGVscywgaXNSZXF1aXJlZCwgc3ViVmFsdWVzLCBvcmlnaW5hbCwgcmVjYWxjdWxhdGVkIH06IElCbGFua05vZGVMb2cpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHJlZHVjZVZhbHVlcyhcbiAgICBvcmlnaW5hbC5maWx0ZXIoKHY6IGFueSkgPT4gIXYuaW5wdXRzPy5sZW5ndGggJiYgIXYudHJhbnNmb3JtYXRpb24pLFxuICAgIHRlcm1JZFxuICApO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZXMgPSByZWNhbGN1bGF0ZWQuZmlsdGVyKCh2OiBhbnkpID0+ICF2LmlucHV0cz8ubGVuZ3RoICYmICF2LnRyYW5zZm9ybWF0aW9uKTtcbiAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWUgPSByZWR1Y2VWYWx1ZXMocmVjYWxjdWxhdGVkVmFsdWVzLCB0ZXJtSWQpO1xuICByZXR1cm4gaW5jbHVkZUN5Y2xlU3ViVmFsdWUoc3ViVmFsdWVzKSAmJiAhaXNFbXB0eShyZWNhbGN1bGF0ZWRWYWx1ZSlcbiAgICA/ICh7XG4gICAgICAgIGJsYW5rTm9kZTogdHJ1ZSxcbiAgICAgICAga2V5OiAnY3ljbGUnLFxuICAgICAgICBzaG93VW5pdHM6IHRydWUsXG4gICAgICAgIGNvbmZpZ01vZGVscyxcbiAgICAgICAgaXNSZXF1aXJlZCxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgICAgIGlzUmVjYWxjdWxhdGVkOiBoYXNSZWNhbGN1bGF0ZWRWYWx1ZShyZWNhbGN1bGF0ZWRWYWx1ZXMpXG4gICAgICB9IGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSlcbiAgICA6IG51bGw7XG59O1xuXG5jb25zdCBsb2dTdWJWYWx1ZXMgPSAoXG4gIGFsbExvZ3M6IElOb2RlTG9ncyxcbiAgbG9nczogSU5vZGVUZXJtTG9ncyxcbiAgb3JpZ2luYWw6IGJsYW5rTm9kZVtdLFxuICByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdLFxuICBtb2RlbHM6IElNb2RlbFtdLFxuICB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfTogSUNvbmZpZ01vZGVsRG9jc0RhdGFcbikgPT5cbiAgbWVyZ2VTdWJWYWx1ZXMoW1xuICAgIC8vIGluY2x1ZGUgcHJvcGVydGllc1xuICAgIC4uLk9iamVjdC5rZXlzKGxvZ3MpXG4gICAgICAuZmlsdGVyKGlkID0+IGxvZ3NbaWRdLmlzUHJvcGVydHkpXG4gICAgICAubWFwKGlkID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBrZXk6ICdwcm9wZXJ0eScsXG4gICAgICAgIHNob3dVbml0czogZmFsc2UsXG4gICAgICAgIGNvbmZpZ01vZGVsczogKGxvZ3NbaWRdLm1vZGVscyB8fCBbXSkuZmlsdGVyKHYgPT4gaGFzTG9nKGxvZ3NbaWRdW3ZdKSlcbiAgICAgIH0pKSxcbiAgICAuLi4odHlwZSA9PT0gU2NoZW1hVHlwZS5FbWlzc2lvbiA/IGxvZ0VtaXNzaW9uVHJhbnNmb3JtYXRpb25zKHJlY2FsY3VsYXRlZCBhcyBFbWlzc2lvbltdKSA6IFtdKSxcbiAgICAuLi5PYmplY3Qua2V5cyhsb2dzKS5mbGF0TWFwKGtleSA9PlxuICAgICAgW2xvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ2lucHV0JywgdHJ1ZSksIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ3Byb3BlcnR5JyldXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAubWFwKHYgPT4gKHsgLi4udiwgY29uZmlnTW9kZWxzOiAodi5jb25maWdNb2RlbHMgYXMgYW55W10pIHx8IFtrZXldIH0pKVxuICAgICksXG4gICAgLi4ubG9nUHJvcGVydGllcyhvcmlnaW5hbCwgbW9kZWxzKSxcbiAgICAuLi5sb2dQcm9wZXJ0aWVzKHJlY2FsY3VsYXRlZCwgbW9kZWxzKVxuICBdKVxuICAgIC5tYXAoKHsga2V5LCBpZCwgc2hvd1VuaXRzLCBjb25maWdNb2RlbHMsIG9yaWdpbmFsVmFsdWUsIHJlY2FsY3VsYXRlZFZhbHVlIH0pID0+IHtcbiAgICAgIG9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlIHx8IGJsYW5rTm9kZVZhbHVlKG9yaWdpbmFsLCBrZXksIGlkKTtcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlID0gcmVjYWxjdWxhdGVkVmFsdWUgfHwgYmxhbmtOb2RlVmFsdWUocmVjYWxjdWxhdGVkLCBrZXksIGlkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJsYW5rTm9kZTogdHJ1ZSxcbiAgICAgICAga2V5LFxuICAgICAgICBpZCxcbiAgICAgICAgc2hvd1VuaXRzLFxuICAgICAgICBjb25maWdNb2RlbHM6IGNvbmZpZ01vZGVscy5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9LCB7IGtleSwgaWQgfSBhcyBhbnkpKSxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgICAgIGlzUmVjYWxjdWxhdGVkOiAhaXNVbmRlZmluZWQocmVjYWxjdWxhdGVkVmFsdWUpICYmIHJlY2FsY3VsYXRlZFZhbHVlICE9PSBvcmlnaW5hbFZhbHVlLFxuICAgICAgICBpc1JlcXVpcmVkOiB0cnVlXG4gICAgICB9IGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKHsgY29uZmlnTW9kZWxzLCBvcmlnaW5hbFZhbHVlLCByZWNhbGN1bGF0ZWRWYWx1ZSB9KSA9PlxuICAgICAgW2NvbmZpZ01vZGVscy5sZW5ndGggPiAwLCBvcmlnaW5hbFZhbHVlICE9PSAnJyB8fCByZWNhbGN1bGF0ZWRWYWx1ZSAhPT0gJyddLmV2ZXJ5KEJvb2xlYW4pXG4gICAgKVxuICAgIC5tYXAodiA9PiAodi5rZXkgPT09ICdpbnB1dCcgPyBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyhhbGxMb2dzKSh2KSA6IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKHYpKSk7XG5cbmNvbnN0IGxvZ0tleXMgPSAoXG4gIGxvZ3M6IElOb2RlVGVybUxvZ3MsXG4gIG9yaWdpbmFsOiBibGFua05vZGVbXSxcbiAgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXSxcbiAgbW9kZWxzOiBJTW9kZWxbXSxcbiAgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH1cbikgPT5cbiAgT2JqZWN0LmtleXMobG9ncylcbiAgICAuZmlsdGVyKGtleSA9PiBsb2dzW2tleV0uaXNLZXkgJiYga2V5ICE9PSAndHJhbnNmb3JtYXRpb24nKVxuICAgIC5tYXAoXG4gICAgICBrZXkgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICBibGFua05vZGU6IHRydWUsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHNob3dVbml0czogZmFsc2UsXG4gICAgICAgICAgY29uZmlnTW9kZWxzOiAobG9nc1trZXldLm1vZGVscyB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9LCB7IGtleSB9IGFzIGFueSkpXG4gICAgICAgICAgICAvLyBvbmx5IHRha2UgdGhvc2Ugd2UgZm91bmQgYSBtYXRjaGluZyBtb2RlbCAoYXZvaWQgbWF0Y2hpbmcga2V5IG9uIHdyb25nIG5vZGUgdHlwZSlcbiAgICAgICAgICAgIC5maWx0ZXIodiA9PiAhIXYubW9kZWwpLFxuICAgICAgICAgIG9yaWdpbmFsVmFsdWU6IGJsYW5rTm9kZVZhbHVlKG9yaWdpbmFsLCBrZXkpLFxuICAgICAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiBibGFua05vZGVWYWx1ZShyZWNhbGN1bGF0ZWQsIGtleSksXG4gICAgICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGhhc1JlY2FsY3VsYXRlZFZhbHVlKHJlY2FsY3VsYXRlZCwga2V5KSxcbiAgICAgICAgICBpc1JlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0pIGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZVxuICAgIClcbiAgICAuZmlsdGVyKHYgPT4gdi5jb25maWdNb2RlbHMubGVuZ3RoID4gMClcbiAgICAubWFwKGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKTtcblxuY29uc3QgaXNNb2RlbEZvcklucHV0UHJvZHVjdCA9ICh0eXBlOiBTY2hlbWFUeXBlLCBrZXk6IHN0cmluZykgPT5cbiAgW1xuICAgIGtleSAhPT0gJ2hlc3RpYUFnZ3JlZ2F0ZWREYXRhJyxcbiAgICAha2V5LmluY2x1ZGVzKCcvaW5wdXQvJykgfHwgdHlwZSA9PT0gU2NoZW1hVHlwZS5JbnB1dCxcbiAgICAha2V5LmluY2x1ZGVzKCcvcHJvZHVjdC8nKSB8fCB0eXBlID09PSBTY2hlbWFUeXBlLlByb2R1Y3RcbiAgXS5ldmVyeShCb29sZWFuKTtcblxuY29uc3QgaXNCYWNrZ3JvdW5kSW5wdXQgPSAobG9nOiBJTm9kZVRlcm1Mb2cpID0+XG4gIGxvZy5tZXRob2RUaWVyID09PSBFbWlzc2lvbk1ldGhvZFRpZXIuYmFja2dyb3VuZCAmJiAhIWxvZy5pbnB1dCAmJiBsb2cuc2hvdWxkUnVuO1xuXG5jb25zdCBpc01vZGVsTG9nID0gKGxvZ3M6IElOb2RlVGVybUxvZ3MsIHR5cGU6IFNjaGVtYVR5cGUpID0+IChrZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBsb2cgPSBsb2dzW2tleV07XG4gIHJldHVybiAoXG4gICAgISFsb2cgJiZcbiAgICBbXG4gICAgICAvLyBoYW5kbGUgUHJvZHVjdCBzYW1lIGFzIElucHV0XG4gICAgICBpc01vZGVsRm9ySW5wdXRQcm9kdWN0KHR5cGUsIGtleSksXG4gICAgICBsb2cubWV0aG9kVGllciAhPT0gRW1pc3Npb25NZXRob2RUaWVyLmJhY2tncm91bmQsXG4gICAgICAhbG9nLmlzS2V5LFxuICAgICAgLy8gIWxvZy5pbnB1dCxcbiAgICAgICFsb2cucHJvcGVydHlcbiAgICBdLmV2ZXJ5KEJvb2xlYW4pICYmXG4gICAgWydzaG91bGRSdW4nIGluIGxvZywgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nLCAncnVuUmVxdWlyZWQnIGluIGxvZ10uc29tZShCb29sZWFuKVxuICApO1xufTtcblxuY29uc3QgbW9kZWxDb25maWdNYXRjaCA9ICh0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWw6IHN0cmluZykgPT4gKGNvbmZpZzogSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnKSA9PlxuICBbdGVybUlkID09PSBjb25maWcudmFsdWUsIG1vZGVsS2V5ID09PSBjb25maWcua2V5LCBtb2RlbCA9PT0gY29uZmlnLm1vZGVsXS5ldmVyeShCb29sZWFuKTtcblxuY29uc3QgbW9kZWxDb25maWcgPSAoXG4gIG1vZGVsczogKElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZyB8IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdKVtdLFxuICB0ZXJtSWQ6IHN0cmluZyxcbiAgbW9kZWxLZXk6IHN0cmluZyxcbiAgbW9kZWw6IHN0cmluZ1xuKSA9PiBtb2RlbHMuZmxhdCgpLmZpbmQobW9kZWxDb25maWdNYXRjaCh0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbCkpO1xuXG5jb25zdCBtb2RlbENvbmZpZ09yZGVyID0gKFxuICBtb2RlbHM6IChJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcgfCBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWdbXSlbXSxcbiAgdGVybUlkOiBzdHJpbmcsXG4gIG1vZGVsS2V5OiBzdHJpbmcsXG4gIG1vZGVsOiBzdHJpbmdcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGluZGV4ZXMgPSBtb2RlbHNcbiAgICAubWFwKChtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlJbmRleCA9IEFycmF5LmlzQXJyYXkobSkgPyBtb2RlbENvbmZpZ09yZGVyKG0sIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKSA6ICcnO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobSlcbiAgICAgICAgPyBhcnJheUluZGV4XG4gICAgICAgICAgPyBbaW5kZXgsIGFycmF5SW5kZXhdLmpvaW4oJy4nKVxuICAgICAgICAgIDogJydcbiAgICAgICAgOiBtb2RlbENvbmZpZ01hdGNoKHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKShtKVxuICAgICAgICA/IGAke2luZGV4fWBcbiAgICAgICAgOiAnJztcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBpbmRleGVzLmxlbmd0aCA/IGluZGV4ZXNbMF0gOiAnJztcbn07XG5cbmludGVyZmFjZSBJQ29uZmlnTW9kZWxEb2NzRGF0YSB7XG4gIG5vZGVUeXBlOiBOb2RlVHlwZTtcbiAgdHlwZTogU2NoZW1hVHlwZTtcbiAgdGVybUlkPzogc3RyaW5nO1xuICB0ZXJtVHlwZT86IFRlcm1UZXJtVHlwZTtcbiAga2V5Pzogc3RyaW5nO1xufVxuXG5jb25zdCBjb25maWdNb2RlbFdpdGhEb2NzID1cbiAgKFxuICAgIG1vZGVsczogSU1vZGVsW10sXG4gICAgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkLCB0ZXJtVHlwZSwga2V5IH06IElDb25maWdNb2RlbERvY3NEYXRhLFxuICAgIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlXG4gICkgPT5cbiAgKG1ldGhvZElkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgJ0B0eXBlJzogbm9kZVR5cGUsXG4gICAgICB0ZXJtOiB7ICdAaWQnOiBzdWJWYWx1ZT8uaWQgfHwgdGVybUlkIH0sXG4gICAgICBtZXRob2RNb2RlbDogeyAnQGlkJzogbWV0aG9kSWQgfVxuICAgIH0gYXMgYW55O1xuICAgIHJldHVybiB7XG4gICAgICBtZXRob2RJZCxcbiAgICAgIG1vZGVsOlxuICAgICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsUGFyYW1zKG5vZGUpKSB8fFxuICAgICAgICAvLyBoYW5kbGUgXCJsaXZlQW5pbWFsXCJcbiAgICAgICAgKHRlcm1UeXBlICYmIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgdGVybVR5cGUpKSkgfHxcbiAgICAgICAgLy8gaGFuZGxlIFwiY29tcGxldGVuZXNzLmNyb3BSZXNpZHVlXCJcbiAgICAgICAgKGtleSAmJiBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke21ldGhvZElkfS4ke2tleX1gKSkpIHx8XG4gICAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7c3ViVmFsdWU/LmtleX0uJHttZXRob2RJZH1gKSkgfHxcbiAgICAgICAgLy8gaGFuZGxlIFwiaW5wdXQucHJpY2VcIlxuICAgICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke3R5cGU/LnRvTG93ZXJDYXNlKCl9LiR7c3ViVmFsdWU/LmtleX1gKSkgfHxcbiAgICAgICAgLy8gaGFuZGxlIFwiaW5wdXQuaGVzdGlhQWdncmVnYXRlZERhdGFcIlxuICAgICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke3R5cGU/LnRvTG93ZXJDYXNlKCl9LiR7bWV0aG9kSWR9YCkpIHx8XG4gICAgICAgIC8vIGhhbmRsZSBcInRyYW5zZm9ybWF0aW9uXCJcbiAgICAgICAgKHN1YlZhbHVlPy5rZXkgPyBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIHN1YlZhbHVlPy5rZXkpKSA6IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgLy8gaGFuZGxlIFwidHJhbnNmb3JtYXRpb24vaW5wdXQvZXhjcmV0YVwiIGFuZCBvdGhlciBtb2RlbHMgd2l0aCBcIi9cIlxuICAgICAgICAobWV0aG9kSWQuaW5jbHVkZXMoJy8nKVxuICAgICAgICAgID8gZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCB7XG4gICAgICAgICAgICAgIG1vZGVsOiBtZXRob2RJZC5zcGxpdCgnLycpWzBdLFxuICAgICAgICAgICAgICBtb2RlbEtleTogbWV0aG9kSWQuc3BsaXQoJy8nKS5zbGljZSgxKS5qb2luKCcuJylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB1bmRlZmluZWQpXG4gICAgfTtcbiAgfTtcblxuY29uc3QgY29uZmlnTW9kZWxXaXRoTG9ncyA9XG4gIChkYXRhOiBJQmxhbmtOb2RlTG9nIHwgSU5vbkJsYW5rTm9kZUxvZyB8IElCbGFua05vZGVMb2dTdWJWYWx1ZSwgbG9nczogSU5vZGVUZXJtTG9ncywgcHJldmlvdXNNb2RlbFN1Y2Nlc3MgPSBmYWxzZSkgPT5cbiAgKG1vZGVsOiBJQ29uZmlnTW9kZWwpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSBsb2dTdGF0dXMoZGF0YSwgbG9ncz8uW21vZGVsLm1ldGhvZElkXSwgcHJldmlvdXNNb2RlbFN1Y2Nlc3MpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGxvZ3M6IGxvZ3M/Llttb2RlbC5tZXRob2RJZF0sXG4gICAgICBzdGF0dXMsXG4gICAgICBzaG93TG9nczogaGFzTG9nRGV0YWlscyhzdGF0dXMsIGxvZ3M/Llttb2RlbC5tZXRob2RJZF0pXG4gICAgfSBhcyBJQ29uZmlnTW9kZWw7XG4gIH07XG5cbi8qKlxuICogSGFuZGxlIGhpZXJhcmNoeSBza2lwIGlmIGEgbW9kZWwgYmVmb3JlIHN1Y2NlZWRlZC5cbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIGluZGV4XG4gKi9cbmNvbnN0IGhhc1ByZXZpb3VzTW9kZWxTdWNjZXNzID0gKG1vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdLCBpbmRleCA9IDApID0+XG4gIGZpbHRlckNvbmZpZ01vZGVscyhtb2RlbHNbaW5kZXhdLCBrZWVwQ29uZmlnTW9kZWxCeVN0YXR1cyhMb2dTdGF0dXMuc3VjY2VzcykpLmxlbmd0aCA+IDAgfHxcbiAgKGluZGV4IDw9IG1vZGVscy5sZW5ndGggJiYgaGFzUHJldmlvdXNNb2RlbFN1Y2Nlc3MobW9kZWxzLCBpbmRleCArIDEpKTtcblxuY29uc3QgZGF0YVdpdGhDb25maWdNb2RlbExvZ3MgPVxuICAobG9nczogSU5vZGVMb2dzIHwgSU5vZGVUZXJtTG9ncykgPT5cbiAgPFQgZXh0ZW5kcyBJQmxhbmtOb2RlTG9nIHwgSU5vbkJsYW5rTm9kZUxvZyB8IElCbGFua05vZGVMb2dTdWJWYWx1ZT4oZGF0YTogVCkgPT4ge1xuICAgIGNvbnN0IHN1YkxvZ0tleSA9IGRhdGEuYmxhbmtOb2RlID8gc3ViVmFsdWVMb2dLZXkoZGF0YSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpIDogbnVsbDtcbiAgICBjb25zdCBsb2cgPSBzdWJMb2dLZXkgPyBsb2dzW3N1YkxvZ0tleV0gOiBsb2dzO1xuICAgIGNvbnN0IGNvbmZpZ01vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdID0gW107XG5cbiAgICAvLyBnbyB0aHJvdWdoIG1vZGVscyBvbmUgYnkgb25lIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBuZXh0IG1vZGVscyBpbiBoaWVyYXJjaHkgaGF2ZSBmYWlsZWRcbiAgICBmb3IgKGNvbnN0IGluZGV4IGluIGRhdGEuY29uZmlnTW9kZWxzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEuY29uZmlnTW9kZWxzLCBpbmRleCkpIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBkYXRhLmNvbmZpZ01vZGVsc1tpbmRleF07XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTW9kZWxTdWNjZXNzID0gK2luZGV4ID4gMCAmJiBoYXNQcmV2aW91c01vZGVsU3VjY2Vzcyhjb25maWdNb2RlbHMpO1xuICAgICAgICBjb25zdCBuZXdNb2RlbCA9IEFycmF5LmlzQXJyYXkobW9kZWwpXG4gICAgICAgICAgPyBtb2RlbC5tYXAoY29uZmlnTW9kZWxXaXRoTG9ncyhkYXRhLCBsb2csIHByZXZpb3VzTW9kZWxTdWNjZXNzKSlcbiAgICAgICAgICA6IGNvbmZpZ01vZGVsV2l0aExvZ3MoZGF0YSwgbG9nLCBwcmV2aW91c01vZGVsU3VjY2VzcykobW9kZWwpO1xuICAgICAgICBjb25maWdNb2RlbHMucHVzaChuZXdNb2RlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBjb25maWdNb2RlbHM6IGZpbHRlckNvbmZpZ01vZGVscyhcbiAgICAgICAgY29uZmlnTW9kZWxzLFxuICAgICAgICAobW9kZWw6IElDb25maWdNb2RlbCkgPT5cbiAgICAgICAgICAhW0xvZ1N0YXR1cy5ub3RSZXF1aXJlZF0uaW5jbHVkZXMobW9kZWw/LnN0YXR1cykgfHwgbW9kZWwubWV0aG9kSWQgPT09ICdlbWlzc2lvbk5vdFJlbGV2YW50J1xuICAgICAgKVxuICAgIH0gYXMgVDtcbiAgfTtcblxuLyoqXG4gKiBHcm91cCBtb2RlbHMgcnVubmluZyBpbiBwYXJhbGxlbCB1bmRlciB0aGUgc2FtZSBhcnJheSwgYXMgdGhleSBzaG91bGQgYXBwZWFyIHZlcnRpY2FsbHkuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSBtb2RlbHMgVGhlIGxpc3Qgb2YgbW9kZWxzXG4gKi9cbmNvbnN0IGdyb3VwUGFyYWxsZWxNb2RlbHMgPSAoY29uZmlnOiBJT3JjaGVzdHJhdG9yQ29uZmlnLCB0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWxzOiBJQ29uZmlnTW9kZWxbXSkgPT4ge1xuICBjb25zdCBtb2RlbHNXaXRoT3JkZXIgPSBtb2RlbHMubWFwKG1vZGVsID0+ICh7XG4gICAgbW9kZWw6IHtcbiAgICAgIC4uLm1vZGVsLFxuICAgICAgY29uZmlnOiBtb2RlbENvbmZpZyhjb25maWcubW9kZWxzLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbC5tZXRob2RJZClcbiAgICB9LFxuICAgIG9yZGVyOiBtb2RlbENvbmZpZ09yZGVyKGNvbmZpZy5tb2RlbHMsIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsLm1ldGhvZElkKVxuICB9KSk7XG4gIHJldHVybiBtb2RlbHNXaXRoT3JkZXJcbiAgICAucmVkdWNlKChwcmV2LCB7IG1vZGVsLCBvcmRlciB9KSA9PiB7XG4gICAgICBjb25zdCBpc0FycmF5ID0gb3JkZXIuaW5jbHVkZXMoJy4nKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gaXNBcnJheSA/IG9yZGVyLnNwbGl0KCcuJylbMF0gOiBvcmRlciB8fCBwcmV2Lmxlbmd0aDtcbiAgICAgIHByZXZbaW5kZXhdID0gaXNBcnJheSA/IFsuLi4ocHJldltpbmRleF0gfHwgW10pLCBtb2RlbF0gOiBbbW9kZWxdO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwgW10gYXMgSUNvbmZpZ01vZGVsW11bXSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLm1hcCh2ID0+ICh2Lmxlbmd0aCA9PT0gMSA/IHZbMF0gOiB2KSk7XG59O1xuXG5jb25zdCBhbGxQYXJhbGxlbCA9IChtb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXSkgPT5cbiAgbW9kZWxzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KG1vZGVsc1swXSkgJiYgbW9kZWxzWzBdLmxlbmd0aCA+IDE7XG5cbmNvbnN0IGJsYW5rTm9kZU1vZGVsSWQgPSAodmFsdWU6IGJsYW5rTm9kZSkgPT5cbiAgdmFsdWVbJ0B0eXBlJ10gPT09IFNjaGVtYVR5cGUuTWVhc3VyZW1lbnRcbiAgICA/ICh2YWx1ZSBhcyBNZWFzdXJlbWVudCkubWV0aG9kPy5bJ0BpZCddXG4gICAgOiAodmFsdWUgYXMgYW55KS5tZXRob2RNb2RlbD8uWydAaWQnXTtcblxuY29uc3QgdmFsdWVCeU1ldGhvZElkID0gKHZhbHVlczogYmxhbmtOb2RlW10sIG1ldGhvZElkOiBzdHJpbmcsIHRlcm1JZDogc3RyaW5nKSA9PlxuICBwcm9wZXJ0eVZhbHVlKHZhbHVlcy5maW5kKHYgPT4gYmxhbmtOb2RlTW9kZWxJZCh2KSA9PT0gbWV0aG9kSWQpPy52YWx1ZSBhcyBudW1iZXJbXSwgdGVybUlkKTtcblxuY29uc3QgZ3JvdXBQYXJhbGxlbFZhbHVlcyA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdLCB0ZXJtSWQ6IHN0cmluZykgPT5cbiAgQXJyYXkuaXNBcnJheShtb2RlbHMpXG4gICAgPyBPYmplY3QuZnJvbUVudHJpZXMobW9kZWxzLm1hcChtb2RlbCA9PiBbbW9kZWwubWV0aG9kSWQsIHZhbHVlQnlNZXRob2RJZCh2YWx1ZXMsIG1vZGVsLm1ldGhvZElkLCB0ZXJtSWQpXSkpXG4gICAgOiB7fTtcblxuZXhwb3J0IGNvbnN0IGdyb3VwTG9nc0J5VGVybSA9IChcbiAgbm9kZVR5cGU6IE5vZGVUeXBlLFxuICBsb2dzOiBJTm9kZUxvZ3MsXG4gIG1vZGVsczogSU1vZGVsW10sXG4gIGNvbmZpZzogSU9yY2hlc3RyYXRvckNvbmZpZyxcbiAgYWxsT3JpZ2luYWxWYWx1ZXM6IGJsYW5rTm9kZVtdLFxuICBhbGxSZWNhbGN1bGF0ZWRWYWx1ZXM6IGJsYW5rTm9kZVtdLFxuICBub2RlS2V5Pzogc3RyaW5nXG4pID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxWYWx1ZXMgPSBmaWx0ZXJEZWxldGVkKGFsbE9yaWdpbmFsVmFsdWVzIHx8IFtdKTtcbiAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWVzID0gZmlsdGVyRGVsZXRlZChhbGxSZWNhbGN1bGF0ZWRWYWx1ZXMgfHwgW10pLmZpbHRlcihoYXNSZWNhbGN1bGF0ZWRLZXlzKTtcbiAgY29uc3QgdHlwZTogU2NoZW1hVHlwZSA9IG9yaWdpbmFsVmFsdWVzLmxlbmd0aFxuICAgID8gb3JpZ2luYWxWYWx1ZXNbMF1bJ0B0eXBlJ10gfHwgb3JpZ2luYWxWYWx1ZXNbMF0udHlwZVxuICAgIDogcmVjYWxjdWxhdGVkVmFsdWVzLmxlbmd0aFxuICAgID8gcmVjYWxjdWxhdGVkVmFsdWVzWzBdWydAdHlwZSddIHx8IHJlY2FsY3VsYXRlZFZhbHVlc1swXS50eXBlXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICh0ZXJtOiBJVGVybUpTT05MRCk6IElCbGFua05vZGVMb2cgPT4ge1xuICAgIGNvbnN0IHRlcm1JZCA9IHRlcm1bJ0BpZCddO1xuICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS50ZXJtVHlwZTtcbiAgICBjb25zdCB0ZXJtTG9ncyA9IGdldChsb2dzLCB0ZXJtSWQsIHt9KSBhcyBJTm9kZVRlcm1Mb2dzO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgY29uc3QgcmVjYWxjdWxhdGVkID0gcmVjYWxjdWxhdGVkVmFsdWVzLmZpbHRlcih2ID0+IHRlcm1JZCA9PT0gdi50ZXJtIVsnQGlkJ10pO1xuICAgIGNvbnN0IGhhc0RhdGEgPSAhIW9yaWdpbmFsLmxlbmd0aCB8fCAhIXJlY2FsY3VsYXRlZC5sZW5ndGggfHwgT2JqZWN0LmtleXModGVybUxvZ3MpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgY29uZmlnTW9kZWxzRGF0YSA9IHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCwgdGVybVR5cGUgfTtcbiAgICBjb25zdCBjb25maWdNb2RlbHMgPSBncm91cFBhcmFsbGVsTW9kZWxzKFxuICAgICAgY29uZmlnLFxuICAgICAgdGVybUlkLFxuICAgICAgbm9kZUtleSEsXG4gICAgICB1bmlxdWUoW1xuICAgICAgICAuLi4odGVybUxvZ3MubW9kZWxzIHx8IFtdKS5maWx0ZXIoaXNNb2RlbExvZyh0ZXJtTG9ncywgdHlwZSkpXG4gICAgICAgIC8vIC4uLmZpbmRDb25maWdNb2RlbHMoY29uZmlnLCB0ZXJtSWQsIG5vZGVLZXkhLCBtb2RlbHMpLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbCBhcyBzdHJpbmcpXG4gICAgICBdKS5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIGNvbmZpZ01vZGVsc0RhdGEpKVxuICAgICk7XG4gICAgY29uc3Qga2V5cyA9IGxvZ0tleXModGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQsIG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSk7XG4gICAgY29uc3Qgc3ViVmFsdWVzID0gbG9nU3ViVmFsdWVzKGxvZ3MsIHRlcm1Mb2dzLCBvcmlnaW5hbCwgcmVjYWxjdWxhdGVkLCBtb2RlbHMsIGNvbmZpZ01vZGVsc0RhdGEpO1xuICAgIGNvbnN0IGlzUmVxdWlyZWQgPSAhT2JqZWN0LnZhbHVlcyh0ZXJtTG9ncylcbiAgICAgIC5maWx0ZXIodiA9PiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodikgJiYgIXYuaXNLZXkpXG4gICAgICAuZXZlcnkodiA9PiB2LnJ1blJlcXVpcmVkID09PSBmYWxzZSk7XG5cbiAgICBjb25zdCBub2RlTG9nOiBJQmxhbmtOb2RlTG9nID0gZGF0YVdpdGhDb25maWdNb2RlbExvZ3ModGVybUxvZ3MpKHtcbiAgICAgIGJsYW5rTm9kZTogdHJ1ZSxcbiAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgIGNhbk9wZW46IGtleXMubGVuZ3RoID4gMCB8fCBzdWJWYWx1ZXMubGVuZ3RoID4gMCxcbiAgICAgIHRlcm1JZCxcbiAgICAgIHRlcm0sXG4gICAgICB0eXBlLFxuICAgICAgY29uZmlnTW9kZWxzLFxuICAgICAgb3JpZ2luYWwsXG4gICAgICBvcmlnaW5hbFZhbHVlOiByZWR1Y2VWYWx1ZXMob3JpZ2luYWwsIHRlcm1JZCksXG4gICAgICByZWNhbGN1bGF0ZWQsXG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZTogcmVkdWNlVmFsdWVzKHJlY2FsY3VsYXRlZCwgdGVybUlkKSxcbiAgICAgIGlzT3JpZ2luYWw6ICEhb3JpZ2luYWwubGVuZ3RoLFxuICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGhhc1JlY2FsY3VsYXRlZFZhbHVlKHJlY2FsY3VsYXRlZCksXG4gICAgICBoYXNEYXRhLFxuICAgICAgaXNSZXF1aXJlZCxcbiAgICAgIGxvZ3M6IHRlcm1Mb2dzLFxuICAgICAga2V5cyxcbiAgICAgIHN1YlZhbHVlcyxcbiAgICAgIGFsbFBhcmFsbGVsOiBhbGxQYXJhbGxlbChjb25maWdNb2RlbHMpLFxuICAgICAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ6IGdyb3VwUGFyYWxsZWxWYWx1ZXMob3JpZ2luYWwsIGNvbmZpZ01vZGVsc1swXSwgdGVybUlkKSxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZDogZ3JvdXBQYXJhbGxlbFZhbHVlcyhyZWNhbGN1bGF0ZWQsIGNvbmZpZ01vZGVsc1swXSwgdGVybUlkKVxuICAgIH0pO1xuICAgIGNvbnN0IHN1YlZhbHVlID0gY3ljbGVTdWJWYWx1ZShub2RlTG9nKTtcblxuICAgIHJldHVybiBzdWJWYWx1ZSAmJiBzdWJWYWx1ZXM/Lmxlbmd0aFxuICAgICAgPyB7XG4gICAgICAgICAgLi4ubm9kZUxvZyxcbiAgICAgICAgICBtb2RlbHNJblN1YlZhbHVlczogdHJ1ZSxcbiAgICAgICAgICBzdWJWYWx1ZXM6IFtzdWJWYWx1ZSwgLi4uc3ViVmFsdWVzXVxuICAgICAgICB9IC8vIGlmIHdlIGluY2x1ZGUgdGhlIEN5Y2xlIHZhbHVlLCBpdCBiZWNvbWVzIHRoZSBtYWluIHJlZmVyZW5jZSBvZiB0aGUgbW9kZWxzXG4gICAgICA6IG5vZGVMb2c7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ3JvdXBkTG9nc0J5S2V5ID0gKFxuICBub2RlVHlwZTogTm9kZVR5cGUsXG4gIGxvZ3M6IElOb2RlTG9ncyxcbiAgbW9kZWxzOiBJTW9kZWxbXSxcbiAgb3JpZ2luYWxWYWx1ZT86IG5vbkJsYW5rTm9kZSxcbiAgcmVjYWxjdWxhdGVkVmFsdWU/OiBub25CbGFua05vZGVcbikgPT4ge1xuICBjb25zdCB0eXBlOiBTY2hlbWFUeXBlID1cbiAgICBvcmlnaW5hbFZhbHVlPy5bJ0B0eXBlJ10gfHwgb3JpZ2luYWxWYWx1ZT8udHlwZSB8fCByZWNhbGN1bGF0ZWRWYWx1ZT8uWydAdHlwZSddIHx8IHJlY2FsY3VsYXRlZFZhbHVlPy50eXBlO1xuXG4gIHJldHVybiAoa2V5OiBzdHJpbmcpOiBJTm9uQmxhbmtOb2RlTG9nID0+IHtcbiAgICBjb25zdCBrZXlMb2dzID0gZ2V0KGxvZ3MsIGtleSwge30pIGFzIElOb2RlVGVybUxvZ3M7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBvcmlnaW5hbFZhbHVlPy5ba2V5XTtcbiAgICBjb25zdCByZWNhbGN1bGF0ZWQgPSByZWNhbGN1bGF0ZWRWYWx1ZT8uW2tleV07XG4gICAgY29uc3QgaGFzRGF0YSA9ICEhb3JpZ2luYWwgfHwgISFyZWNhbGN1bGF0ZWQgfHwgT2JqZWN0LmtleXMoa2V5TG9ncykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjb25maWdNb2RlbHNEYXRhID0geyBub2RlVHlwZSwgdHlwZSwga2V5IH07XG4gICAgY29uc3QgY29uZmlnTW9kZWxzID0gdW5pcXVlKFsuLi4oa2V5TG9ncy5tb2RlbHMgfHwgW10pLmZpbHRlcihpc01vZGVsTG9nKGtleUxvZ3MsIHR5cGUpKV0pLm1hcChcbiAgICAgIGNvbmZpZ01vZGVsV2l0aERvY3MobW9kZWxzLCBjb25maWdNb2RlbHNEYXRhKVxuICAgICk7XG4gICAgY29uc3QgaXNSZXF1aXJlZCA9ICFPYmplY3QudmFsdWVzKGtleUxvZ3MpXG4gICAgICAuZmlsdGVyKHYgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpICYmICF2LmlzS2V5KVxuICAgICAgLmV2ZXJ5KHYgPT4gdi5ydW5SZXF1aXJlZCA9PT0gZmFsc2UpO1xuXG4gICAgcmV0dXJuIGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGtleUxvZ3MpKHtcbiAgICAgIGJsYW5rTm9kZTogZmFsc2UsXG4gICAgICBpc09wZW46IHRydWUsXG4gICAgICBjYW5PcGVuOiBmYWxzZSxcbiAgICAgIGtleSxcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWdNb2RlbHMsXG4gICAgICBvcmlnaW5hbFZhbHVlOiBvcmlnaW5hbCxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiByZWNhbGN1bGF0ZWQsXG4gICAgICBpc09yaWdpbmFsOiAhaXNVbmRlZmluZWQob3JpZ2luYWwpLFxuICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKGtleSkocmVjYWxjdWxhdGVkVmFsdWUpLFxuICAgICAgaGFzRGF0YSxcbiAgICAgIGlzUmVxdWlyZWQsXG4gICAgICBsb2dzOiBrZXlMb2dzLFxuICAgICAgYWxsUGFyYWxsZWw6IGZhbHNlXG4gICAgfSk7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbW9kZWxDb3VudCA9IChibGFua05vZGVMb2dzOiBJQmxhbmtOb2RlTG9nW10pID0+XG4gIE1hdGgubWF4LmFwcGx5KE1hdGgubWF4LCBbXG4gICAgMCxcbiAgICAuLi5ibGFua05vZGVMb2dzLmZsYXRNYXAodiA9PiBbXG4gICAgICB2LmNvbmZpZ01vZGVscy5sZW5ndGgsXG4gICAgICAuLi52LnN1YlZhbHVlcy5tYXAocyA9PiBzLmNvbmZpZ01vZGVscz8ubGVuZ3RoIHx8IDApLFxuICAgICAgLi4udi5rZXlzLm1hcChzID0+IHMuY29uZmlnTW9kZWxzPy5sZW5ndGggfHwgMClcbiAgICBdKVxuICBdKTtcblxuZXhwb3J0IGNvbnN0IGxvZ1ZhbHVlQXJyYXkgPSAodmFsdWU6IHN0cmluZyk6IGFueVtdID0+XG4gIFsnOycsICc6J10uc29tZSh2ID0+IHZhbHVlLmluY2x1ZGVzKHYpKVxuICAgID8gdmFsdWUuc3BsaXQoJzsnKS5mbGF0TWFwKHYgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSB2LnNwbGl0KCdfJykubWFwKHZ2ID0+IHZ2LnNwbGl0KCc6JykpO1xuICAgICAgICByZXR1cm4gcmVzLmxlbmd0aCA8PSAxID8gcmVzLmZsYXQoKSA6IE9iamVjdC5mcm9tRW50cmllcyhyZXMpO1xuICAgICAgfSlcbiAgICA6IG51bGw7XG4iXX0=
|
|
612
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUVMLGtCQUFrQixFQUtsQixZQUFZLEVBRVosVUFBVSxFQUNWLFVBQVUsRUFLWCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBQzdCLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBR0wsVUFBVSxFQUVWLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsY0FBYyxFQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBdUNyRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRTlDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU3RSxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFFakYsTUFBTSx1QkFBdUIsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFFekUsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUU3QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFFdkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLE9BQU8sQ0FBQztBQUVsRSxNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtJQUN6QyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztJQUNyRyxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLFFBQVEsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxNQUFNO0lBQ2QsTUFBTTtDQUNQLENBQUMsQ0FBQztBQUVILE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFcEYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtJQUN2QyxJQUFJO1FBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDZCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLE9BQU87Z0JBQ0wsR0FBRyxJQUFJO2dCQUNQLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM3QyxDQUFDO1FBQ0osQ0FBQyxFQUNELEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FDeEIsQ0FBQztLQUNIO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixrREFBa0Q7UUFDbEQsT0FBTyxFQUFFLENBQUM7S0FDWDtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFrQixFQUFFLEVBQUUsQ0FDbkQsTUFBTTtLQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMvRCxNQUFNLENBQUMsT0FBTyxDQUFDO0tBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRWYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUM1QixDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUUsYUFBYSxJQUFJLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ3hGLENBQUMsQ0FBQztRQUNFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUscUJBQXFCLENBQUM7WUFDakQsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNwQixDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQ2hDLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ2hELENBQUM7S0FDSDtJQUNILENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFdkIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFRLEVBQUUsR0FBRyxJQUFjLEVBQUUsRUFBRSxDQUNsRCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV4SCxNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0tBQ2IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BELE1BQU0sQ0FDTCxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDZCxHQUFHLElBQUk7SUFDUCxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDaEcsQ0FBQyxFQUNGLElBQUksQ0FDTCxDQUFDO0FBRU4sTUFBTSxRQUFRLEdBQUcsQ0FDZixLQUFLLEVBQ0wsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxFQUFPLEVBQzNGLEVBQUU7SUFDRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sS0FBSyxHQUFHLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNqRCxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDO1NBQ3pGLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLFdBQVcsR0FBRyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2RixHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsWUFBWSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsWUFBWSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25HLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxZQUFZLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsWUFBWSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFckQsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFdkMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVwQyxJQUFJLE9BQU8sVUFBVSxLQUFLLFdBQVcsRUFBRTtRQUNyQyxNQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUssTUFBTSxDQUFDO1FBRXhDLElBQUksR0FBRyxjQUFjO1lBQ25CLENBQUMsQ0FBQztnQkFDRSxHQUFHLElBQUk7Z0JBQ1AsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztnQkFDNUIscUJBQXFCLEVBQUUsU0FBUzthQUNqQztZQUNILENBQUMsQ0FBQztnQkFDRSxHQUFHLElBQUk7Z0JBQ1AsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO2dCQUNuQixTQUFTO2FBQ1YsQ0FBQztLQUNQO1NBQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDOUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxLQUFLLE1BQU0sQ0FBQztRQUU1QyxJQUFJLEdBQUc7WUFDTCxHQUFHLElBQUk7WUFDUCxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxXQUFXO1NBQ1osQ0FBQztLQUNIO1NBQU0sSUFBSSxjQUFjLElBQUksR0FBRyxFQUFFO1FBQ2hDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFFekMsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDNUIsR0FBRyxPQUFPO1NBQ1gsQ0FBQztLQUNIO1NBQU0sSUFBSSxtQkFBbUIsSUFBSSxHQUFHLEVBQUU7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xGO1NBQU0sSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHO1lBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDO0tBQ0g7SUFDRCxJQUFJLE9BQU8sWUFBWSxLQUFLLFdBQVcsRUFBRTtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksS0FBSyxNQUFNLENBQUM7S0FDNUM7SUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixLQUFLLFdBQVcsRUFBRTtRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixLQUFLLE1BQU0sQ0FBQztLQUN6RDtJQUNELElBQUksT0FBTyxHQUFHLENBQUMsZ0JBQWdCLEtBQUssV0FBVyxFQUFFO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxDQUFDO0tBQ3pEO0lBRUQsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUNuRCxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUVqQixJQUFJLEdBQUcsS0FBSyxnQkFBZ0IsRUFBRTtRQUM1QixtREFBbUQ7UUFDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlCLElBQUksT0FBTyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1RTtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7S0FDSDtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBWSxFQUFhLEVBQUUsQ0FDMUQsSUFBSTtLQUNELElBQUksRUFBRTtLQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDWCxHQUFHLENBQUMsWUFBWSxDQUFDO0tBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDdkYsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQ3JCLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxRQUFRO1FBQ2IsQ0FBQyxDQUFDLFFBQVEsS0FBSyxnQkFBZ0I7WUFDN0IsQ0FBQyxDQUFDLG9EQUFvRDtnQkFDcEQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUM7WUFDeEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUN6RCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFWCxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUMxQixjQUEyQixFQUMzQixrQkFBK0IsRUFDL0IsS0FBcUIsRUFDckIsZUFBZ0MsRUFDaEMsYUFBNEIsRUFBRSxFQUNOLEVBQUUsQ0FDMUIsSUFBSSxDQUFDO0lBQ0gsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNO1FBQ2YsQ0FBQyxDQUFDLEtBQUs7UUFDUCxDQUFDLENBQUM7WUFDRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDbEQsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDdkQsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxNQUFNLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxRixHQUFHLFVBQVU7Q0FDZCxDQUFDO0tBQ0MsSUFBSSxDQUNILFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN4QixPQUFPLEVBQUUsRUFDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3hDO0tBQ0EsU0FBUyxFQUFFLENBQUM7QUFFakIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsY0FBNEIsRUFBRSxrQkFBZ0MsRUFBRSxFQUFFLENBQzVGLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFLOUcsTUFBTSxDQUFOLElBQVksU0FNWDtBQU5ELFdBQVksU0FBUztJQUNuQixtQ0FBc0IsQ0FBQTtJQUN0Qiw2QkFBZ0IsQ0FBQTtJQUNoQiw4RUFBaUUsQ0FBQTtJQUNqRSxtRUFBc0QsQ0FBQTtJQUN0RCx5Q0FBNEIsQ0FBQTtBQUM5QixDQUFDLEVBTlcsU0FBUyxLQUFULFNBQVMsUUFNcEI7QUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVsSCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWlCLEVBQUUsSUFBbUIsRUFBRSxFQUFFLENBQy9ELENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRWpHLE1BQU0sU0FBUyxHQUFHLENBQ2hCLElBQThELEVBQzlELElBQW1CLEVBQ25CLGtCQUFrQixHQUFHLEtBQUssRUFDMUIsRUFBRTtJQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLFlBQVksR0FBRztRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssV0FBVztRQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQjtLQUN2QyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQiwyQ0FBMkM7SUFDM0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3hGLE9BQU8sUUFBUTtRQUNiLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDWCxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVc7WUFDdkIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDekIsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJO29CQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7d0JBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjOzRCQUNuQixDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU87NEJBQ25CLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQ0FDN0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLO2dDQUNqQixDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVk7d0JBQzFCLENBQUMsQ0FBQyxrQkFBa0I7NEJBQ3BCLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYTs0QkFDekIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLO29CQUNuQixDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVk7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYztvQkFDckIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhO29CQUN6QixDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVk7UUFDMUIsQ0FBQyxDQUFDLFlBQVk7WUFDZCxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWE7WUFDekIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBaUVGLE1BQU0seUJBQXlCLEdBQzdCLENBQUMsR0FBRyxRQUFxQixFQUFFLEVBQUUsQ0FDN0IsQ0FBQyxLQUFtQixFQUFFLEVBQUUsQ0FDdEIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUV0QyxNQUFNLHVCQUF1QixHQUMzQixDQUFDLEdBQUcsUUFBcUIsRUFBRSxFQUFFLENBQzdCLENBQUMsS0FBbUIsRUFBRSxFQUFFLENBQ3RCLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXJDLE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsTUFBd0QsRUFDeEQsVUFBNEMsRUFDNUMsRUFBRSxDQUNGLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQVd2RCxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRSxDQUNwRCxNQUFNLENBQUMsTUFBTSxDQUNYLE1BQU0sQ0FBQyxNQUFNLENBQ1gsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDM0MsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7UUFDaEIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQzNDLEVBQUU7UUFDRixHQUFHO1FBQ0gsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2pHLENBQUM7SUFDRixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsRUFDRCxFQUF5QyxDQUMxQyxDQUNGLENBQUM7QUFFSixNQUFNLFlBQVksR0FBRyxDQUFDLE1BQWEsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUNyRCxNQUFNLGNBQWMsR0FBRyxNQUFNO1NBQzFCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsb0dBQW9HO1NBQ25HLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUMzQixPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDdkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUM7QUFFaEgsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFpQixFQUFFLGdCQUFnQixHQUFHLElBQUksRUFBRSxFQUFFLENBQzVELENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxJQUFJLGFBQWEsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSx1QkFBdUIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRWhILE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQStCLEVBQUUsRUFBRSxDQUMxRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRW5FLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUErQixFQUFFLEVBQUUsQ0FDOUQsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFaEUsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQW1CLEVBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV0RyxNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUUsS0FBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRS9HLE1BQU0sbUJBQW1CLEdBRXJCO0lBQ0YsUUFBUSxFQUFFLENBQUMsTUFBNEMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FDakUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3pHLEtBQUssRUFBRSxDQUFDLE1BQWtCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQ3BDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNO1FBQzNFLENBQUMsQ0FBQyxZQUFZLENBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUNoRixFQUFFLENBQ0g7UUFDSCxDQUFDLENBQUMsRUFBRTtJQUNSLGNBQWMsRUFBRSxDQUFDLE1BQWtCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQzdDLE1BQU0sQ0FBQyxNQUFNO1FBQ1gsQ0FBQyxDQUFDLFlBQVksQ0FDVixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQ3JFLEVBQUUsQ0FDSDtRQUNILENBQUMsQ0FBQyxFQUFFO0lBQ1IsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzNCLE1BQU0sS0FBSyxHQUFHLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdELE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLENBQUM7WUFDeEUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxFQUFFO2dCQUNKLENBQUMsQ0FBQyxLQUFLO1lBQ1QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUNoQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNaLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsVUFBdUIsRUFBRSxHQUFXLEVBQUUsRUFBVyxFQUFFLEVBQUUsQ0FDM0UsbUJBQW1CLENBQUMsR0FBRyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFekYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQXlCLEVBQVUsRUFBRSxDQUNwRSxHQUFHLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUM7QUFFckQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEtBQVUsRUFBRSxFQUFFLEVBQUUsQ0FDdEQsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBRTNFLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBbUIsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsRUFBRTtJQUN4RixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUc7UUFDUixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDbEIsQ0FBQyxDQUFFLEdBQWdCLENBQUMsR0FBRyxDQUNuQixFQUFFLENBQUMsRUFBRSxDQUNILENBQUM7Z0JBQ0MsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsRUFBRTtnQkFDRixTQUFTO2dCQUNULHVEQUF1RDthQUN4RCxDQUEwQixDQUM5QjtZQUNILENBQUMsQ0FBRTtnQkFDQyxHQUFHLEVBQUUsSUFBSTtnQkFDVCxFQUFFLEVBQUUsR0FBRztnQkFDUCxTQUFTO2dCQUNULHdEQUF3RDthQUMvQjtRQUMvQixDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBa0IsRUFBRSxNQUFnQixFQUFFLEVBQUUsQ0FDN0QsS0FBSztLQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUUsSUFBWSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNoRixHQUFHLENBQ0YsRUFBRSxDQUFDLEVBQUUsQ0FDSCxDQUFDO0lBQ0MsR0FBRyxFQUFFLFVBQVU7SUFDZixFQUFFO0lBQ0YsU0FBUyxFQUFFLEtBQUs7SUFDaEIsWUFBWSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO0NBQy9ELENBQXFCLENBQ3pCLENBQUM7QUFFTjs7Ozs7R0FLRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxTQUFxQixFQUFFLEVBQUUsQ0FDM0QsU0FBUztLQUNOLE1BQU0sQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN6RCxHQUFHLENBQ0YsQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FDckIsQ0FBQztJQUNDLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDM0IsR0FBRyxFQUFFLGdCQUFnQjtJQUNyQixTQUFTLEVBQUUsSUFBSTtJQUNmLFlBQVksRUFBRSxDQUFDLHNCQUFzQixDQUFDO0NBQ3ZDLENBQXFCLENBQ3pCLENBQUM7QUFFTixNQUFNLG9CQUFvQixHQUFHLENBQUMsU0FBa0MsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUM7QUFFL0csTUFBTSxhQUFhLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFpQixFQUFFLEVBQUU7SUFDL0csTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUNuRSxNQUFNLENBQ1AsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRSxPQUFPLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ25FLENBQUMsQ0FBRTtZQUNDLFNBQVMsRUFBRSxJQUFJO1lBQ2YsR0FBRyxFQUFFLE9BQU87WUFDWixTQUFTLEVBQUUsSUFBSTtZQUNmLFlBQVk7WUFDWixVQUFVO1lBQ1YsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixjQUFjLEVBQUUsb0JBQW9CLENBQUMsa0JBQWtCLENBQUM7U0FDL0I7UUFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNYLENBQUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQ25CLE9BQWtCLEVBQ2xCLElBQW1CLEVBQ25CLFFBQXFCLEVBQ3JCLFlBQXlCLEVBQ3pCLE1BQWdCLEVBQ2hCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQXdCLEVBQ2hELEVBQUUsQ0FDRixjQUFjLENBQUM7SUFDYixxQkFBcUI7SUFDckIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNqQixNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDO1NBQ2pDLEdBQUcsQ0FDRixFQUFFLENBQUMsRUFBRSxDQUNILENBQUM7UUFDQyxFQUFFO1FBQ0YsR0FBRyxFQUFFLFVBQVU7UUFDZixTQUFTLEVBQUUsS0FBSztRQUNoQixZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN2RSxDQUFxQixDQUN6QjtJQUNILEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsWUFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0YsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNqQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN4RSxJQUFJLEVBQUU7U0FDTixNQUFNLENBQUMsT0FBTyxDQUFDO1NBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRyxDQUFDLENBQUMsWUFBc0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUMxRTtJQUNELEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDbEMsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztDQUN2QyxDQUFDO0tBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRTtJQUM5RSxhQUFhLEdBQUcsYUFBYSxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLGlCQUFpQixHQUFHLGlCQUFpQixJQUFJLGNBQWMsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLE9BQU87UUFDTCxTQUFTLEVBQUUsSUFBSTtRQUNmLEdBQUc7UUFDSCxFQUFFO1FBQ0YsU0FBUztRQUNULFlBQVksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFTLENBQUMsQ0FBQztRQUMzRyxhQUFhO1FBQ2IsaUJBQWlCO1FBQ2pCLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLGlCQUFpQixLQUFLLGFBQWE7UUFDdEYsVUFBVSxFQUFFLElBQUk7S0FDUSxDQUFDO0FBQzdCLENBQUMsQ0FBQztLQUNELE1BQU0sQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsQ0FDN0QsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxhQUFhLEtBQUssRUFBRSxJQUFJLGlCQUFpQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDM0Y7S0FDQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTVHLE1BQU0sT0FBTyxHQUFHLENBQ2QsSUFBbUIsRUFDbkIsUUFBcUIsRUFDckIsWUFBeUIsRUFDekIsTUFBZ0IsRUFDaEIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUMxQixFQUFFLENBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDZCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQztLQUMxRCxHQUFHLENBQ0YsR0FBRyxDQUFDLEVBQUUsQ0FDSixDQUFDO0lBQ0MsU0FBUyxFQUFFLElBQUk7SUFDZixHQUFHO0lBQ0gsU0FBUyxFQUFFLEtBQUs7SUFDaEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7U0FDbkMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQVMsQ0FBQyxDQUFDO1FBQzdFLG9GQUFvRjtTQUNuRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6QixhQUFhLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7SUFDNUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUM7SUFDcEQsY0FBYyxFQUFFLG9CQUFvQixDQUFDLFlBQVksRUFBRSxHQUFHLENBQUM7SUFDdkQsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBMEIsQ0FDOUI7S0FDQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDdEMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFFeEMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLElBQWdCLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FDL0Q7SUFDRSxHQUFHLEtBQUssc0JBQXNCO0lBQzlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLEtBQUs7SUFDckQsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksS0FBSyxVQUFVLENBQUMsT0FBTztDQUMxRCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVuQixNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBaUIsRUFBRSxFQUFFLENBQzlDLEdBQUcsQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7QUFFbkYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFtQixFQUFFLElBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDNUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sQ0FDTCxDQUFDLENBQUMsR0FBRztRQUNMO1lBQ0UsK0JBQStCO1lBQy9CLHNCQUFzQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFDakMsR0FBRyxDQUFDLFVBQVUsS0FBSyxrQkFBa0IsQ0FBQyxVQUFVO1lBQ2hELENBQUMsR0FBRyxDQUFDLEtBQUs7WUFDVixjQUFjO1lBQ2QsQ0FBQyxHQUFHLENBQUMsUUFBUTtTQUNkLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNoQixDQUFDLFdBQVcsSUFBSSxHQUFHLEVBQUUsdUJBQXVCLElBQUksR0FBRyxFQUFFLGFBQWEsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQ3pGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQWdDLEVBQUUsRUFBRSxDQUNqSCxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTVGLE1BQU0sV0FBVyxHQUFHLENBQ2xCLE1BQWlFLEVBQ2pFLE1BQWMsRUFDZCxRQUFnQixFQUNoQixLQUFhLEVBQ2IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRW5FLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsTUFBaUUsRUFDakUsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLEtBQWEsRUFDTCxFQUFFO0lBQ1YsTUFBTSxPQUFPLEdBQUcsTUFBTTtTQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDaEIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxVQUFVO2dCQUNWLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUMvQixDQUFDLENBQUMsRUFBRTtZQUNOLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFO2dCQUNaLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxQyxDQUFDLENBQUM7QUFVRixNQUFNLG1CQUFtQixHQUN2QixDQUNFLE1BQWdCLEVBQ2hCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBd0IsRUFDL0QsUUFBZ0MsRUFDaEMsRUFBRSxDQUNKLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQ25CLE1BQU0sSUFBSSxHQUFHO1FBQ1gsT0FBTyxFQUFFLFFBQVE7UUFDakIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFO1FBQ3ZDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7S0FDMUIsQ0FBQztJQUNULE9BQU87UUFDTCxRQUFRO1FBQ1IsS0FBSyxFQUNILGlCQUFpQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsc0JBQXNCO1lBQ3RCLENBQUMsUUFBUSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdkUsb0NBQW9DO1lBQ3BDLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRSx1QkFBdUI7WUFDdkIsaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUYsc0NBQXNDO1lBQ3RDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDckYsMEJBQTBCO1lBQzFCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1RixrRUFBa0U7WUFDbEUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDckIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtvQkFDeEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3QixRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztpQkFDakQsQ0FBQztnQkFDSixDQUFDLENBQUMsU0FBUyxDQUFDO0tBQ2pCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFSixNQUFNLG1CQUFtQixHQUN2QixDQUFDLElBQThELEVBQUUsSUFBbUIsRUFBRSxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUN0SCxDQUFDLEtBQW1CLEVBQUUsRUFBRTtJQUN0QixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdFLE9BQU87UUFDTCxHQUFHLEtBQUs7UUFDUixJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM1QixNQUFNO1FBQ04sUUFBUSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3hDLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBRUo7Ozs7O0dBS0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQUMsTUFBeUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FDdkYsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO0lBQ3hGLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksdUJBQXVCLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXpFLE1BQU0sdUJBQXVCLEdBQzNCLENBQUMsSUFBK0IsRUFBRSxFQUFFLENBQ3BDLENBQXFFLElBQU8sRUFBRSxFQUFFO0lBQzlFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN4RixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9DLE1BQU0sWUFBWSxHQUFzQyxFQUFFLENBQUM7SUFFM0QsMEZBQTBGO0lBQzFGLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNyQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2xFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDakYsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDakUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdCO0tBQ0Y7SUFFRCxPQUFPO1FBQ0wsR0FBRyxJQUFJO1FBQ1AsWUFBWSxFQUFFLGtCQUFrQixDQUM5QixZQUFZLEVBQ1osQ0FBQyxLQUFtQixFQUFFLEVBQUUsQ0FDdEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUsscUJBQXFCLENBQy9GO0tBQ0csQ0FBQztBQUNULENBQUMsQ0FBQztBQUVKOzs7OztHQUtHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE1BQTJCLEVBQUUsTUFBYyxFQUFFLFFBQWdCLEVBQUUsTUFBc0IsRUFBRSxFQUFFO0lBQ3BILE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLEtBQUssRUFBRTtZQUNMLEdBQUcsS0FBSztZQUNSLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7U0FDckU7UUFDRCxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7S0FDekUsQ0FBQyxDQUFDLENBQUM7SUFDSixPQUFPLGVBQWU7U0FDbkIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDakMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ25FLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsRUFBRSxFQUFzQixDQUFDO1NBQ3pCLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUF5QyxFQUFFLEVBQUUsQ0FDaEUsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUUxRSxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBZ0IsRUFBRSxFQUFFLENBQzVDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxVQUFVLENBQUMsV0FBVztJQUN2QyxDQUFDLENBQUUsS0FBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDeEMsQ0FBQyxDQUFFLEtBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUUxQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQW1CLEVBQUUsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUNoRixhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxFQUFFLEtBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFL0YsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE1BQW1CLEVBQUUsTUFBcUMsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUN6RyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVULE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUM3QixRQUFrQixFQUNsQixJQUFlLEVBQ2YsTUFBZ0IsRUFDaEIsTUFBMkIsRUFDM0IsaUJBQThCLEVBQzlCLHFCQUFrQyxFQUNsQyxPQUFnQixFQUNoQixFQUFFO0lBQ0YsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xHLE1BQU0sSUFBSSxHQUFlLGNBQWMsQ0FBQyxNQUFNO1FBQzVDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDdEQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU07WUFDM0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDOUQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVkLE9BQU8sQ0FBQyxJQUFpQixFQUFpQixFQUFFO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBa0IsQ0FBQztRQUN4RCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMvRixNQUFNLGdCQUFnQixHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQ3RDLE1BQU0sRUFDTixNQUFNLEVBQ04sT0FBUSxFQUNSLE1BQU0sQ0FBQztZQUNMLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdELDRGQUE0RjtTQUM3RixDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQ3RELENBQUM7UUFDRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDakYsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2FBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ25FLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLENBQUM7UUFFdkMsTUFBTSxPQUFPLEdBQWtCLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9ELFNBQVMsRUFBRSxJQUFJO1lBQ2YsTUFBTSxFQUFFLElBQUk7WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2hELE1BQU07WUFDTixJQUFJO1lBQ0osSUFBSTtZQUNKLFlBQVk7WUFDWixRQUFRO1lBQ1IsYUFBYSxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQzdDLFlBQVk7WUFDWixpQkFBaUIsRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztZQUNyRCxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQzdCLGNBQWMsRUFBRSxvQkFBb0IsQ0FBQyxZQUFZLENBQUM7WUFDbEQsT0FBTztZQUNQLFVBQVU7WUFDVixJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUk7WUFDSixTQUFTO1lBQ1QsV0FBVyxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFDdEMsdUJBQXVCLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7WUFDL0UsMkJBQTJCLEVBQUUsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7U0FDeEYsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhDLE9BQU8sUUFBUSxJQUFJLFNBQVMsRUFBRSxNQUFNO1lBQ2xDLENBQUMsQ0FBQztnQkFDRSxHQUFHLE9BQU87Z0JBQ1YsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDO2FBQ3BDLENBQUMsNkVBQTZFO1lBQ2pGLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FDN0IsUUFBa0IsRUFDbEIsSUFBZSxFQUNmLE1BQWdCLEVBQ2hCLGFBQTRCLEVBQzVCLGlCQUFnQyxFQUNoQyxFQUFFO0lBQ0YsTUFBTSxJQUFJLEdBQ1IsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxFQUFFLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixFQUFFLElBQUksQ0FBQztJQUU3RyxPQUFPLENBQUMsR0FBVyxFQUFvQixFQUFFO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBa0IsQ0FBQztRQUNwRCxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDakQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUM1RixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FDOUMsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDbkUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUV2QyxPQUFPLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTyxFQUFFLEtBQUs7WUFDZCxHQUFHO1lBQ0gsSUFBSTtZQUNKLFlBQVk7WUFDWixhQUFhLEVBQUUsUUFBUTtZQUN2QixpQkFBaUIsRUFBRSxZQUFZO1lBQy9CLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDbEMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztZQUN0RCxPQUFPO1lBQ1AsVUFBVTtZQUNWLElBQUksRUFBRSxPQUFPO1lBQ2IsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsYUFBOEIsRUFBRSxFQUFFLENBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDdkIsQ0FBQztJQUNELEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTTtRQUNyQixHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7S0FDaEQsQ0FBQztDQUNILENBQUMsQ0FBQztBQUVMLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWEsRUFBUyxFQUFFLENBQ3BELENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzNCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3QsIHRvQXJyYXksIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZpbGVUb0V4dCwgU3VwcG9ydGVkRXh0ZW5zaW9ucyB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7XG4gIEVtaXNzaW9uLFxuICBFbWlzc2lvbk1ldGhvZFRpZXIsXG4gIElUZXJtSlNPTkxELFxuICBQcm9kdWN0LFxuICBJbnB1dCBhcyBIZXN0aWFJbnB1dCxcbiAgTm9kZVR5cGUsXG4gIFRlcm1UZXJtVHlwZSxcbiAgUHJvcGVydHksXG4gIFNjaGVtYVR5cGUsXG4gIGlzVHlwZU5vZGUsXG4gIEluZGljYXRvcixcbiAgUHJhY3RpY2UsXG4gIE1lYXN1cmVtZW50LFxuICBDb21wbGV0ZW5lc3Ncbn0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdW5pcXVlLCBpc1VuZGVmaW5lZCwgaXNFbXB0eSwgaXNOdW1iZXIgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IHNldCBmcm9tICdsb2Rhc2guc2V0JztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC5vcmRlcmJ5JztcblxuaW1wb3J0IHtcbiAgSU9yY2hlc3RyYXRvckNvbmZpZyxcbiAgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnLFxuICBmaW5kTW9kZWxzLFxuICBJTW9kZWwsXG4gIGZpbmRNYXRjaGluZ01vZGVsLFxuICBtb2RlbFBhcmFtcyxcbiAgbW9kZWxLZXlQYXJhbXNcbn0gZnJvbSAnLi4vLi4vZW5naW5lL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzVmFsaWRLZXkgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVNaXNzaW5nTG9va3VwTG9nIHtcbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgdGVybUlkOiBzdHJpbmc7XG4gIGNvbHVtbjogc3RyaW5nO1xuICAvLyBhdHRyaWJ1dGVzIGxpbmtlZCB0byB0aGUgbW9kZWxzXG4gIG1vZGVsPzogc3RyaW5nO1xuICB0ZXJtPzogc3RyaW5nO1xuICBrZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVUZXJtTG9nIHtcbiAgcnVuUmVxdWlyZWQ/OiBib29sZWFuO1xuICBzaG91bGRSdW4/OiBib29sZWFuO1xuICBzaG91bGRSdW5PcmNoZXN0cmF0b3I/OiBib29sZWFuO1xuICBzaG91bGRNZXJnZT86IGJvb2xlYW47XG4gIHJlcGxhY2VMb3dlclRpZXI/OiBib29sZWFuO1xuICByZXBsYWNlVGhyZXNob2xkPzogYm9vbGVhbjtcbiAgbWlzc2luZ0xvb2t1cHM/OiBJTm9kZU1pc3NpbmdMb29rdXBMb2dbXTtcbiAgcmVxdWlyZW1lbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgbG9ncz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgLy8gcG9zc2libGUgc3ViIHZhbHVlc1xuICBpbnB1dD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwcm9wZXJ0eT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlVGVybUxvZ3Mge1xuICBbbW9kZWxLZXk6IHN0cmluZ106IGFueSB8IElOb2RlVGVybUxvZztcbiAgbW9kZWxzOiBzdHJpbmdbXTtcbiAgaXNLZXk/OiBib29sZWFuO1xuICBpc1Byb3BlcnR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZUxvZ3Mge1xuICBbdGVybTogc3RyaW5nXTogSU5vZGVUZXJtTG9ncztcbn1cblxuY29uc3QgdGVybVR5cGVzID0gT2JqZWN0LnZhbHVlcyhUZXJtVGVybVR5cGUpO1xuXG5jb25zdCBibGFua05vZGVUeXBlcyA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkuZmlsdGVyKHQgPT4gIWlzVHlwZU5vZGUodCkpO1xuXG5jb25zdCBzY2hlbWFUeXBlc0xvd2VyQ2FzZSA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkubWFwKHYgPT4gdi50b0xvd2VyQ2FzZSgpKTtcblxuY29uc3QgYmxhbmtOb2RlVHlwZXNMb3dlckNhc2UgPSBibGFua05vZGVUeXBlcy5tYXAodiA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuXG5jb25zdCBtaXNzaW5nTG9va3VwUHJlZml4ID0gJ01pc3NpbmcgbG9va3VwJztcblxuY29uc3Qgbm9WYWx1ZSA9ICdOb25lJztcblxuY29uc3QgaGFzVmFsdWUgPSAodmFsdWU/OiBzdHJpbmcpID0+ICEhdmFsdWUgJiYgdmFsdWUgIT09IG5vVmFsdWU7XG5cbmNvbnN0IHBhcnNlRmlsZW5hbWUgPSAoZmlsZXBhdGg6IHN0cmluZykgPT4ge1xuICBjb25zdCBbZmlsZW5hbWVdID0gZmlsZXBhdGguc3BsaXQoJy4nKTtcbiAgY29uc3QgZXh0ID0gdGVybVR5cGVzLmluY2x1ZGVzKGZpbGVuYW1lIGFzIGFueSkgPyBTdXBwb3J0ZWRFeHRlbnNpb25zLnhsc3ggOiBTdXBwb3J0ZWRFeHRlbnNpb25zLmNzdjtcbiAgcmV0dXJuIGZpbGVUb0V4dChmaWxlbmFtZSwgZXh0KTtcbn07XG5cbmNvbnN0IHBhcnNlTG9va3VwID0gKHsgY29sdW1uLCB0ZXJtaWQsIFttaXNzaW5nTG9va3VwUHJlZml4XTogbWlzc2luZ0xvb2t1cCB9KSA9PiAoe1xuICBmaWxlbmFtZTogcGFyc2VGaWxlbmFtZShtaXNzaW5nTG9va3VwKSxcbiAgdGVybUlkOiB0ZXJtaWQsXG4gIGNvbHVtblxufSk7XG5cbmNvbnN0IGNzdlZhbHVlID0gKHZhbHVlOiBzdHJpbmcpID0+ICh2YWx1ZSB8fCAnJykucmVwbGFjZSgnWycsICcnKS5yZXBsYWNlKCddJywgJycpO1xuXG5jb25zdCBwYXJzZU1lc3NhZ2UgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UobWVzc2FnZSk7XG4gICAgcmV0dXJuIGRhdGEubWVzc2FnZS5zcGxpdCgnLCcpLnJlZHVjZShcbiAgICAgIChwcmV2LCBwYXJ0cykgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0cy5zcGxpdCgnPScpO1xuICAgICAgICBjb25zdCB2YWwgPSBjc3ZWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAuLi4oa2V5ICYmIHZhbCA/IHsgW2tleS50cmltKCldOiB2YWwgfSA6IHt9KVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHsgbG9nZ2VyOiBkYXRhLmxvZ2dlciB9XG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gbWFrZSBzdXJlIGl0IHdvcmtzIGV2ZW4gaWYgb25lIGxvZyBpcyBtYWxmb3JtZWRcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmNvbnN0IHBhcnNlTG9nTXVsdGlwbGVWYWx1ZSA9ICh2YWx1ZXM6IHN0cmluZ1tdW10pID0+XG4gIHZhbHVlc1xuICAgIC5tYXAodiA9PiAodi5maWx0ZXIoQm9vbGVhbikubGVuZ3RoID09PSAyID8gdi5qb2luKCc6JykgOiBudWxsKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmpvaW4oJ18nKTtcblxuY29uc3QgcGFyc2VMb2cgPSAobG9nOiBhbnkpID0+XG4gIFsndmFsdWUnIGluIGxvZywgJ2NvZWZmaWNpZW50JyBpbiBsb2csICdub2RlJyBpbiBsb2cgfHwgJ29wZXJhdGlvbicgaW4gbG9nXS5ldmVyeShCb29sZWFuKVxuICAgID8ge1xuICAgICAgICBbbG9nLm5vZGUgfHwgbG9nLm9wZXJhdGlvbl06IHBhcnNlTG9nTXVsdGlwbGVWYWx1ZShbXG4gICAgICAgICAgWyd2YWx1ZScsIGxvZy52YWx1ZV0sXG4gICAgICAgICAgWydjb2VmZmljaWVudCcsIGxvZy5jb2VmZmljaWVudF0sXG4gICAgICAgICAgWydvcGVyYXRpb24nLCAhbG9nLm5vZGUgPyBsb2cub3BlcmF0aW9uIDogbnVsbF1cbiAgICAgICAgXSlcbiAgICAgIH1cbiAgICA6IG9taXRMb2dLZXlzKGxvZyk7XG5cbmNvbnN0IG9taXRMb2dLZXlzID0gKGxvZzogYW55LCAuLi5rZXlzOiBzdHJpbmdbXSkgPT5cbiAgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGxvZykuZmlsdGVyKChba2V5XSkgPT4gIXNjaGVtYVR5cGVzTG93ZXJDYXNlLmluY2x1ZGVzKGtleSkgJiYgIWtleXMuaW5jbHVkZXMoa2V5KSkpO1xuXG5jb25zdCBpbmNsdWRlQmxhbmtOb2RlcyA9IChsb2dzLCBsb2cpID0+XG4gIE9iamVjdC5rZXlzKGxvZylcbiAgICAuZmlsdGVyKGtleSA9PiBibGFua05vZGVUeXBlc0xvd2VyQ2FzZS5pbmNsdWRlcyhrZXkpKVxuICAgIC5yZWR1Y2UoXG4gICAgICAocHJldiwga2V5KSA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBba2V5XTogdW5pcXVlKFsuLi4oKHR5cGVvZiBwcmV2W2tleV0gPT09ICdzdHJpbmcnID8gW3ByZXZba2V5XV0gOiBwcmV2W2tleV0pIHx8IFtdKSwgbG9nW2tleV1dKVxuICAgICAgfSksXG4gICAgICBsb2dzXG4gICAgKTtcblxuY29uc3QgZ3JvdXBMb2cgPSAoXG4gIGdyb3VwLFxuICB7IGxvZ2dlciwgdGVybSwgbW9kZWwsIGtleSwgc2hvdWxkX3J1biwgc2hvdWxkX21lcmdlLCBydW5fcmVxdWlyZWQsIHByb3BlcnR5LCAuLi5sb2cgfTogYW55XG4pID0+IHtcbiAgY29uc3QgaXNPcmNoZXN0cmF0b3IgPSBsb2dnZXIuaW5jbHVkZXMoJ29yY2hlc3RyYXRvcicpO1xuICBjb25zdCBpc0tleSA9ICFpc09yY2hlc3RyYXRvciAmJiAhIWtleTtcbiAgY29uc3QgaXNQcm9wZXJ0eSA9ICFpc09yY2hlc3RyYXRvciAmJiAhIXByb3BlcnR5O1xuICBjb25zdCBwYXJlbnRMb2dLZXkgPSBbaGFzVmFsdWUodGVybSkgJiYgYFtcIiR7dGVybX1cIl1gLCAoIWlzT3JjaGVzdHJhdG9yICYmIGtleSkgfHwgcHJvcGVydHldXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcuJyk7XG4gIGNvbnN0IGxvZ01vZGVsS2V5ID0gW3BhcmVudExvZ0tleSwgaGFzVmFsdWUobW9kZWwpICYmIG1vZGVsXS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuXG4gIHNldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5tb2RlbHNgLCB1bmlxdWUoWy4uLmdldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5tb2RlbHNgLCBbXSksIG1vZGVsXSkpO1xuICBzZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0uaXNLZXlgLCBpc0tleSk7XG4gIHNldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5pc1Byb3BlcnR5YCwgaXNQcm9wZXJ0eSk7XG5cbiAgbGV0IGRhdGEgPSBnZXQoZ3JvdXAsIGxvZ01vZGVsS2V5LCB7fSk7XG5cbiAgZGF0YSA9IGluY2x1ZGVCbGFua05vZGVzKGRhdGEsIGxvZyk7XG5cbiAgaWYgKHR5cGVvZiBzaG91bGRfcnVuICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHNob3VsZFJ1biA9IHNob3VsZF9ydW4gPT09ICdUcnVlJztcblxuICAgIGRhdGEgPSBpc09yY2hlc3RyYXRvclxuICAgICAgPyB7XG4gICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAuLi5vbWl0TG9nS2V5cyhsb2csICd2YWx1ZScpLFxuICAgICAgICAgIHNob3VsZFJ1bk9yY2hlc3RyYXRvcjogc2hvdWxkUnVuXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgLi4ub21pdExvZ0tleXMobG9nKSxcbiAgICAgICAgICBzaG91bGRSdW5cbiAgICAgICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcnVuX3JlcXVpcmVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHJ1blJlcXVpcmVkID0gcnVuX3JlcXVpcmVkID09PSAnVHJ1ZSc7XG5cbiAgICBkYXRhID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIC4uLihydW5SZXF1aXJlZCA/IHt9IDogb21pdExvZ0tleXMobG9nKSksIC8vIG5vIG5lZWQgdG8gc2F2ZSBsb2dzIGlmIHdlIG5lZWQgdG8gcnVuIHRoZSBtb2RlbFxuICAgICAgcnVuUmVxdWlyZWRcbiAgICB9O1xuICB9IGVsc2UgaWYgKCdyZXF1aXJlbWVudHMnIGluIGxvZykge1xuICAgIGNvbnN0IHsgcmVxdWlyZW1lbnRzLCAuLi5sb2dEYXRhIH0gPSBsb2c7XG5cbiAgICBkYXRhLnJlcXVpcmVtZW50cyA9IHtcbiAgICAgIC4uLihkYXRhLnJlcXVpcmVtZW50cyB8fCB7fSksXG4gICAgICAuLi5sb2dEYXRhXG4gICAgfTtcbiAgfSBlbHNlIGlmIChtaXNzaW5nTG9va3VwUHJlZml4IGluIGxvZykge1xuICAgIGRhdGEubWlzc2luZ0xvb2t1cHMgPSB1bmlxdWUoWy4uLihkYXRhLm1pc3NpbmdMb29rdXBzIHx8IFtdKSwgcGFyc2VMb29rdXAobG9nKV0pO1xuICB9IGVsc2UgaWYgKCFpc09yY2hlc3RyYXRvcikge1xuICAgIGRhdGEubG9ncyA9IHtcbiAgICAgIC4uLihkYXRhLmxvZ3MgfHwge30pLFxuICAgICAgLi4ucGFyc2VMb2cobG9nKVxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiBzaG91bGRfbWVyZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGF0YS5zaG91bGRNZXJnZSA9IHNob3VsZF9tZXJnZSA9PT0gJ1RydWUnO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nLnJlcGxhY2VMb3dlclRpZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGF0YS5yZXBsYWNlTG93ZXJUaWVyID0gbG9nLnJlcGxhY2VMb3dlclRpZXIgPT09ICdUcnVlJztcbiAgfVxuICBpZiAodHlwZW9mIGxvZy5yZXBsYWNlVGhyZXNob2xkICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRhdGEucmVwbGFjZVRocmVzaG9sZCA9IGxvZy5yZXBsYWNlVGhyZXNob2xkID09PSAnVHJ1ZSc7XG4gIH1cblxuICBzZXQoZ3JvdXAsIGxvZ01vZGVsS2V5LCBkYXRhKTtcbiAgcmV0dXJuIGdyb3VwO1xufTtcblxuY29uc3QgZ3JvdXBMb2dTdWJWYWx1ZSA9IChncm91cCwgbG9nLCBrZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBpZCA9IGxvZ1trZXldO1xuICBjb25zdCBkYXRhID0gZ3JvdXBMb2coZ3JvdXBbaWRdIHx8IHt9LCBsb2cpO1xuICBncm91cFtpZF0gPSBkYXRhO1xuXG4gIGlmIChrZXkgPT09ICd0cmFuc2Zvcm1hdGlvbicpIHtcbiAgICAvLyBhZGQgdmFsdWUgdG8gdGhlIHNhbWUgdGVybS9tb2RlbCBvbiBwYXJlbnQgZ3JvdXBcbiAgICBPYmplY3QuZW50cmllcyhncm91cFtpZF0pLm1hcCgoW3Rlcm0sIG1vZGVsc10pID0+XG4gICAgICBPYmplY3Qua2V5cyhtb2RlbHMpLm1hcChtb2RlbCA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZ3JvdXA/Llt0ZXJtXT8uW21vZGVsXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBncm91cFt0ZXJtXVttb2RlbF1ba2V5XSA9IHVuaXF1ZShbLi4uKGdyb3VwW3Rlcm1dW21vZGVsXVtrZXldIHx8IFtdKSwgaWRdKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGdyb3VwO1xufTtcblxuY29uc3Qgc3ViVmFsdWVLZXlzID0gWyd0cmFuc2Zvcm1hdGlvbiddO1xuXG5leHBvcnQgY29uc3QgZ3JvdXBMb2dzQnlNb2RlbCA9IChkYXRhOiBzdHJpbmcpOiBJTm9kZUxvZ3MgPT5cbiAgZGF0YVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcChwYXJzZU1lc3NhZ2UpXG4gICAgLmZpbHRlcih2ID0+IFtoYXNWYWx1ZSh2Py5tb2RlbCksIGhhc1ZhbHVlKHY/LnRlcm0pIHx8IGhhc1ZhbHVlKHY/LmtleSldLmV2ZXJ5KEJvb2xlYW4pKVxuICAgIC5yZWR1Y2UoKGdyb3VwLCBsb2cpID0+IHtcbiAgICAgIGNvbnN0IHN1YlZhbHVlID0gc3ViVmFsdWVLZXlzLmZpbmQodiA9PiAhIWxvZ1t2XSk7XG4gICAgICByZXR1cm4gc3ViVmFsdWVcbiAgICAgICAgPyBzdWJWYWx1ZSA9PT0gJ3RyYW5zZm9ybWF0aW9uJ1xuICAgICAgICAgID8gLy8gZm9yIHRyYW5zZm9ybWF0aW9uLCBkbyBub3QgYWRkIHRvIHRvcC1sZXZlbCBtb2RlbFxuICAgICAgICAgICAgZ3JvdXBMb2dTdWJWYWx1ZShncm91cCwgbG9nLCBzdWJWYWx1ZSlcbiAgICAgICAgICA6IGdyb3VwTG9nKGdyb3VwTG9nU3ViVmFsdWUoZ3JvdXAsIGxvZywgc3ViVmFsdWUpLCBsb2cpXG4gICAgICAgIDogZ3JvdXBMb2coZ3JvdXAsIGxvZyk7XG4gICAgfSwge30pO1xuXG5jb25zdCBhc0FycmF5ID0gKHZhbHVlczogYW55W10pID0+IChBcnJheS5pc0FycmF5KHZhbHVlcykgPyB2YWx1ZXMgOiBbXSk7XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlVGVybXMgPSAoXG4gIG9yaWdpbmFsVmFsdWVzOiBibGFua05vZGVbXSxcbiAgcmVjYWxjdWxhdGVkVmFsdWVzOiBibGFua05vZGVbXSxcbiAgdGVybXM/OiBJVGVybUpTT05MRFtdLFxuICBmaWx0ZXJUZXJtVHlwZXM/OiBUZXJtVGVybVR5cGVbXSxcbiAgZXh0cmFUZXJtczogSVRlcm1KU09OTERbXSA9IFtdXG4pOiBQcm9taXNlPElUZXJtSlNPTkxEW10+ID0+XG4gIGZyb20oW1xuICAgIC4uLih0ZXJtcz8ubGVuZ3RoXG4gICAgICA/IHRlcm1zXG4gICAgICA6IFtcbiAgICAgICAgICAuLi5hc0FycmF5KG9yaWdpbmFsVmFsdWVzKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKSxcbiAgICAgICAgICAuLi5hc0FycmF5KHJlY2FsY3VsYXRlZFZhbHVlcykubWFwKCh7IHRlcm0gfSkgPT4gdGVybSlcbiAgICAgICAgXS5maWx0ZXIobm9kZSA9PiAhZmlsdGVyVGVybVR5cGVzPy5sZW5ndGggfHwgZmlsdGVyVGVybVR5cGVzLmluY2x1ZGVzKG5vZGUudGVybVR5cGUpKSksXG4gICAgLi4uZXh0cmFUZXJtc1xuICBdKVxuICAgIC5waXBlKFxuICAgICAgZGlzdGluY3QodiA9PiB2IVsnQGlkJ10pLFxuICAgICAgdG9BcnJheSgpLFxuICAgICAgbWFwKHYgPT4gb3JkZXJCeSh2LCBbJ25hbWUnXSwgWydhc2MnXSkpXG4gICAgKVxuICAgIC50b1Byb21pc2UoKTtcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVLZXlzID0gKG9yaWdpbmFsVmFsdWVzOiBub25CbGFua05vZGUsIHJlY2FsY3VsYXRlZFZhbHVlczogbm9uQmxhbmtOb2RlKSA9PlxuICB1bmlxdWUoWy4uLk9iamVjdC5rZXlzKG9yaWdpbmFsVmFsdWVzIHx8IHt9KSwgLi4uT2JqZWN0LmtleXMocmVjYWxjdWxhdGVkVmFsdWVzIHx8IHt9KV0uZmlsdGVyKGlzVmFsaWRLZXkpKTtcblxuZXhwb3J0IHR5cGUgYmxhbmtOb2RlID0gRW1pc3Npb24gfCBQcm9kdWN0IHwgSGVzdGlhSW5wdXQgfCBQcm9wZXJ0eSB8IFByYWN0aWNlIHwgSW5kaWNhdG9yIHwgTWVhc3VyZW1lbnQ7XG5leHBvcnQgdHlwZSBub25CbGFua05vZGUgPSBDb21wbGV0ZW5lc3M7XG5cbmV4cG9ydCBlbnVtIExvZ1N0YXR1cyB7XG4gIHN1Y2Nlc3MgPSAnc3VjY2Vzc2Z1bCcsXG4gIGVycm9yID0gJ2ZhaWxlZCcsXG4gIHNraXBIaWVyYXJjaHkgPSAnbm90IHJ1biAobW9kZWwgaGlnaGVyIHVwIGhpZXJhcmNoeSBydW4gaW5zdGVhZCknLFxuICBkYXRhUHJvdmlkZWQgPSAnbm90IHJ1biAodXNlciBwcm92aWRlZCBkYXRhIHJldGFpbmVkKScsXG4gIG5vdFJlcXVpcmVkID0gJ25vdCByZWxldmFudCdcbn1cblxuY29uc3QgaGFzTG9ncyA9IChsb2dzPzogSU5vZGVUZXJtTG9nKSA9PiAhIWxvZ3M/LnJlcXVpcmVtZW50cyB8fCAhIWxvZ3M/LmxvZ3MgfHwgbG9ncz8ubWlzc2luZ0xvb2t1cHM/Lmxlbmd0aCA+IDA7XG5cbmNvbnN0IGhhc0xvZ0RldGFpbHMgPSAoc3RhdHVzOiBMb2dTdGF0dXMsIGxvZ3M/OiBJTm9kZVRlcm1Mb2cpID0+XG4gIFtMb2dTdGF0dXMuc3VjY2VzcywgTG9nU3RhdHVzLmVycm9yLCBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXS5pbmNsdWRlcyhzdGF0dXMpICYmIGhhc0xvZ3MobG9ncyk7XG5cbmNvbnN0IGxvZ1N0YXR1cyA9IChcbiAgZGF0YTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHwgSUJsYW5rTm9kZUxvZyB8IElOb25CbGFua05vZGVMb2csXG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2csXG4gIGhhc1ByZXZpb3VzU3VjY2VzcyA9IGZhbHNlXG4pID0+IHtcbiAgY29uc3Qgd2l0aExvZ3MgPSBoYXNMb2cobG9ncyk7XG4gIGNvbnN0IGlzQ2FsY3VsYXRlZCA9IFtcbiAgICB0eXBlb2YgZGF0YS5vcmlnaW5hbFZhbHVlID09PSAndW5kZWZpbmVkJywgLy8gbm8gb3JpZ2luYWwgdmFsdWVcbiAgICBkYXRhLmlzUmVjYWxjdWxhdGVkIC8vIGlzIHJlY2FsY3VsYXRlZFxuICBdLmV2ZXJ5KEJvb2xlYW4pO1xuICAvLyBjYW4gYmUgbm90IHJlcXVpcmVkIGZvciBhIHNwZWNpZmljIG1vZGVsXG4gIGNvbnN0IGlzUmVxdWlyZWQgPSAhIWxvZ3MgJiYgJ3J1blJlcXVpcmVkJyBpbiBsb2dzID8gbG9ncy5ydW5SZXF1aXJlZCA6IGRhdGEuaXNSZXF1aXJlZDtcbiAgcmV0dXJuIHdpdGhMb2dzXG4gICAgPyAhaXNSZXF1aXJlZFxuICAgICAgPyBMb2dTdGF0dXMubm90UmVxdWlyZWRcbiAgICAgIDogaXNSdW5PcmNoZXN0cmF0b3IobG9ncylcbiAgICAgID8gJ3Nob3VsZFJ1bicgaW4gbG9nc1xuICAgICAgICA/IGxvZ3Muc2hvdWxkUnVuXG4gICAgICAgICAgPyBkYXRhLmlzUmVjYWxjdWxhdGVkXG4gICAgICAgICAgICA/IExvZ1N0YXR1cy5zdWNjZXNzXG4gICAgICAgICAgICA6IGlzRW1wdHkoZGF0YS5vcmlnaW5hbFZhbHVlKVxuICAgICAgICAgICAgPyBMb2dTdGF0dXMuZXJyb3JcbiAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICAgICAgIDogaGFzUHJldmlvdXNTdWNjZXNzXG4gICAgICAgICAgPyBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgICAgICAgIDogTG9nU3RhdHVzLmVycm9yXG4gICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICAgOiBkYXRhLmlzUmVjYWxjdWxhdGVkXG4gICAgICA/IExvZ1N0YXR1cy5za2lwSGllcmFyY2h5XG4gICAgICA6IExvZ1N0YXR1cy5kYXRhUHJvdmlkZWRcbiAgICA6IGlzQ2FsY3VsYXRlZFxuICAgID8gTG9nU3RhdHVzLnNraXBIaWVyYXJjaHlcbiAgICA6IExvZ1N0YXR1cy5kYXRhUHJvdmlkZWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWdNb2RlbCB7XG4gIG1ldGhvZElkOiBzdHJpbmc7XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2c7XG4gIHNob3dMb2dzPzogYm9vbGVhbjtcbiAgc3RhdHVzPzogTG9nU3RhdHVzO1xuICBtb2RlbD86IElNb2RlbDtcbiAgY29uZmlnPzogSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2dTdWJWYWx1ZSB7XG4gIGJsYW5rTm9kZTogdHJ1ZTtcbiAga2V5OiBzdHJpbmc7XG4gIHNob3dVbml0czogYm9vbGVhbjtcbiAgb3JpZ2luYWxWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgcmVjYWxjdWxhdGVkVmFsdWU6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG4gIGlzUmVjYWxjdWxhdGVkOiBib29sZWFuO1xuICBpc1JlcXVpcmVkPzogYm9vbGVhbjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNvbmZpZ01vZGVscz86IElDb25maWdNb2RlbFtdO1xuICBsb2dzPzogSU5vZGVUZXJtTG9ncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTG9nIHtcbiAgbG9ncz86IElOb2RlVGVybUxvZ3M7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgY2FuT3BlbjogYm9vbGVhbjtcbiAgdHlwZT86IFNjaGVtYVR5cGU7XG4gIGNvbmZpZ01vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXIgfCBib29sZWFuO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyIHwgYm9vbGVhbjtcbiAgaXNPcmlnaW5hbDogYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGhhc0RhdGE6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gIC8vIGNvbnRhaW5zIG11bHRpcGxlIG1vZGVscyBhbGwgcnVubmluZyBpbiBwYXJhbGxlbFxuICBhbGxQYXJhbGxlbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJsYW5rTm9kZUxvZyBleHRlbmRzIElMb2cge1xuICBibGFua05vZGU6IHRydWU7XG4gIHRlcm06IElUZXJtSlNPTkxEO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAga2V5czogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW107XG4gIHN1YlZhbHVlczogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW107XG4gIC8vIG1vZGVscyBhcmUgcHJlc2VudCBhcyB3ZWxsIGluIG9uZSBvZiB0aGUgU3ViVmFsdWVzLCBkbyBub3Qgc2hvdyB0d2ljZVxuICBtb2RlbHNJblN1YlZhbHVlcz86IGJvb2xlYW47XG4gIG9yaWdpbmFsOiBibGFua05vZGVbXTtcbiAgLy8gd2hlbiBtdWx0aXBsZSBtb2RlbHMgYXJlIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ/OiB7XG4gICAgW21ldGhvZElkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG4gIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW107XG4gIC8vIHdoZW4gbXVsdGlwbGUgbW9kZWxzIGFyZSBydW5uaW5nIGluIHBhcmFsbGVsXG4gIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZD86IHtcbiAgICBbbWV0aG9kSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9uQmxhbmtOb2RlTG9nIGV4dGVuZHMgSUxvZyB7XG4gIGJsYW5rTm9kZTogZmFsc2U7XG4gIGtleTogc3RyaW5nO1xufVxuXG5jb25zdCByZW1vdmVDb25maWdNb2RlbEJ5U3RhdHVzID1cbiAgKC4uLnN0YXR1c2VzOiBMb2dTdGF0dXNbXSkgPT5cbiAgKG1vZGVsOiBJQ29uZmlnTW9kZWwpID0+XG4gICAgIXN0YXR1c2VzLmluY2x1ZGVzKG1vZGVsPy5zdGF0dXMpO1xuXG5jb25zdCBrZWVwQ29uZmlnTW9kZWxCeVN0YXR1cyA9XG4gICguLi5zdGF0dXNlczogTG9nU3RhdHVzW10pID0+XG4gIChtb2RlbDogSUNvbmZpZ01vZGVsKSA9PlxuICAgIHN0YXR1c2VzLmluY2x1ZGVzKG1vZGVsPy5zdGF0dXMpO1xuXG5jb25zdCBmaWx0ZXJDb25maWdNb2RlbHMgPSAoXG4gIG1vZGVsczogSUNvbmZpZ01vZGVsIHwgKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdLFxuICBmaWx0ZXJGdW5jOiAobW9kZWw6IElDb25maWdNb2RlbCkgPT4gYm9vbGVhblxuKSA9PlxuICAoQXJyYXkuaXNBcnJheShtb2RlbHMpID8gbW9kZWxzIDogW21vZGVsc10pXG4gICAgLmZpbHRlcih2ID0+IEFycmF5LmlzQXJyYXkodikgfHwgZmlsdGVyRnVuYyh2KSlcbiAgICAubWFwKHYgPT4gKEFycmF5LmlzQXJyYXkodikgPyB2LmZpbHRlcihmaWx0ZXJGdW5jKSA6IHYpKVxuICAgIC5maWx0ZXIodiA9PiAoQXJyYXkuaXNBcnJheSh2KSA/IHY/Lmxlbmd0aCA6ICEhdikpO1xuXG5pbnRlcmZhY2UgSVBhcnRpYWxTdWJWYWx1ZSB7XG4gIGlkPzogc3RyaW5nO1xuICBrZXk6IHN0cmluZztcbiAgY29uZmlnTW9kZWxzOiBzdHJpbmdbXTtcbiAgc2hvd1VuaXRzOiBib29sZWFuO1xuICBvcmlnaW5hbFZhbHVlPzogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgcmVjYWxjdWxhdGVkVmFsdWU/OiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xufVxuXG5jb25zdCBtZXJnZVN1YlZhbHVlcyA9ICh2YWx1ZXM6IElQYXJ0aWFsU3ViVmFsdWVbXSkgPT5cbiAgT2JqZWN0LnZhbHVlcyhcbiAgICB2YWx1ZXMucmVkdWNlKFxuICAgICAgKHByZXYsIHsgaWQsIGtleSwgY29uZmlnTW9kZWxzLCAuLi5kYXRhIH0pID0+IHtcbiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gW2tleSwgaWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG4gICAgICAgIHByZXZbdW5pcXVlS2V5XSA9IHtcbiAgICAgICAgICAuLi5PYmplY3QuYXNzaWduKHt9LCBwcmV2W3VuaXF1ZUtleV0sIGRhdGEpLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBjb25maWdNb2RlbHM6IHVuaXF1ZShbLi4uKChwcmV2W3VuaXF1ZUtleV0gfHwge30pLmNvbmZpZ01vZGVscyB8fCBbXSksIC4uLihjb25maWdNb2RlbHMgfHwgW10pXSlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9LFxuICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiBJUGFydGlhbFN1YlZhbHVlIH1cbiAgICApXG4gICk7XG5cbmNvbnN0IHJlZHVjZVZhbHVlcyA9ICh2YWx1ZXM6IGFueVtdLCB0ZXJtSWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBwcm9wZXJ0eVZhbHVlcyA9IHZhbHVlc1xuICAgIC5tYXAoKHsgdmFsdWUgfSkgPT4gcHJvcGVydHlWYWx1ZSh2YWx1ZSwgdGVybUlkKSlcbiAgICAvLyBwcm9wZXJ0eVZhbHVlIG1heSByZXR1cm4gbnVsbCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZXJlZm9yZSByZW1vdmUgdGhlbSBmcm9tIHRvdGFsXG4gICAgLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xuICByZXR1cm4gcHJvcGVydHlWYWx1ZXMubGVuZ3RoID8gcHJvcGVydHlWYWx1ZXMucmVkdWNlKChwLCB2KSA9PiBwICsgdiwgMCkgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBpc1J1bk9yY2hlc3RyYXRvciA9IChsb2c6IElOb2RlVGVybUxvZykgPT4gISgnc2hvdWxkUnVuT3JjaGVzdHJhdG9yJyBpbiBsb2cpIHx8IGxvZy5zaG91bGRSdW5PcmNoZXN0cmF0b3I7XG5cbmNvbnN0IGhhc0xvZyA9IChsb2c6IElOb2RlVGVybUxvZywgd2l0aE9yY2hlc3RyYXRvciA9IHRydWUpID0+XG4gICEhbG9nICYmICgnc2hvdWxkUnVuJyBpbiBsb2cgfHwgJ3J1blJlcXVpcmVkJyBpbiBsb2cgfHwgKHdpdGhPcmNoZXN0cmF0b3IgJiYgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nKSk7XG5cbmNvbnN0IGlzUmVjYWxjdWxhdGVkID0gKGtleTogc3RyaW5nKSA9PiAodmFsdWU6IGJsYW5rTm9kZSB8IG5vbkJsYW5rTm9kZSkgPT5cbiAgWy4uLih2YWx1ZS5hZGRlZCB8fCBbXSksIC4uLih2YWx1ZS51cGRhdGVkIHx8IFtdKV0uaW5jbHVkZXMoa2V5KTtcblxuY29uc3QgaGFzUmVjYWxjdWxhdGVkS2V5cyA9ICh2YWx1ZTogYmxhbmtOb2RlIHwgbm9uQmxhbmtOb2RlKSA9PlxuICBbLi4uKHZhbHVlLmFkZGVkIHx8IFtdKSwgLi4uKHZhbHVlLnVwZGF0ZWQgfHwgW10pXS5sZW5ndGggPiAwO1xuXG5jb25zdCBoYXNSZWNhbGN1bGF0ZWRWYWx1ZSA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBrZXkgPSAndmFsdWUnKSA9PiB2YWx1ZXMuc29tZShpc1JlY2FsY3VsYXRlZChrZXkpKTtcblxuY29uc3QgZmlsdGVyRGVsZXRlZCA9IChibGFua05vZGVzOiBibGFua05vZGVbXSkgPT4gKGJsYW5rTm9kZXMgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiAhKHZhbHVlIGFzIGFueSkuZGVsZXRlZCk7XG5cbmNvbnN0IGJsYW5rTm9kZVZhbHVlQnlLZXk6IHtcbiAgW2tleTogc3RyaW5nXTogKHZhbHVlczogYmxhbmtOb2RlW10sIGtleT86IHN0cmluZywgaWQ/OiBzdHJpbmcpID0+IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG59ID0ge1xuICBwcm9wZXJ0eTogKHZhbHVlczogKEVtaXNzaW9uIHwgUHJvZHVjdCB8IEhlc3RpYUlucHV0KVtdLCBfaywgaWQpID0+XG4gICAgISFpZCAmJiB2YWx1ZXM/Lmxlbmd0aCA/ICh2YWx1ZXNbMF0ucHJvcGVydGllcyB8fCBbXSkuZmluZChwID0+IHAudGVybVsnQGlkJ10gPT09IGlkKT8udmFsdWUgfHwgJycgOiAnJyxcbiAgaW5wdXQ6ICh2YWx1ZXM6IEVtaXNzaW9uW10sIF9rLCBpZCkgPT5cbiAgICAhIWlkICYmICh2YWx1ZXMgfHwgW10pLmZpbHRlcih2ID0+IHZbJ0B0eXBlJ10gPT09IFNjaGVtYVR5cGUuRW1pc3Npb24pLmxlbmd0aFxuICAgICAgPyByZWR1Y2VWYWx1ZXMoXG4gICAgICAgICAgdmFsdWVzLmZpbHRlcigoeyBpbnB1dHMgfSkgPT4gKGlucHV0cyB8fCBbXSkuc29tZShpbnB1dCA9PiBpbnB1dFsnQGlkJ10gPT09IGlkKSksXG4gICAgICAgICAgaWRcbiAgICAgICAgKVxuICAgICAgOiAnJyxcbiAgdHJhbnNmb3JtYXRpb246ICh2YWx1ZXM6IEVtaXNzaW9uW10sIF9rLCBpZCkgPT5cbiAgICB2YWx1ZXMubGVuZ3RoXG4gICAgICA/IHJlZHVjZVZhbHVlcyhcbiAgICAgICAgICB2YWx1ZXMuZmlsdGVyKCh7IHRyYW5zZm9ybWF0aW9uIH0pID0+IHRyYW5zZm9ybWF0aW9uPy5bJ0BpZCddID09PSBpZCksXG4gICAgICAgICAgaWRcbiAgICAgICAgKVxuICAgICAgOiAnJyxcbiAgZGVmYXVsdDogKGJsYW5rTm9kZXMsIGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYmxhbmtOb2Rlcz8ubGVuZ3RoID8gYmxhbmtOb2Rlc1swXVtrZXldIDogbnVsbDtcbiAgICByZXR1cm4gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAndW5kZWZpbmVkJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKVxuICAgICAgPyBpc1VuZGVmaW5lZCh2YWx1ZSlcbiAgICAgICAgPyAnJ1xuICAgICAgICA6IHZhbHVlXG4gICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICA/IHZhbHVlLmxlbmd0aCA+IDFcbiAgICAgICAgPyB2YWx1ZS5qb2luKCc7JylcbiAgICAgICAgOiB2YWx1ZVswXVxuICAgICAgOiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBibGFua05vZGVWYWx1ZSA9IChibGFua05vZGVzOiBibGFua05vZGVbXSwga2V5OiBzdHJpbmcsIGlkPzogc3RyaW5nKSA9PlxuICBibGFua05vZGVWYWx1ZUJ5S2V5W2tleSBpbiBibGFua05vZGVWYWx1ZUJ5S2V5ID8ga2V5IDogJ2RlZmF1bHQnXShibGFua05vZGVzLCBrZXksIGlkKTtcblxuY29uc3Qgc3ViVmFsdWVMb2dLZXkgPSAoeyBrZXksIGlkIH06IElCbGFua05vZGVMb2dTdWJWYWx1ZSk6IHN0cmluZyA9PlxuICBrZXkgPT09ICd0cmFuc2Zvcm1hdGlvbicgPyBrZXkgOiBpZCB8fCBrZXkgfHwgbnVsbDtcblxuY29uc3QgaW5wdXRWYWx1ZSA9ICh7IHZhbHVlLCBjb2VmZmljaWVudCB9OiBhbnkgPSB7fSkgPT5cbiAgW3ZhbHVlLCBjb2VmZmljaWVudF0uZXZlcnkoaXNOdW1iZXIpID8gK3ZhbHVlICogK2NvZWZmaWNpZW50IDogdW5kZWZpbmVkO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3RyaW5nLCBzaG93VW5pdHMgPSBmYWxzZSkgPT4ge1xuICBjb25zdCBsb2cgPSBsb2dzW2tleV0/Lltwcm9wXTtcbiAgcmV0dXJuIGxvZ1xuICAgID8gQXJyYXkuaXNBcnJheShsb2cpXG4gICAgICA/IChsb2cgYXMgc3RyaW5nW10pLm1hcChcbiAgICAgICAgICBpZCA9PlxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAga2V5OiBwcm9wLFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgc2hvd1VuaXRzXG4gICAgICAgICAgICAgIC8vIHJlY2FsY3VsYXRlZFZhbHVlOiBpbnB1dFZhbHVlKGxvZ3Nba2V5XT8ubG9ncz8uW2lkXSlcbiAgICAgICAgICAgIH0pIGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZVxuICAgICAgICApXG4gICAgICA6ICh7XG4gICAgICAgICAga2V5OiBwcm9wLFxuICAgICAgICAgIGlkOiBsb2csXG4gICAgICAgICAgc2hvd1VuaXRzXG4gICAgICAgICAgLy8gcmVjYWxjdWxhdGVkVmFsdWU6IGlucHV0VmFsdWUobG9nc1trZXldPy5sb2dzPy5bbG9nXSlcbiAgICAgICAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpXG4gICAgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBsb2dQcm9wZXJ0aWVzID0gKG5vZGVzOiBibGFua05vZGVbXSwgbW9kZWxzOiBJTW9kZWxbXSkgPT5cbiAgbm9kZXNcbiAgICAuZmxhdE1hcChub2RlID0+ICgobm9kZSBhcyBhbnkpLnByb3BlcnRpZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm1bJ0BpZCddKSlcbiAgICAubWFwKFxuICAgICAgaWQgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICBrZXk6ICdwcm9wZXJ0eScsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgc2hvd1VuaXRzOiBmYWxzZSxcbiAgICAgICAgICBjb25maWdNb2RlbHM6IGZpbmRNb2RlbHMobW9kZWxzLCBpZCkubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsKVxuICAgICAgICB9KSBhcyBJUGFydGlhbFN1YlZhbHVlXG4gICAgKTtcblxuLyoqXG4gKiBJbmNsdWRlIHRyYW5zZm9ybWF0aW9uIG1vZGVsIChjb3B5IEVtaXNzaW9ucyBmcm9tIFRyYW5zZm9ybWF0aW9uIHRvIEN5Y2xlKSBhcyBzdWJWYWx1ZS5cbiAqXG4gKiBAcGFyYW0gZW1pc3Npb25zXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBsb2dFbWlzc2lvblRyYW5zZm9ybWF0aW9ucyA9IChlbWlzc2lvbnM6IEVtaXNzaW9uW10pID0+XG4gIGVtaXNzaW9uc1xuICAgIC5maWx0ZXIoKHsgdHJhbnNmb3JtYXRpb24gfSkgPT4gISF0cmFuc2Zvcm1hdGlvbj8uWydAaWQnXSlcbiAgICAubWFwKFxuICAgICAgKHsgdHJhbnNmb3JtYXRpb24gfSkgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICBpZDogdHJhbnNmb3JtYXRpb24/LlsnQGlkJ10sXG4gICAgICAgICAga2V5OiAndHJhbnNmb3JtYXRpb24nLFxuICAgICAgICAgIHNob3dVbml0czogdHJ1ZSxcbiAgICAgICAgICBjb25maWdNb2RlbHM6IFsnY3ljbGUvdHJhbnNmb3JtYXRpb24nXVxuICAgICAgICB9KSBhcyBJUGFydGlhbFN1YlZhbHVlXG4gICAgKTtcblxuY29uc3QgaW5jbHVkZUN5Y2xlU3ViVmFsdWUgPSAoc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXSkgPT4gc3ViVmFsdWVzLnNvbWUodiA9PiB2LmtleSAhPT0gJ3Byb3BlcnR5Jyk7XG5cbmNvbnN0IGN5Y2xlU3ViVmFsdWUgPSAoeyB0ZXJtSWQsIGNvbmZpZ01vZGVscywgaXNSZXF1aXJlZCwgc3ViVmFsdWVzLCBvcmlnaW5hbCwgcmVjYWxjdWxhdGVkIH06IElCbGFua05vZGVMb2cpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHJlZHVjZVZhbHVlcyhcbiAgICBvcmlnaW5hbC5maWx0ZXIoKHY6IGFueSkgPT4gIXYuaW5wdXRzPy5sZW5ndGggJiYgIXYudHJhbnNmb3JtYXRpb24pLFxuICAgIHRlcm1JZFxuICApO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZXMgPSByZWNhbGN1bGF0ZWQuZmlsdGVyKCh2OiBhbnkpID0+ICF2LmlucHV0cz8ubGVuZ3RoICYmICF2LnRyYW5zZm9ybWF0aW9uKTtcbiAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWUgPSByZWR1Y2VWYWx1ZXMocmVjYWxjdWxhdGVkVmFsdWVzLCB0ZXJtSWQpO1xuICByZXR1cm4gaW5jbHVkZUN5Y2xlU3ViVmFsdWUoc3ViVmFsdWVzKSAmJiAhaXNFbXB0eShyZWNhbGN1bGF0ZWRWYWx1ZSlcbiAgICA/ICh7XG4gICAgICAgIGJsYW5rTm9kZTogdHJ1ZSxcbiAgICAgICAga2V5OiAnY3ljbGUnLFxuICAgICAgICBzaG93VW5pdHM6IHRydWUsXG4gICAgICAgIGNvbmZpZ01vZGVscyxcbiAgICAgICAgaXNSZXF1aXJlZCxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgICAgIGlzUmVjYWxjdWxhdGVkOiBoYXNSZWNhbGN1bGF0ZWRWYWx1ZShyZWNhbGN1bGF0ZWRWYWx1ZXMpXG4gICAgICB9IGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSlcbiAgICA6IG51bGw7XG59O1xuXG5jb25zdCBsb2dTdWJWYWx1ZXMgPSAoXG4gIGFsbExvZ3M6IElOb2RlTG9ncyxcbiAgbG9nczogSU5vZGVUZXJtTG9ncyxcbiAgb3JpZ2luYWw6IGJsYW5rTm9kZVtdLFxuICByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdLFxuICBtb2RlbHM6IElNb2RlbFtdLFxuICB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfTogSUNvbmZpZ01vZGVsRG9jc0RhdGFcbikgPT5cbiAgbWVyZ2VTdWJWYWx1ZXMoW1xuICAgIC8vIGluY2x1ZGUgcHJvcGVydGllc1xuICAgIC4uLk9iamVjdC5rZXlzKGxvZ3MpXG4gICAgICAuZmlsdGVyKGlkID0+IGxvZ3NbaWRdLmlzUHJvcGVydHkpXG4gICAgICAubWFwKFxuICAgICAgICBpZCA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGtleTogJ3Byb3BlcnR5JyxcbiAgICAgICAgICAgIHNob3dVbml0czogZmFsc2UsXG4gICAgICAgICAgICBjb25maWdNb2RlbHM6IChsb2dzW2lkXS5tb2RlbHMgfHwgW10pLmZpbHRlcih2ID0+IGhhc0xvZyhsb2dzW2lkXVt2XSkpXG4gICAgICAgICAgfSkgYXMgSVBhcnRpYWxTdWJWYWx1ZVxuICAgICAgKSxcbiAgICAuLi4odHlwZSA9PT0gU2NoZW1hVHlwZS5FbWlzc2lvbiA/IGxvZ0VtaXNzaW9uVHJhbnNmb3JtYXRpb25zKHJlY2FsY3VsYXRlZCBhcyBFbWlzc2lvbltdKSA6IFtdKSxcbiAgICAuLi5PYmplY3Qua2V5cyhsb2dzKS5mbGF0TWFwKGtleSA9PlxuICAgICAgW2xvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ2lucHV0JywgdHJ1ZSksIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ3Byb3BlcnR5JyldXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAubWFwKHYgPT4gKHsgLi4udiwgY29uZmlnTW9kZWxzOiAodi5jb25maWdNb2RlbHMgYXMgYW55W10pIHx8IFtrZXldIH0pKVxuICAgICksXG4gICAgLi4ubG9nUHJvcGVydGllcyhvcmlnaW5hbCwgbW9kZWxzKSxcbiAgICAuLi5sb2dQcm9wZXJ0aWVzKHJlY2FsY3VsYXRlZCwgbW9kZWxzKVxuICBdKVxuICAgIC5tYXAoKHsga2V5LCBpZCwgc2hvd1VuaXRzLCBjb25maWdNb2RlbHMsIG9yaWdpbmFsVmFsdWUsIHJlY2FsY3VsYXRlZFZhbHVlIH0pID0+IHtcbiAgICAgIG9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlIHx8IGJsYW5rTm9kZVZhbHVlKG9yaWdpbmFsLCBrZXksIGlkKTtcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlID0gcmVjYWxjdWxhdGVkVmFsdWUgfHwgYmxhbmtOb2RlVmFsdWUocmVjYWxjdWxhdGVkLCBrZXksIGlkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJsYW5rTm9kZTogdHJ1ZSxcbiAgICAgICAga2V5LFxuICAgICAgICBpZCxcbiAgICAgICAgc2hvd1VuaXRzLFxuICAgICAgICBjb25maWdNb2RlbHM6IGNvbmZpZ01vZGVscy5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9LCB7IGtleSwgaWQgfSBhcyBhbnkpKSxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgICAgIGlzUmVjYWxjdWxhdGVkOiAhaXNVbmRlZmluZWQocmVjYWxjdWxhdGVkVmFsdWUpICYmIHJlY2FsY3VsYXRlZFZhbHVlICE9PSBvcmlnaW5hbFZhbHVlLFxuICAgICAgICBpc1JlcXVpcmVkOiB0cnVlXG4gICAgICB9IGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKHsgY29uZmlnTW9kZWxzLCBvcmlnaW5hbFZhbHVlLCByZWNhbGN1bGF0ZWRWYWx1ZSB9KSA9PlxuICAgICAgW2NvbmZpZ01vZGVscy5sZW5ndGggPiAwLCBvcmlnaW5hbFZhbHVlICE9PSAnJyB8fCByZWNhbGN1bGF0ZWRWYWx1ZSAhPT0gJyddLmV2ZXJ5KEJvb2xlYW4pXG4gICAgKVxuICAgIC5tYXAodiA9PiAodi5rZXkgPT09ICdpbnB1dCcgPyBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyhhbGxMb2dzKSh2KSA6IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKHYpKSk7XG5cbmNvbnN0IGxvZ0tleXMgPSAoXG4gIGxvZ3M6IElOb2RlVGVybUxvZ3MsXG4gIG9yaWdpbmFsOiBibGFua05vZGVbXSxcbiAgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXSxcbiAgbW9kZWxzOiBJTW9kZWxbXSxcbiAgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH1cbikgPT5cbiAgT2JqZWN0LmtleXMobG9ncylcbiAgICAuZmlsdGVyKGtleSA9PiBsb2dzW2tleV0uaXNLZXkgJiYga2V5ICE9PSAndHJhbnNmb3JtYXRpb24nKVxuICAgIC5tYXAoXG4gICAgICBrZXkgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICBibGFua05vZGU6IHRydWUsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHNob3dVbml0czogZmFsc2UsXG4gICAgICAgICAgY29uZmlnTW9kZWxzOiAobG9nc1trZXldLm1vZGVscyB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9LCB7IGtleSB9IGFzIGFueSkpXG4gICAgICAgICAgICAvLyBvbmx5IHRha2UgdGhvc2Ugd2UgZm91bmQgYSBtYXRjaGluZyBtb2RlbCAoYXZvaWQgbWF0Y2hpbmcga2V5IG9uIHdyb25nIG5vZGUgdHlwZSlcbiAgICAgICAgICAgIC5maWx0ZXIodiA9PiAhIXYubW9kZWwpLFxuICAgICAgICAgIG9yaWdpbmFsVmFsdWU6IGJsYW5rTm9kZVZhbHVlKG9yaWdpbmFsLCBrZXkpLFxuICAgICAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiBibGFua05vZGVWYWx1ZShyZWNhbGN1bGF0ZWQsIGtleSksXG4gICAgICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGhhc1JlY2FsY3VsYXRlZFZhbHVlKHJlY2FsY3VsYXRlZCwga2V5KSxcbiAgICAgICAgICBpc1JlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0pIGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZVxuICAgIClcbiAgICAuZmlsdGVyKHYgPT4gdi5jb25maWdNb2RlbHMubGVuZ3RoID4gMClcbiAgICAubWFwKGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKTtcblxuY29uc3QgaXNNb2RlbEZvcklucHV0UHJvZHVjdCA9ICh0eXBlOiBTY2hlbWFUeXBlLCBrZXk6IHN0cmluZykgPT5cbiAgW1xuICAgIGtleSAhPT0gJ2hlc3RpYUFnZ3JlZ2F0ZWREYXRhJyxcbiAgICAha2V5LmluY2x1ZGVzKCcvaW5wdXQvJykgfHwgdHlwZSA9PT0gU2NoZW1hVHlwZS5JbnB1dCxcbiAgICAha2V5LmluY2x1ZGVzKCcvcHJvZHVjdC8nKSB8fCB0eXBlID09PSBTY2hlbWFUeXBlLlByb2R1Y3RcbiAgXS5ldmVyeShCb29sZWFuKTtcblxuY29uc3QgaXNCYWNrZ3JvdW5kSW5wdXQgPSAobG9nOiBJTm9kZVRlcm1Mb2cpID0+XG4gIGxvZy5tZXRob2RUaWVyID09PSBFbWlzc2lvbk1ldGhvZFRpZXIuYmFja2dyb3VuZCAmJiAhIWxvZy5pbnB1dCAmJiBsb2cuc2hvdWxkUnVuO1xuXG5jb25zdCBpc01vZGVsTG9nID0gKGxvZ3M6IElOb2RlVGVybUxvZ3MsIHR5cGU6IFNjaGVtYVR5cGUpID0+IChrZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBsb2cgPSBsb2dzW2tleV07XG4gIHJldHVybiAoXG4gICAgISFsb2cgJiZcbiAgICBbXG4gICAgICAvLyBoYW5kbGUgUHJvZHVjdCBzYW1lIGFzIElucHV0XG4gICAgICBpc01vZGVsRm9ySW5wdXRQcm9kdWN0KHR5cGUsIGtleSksXG4gICAgICBsb2cubWV0aG9kVGllciAhPT0gRW1pc3Npb25NZXRob2RUaWVyLmJhY2tncm91bmQsXG4gICAgICAhbG9nLmlzS2V5LFxuICAgICAgLy8gIWxvZy5pbnB1dCxcbiAgICAgICFsb2cucHJvcGVydHlcbiAgICBdLmV2ZXJ5KEJvb2xlYW4pICYmXG4gICAgWydzaG91bGRSdW4nIGluIGxvZywgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nLCAncnVuUmVxdWlyZWQnIGluIGxvZ10uc29tZShCb29sZWFuKVxuICApO1xufTtcblxuY29uc3QgbW9kZWxDb25maWdNYXRjaCA9ICh0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWw6IHN0cmluZykgPT4gKGNvbmZpZzogSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnKSA9PlxuICBbdGVybUlkID09PSBjb25maWcudmFsdWUsIG1vZGVsS2V5ID09PSBjb25maWcua2V5LCBtb2RlbCA9PT0gY29uZmlnLm1vZGVsXS5ldmVyeShCb29sZWFuKTtcblxuY29uc3QgbW9kZWxDb25maWcgPSAoXG4gIG1vZGVsczogKElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZyB8IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdKVtdLFxuICB0ZXJtSWQ6IHN0cmluZyxcbiAgbW9kZWxLZXk6IHN0cmluZyxcbiAgbW9kZWw6IHN0cmluZ1xuKSA9PiBtb2RlbHMuZmxhdCgpLmZpbmQobW9kZWxDb25maWdNYXRjaCh0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbCkpO1xuXG5jb25zdCBtb2RlbENvbmZpZ09yZGVyID0gKFxuICBtb2RlbHM6IChJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcgfCBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWdbXSlbXSxcbiAgdGVybUlkOiBzdHJpbmcsXG4gIG1vZGVsS2V5OiBzdHJpbmcsXG4gIG1vZGVsOiBzdHJpbmdcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGluZGV4ZXMgPSBtb2RlbHNcbiAgICAubWFwKChtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlJbmRleCA9IEFycmF5LmlzQXJyYXkobSkgPyBtb2RlbENvbmZpZ09yZGVyKG0sIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKSA6ICcnO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobSlcbiAgICAgICAgPyBhcnJheUluZGV4XG4gICAgICAgICAgPyBbaW5kZXgsIGFycmF5SW5kZXhdLmpvaW4oJy4nKVxuICAgICAgICAgIDogJydcbiAgICAgICAgOiBtb2RlbENvbmZpZ01hdGNoKHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKShtKVxuICAgICAgICA/IGAke2luZGV4fWBcbiAgICAgICAgOiAnJztcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBpbmRleGVzLmxlbmd0aCA/IGluZGV4ZXNbMF0gOiAnJztcbn07XG5cbmludGVyZmFjZSBJQ29uZmlnTW9kZWxEb2NzRGF0YSB7XG4gIG5vZGVUeXBlOiBOb2RlVHlwZTtcbiAgdHlwZTogU2NoZW1hVHlwZTtcbiAgdGVybUlkPzogc3RyaW5nO1xuICB0ZXJtVHlwZT86IFRlcm1UZXJtVHlwZTtcbiAga2V5Pzogc3RyaW5nO1xufVxuXG5jb25zdCBjb25maWdNb2RlbFdpdGhEb2NzID1cbiAgKFxuICAgIG1vZGVsczogSU1vZGVsW10sXG4gICAgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkLCB0ZXJtVHlwZSwga2V5IH06IElDb25maWdNb2RlbERvY3NEYXRhLFxuICAgIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlXG4gICkgPT5cbiAgKG1ldGhvZElkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgJ0B0eXBlJzogbm9kZVR5cGUsXG4gICAgICB0ZXJtOiB7ICdAaWQnOiBzdWJWYWx1ZT8uaWQgfHwgdGVybUlkIH0sXG4gICAgICBtZXRob2RNb2RlbDogeyAnQGlkJzogbWV0aG9kSWQgfVxuICAgIH0gYXMgYW55O1xuICAgIHJldHVybiB7XG4gICAgICBtZXRob2RJZCxcbiAgICAgIG1vZGVsOlxuICAgICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsUGFyYW1zKG5vZGUpKSB8fFxuICAgICAgICAvLyBoYW5kbGUgXCJsaXZlQW5pbWFsXCJcbiAgICAgICAgKHRlcm1UeXBlICYmIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgdGVybVR5cGUpKSkgfHxcbiAgICAgICAgLy8gaGFuZGxlIFwiY29tcGxldGVuZXNzLmNyb3BSZXNpZHVlXCJcbiAgICAgICAgKGtleSAmJiBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke21ldGhvZElkfS4ke2tleX1gKSkpIHx8XG4gICAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7c3ViVmFsdWU/LmtleX0uJHttZXRob2RJZH1gKSkgfHxcbiAgICAgICAgLy8gaGFuZGxlIFwiaW5wdXQucHJpY2VcIlxuICAgICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke3R5cGU/LnRvTG93ZXJDYXNlKCl9LiR7c3ViVmFsdWU/LmtleX1gKSkgfHxcbiAgICAgICAgLy8gaGFuZGxlIFwiaW5wdXQuaGVzdGlhQWdncmVnYXRlZERhdGFcIlxuICAgICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke3R5cGU/LnRvTG93ZXJDYXNlKCl9LiR7bWV0aG9kSWR9YCkpIHx8XG4gICAgICAgIC8vIGhhbmRsZSBcInRyYW5zZm9ybWF0aW9uXCJcbiAgICAgICAgKHN1YlZhbHVlPy5rZXkgPyBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIHN1YlZhbHVlPy5rZXkpKSA6IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgLy8gaGFuZGxlIFwidHJhbnNmb3JtYXRpb24vaW5wdXQvZXhjcmV0YVwiIGFuZCBvdGhlciBtb2RlbHMgd2l0aCBcIi9cIlxuICAgICAgICAobWV0aG9kSWQuaW5jbHVkZXMoJy8nKVxuICAgICAgICAgID8gZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCB7XG4gICAgICAgICAgICAgIG1vZGVsOiBtZXRob2RJZC5zcGxpdCgnLycpWzBdLFxuICAgICAgICAgICAgICBtb2RlbEtleTogbWV0aG9kSWQuc3BsaXQoJy8nKS5zbGljZSgxKS5qb2luKCcuJylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB1bmRlZmluZWQpXG4gICAgfTtcbiAgfTtcblxuY29uc3QgY29uZmlnTW9kZWxXaXRoTG9ncyA9XG4gIChkYXRhOiBJQmxhbmtOb2RlTG9nIHwgSU5vbkJsYW5rTm9kZUxvZyB8IElCbGFua05vZGVMb2dTdWJWYWx1ZSwgbG9nczogSU5vZGVUZXJtTG9ncywgcHJldmlvdXNNb2RlbFN1Y2Nlc3MgPSBmYWxzZSkgPT5cbiAgKG1vZGVsOiBJQ29uZmlnTW9kZWwpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSBsb2dTdGF0dXMoZGF0YSwgbG9ncz8uW21vZGVsLm1ldGhvZElkXSwgcHJldmlvdXNNb2RlbFN1Y2Nlc3MpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGxvZ3M6IGxvZ3M/Llttb2RlbC5tZXRob2RJZF0sXG4gICAgICBzdGF0dXMsXG4gICAgICBzaG93TG9nczogaGFzTG9nRGV0YWlscyhzdGF0dXMsIGxvZ3M/Llttb2RlbC5tZXRob2RJZF0pXG4gICAgfSBhcyBJQ29uZmlnTW9kZWw7XG4gIH07XG5cbi8qKlxuICogSGFuZGxlIGhpZXJhcmNoeSBza2lwIGlmIGEgbW9kZWwgYmVmb3JlIHN1Y2NlZWRlZC5cbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIGluZGV4XG4gKi9cbmNvbnN0IGhhc1ByZXZpb3VzTW9kZWxTdWNjZXNzID0gKG1vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdLCBpbmRleCA9IDApID0+XG4gIGZpbHRlckNvbmZpZ01vZGVscyhtb2RlbHNbaW5kZXhdLCBrZWVwQ29uZmlnTW9kZWxCeVN0YXR1cyhMb2dTdGF0dXMuc3VjY2VzcykpLmxlbmd0aCA+IDAgfHxcbiAgKGluZGV4IDw9IG1vZGVscy5sZW5ndGggJiYgaGFzUHJldmlvdXNNb2RlbFN1Y2Nlc3MobW9kZWxzLCBpbmRleCArIDEpKTtcblxuY29uc3QgZGF0YVdpdGhDb25maWdNb2RlbExvZ3MgPVxuICAobG9nczogSU5vZGVMb2dzIHwgSU5vZGVUZXJtTG9ncykgPT5cbiAgPFQgZXh0ZW5kcyBJQmxhbmtOb2RlTG9nIHwgSU5vbkJsYW5rTm9kZUxvZyB8IElCbGFua05vZGVMb2dTdWJWYWx1ZT4oZGF0YTogVCkgPT4ge1xuICAgIGNvbnN0IHN1YkxvZ0tleSA9IGRhdGEuYmxhbmtOb2RlID8gc3ViVmFsdWVMb2dLZXkoZGF0YSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpIDogbnVsbDtcbiAgICBjb25zdCBsb2cgPSBzdWJMb2dLZXkgPyBsb2dzW3N1YkxvZ0tleV0gOiBsb2dzO1xuICAgIGNvbnN0IGNvbmZpZ01vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdID0gW107XG5cbiAgICAvLyBnbyB0aHJvdWdoIG1vZGVscyBvbmUgYnkgb25lIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBuZXh0IG1vZGVscyBpbiBoaWVyYXJjaHkgaGF2ZSBmYWlsZWRcbiAgICBmb3IgKGNvbnN0IGluZGV4IGluIGRhdGEuY29uZmlnTW9kZWxzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEuY29uZmlnTW9kZWxzLCBpbmRleCkpIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBkYXRhLmNvbmZpZ01vZGVsc1tpbmRleF07XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTW9kZWxTdWNjZXNzID0gK2luZGV4ID4gMCAmJiBoYXNQcmV2aW91c01vZGVsU3VjY2Vzcyhjb25maWdNb2RlbHMpO1xuICAgICAgICBjb25zdCBuZXdNb2RlbCA9IEFycmF5LmlzQXJyYXkobW9kZWwpXG4gICAgICAgICAgPyBtb2RlbC5tYXAoY29uZmlnTW9kZWxXaXRoTG9ncyhkYXRhLCBsb2csIHByZXZpb3VzTW9kZWxTdWNjZXNzKSlcbiAgICAgICAgICA6IGNvbmZpZ01vZGVsV2l0aExvZ3MoZGF0YSwgbG9nLCBwcmV2aW91c01vZGVsU3VjY2VzcykobW9kZWwpO1xuICAgICAgICBjb25maWdNb2RlbHMucHVzaChuZXdNb2RlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBjb25maWdNb2RlbHM6IGZpbHRlckNvbmZpZ01vZGVscyhcbiAgICAgICAgY29uZmlnTW9kZWxzLFxuICAgICAgICAobW9kZWw6IElDb25maWdNb2RlbCkgPT5cbiAgICAgICAgICAhW0xvZ1N0YXR1cy5ub3RSZXF1aXJlZF0uaW5jbHVkZXMobW9kZWw/LnN0YXR1cykgfHwgbW9kZWwubWV0aG9kSWQgPT09ICdlbWlzc2lvbk5vdFJlbGV2YW50J1xuICAgICAgKVxuICAgIH0gYXMgVDtcbiAgfTtcblxuLyoqXG4gKiBHcm91cCBtb2RlbHMgcnVubmluZyBpbiBwYXJhbGxlbCB1bmRlciB0aGUgc2FtZSBhcnJheSwgYXMgdGhleSBzaG91bGQgYXBwZWFyIHZlcnRpY2FsbHkuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSBtb2RlbHMgVGhlIGxpc3Qgb2YgbW9kZWxzXG4gKi9cbmNvbnN0IGdyb3VwUGFyYWxsZWxNb2RlbHMgPSAoY29uZmlnOiBJT3JjaGVzdHJhdG9yQ29uZmlnLCB0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWxzOiBJQ29uZmlnTW9kZWxbXSkgPT4ge1xuICBjb25zdCBtb2RlbHNXaXRoT3JkZXIgPSBtb2RlbHMubWFwKG1vZGVsID0+ICh7XG4gICAgbW9kZWw6IHtcbiAgICAgIC4uLm1vZGVsLFxuICAgICAgY29uZmlnOiBtb2RlbENvbmZpZyhjb25maWcubW9kZWxzLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbC5tZXRob2RJZClcbiAgICB9LFxuICAgIG9yZGVyOiBtb2RlbENvbmZpZ09yZGVyKGNvbmZpZy5tb2RlbHMsIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsLm1ldGhvZElkKVxuICB9KSk7XG4gIHJldHVybiBtb2RlbHNXaXRoT3JkZXJcbiAgICAucmVkdWNlKChwcmV2LCB7IG1vZGVsLCBvcmRlciB9KSA9PiB7XG4gICAgICBjb25zdCBpc0FycmF5ID0gb3JkZXIuaW5jbHVkZXMoJy4nKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gaXNBcnJheSA/IG9yZGVyLnNwbGl0KCcuJylbMF0gOiBvcmRlciB8fCBwcmV2Lmxlbmd0aDtcbiAgICAgIHByZXZbaW5kZXhdID0gaXNBcnJheSA/IFsuLi4ocHJldltpbmRleF0gfHwgW10pLCBtb2RlbF0gOiBbbW9kZWxdO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwgW10gYXMgSUNvbmZpZ01vZGVsW11bXSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLm1hcCh2ID0+ICh2Lmxlbmd0aCA9PT0gMSA/IHZbMF0gOiB2KSk7XG59O1xuXG5jb25zdCBhbGxQYXJhbGxlbCA9IChtb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXSkgPT5cbiAgbW9kZWxzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KG1vZGVsc1swXSkgJiYgbW9kZWxzWzBdLmxlbmd0aCA+IDE7XG5cbmNvbnN0IGJsYW5rTm9kZU1vZGVsSWQgPSAodmFsdWU6IGJsYW5rTm9kZSkgPT5cbiAgdmFsdWVbJ0B0eXBlJ10gPT09IFNjaGVtYVR5cGUuTWVhc3VyZW1lbnRcbiAgICA/ICh2YWx1ZSBhcyBNZWFzdXJlbWVudCkubWV0aG9kPy5bJ0BpZCddXG4gICAgOiAodmFsdWUgYXMgYW55KS5tZXRob2RNb2RlbD8uWydAaWQnXTtcblxuY29uc3QgdmFsdWVCeU1ldGhvZElkID0gKHZhbHVlczogYmxhbmtOb2RlW10sIG1ldGhvZElkOiBzdHJpbmcsIHRlcm1JZDogc3RyaW5nKSA9PlxuICBwcm9wZXJ0eVZhbHVlKHZhbHVlcy5maW5kKHYgPT4gYmxhbmtOb2RlTW9kZWxJZCh2KSA9PT0gbWV0aG9kSWQpPy52YWx1ZSBhcyBudW1iZXJbXSwgdGVybUlkKTtcblxuY29uc3QgZ3JvdXBQYXJhbGxlbFZhbHVlcyA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdLCB0ZXJtSWQ6IHN0cmluZykgPT5cbiAgQXJyYXkuaXNBcnJheShtb2RlbHMpXG4gICAgPyBPYmplY3QuZnJvbUVudHJpZXMobW9kZWxzLm1hcChtb2RlbCA9PiBbbW9kZWwubWV0aG9kSWQsIHZhbHVlQnlNZXRob2RJZCh2YWx1ZXMsIG1vZGVsLm1ldGhvZElkLCB0ZXJtSWQpXSkpXG4gICAgOiB7fTtcblxuZXhwb3J0IGNvbnN0IGdyb3VwTG9nc0J5VGVybSA9IChcbiAgbm9kZVR5cGU6IE5vZGVUeXBlLFxuICBsb2dzOiBJTm9kZUxvZ3MsXG4gIG1vZGVsczogSU1vZGVsW10sXG4gIGNvbmZpZzogSU9yY2hlc3RyYXRvckNvbmZpZyxcbiAgYWxsT3JpZ2luYWxWYWx1ZXM6IGJsYW5rTm9kZVtdLFxuICBhbGxSZWNhbGN1bGF0ZWRWYWx1ZXM6IGJsYW5rTm9kZVtdLFxuICBub2RlS2V5Pzogc3RyaW5nXG4pID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxWYWx1ZXMgPSBmaWx0ZXJEZWxldGVkKGFsbE9yaWdpbmFsVmFsdWVzIHx8IFtdKTtcbiAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWVzID0gZmlsdGVyRGVsZXRlZChhbGxSZWNhbGN1bGF0ZWRWYWx1ZXMgfHwgW10pLmZpbHRlcihoYXNSZWNhbGN1bGF0ZWRLZXlzKTtcbiAgY29uc3QgdHlwZTogU2NoZW1hVHlwZSA9IG9yaWdpbmFsVmFsdWVzLmxlbmd0aFxuICAgID8gb3JpZ2luYWxWYWx1ZXNbMF1bJ0B0eXBlJ10gfHwgb3JpZ2luYWxWYWx1ZXNbMF0udHlwZVxuICAgIDogcmVjYWxjdWxhdGVkVmFsdWVzLmxlbmd0aFxuICAgID8gcmVjYWxjdWxhdGVkVmFsdWVzWzBdWydAdHlwZSddIHx8IHJlY2FsY3VsYXRlZFZhbHVlc1swXS50eXBlXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICh0ZXJtOiBJVGVybUpTT05MRCk6IElCbGFua05vZGVMb2cgPT4ge1xuICAgIGNvbnN0IHRlcm1JZCA9IHRlcm1bJ0BpZCddO1xuICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS50ZXJtVHlwZTtcbiAgICBjb25zdCB0ZXJtTG9ncyA9IGdldChsb2dzLCB0ZXJtSWQsIHt9KSBhcyBJTm9kZVRlcm1Mb2dzO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgY29uc3QgcmVjYWxjdWxhdGVkID0gcmVjYWxjdWxhdGVkVmFsdWVzLmZpbHRlcih2ID0+IHRlcm1JZCA9PT0gdi50ZXJtIVsnQGlkJ10pO1xuICAgIGNvbnN0IGhhc0RhdGEgPSAhIW9yaWdpbmFsLmxlbmd0aCB8fCAhIXJlY2FsY3VsYXRlZC5sZW5ndGggfHwgT2JqZWN0LmtleXModGVybUxvZ3MpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgY29uZmlnTW9kZWxzRGF0YSA9IHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCwgdGVybVR5cGUgfTtcbiAgICBjb25zdCBjb25maWdNb2RlbHMgPSBncm91cFBhcmFsbGVsTW9kZWxzKFxuICAgICAgY29uZmlnLFxuICAgICAgdGVybUlkLFxuICAgICAgbm9kZUtleSEsXG4gICAgICB1bmlxdWUoW1xuICAgICAgICAuLi4odGVybUxvZ3MubW9kZWxzIHx8IFtdKS5maWx0ZXIoaXNNb2RlbExvZyh0ZXJtTG9ncywgdHlwZSkpXG4gICAgICAgIC8vIC4uLmZpbmRDb25maWdNb2RlbHMoY29uZmlnLCB0ZXJtSWQsIG5vZGVLZXkhLCBtb2RlbHMpLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbCBhcyBzdHJpbmcpXG4gICAgICBdKS5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIGNvbmZpZ01vZGVsc0RhdGEpKVxuICAgICk7XG4gICAgY29uc3Qga2V5cyA9IGxvZ0tleXModGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQsIG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSk7XG4gICAgY29uc3Qgc3ViVmFsdWVzID0gbG9nU3ViVmFsdWVzKGxvZ3MsIHRlcm1Mb2dzLCBvcmlnaW5hbCwgcmVjYWxjdWxhdGVkLCBtb2RlbHMsIGNvbmZpZ01vZGVsc0RhdGEpO1xuICAgIGNvbnN0IGlzUmVxdWlyZWQgPSAhT2JqZWN0LnZhbHVlcyh0ZXJtTG9ncylcbiAgICAgIC5maWx0ZXIodiA9PiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodikgJiYgIXYuaXNLZXkpXG4gICAgICAuZXZlcnkodiA9PiB2LnJ1blJlcXVpcmVkID09PSBmYWxzZSk7XG5cbiAgICBjb25zdCBub2RlTG9nOiBJQmxhbmtOb2RlTG9nID0gZGF0YVdpdGhDb25maWdNb2RlbExvZ3ModGVybUxvZ3MpKHtcbiAgICAgIGJsYW5rTm9kZTogdHJ1ZSxcbiAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgIGNhbk9wZW46IGtleXMubGVuZ3RoID4gMCB8fCBzdWJWYWx1ZXMubGVuZ3RoID4gMCxcbiAgICAgIHRlcm1JZCxcbiAgICAgIHRlcm0sXG4gICAgICB0eXBlLFxuICAgICAgY29uZmlnTW9kZWxzLFxuICAgICAgb3JpZ2luYWwsXG4gICAgICBvcmlnaW5hbFZhbHVlOiByZWR1Y2VWYWx1ZXMob3JpZ2luYWwsIHRlcm1JZCksXG4gICAgICByZWNhbGN1bGF0ZWQsXG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZTogcmVkdWNlVmFsdWVzKHJlY2FsY3VsYXRlZCwgdGVybUlkKSxcbiAgICAgIGlzT3JpZ2luYWw6ICEhb3JpZ2luYWwubGVuZ3RoLFxuICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGhhc1JlY2FsY3VsYXRlZFZhbHVlKHJlY2FsY3VsYXRlZCksXG4gICAgICBoYXNEYXRhLFxuICAgICAgaXNSZXF1aXJlZCxcbiAgICAgIGxvZ3M6IHRlcm1Mb2dzLFxuICAgICAga2V5cyxcbiAgICAgIHN1YlZhbHVlcyxcbiAgICAgIGFsbFBhcmFsbGVsOiBhbGxQYXJhbGxlbChjb25maWdNb2RlbHMpLFxuICAgICAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ6IGdyb3VwUGFyYWxsZWxWYWx1ZXMob3JpZ2luYWwsIGNvbmZpZ01vZGVsc1swXSwgdGVybUlkKSxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZDogZ3JvdXBQYXJhbGxlbFZhbHVlcyhyZWNhbGN1bGF0ZWQsIGNvbmZpZ01vZGVsc1swXSwgdGVybUlkKVxuICAgIH0pO1xuICAgIGNvbnN0IHN1YlZhbHVlID0gY3ljbGVTdWJWYWx1ZShub2RlTG9nKTtcblxuICAgIHJldHVybiBzdWJWYWx1ZSAmJiBzdWJWYWx1ZXM/Lmxlbmd0aFxuICAgICAgPyB7XG4gICAgICAgICAgLi4ubm9kZUxvZyxcbiAgICAgICAgICBtb2RlbHNJblN1YlZhbHVlczogdHJ1ZSxcbiAgICAgICAgICBzdWJWYWx1ZXM6IFtzdWJWYWx1ZSwgLi4uc3ViVmFsdWVzXVxuICAgICAgICB9IC8vIGlmIHdlIGluY2x1ZGUgdGhlIEN5Y2xlIHZhbHVlLCBpdCBiZWNvbWVzIHRoZSBtYWluIHJlZmVyZW5jZSBvZiB0aGUgbW9kZWxzXG4gICAgICA6IG5vZGVMb2c7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ3JvdXBkTG9nc0J5S2V5ID0gKFxuICBub2RlVHlwZTogTm9kZVR5cGUsXG4gIGxvZ3M6IElOb2RlTG9ncyxcbiAgbW9kZWxzOiBJTW9kZWxbXSxcbiAgb3JpZ2luYWxWYWx1ZT86IG5vbkJsYW5rTm9kZSxcbiAgcmVjYWxjdWxhdGVkVmFsdWU/OiBub25CbGFua05vZGVcbikgPT4ge1xuICBjb25zdCB0eXBlOiBTY2hlbWFUeXBlID1cbiAgICBvcmlnaW5hbFZhbHVlPy5bJ0B0eXBlJ10gfHwgb3JpZ2luYWxWYWx1ZT8udHlwZSB8fCByZWNhbGN1bGF0ZWRWYWx1ZT8uWydAdHlwZSddIHx8IHJlY2FsY3VsYXRlZFZhbHVlPy50eXBlO1xuXG4gIHJldHVybiAoa2V5OiBzdHJpbmcpOiBJTm9uQmxhbmtOb2RlTG9nID0+IHtcbiAgICBjb25zdCBrZXlMb2dzID0gZ2V0KGxvZ3MsIGtleSwge30pIGFzIElOb2RlVGVybUxvZ3M7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBvcmlnaW5hbFZhbHVlPy5ba2V5XTtcbiAgICBjb25zdCByZWNhbGN1bGF0ZWQgPSByZWNhbGN1bGF0ZWRWYWx1ZT8uW2tleV07XG4gICAgY29uc3QgaGFzRGF0YSA9ICEhb3JpZ2luYWwgfHwgISFyZWNhbGN1bGF0ZWQgfHwgT2JqZWN0LmtleXMoa2V5TG9ncykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjb25maWdNb2RlbHNEYXRhID0geyBub2RlVHlwZSwgdHlwZSwga2V5IH07XG4gICAgY29uc3QgY29uZmlnTW9kZWxzID0gdW5pcXVlKFsuLi4oa2V5TG9ncy5tb2RlbHMgfHwgW10pLmZpbHRlcihpc01vZGVsTG9nKGtleUxvZ3MsIHR5cGUpKV0pLm1hcChcbiAgICAgIGNvbmZpZ01vZGVsV2l0aERvY3MobW9kZWxzLCBjb25maWdNb2RlbHNEYXRhKVxuICAgICk7XG4gICAgY29uc3QgaXNSZXF1aXJlZCA9ICFPYmplY3QudmFsdWVzKGtleUxvZ3MpXG4gICAgICAuZmlsdGVyKHYgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpICYmICF2LmlzS2V5KVxuICAgICAgLmV2ZXJ5KHYgPT4gdi5ydW5SZXF1aXJlZCA9PT0gZmFsc2UpO1xuXG4gICAgcmV0dXJuIGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGtleUxvZ3MpKHtcbiAgICAgIGJsYW5rTm9kZTogZmFsc2UsXG4gICAgICBpc09wZW46IHRydWUsXG4gICAgICBjYW5PcGVuOiBmYWxzZSxcbiAgICAgIGtleSxcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWdNb2RlbHMsXG4gICAgICBvcmlnaW5hbFZhbHVlOiBvcmlnaW5hbCxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiByZWNhbGN1bGF0ZWQsXG4gICAgICBpc09yaWdpbmFsOiAhaXNVbmRlZmluZWQob3JpZ2luYWwpLFxuICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKGtleSkocmVjYWxjdWxhdGVkVmFsdWUpLFxuICAgICAgaGFzRGF0YSxcbiAgICAgIGlzUmVxdWlyZWQsXG4gICAgICBsb2dzOiBrZXlMb2dzLFxuICAgICAgYWxsUGFyYWxsZWw6IGZhbHNlXG4gICAgfSk7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbW9kZWxDb3VudCA9IChibGFua05vZGVMb2dzOiBJQmxhbmtOb2RlTG9nW10pID0+XG4gIE1hdGgubWF4LmFwcGx5KE1hdGgubWF4LCBbXG4gICAgMCxcbiAgICAuLi5ibGFua05vZGVMb2dzLmZsYXRNYXAodiA9PiBbXG4gICAgICB2LmNvbmZpZ01vZGVscy5sZW5ndGgsXG4gICAgICAuLi52LnN1YlZhbHVlcy5tYXAocyA9PiBzLmNvbmZpZ01vZGVscz8ubGVuZ3RoIHx8IDApLFxuICAgICAgLi4udi5rZXlzLm1hcChzID0+IHMuY29uZmlnTW9kZWxzPy5sZW5ndGggfHwgMClcbiAgICBdKVxuICBdKTtcblxuZXhwb3J0IGNvbnN0IGxvZ1ZhbHVlQXJyYXkgPSAodmFsdWU6IHN0cmluZyk6IGFueVtdID0+XG4gIFsnOycsICc6J10uc29tZSh2ID0+IHZhbHVlLmluY2x1ZGVzKHYpKVxuICAgID8gdmFsdWUuc3BsaXQoJzsnKS5mbGF0TWFwKHYgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSB2LnNwbGl0KCdfJykubWFwKHZ2ID0+IHZ2LnNwbGl0KCc6JykpO1xuICAgICAgICByZXR1cm4gcmVzLmxlbmd0aCA8PSAxID8gcmVzLmZsYXQoKSA6IE9iamVjdC5mcm9tRW50cmllcyhyZXMpO1xuICAgICAgfSlcbiAgICA6IG51bGw7XG4iXX0=
|