flexdataset 0.17.0 → 0.18.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/dist/src/loader.js
CHANGED
|
@@ -207,6 +207,7 @@ function normalizeTableDefinition(raw) {
|
|
|
207
207
|
primaryKey: asStringArray(record.primaryKey),
|
|
208
208
|
partitions: normalizePartitions(record.partitions),
|
|
209
209
|
sortOrder: normalizeSortOrder(record.sortOrder),
|
|
210
|
+
identifierFields: asStringArray(record.identifierFields),
|
|
210
211
|
indexes: normalizeIndexes(record.indexes),
|
|
211
212
|
uniqueConstraints: normalizeUniqueConstraints(record.uniqueConstraints),
|
|
212
213
|
checkConstraints: normalizeCheckConstraints(record.checkConstraints),
|
|
@@ -356,4 +357,4 @@ function loadRoot(rootDir) {
|
|
|
356
357
|
violations,
|
|
357
358
|
};
|
|
358
359
|
}
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1UUgsNEJBd0lDO0FBN1lELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFnQjdCLDZDQUVzQjtBQUl0QixxREFFZ0M7QUFlaEMsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM1QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFnQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0YsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQWM7SUFDM0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM1QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDN0IsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQWM7SUFDckMsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWM7SUFDcEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMs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QUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsS0FBSyxFQUFFO1lBQ0gsT0FBTyxFQUFFLFlBQVk7WUFDckIsT0FBTztZQUNQLE1BQU07U0FDVDtRQUNELFVBQVU7S0FDYixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlsZXN5c3RlbSBsb2FkZXIuIFdhbGtzIGEgZGF0YXNldCByb290LCBwYXJzZXMgZWFjaCBKU09OIGZpbGUsIHJ1bnMgTGF5ZXIgMVxuICogc3RydWN0dXJhbCB2YWxpZGF0aW9uLCBhbmQgbm9ybWFsaXplcyBldmVyeXRoaW5nIGludG8gYSBgV29ybGRgIG9mXG4gKiBjb25jcmV0ZSBgVGFibGVUeXBlQmFzZWAgaW5zdGFuY2VzIHRoYXQgdGhlIHNlbWFudGljIHJ1bGVzIG9wZXJhdGUgb24uXG4gKlxuICogUGFyc2UgZXJyb3JzLCBzdHJ1Y3R1cmFsIGVycm9ycywgYW5kIGEgbWlzc2luZyBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSBhcmVcbiAqIHJlcG9ydGVkIGhlcmU7IGFsbCBjcm9zcy1maWVsZCAvIGNyb3NzLWZpbGUgbG9naWMgbGl2ZXMgaW4gdGhlIHRhYmxlLXR5cGVcbiAqIGNsYXNzZXMgKGAuL3RhYmxlLXR5cGUudHNgLCBgLi90YWJsZS10eXBlcy8qYCkuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtcbiAgICBCdWNrZXRpbmcsXG4gICAgQ2hlY2tDb25zdHJhaW50LFxuICAgIENvbHVtbixcbiAgICBFeGNsdXNpb25Db25zdHJhaW50LFxuICAgIEZvcmVpZ25LZXksXG4gICAgSW5kZXgsXG4gICAgUGFydGl0aW9uLFxuICAgIFNjaGVtYURlc2NyaXB0aW9uLFxuICAgIFNvcnRGaWVsZCxcbiAgICBUYWJsZURlZmluaXRpb24sXG4gICAgVW5pcXVlQ29uc3RyYWludCxcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgY3JlYXRlVGFibGVUeXBlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3JlZ2lzdHJ5JztcbmltcG9ydCB7XG4gICAgTG9hZGVkU2NoZW1hLFxuICAgIFdvcmxkLFxufSBmcm9tICcuL3dvcmxkJztcblxuLyoqIFJlc3VsdCBvZiBsb2FkaW5nIGEgcm9vdDogdGhlIG1vZGVsIHBsdXMgYW55IGxvYWQtdGltZSB2aW9sYXRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkT3V0Y29tZSB7XG4gICAgLyoqIFRoZSBsb2FkZWQgbW9kZWwuICovXG4gICAgcmVhZG9ubHkgd29ybGQ6IFdvcmxkO1xuXG4gICAgLyoqIFBhcnNlLCBzdHJ1Y3R1cmFsLCBhbmQgbWlzc2luZy1kZXNjcmlwdGlvbiB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuXG5mdW5jdGlvbiBhc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IDoge307XG59XG5cbmZ1bmN0aW9uIGFzQXJyYXkodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG59XG5cbmZ1bmN0aW9uIGFzQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nQXJyYXkodmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbnModmFsdWU6IHVua25vd24pOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgICAgIG51bGxhYmxlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQubnVsbGFibGUpLFxuICAgICAgICAgICAgZ2VuZXJhdGVkOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5nZW5lcmF0ZWQpLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuZXhwcmVzc2lvbiksXG4gICAgICAgICAgICBleHByZXNzaW9uQ29sdW1uczogJ2V4cHJlc3Npb25Db2x1bW5zJyBpbiByZWNvcmQgPyBhc1N0cmluZ0FycmF5KHJlY29yZC5leHByZXNzaW9uQ29sdW1ucykgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpZGVudGl0eTogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuaWRlbnRpdHkpLFxuICAgICAgICAgICAgZGVmYXVsdDogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuZGVmYXVsdCksXG4gICAgICAgICAgICBjb2xsYXRpb246IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLmNvbGxhdGlvbiksXG4gICAgICAgICAgICBjb21wcmVzc2lvbjogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuY29tcHJlc3Npb24pLFxuICAgICAgICAgICAgc3RvcmFnZTogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuc3RvcmFnZSksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhcnRpdGlvbnModmFsdWU6IHVua25vd24pOiBQYXJ0aXRpb25bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU29ydE9yZGVyKHZhbHVlOiB1bmtub3duKTogU29ydEZpZWxkW10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uOiBhc1N0cmluZyhyZWNvcmQuY29sdW1uKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQudHJhbnNmb3JtKSxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogYXNTdHJpbmcocmVjb3JkLmRpcmVjdGlvbiksXG4gICAgICAgICAgICBudWxsT3JkZXI6IGFzU3RyaW5nKHJlY29yZC5udWxsT3JkZXIpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVJbmRleGVzKHZhbHVlOiB1bmtub3duKTogSW5kZXhbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICBtZXRob2Q6IGFzU3RyaW5nKHJlY29yZC5tZXRob2QpLFxuICAgICAgICAgICAgdW5pcXVlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQudW5pcXVlKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGFzQXJyYXkocmVjb3JkLmNvbHVtbnMpLm1hcCgocmF3Q29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uUmVjb3JkID0gYXNSZWNvcmQocmF3Q29sdW1uKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhjb2x1bW5SZWNvcmQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnQ6IGFzT3B0aW9uYWxTdHJpbmcoY29sdW1uUmVjb3JkLnNvcnQpLFxuICAgICAgICAgICAgICAgICAgICBudWxsczogYXNPcHRpb25hbFN0cmluZyhjb2x1bW5SZWNvcmQubnVsbHMpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGluY2x1ZGU6IGFzU3RyaW5nQXJyYXkocmVjb3JkLmluY2x1ZGUpLFxuICAgICAgICAgICAgd2hlcmU6IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLndoZXJlKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVW5pcXVlQ29uc3RyYWludHModmFsdWU6IHVua25vd24pOiBVbmlxdWVDb25zdHJhaW50W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgY29sdW1uczogYXNTdHJpbmdBcnJheShyZWNvcmQuY29sdW1ucyksXG4gICAgICAgICAgICBudWxsc05vdERpc3RpbmN0OiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQubnVsbHNOb3REaXN0aW5jdCksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNoZWNrQ29uc3RyYWludHModmFsdWU6IHVua25vd24pOiBDaGVja0NvbnN0cmFpbnRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICBleHByZXNzaW9uOiBhc1N0cmluZyhyZWNvcmQuZXhwcmVzc2lvbiksXG4gICAgICAgICAgICBjb2x1bW5zOiBhc1N0cmluZ0FycmF5KHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRXhjbHVzaW9uQ29uc3RyYWludHModmFsdWU6IHVua25vd24pOiBFeGNsdXNpb25Db25zdHJhaW50W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgdXNpbmc6IGFzU3RyaW5nKHJlY29yZC51c2luZyksXG4gICAgICAgICAgICBlbGVtZW50czogYXNBcnJheShyZWNvcmQuZWxlbWVudHMpLm1hcCgocmF3RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRSZWNvcmQgPSBhc1JlY29yZChyYXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGFzU3RyaW5nKGVsZW1lbnRSZWNvcmQuY29sdW1uKSxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGFzU3RyaW5nKGVsZW1lbnRSZWNvcmQub3BlcmF0b3IpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQnVja2V0aW5nKHZhbHVlOiB1bmtub3duKTogQnVja2V0aW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZCh2YWx1ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uczogYXNTdHJpbmdBcnJheShyZWNvcmQuY29sdW1ucyksXG4gICAgICAgIGJ1Y2tldENvdW50OiB0eXBlb2YgcmVjb3JkLmJ1Y2tldENvdW50ID09PSAnbnVtYmVyJyA/IHJlY29yZC5idWNrZXRDb3VudCA6IDAsXG4gICAgICAgIHNvcnRlZEJ5OiBhc0FycmF5KHJlY29yZC5zb3J0ZWRCeSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRSZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2x1bW46IGFzU3RyaW5nKHNvcnRSZWNvcmQuY29sdW1uKSxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IGFzU3RyaW5nKHNvcnRSZWNvcmQuZGlyZWN0aW9uKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ01hcCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHZhbHVlKTtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtcbiAgICAgICAga2V5LFxuICAgICAgICByYXcsXG4gICAgXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmF3ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSByYXc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRm9yZWlnbktleXModmFsdWU6IHVua25vd24pOiBGb3JlaWduS2V5W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc291cmNlVGFibGU6IGFzU3RyaW5nKHJlY29yZC5zb3VyY2VUYWJsZSksXG4gICAgICAgICAgICBzb3VyY2VDb2x1bW46IGFzU3RyaW5nKHJlY29yZC5zb3VyY2VDb2x1bW4pLFxuICAgICAgICAgICAgbG9jYWxDb2x1bW46IGFzU3RyaW5nKHJlY29yZC5sb2NhbENvbHVtbiksXG4gICAgICAgICAgICBhbGxvd051bGxzOiBhc0Jvb2xlYW4ocmVjb3JkLmFsbG93TnVsbHMpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVUYWJsZURlZmluaXRpb24ocmF3OiB1bmtub3duKTogVGFibGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNwZWNWZXJzaW9uOiBhc1N0cmluZyhyZWNvcmQuc3BlY1ZlcnNpb24pLFxuICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgdGFibGVUeXBlOiBhc1N0cmluZyhyZWNvcmQudGFibGVUeXBlKSxcbiAgICAgICAgaXNSYXdEYXRhOiBhc0Jvb2xlYW4ocmVjb3JkLmlzUmF3RGF0YSksXG4gICAgICAgIGZvcm1hdFZlcnNpb246IGFzT3B0aW9uYWxOdW1iZXIocmVjb3JkLmZvcm1hdFZlcnNpb24pLFxuICAgICAgICBjb2x1bW5zOiBub3JtYWxpemVDb2x1bW5zKHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgcHJpbWFyeUtleTogYXNTdHJpbmdBcnJheShyZWNvcmQucHJpbWFyeUtleSksXG4gICAgICAgIHBhcnRpdGlvbnM6IG5vcm1hbGl6ZVBhcnRpdGlvbnMocmVjb3JkLnBhcnRpdGlvbnMpLFxuICAgICAgICBzb3J0T3JkZXI6IG5vcm1hbGl6ZVNvcnRPcmRlcihyZWNvcmQuc29ydE9yZGVyKSxcbiAgICAgICAgaW5kZXhlczogbm9ybWFsaXplSW5kZXhlcyhyZWNvcmQuaW5kZXhlcyksXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzOiBub3JtYWxpemVVbmlxdWVDb25zdHJhaW50cyhyZWNvcmQudW5pcXVlQ29uc3RyYWludHMpLFxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzOiBub3JtYWxpemVDaGVja0NvbnN0cmFpbnRzKHJlY29yZC5jaGVja0NvbnN0cmFpbnRzKSxcbiAgICAgICAgZXhjbHVzaW9uQ29uc3RyYWludHM6IG5vcm1hbGl6ZUV4Y2x1c2lvbkNvbnN0cmFpbnRzKHJlY29yZC5leGNsdXNpb25Db25zdHJhaW50cyksXG4gICAgICAgIGJ1Y2tldGluZzogbm9ybWFsaXplQnVja2V0aW5nKHJlY29yZC5idWNrZXRpbmcpLFxuICAgICAgICB0YWJsZVByb3BlcnRpZXM6IG5vcm1hbGl6ZVN0cmluZ01hcChyZWNvcmQudGFibGVQcm9wZXJ0aWVzKSxcbiAgICAgICAgZGVwZW5kc09uOiBhc1N0cmluZ0FycmF5KHJlY29yZC5kZXBlbmRzT24pLFxuICAgICAgICBmb3JlaWduS2V5czogbm9ybWFsaXplRm9yZWlnbktleXMocmVjb3JkLmZvcmVpZ25LZXlzKSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY2hlbWFEZXNjcmlwdGlvbihyYXc6IHVua25vd24pOiBTY2hlbWFEZXNjcmlwdGlvbiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzcGVjVmVyc2lvbjogYXNTdHJpbmcocmVjb3JkLnNwZWNWZXJzaW9uKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgfTtcbn1cblxuLy8vIFNjaGVtYSBhbmQgdGFibGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkXG4vLy8gZnJvbSBgZGVwZW5kc09uYCBhbmQgZm9yZWlnbiBrZXlzLCB3aG9zZSBwYXR0ZXJucyByZXF1aXJlIHRoZSBzYW1lIHNoYXBlLlxuY29uc3QgTkFNRV9SRSA9IC9eW2EtejAtOV9dKyQvO1xuXG4vKipcbiAqIExvYWQgYSBkYXRhc2V0IHJvb3QgaW50byBhIGBXb3JsZGAuXG4gKlxuICogQHBhcmFtIHJvb3REaXIgQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGF0YXNldCByb290LlxuICogQHJldHVybnMgVGhlIGxvYWRlZCB3b3JsZCBwbHVzIGxvYWQtdGltZSB2aW9sYXRpb25zLlxuICogQHRocm93cyBFcnJvciBXaGVuIGByb290RGlyYCBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJvb3Qocm9vdERpcjogc3RyaW5nKTogTG9hZE91dGNvbWUge1xuICAgIGNvbnN0IGFic29sdXRlUm9vdCA9IHBhdGgucmVzb2x2ZShyb290RGlyKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzb2x1dGVSb290KSB8fCAhZnMuc3RhdFN5bmMoYWJzb2x1dGVSb290KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGF0YXNldCByb290IGlzIG5vdCBhIGRpcmVjdG9yeTogJHthYnNvbHV0ZVJvb3R9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIExvYWRlZFNjaGVtYT4oKTtcbiAgICBjb25zdCB0YWJsZXMgPSBuZXcgTWFwPHN0cmluZywgVGFibGVUeXBlQmFzZT4oKTtcblxuICAgIGNvbnN0IHNjaGVtYURpcnMgPSBmcy5yZWFkZGlyU3luYyhhYnNvbHV0ZVJvb3QsIHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0RpcmVjdG9yeSgpICYmICFlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoJy4nKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWFEaXIgb2Ygc2NoZW1hRGlycykge1xuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gc2NoZW1hRGlyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRpclBhdGggPSBwYXRoLmpvaW4oYWJzb2x1dGVSb290LCBzY2hlbWFOYW1lKTtcblxuICAgICAgICBpZiAoIU5BTUVfUkUudGVzdChzY2hlbWFOYW1lKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBkaXJQYXRoLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzY2hlbWEgbmFtZSBcIiR7c2NoZW1hTmFtZX1cIiBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIChtYXRjaGluZyAke05BTUVfUkV9KWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NGaWxlTmFtZSA9IGAke3NjaGVtYU5hbWV9Lmpzb25gO1xuICAgICAgICBjb25zdCBqc29uRmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJQYXRoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgICAgIGxldCBkZXNjcmlwdGlvbjogU2NoZW1hRGVzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgbG9hZGVkVGFibGVzOiBUYWJsZVR5cGVCYXNlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YganNvbkZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgICAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0ZJTEVfUEFSU0VfRVJST1InLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW52YWxpZCBKU09OOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZSA9PT0gZGVzY0ZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCdzY2hlbWEnLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RydWN0dXJhbEVycm9yIG9mIHN0cnVjdHVyYWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfVkFMSURBVElPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogc3RydWN0dXJhbEVycm9yLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbm9ybWFsaXplU2NoZW1hRGVzY3JpcHRpb24ocGFyc2VkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gZmlsZS5zbGljZSgwLCAtJy5qc29uJy5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVkTmFtZSA9IGAke3NjaGVtYU5hbWV9LiR7dGFibGVOYW1lfWA7XG5cbiAgICAgICAgICAgIGlmICghTkFNRV9SRS50ZXN0KHRhYmxlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1RBQkxFX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGFibGUgbmFtZSBcIiR7dGFibGVOYW1lfVwiIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2UgKG1hdGNoaW5nICR7TkFNRV9SRX0pYCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCd0YWJsZScsIHBhcnNlZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN0cnVjdHVyYWxFcnJvciBvZiBzdHJ1Y3R1cmFsLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzdHJ1Y3R1cmFsRXJyb3IuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9hZGVkVGFibGUgPSBjcmVhdGVUYWJsZVR5cGUoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmFsbHlWYWxpZDogc3RydWN0dXJhbC52YWxpZCxcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBub3JtYWxpemVUYWJsZURlZmluaXRpb24ocGFyc2VkKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9hZGVkVGFibGVzLnB1c2gobG9hZGVkVGFibGUpO1xuICAgICAgICAgICAgdGFibGVzLnNldChxdWFsaWZpZWROYW1lLCBsb2FkZWRUYWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9ERVNDX1BSRVNFTlQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4oZGlyUGF0aCwgZGVzY0ZpbGVOYW1lKSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc2NoZW1hIFwiJHtzY2hlbWFOYW1lfVwiIGlzIG1pc3NpbmcgaXRzIGRlc2NyaXB0aW9uIGZpbGUgXCIke2Rlc2NGaWxlTmFtZX1cImAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVtYXMuc2V0KHNjaGVtYU5hbWUsIHtcbiAgICAgICAgICAgIG5hbWU6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICBkaXJQYXRoLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB0YWJsZXM6IGxvYWRlZFRhYmxlcyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd29ybGQ6IHtcbiAgICAgICAgICAgIHJvb3REaXI6IGFic29sdXRlUm9vdCxcbiAgICAgICAgICAgIHNjaGVtYXMsXG4gICAgICAgICAgICB0YWJsZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHZpb2xhdGlvbnMsXG4gICAgfTtcbn1cbiJdfQ==
|
|
360
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3UUgsNEJBd0lDO0FBOVlELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFnQjdCLDZDQUVzQjtBQUl0QixxREFFZ0M7QUFlaEMsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM1QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFnQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0YsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQWM7SUFDM0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM1QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDN0IsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQWM7SUFDckMsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWM7SUFDcEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMs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O1lBQ2hCLE9BQU87WUFDUCxXQUFXO1lBQ1gsTUFBTSxFQUFFLFlBQVk7U0FDdkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU87UUFDSCxLQUFLLEVBQUU7WUFDSCxPQUFPLEVBQUUsWUFBWTtZQUNyQixPQUFPO1lBQ1AsTUFBTTtTQUNUO1FBQ0QsVUFBVTtLQUNiLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaWxlc3lzdGVtIGxvYWRlci4gV2Fsa3MgYSBkYXRhc2V0IHJvb3QsIHBhcnNlcyBlYWNoIEpTT04gZmlsZSwgcnVucyBMYXllciAxXG4gKiBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24sIGFuZCBub3JtYWxpemVzIGV2ZXJ5dGhpbmcgaW50byBhIGBXb3JsZGAgb2ZcbiAqIGNvbmNyZXRlIGBUYWJsZVR5cGVCYXNlYCBpbnN0YW5jZXMgdGhhdCB0aGUgc2VtYW50aWMgcnVsZXMgb3BlcmF0ZSBvbi5cbiAqXG4gKiBQYXJzZSBlcnJvcnMsIHN0cnVjdHVyYWwgZXJyb3JzLCBhbmQgYSBtaXNzaW5nIHNjaGVtYS1kZXNjcmlwdGlvbiBmaWxlIGFyZVxuICogcmVwb3J0ZWQgaGVyZTsgYWxsIGNyb3NzLWZpZWxkIC8gY3Jvc3MtZmlsZSBsb2dpYyBsaXZlcyBpbiB0aGUgdGFibGUtdHlwZVxuICogY2xhc3NlcyAoYC4vdGFibGUtdHlwZS50c2AsIGAuL3RhYmxlLXR5cGVzLypgKS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge1xuICAgIEJ1Y2tldGluZyxcbiAgICBDaGVja0NvbnN0cmFpbnQsXG4gICAgQ29sdW1uLFxuICAgIEV4Y2x1c2lvbkNvbnN0cmFpbnQsXG4gICAgRm9yZWlnbktleSxcbiAgICBJbmRleCxcbiAgICBQYXJ0aXRpb24sXG4gICAgU2NoZW1hRGVzY3JpcHRpb24sXG4gICAgU29ydEZpZWxkLFxuICAgIFRhYmxlRGVmaW5pdGlvbixcbiAgICBVbmlxdWVDb25zdHJhaW50LFxuICAgIFZpb2xhdGlvbixcbn0gZnJvbSAnLi9tb2RlbCc7XG5pbXBvcnQge1xuICAgIHZhbGlkYXRlU3RydWN0dXJlLFxufSBmcm9tICcuL3N0cnVjdHVyYWwnO1xuaW1wb3J0IHtcbiAgICBUYWJsZVR5cGVCYXNlLFxufSBmcm9tICcuL3RhYmxlLXR5cGUnO1xuaW1wb3J0IHtcbiAgICBjcmVhdGVUYWJsZVR5cGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvcmVnaXN0cnknO1xuaW1wb3J0IHtcbiAgICBMb2FkZWRTY2hlbWEsXG4gICAgV29ybGQsXG59IGZyb20gJy4vd29ybGQnO1xuXG4vKiogUmVzdWx0IG9mIGxvYWRpbmcgYSByb290OiB0aGUgbW9kZWwgcGx1cyBhbnkgbG9hZC10aW1lIHZpb2xhdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRPdXRjb21lIHtcbiAgICAvKiogVGhlIGxvYWRlZCBtb2RlbC4gKi9cbiAgICByZWFkb25seSB3b3JsZDogV29ybGQ7XG5cbiAgICAvKiogUGFyc2UsIHN0cnVjdHVyYWwsIGFuZCBtaXNzaW5nLWRlc2NyaXB0aW9uIHZpb2xhdGlvbnMuICovXG4gICAgcmVhZG9ubHkgdmlvbGF0aW9uczogVmlvbGF0aW9uW107XG59XG5cbmZ1bmN0aW9uIGFzUmVjb3JkKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gOiB7fTtcbn1cblxuZnVuY3Rpb24gYXNBcnJheSh2YWx1ZTogdW5rbm93bik6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbn1cblxuZnVuY3Rpb24gYXNTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJztcbn1cblxuZnVuY3Rpb24gYXNCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gYXNPcHRpb25hbEJvb2xlYW4odmFsdWU6IHVua25vd24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXNPcHRpb25hbE51bWJlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXNPcHRpb25hbFN0cmluZyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXNTdHJpbmdBcnJheSh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBzdHJpbmcgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29sdW1ucyh2YWx1ZTogdW5rbm93bik6IENvbHVtbltdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKHJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgIHR5cGU6IGFzU3RyaW5nKHJlY29yZC50eXBlKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICAgICAgbnVsbGFibGU6IGFzT3B0aW9uYWxCb29sZWFuKHJlY29yZC5udWxsYWJsZSksXG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLmdlbmVyYXRlZCksXG4gICAgICAgICAgICBleHByZXNzaW9uOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5leHByZXNzaW9uKSxcbiAgICAgICAgICAgIGV4cHJlc3Npb25Db2x1bW5zOiAnZXhwcmVzc2lvbkNvbHVtbnMnIGluIHJlY29yZCA/IGFzU3RyaW5nQXJyYXkocmVjb3JkLmV4cHJlc3Npb25Db2x1bW5zKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGlkZW50aXR5OiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5pZGVudGl0eSksXG4gICAgICAgICAgICBkZWZhdWx0OiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5kZWZhdWx0KSxcbiAgICAgICAgICAgIGNvbGxhdGlvbjogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuY29sbGF0aW9uKSxcbiAgICAgICAgICAgIGNvbXByZXNzaW9uOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5jb21wcmVzc2lvbiksXG4gICAgICAgICAgICBzdG9yYWdlOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5zdG9yYWdlKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGFydGl0aW9ucyh2YWx1ZTogdW5rbm93bik6IFBhcnRpdGlvbltdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKHJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgIHR5cGU6IGFzU3RyaW5nKHJlY29yZC50eXBlKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTb3J0T3JkZXIodmFsdWU6IHVua25vd24pOiBTb3J0RmllbGRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW46IGFzU3RyaW5nKHJlY29yZC5jb2x1bW4pLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC50cmFuc2Zvcm0pLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGlyZWN0aW9uKSxcbiAgICAgICAgICAgIG51bGxPcmRlcjogYXNTdHJpbmcocmVjb3JkLm51bGxPcmRlciksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUluZGV4ZXModmFsdWU6IHVua25vd24pOiBJbmRleFtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKHJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgIG1ldGhvZDogYXNTdHJpbmcocmVjb3JkLm1ldGhvZCksXG4gICAgICAgICAgICB1bmlxdWU6IGFzT3B0aW9uYWxCb29sZWFuKHJlY29yZC51bmlxdWUpLFxuICAgICAgICAgICAgY29sdW1uczogYXNBcnJheShyZWNvcmQuY29sdW1ucykubWFwKChyYXdDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5SZWNvcmQgPSBhc1JlY29yZChyYXdDb2x1bW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKGNvbHVtblJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgc29ydDogYXNPcHRpb25hbFN0cmluZyhjb2x1bW5SZWNvcmQuc29ydCksXG4gICAgICAgICAgICAgICAgICAgIG51bGxzOiBhc09wdGlvbmFsU3RyaW5nKGNvbHVtblJlY29yZC5udWxscyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgaW5jbHVkZTogYXNTdHJpbmdBcnJheShyZWNvcmQuaW5jbHVkZSksXG4gICAgICAgICAgICB3aGVyZTogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQud2hlcmUpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVVbmlxdWVDb25zdHJhaW50cyh2YWx1ZTogdW5rbm93bik6IFVuaXF1ZUNvbnN0cmFpbnRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICBjb2x1bW5zOiBhc1N0cmluZ0FycmF5KHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgICAgIG51bGxzTm90RGlzdGluY3Q6IGFzT3B0aW9uYWxCb29sZWFuKHJlY29yZC5udWxsc05vdERpc3RpbmN0KSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ2hlY2tDb25zdHJhaW50cyh2YWx1ZTogdW5rbm93bik6IENoZWNrQ29uc3RyYWludFtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKHJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGFzU3RyaW5nKHJlY29yZC5leHByZXNzaW9uKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGFzU3RyaW5nQXJyYXkocmVjb3JkLmNvbHVtbnMpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVFeGNsdXNpb25Db25zdHJhaW50cyh2YWx1ZTogdW5rbm93bik6IEV4Y2x1c2lvbkNvbnN0cmFpbnRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB1c2luZzogYXNTdHJpbmcocmVjb3JkLnVzaW5nKSxcbiAgICAgICAgICAgIGVsZW1lbnRzOiBhc0FycmF5KHJlY29yZC5lbGVtZW50cykubWFwKChyYXdFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFJlY29yZCA9IGFzUmVjb3JkKHJhd0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogYXNTdHJpbmcoZWxlbWVudFJlY29yZC5jb2x1bW4pLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogYXNTdHJpbmcoZWxlbWVudFJlY29yZC5vcGVyYXRvciksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVCdWNrZXRpbmcodmFsdWU6IHVua25vd24pOiBCdWNrZXRpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHZhbHVlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5zOiBhc1N0cmluZ0FycmF5KHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgYnVja2V0Q291bnQ6IHR5cGVvZiByZWNvcmQuYnVja2V0Q291bnQgPT09ICdudW1iZXInID8gcmVjb3JkLmJ1Y2tldENvdW50IDogMCxcbiAgICAgICAgc29ydGVkQnk6IGFzQXJyYXkocmVjb3JkLnNvcnRlZEJ5KS5tYXAoKHJhdykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc29ydFJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbHVtbjogYXNTdHJpbmcoc29ydFJlY29yZC5jb2x1bW4pLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogYXNTdHJpbmcoc29ydFJlY29yZC5kaXJlY3Rpb24pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nTWFwKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQodmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW1xuICAgICAgICBrZXksXG4gICAgICAgIHJhdyxcbiAgICBdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByYXcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHJhdztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVGb3JlaWduS2V5cyh2YWx1ZTogdW5rbm93bik6IEZvcmVpZ25LZXlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2VUYWJsZTogYXNTdHJpbmcocmVjb3JkLnNvdXJjZVRhYmxlKSxcbiAgICAgICAgICAgIHNvdXJjZUNvbHVtbjogYXNTdHJpbmcocmVjb3JkLnNvdXJjZUNvbHVtbiksXG4gICAgICAgICAgICBsb2NhbENvbHVtbjogYXNTdHJpbmcocmVjb3JkLmxvY2FsQ29sdW1uKSxcbiAgICAgICAgICAgIGFsbG93TnVsbHM6IGFzQm9vbGVhbihyZWNvcmQuYWxsb3dOdWxscyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRhYmxlRGVmaW5pdGlvbihyYXc6IHVua25vd24pOiBUYWJsZURlZmluaXRpb24ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3BlY1ZlcnNpb246IGFzU3RyaW5nKHJlY29yZC5zcGVjVmVyc2lvbiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICB0YWJsZVR5cGU6IGFzU3RyaW5nKHJlY29yZC50YWJsZVR5cGUpLFxuICAgICAgICBpc1Jhd0RhdGE6IGFzQm9vbGVhbihyZWNvcmQuaXNSYXdEYXRhKSxcbiAgICAgICAgZm9ybWF0VmVyc2lvbjogYXNPcHRpb25hbE51bWJlcihyZWNvcmQuZm9ybWF0VmVyc2lvbiksXG4gICAgICAgIGNvbHVtbnM6IG5vcm1hbGl6ZUNvbHVtbnMocmVjb3JkLmNvbHVtbnMpLFxuICAgICAgICBwcmltYXJ5S2V5OiBhc1N0cmluZ0FycmF5KHJlY29yZC5wcmltYXJ5S2V5KSxcbiAgICAgICAgcGFydGl0aW9uczogbm9ybWFsaXplUGFydGl0aW9ucyhyZWNvcmQucGFydGl0aW9ucyksXG4gICAgICAgIHNvcnRPcmRlcjogbm9ybWFsaXplU29ydE9yZGVyKHJlY29yZC5zb3J0T3JkZXIpLFxuICAgICAgICBpZGVudGlmaWVyRmllbGRzOiBhc1N0cmluZ0FycmF5KHJlY29yZC5pZGVudGlmaWVyRmllbGRzKSxcbiAgICAgICAgaW5kZXhlczogbm9ybWFsaXplSW5kZXhlcyhyZWNvcmQuaW5kZXhlcyksXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzOiBub3JtYWxpemVVbmlxdWVDb25zdHJhaW50cyhyZWNvcmQudW5pcXVlQ29uc3RyYWludHMpLFxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzOiBub3JtYWxpemVDaGVja0NvbnN0cmFpbnRzKHJlY29yZC5jaGVja0NvbnN0cmFpbnRzKSxcbiAgICAgICAgZXhjbHVzaW9uQ29uc3RyYWludHM6IG5vcm1hbGl6ZUV4Y2x1c2lvbkNvbnN0cmFpbnRzKHJlY29yZC5leGNsdXNpb25Db25zdHJhaW50cyksXG4gICAgICAgIGJ1Y2tldGluZzogbm9ybWFsaXplQnVja2V0aW5nKHJlY29yZC5idWNrZXRpbmcpLFxuICAgICAgICB0YWJsZVByb3BlcnRpZXM6IG5vcm1hbGl6ZVN0cmluZ01hcChyZWNvcmQudGFibGVQcm9wZXJ0aWVzKSxcbiAgICAgICAgZGVwZW5kc09uOiBhc1N0cmluZ0FycmF5KHJlY29yZC5kZXBlbmRzT24pLFxuICAgICAgICBmb3JlaWduS2V5czogbm9ybWFsaXplRm9yZWlnbktleXMocmVjb3JkLmZvcmVpZ25LZXlzKSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY2hlbWFEZXNjcmlwdGlvbihyYXc6IHVua25vd24pOiBTY2hlbWFEZXNjcmlwdGlvbiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzcGVjVmVyc2lvbjogYXNTdHJpbmcocmVjb3JkLnNwZWNWZXJzaW9uKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgfTtcbn1cblxuLy8vIFNjaGVtYSBhbmQgdGFibGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkXG4vLy8gZnJvbSBgZGVwZW5kc09uYCBhbmQgZm9yZWlnbiBrZXlzLCB3aG9zZSBwYXR0ZXJucyByZXF1aXJlIHRoZSBzYW1lIHNoYXBlLlxuY29uc3QgTkFNRV9SRSA9IC9eW2EtejAtOV9dKyQvO1xuXG4vKipcbiAqIExvYWQgYSBkYXRhc2V0IHJvb3QgaW50byBhIGBXb3JsZGAuXG4gKlxuICogQHBhcmFtIHJvb3REaXIgQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGF0YXNldCByb290LlxuICogQHJldHVybnMgVGhlIGxvYWRlZCB3b3JsZCBwbHVzIGxvYWQtdGltZSB2aW9sYXRpb25zLlxuICogQHRocm93cyBFcnJvciBXaGVuIGByb290RGlyYCBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJvb3Qocm9vdERpcjogc3RyaW5nKTogTG9hZE91dGNvbWUge1xuICAgIGNvbnN0IGFic29sdXRlUm9vdCA9IHBhdGgucmVzb2x2ZShyb290RGlyKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzb2x1dGVSb290KSB8fCAhZnMuc3RhdFN5bmMoYWJzb2x1dGVSb290KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGF0YXNldCByb290IGlzIG5vdCBhIGRpcmVjdG9yeTogJHthYnNvbHV0ZVJvb3R9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIExvYWRlZFNjaGVtYT4oKTtcbiAgICBjb25zdCB0YWJsZXMgPSBuZXcgTWFwPHN0cmluZywgVGFibGVUeXBlQmFzZT4oKTtcblxuICAgIGNvbnN0IHNjaGVtYURpcnMgPSBmcy5yZWFkZGlyU3luYyhhYnNvbHV0ZVJvb3QsIHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0RpcmVjdG9yeSgpICYmICFlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoJy4nKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWFEaXIgb2Ygc2NoZW1hRGlycykge1xuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gc2NoZW1hRGlyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRpclBhdGggPSBwYXRoLmpvaW4oYWJzb2x1dGVSb290LCBzY2hlbWFOYW1lKTtcblxuICAgICAgICBpZiAoIU5BTUVfUkUudGVzdChzY2hlbWFOYW1lKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBkaXJQYXRoLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzY2hlbWEgbmFtZSBcIiR7c2NoZW1hTmFtZX1cIiBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIChtYXRjaGluZyAke05BTUVfUkV9KWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NGaWxlTmFtZSA9IGAke3NjaGVtYU5hbWV9Lmpzb25gO1xuICAgICAgICBjb25zdCBqc29uRmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJQYXRoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgICAgIGxldCBkZXNjcmlwdGlvbjogU2NoZW1hRGVzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgbG9hZGVkVGFibGVzOiBUYWJsZVR5cGVCYXNlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YganNvbkZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgICAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0ZJTEVfUEFSU0VfRVJST1InLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW52YWxpZCBKU09OOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZSA9PT0gZGVzY0ZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCdzY2hlbWEnLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RydWN0dXJhbEVycm9yIG9mIHN0cnVjdHVyYWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfVkFMSURBVElPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogc3RydWN0dXJhbEVycm9yLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbm9ybWFsaXplU2NoZW1hRGVzY3JpcHRpb24ocGFyc2VkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gZmlsZS5zbGljZSgwLCAtJy5qc29uJy5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVkTmFtZSA9IGAke3NjaGVtYU5hbWV9LiR7dGFibGVOYW1lfWA7XG5cbiAgICAgICAgICAgIGlmICghTkFNRV9SRS50ZXN0KHRhYmxlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1RBQkxFX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGFibGUgbmFtZSBcIiR7dGFibGVOYW1lfVwiIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2UgKG1hdGNoaW5nICR7TkFNRV9SRX0pYCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCd0YWJsZScsIHBhcnNlZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN0cnVjdHVyYWxFcnJvciBvZiBzdHJ1Y3R1cmFsLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzdHJ1Y3R1cmFsRXJyb3IuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9hZGVkVGFibGUgPSBjcmVhdGVUYWJsZVR5cGUoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmFsbHlWYWxpZDogc3RydWN0dXJhbC52YWxpZCxcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBub3JtYWxpemVUYWJsZURlZmluaXRpb24ocGFyc2VkKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9hZGVkVGFibGVzLnB1c2gobG9hZGVkVGFibGUpO1xuICAgICAgICAgICAgdGFibGVzLnNldChxdWFsaWZpZWROYW1lLCBsb2FkZWRUYWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9ERVNDX1BSRVNFTlQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4oZGlyUGF0aCwgZGVzY0ZpbGVOYW1lKSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc2NoZW1hIFwiJHtzY2hlbWFOYW1lfVwiIGlzIG1pc3NpbmcgaXRzIGRlc2NyaXB0aW9uIGZpbGUgXCIke2Rlc2NGaWxlTmFtZX1cImAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVtYXMuc2V0KHNjaGVtYU5hbWUsIHtcbiAgICAgICAgICAgIG5hbWU6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICBkaXJQYXRoLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB0YWJsZXM6IGxvYWRlZFRhYmxlcyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd29ybGQ6IHtcbiAgICAgICAgICAgIHJvb3REaXI6IGFic29sdXRlUm9vdCxcbiAgICAgICAgICAgIHNjaGVtYXMsXG4gICAgICAgICAgICB0YWJsZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHZpb2xhdGlvbnMsXG4gICAgfTtcbn1cbiJdfQ==
|
package/dist/src/model.d.ts
CHANGED
|
@@ -203,6 +203,8 @@ export interface TableDefinition {
|
|
|
203
203
|
readonly partitions: Partition[];
|
|
204
204
|
/** Iceberg sort order (ordered sort fields). Optional; other engines ignore it. */
|
|
205
205
|
readonly sortOrder: SortField[];
|
|
206
|
+
/** Iceberg identifier fields (the row-identity / equality-delete key). Optional. */
|
|
207
|
+
readonly identifierFields: string[];
|
|
206
208
|
/** Secondary indexes (Postgres). Optional; other engines ignore them. */
|
|
207
209
|
readonly indexes: Index[];
|
|
208
210
|
/** UNIQUE constraints (Postgres). Optional; other engines ignore them. */
|
package/dist/src/model.js
CHANGED
|
@@ -23,4 +23,4 @@ exports.TABLE_TYPES = [
|
|
|
23
23
|
TableType.ICEBERG_PARQUET,
|
|
24
24
|
TableType.POSTGRES_18,
|
|
25
25
|
];
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxlQUFlO0lBQ3pCLFNBQVMsQ0FBQyxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcmUgZGF0YSBtb2RlbCBmb3IgdGhlIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiAoRkREKSBzdGFuZGFyZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlc2NyaWJlIHRoZSAqcHVyZSBkYXRhKiBzaGFwZSBvZiBhIGRhdGFzZXQ6IGNvbHVtbnMsXG4gKiBwYXJ0aXRpb25zLCBmb3JlaWduIGtleXMsIHRhYmxlIGRlZmluaXRpb25zLCBhbmQgdGhlIHZpb2xhdGlvbnMgdGhlXG4gKiB2YWxpZGF0b3IgZW1pdHMuIFRoZSBsb2FkZWQgd29ybGQgKHNjaGVtYXMgKyB0YWJsZSBpbnN0YW5jZXMpIGFuZCB0aGVcbiAqIGFic3RyYWN0IHRhYmxlIGJhc2UgY2xhc3MgbGl2ZSBpbiBgLi93b3JsZGAgYW5kIGAuL3RhYmxlLXR5cGVgIHNvIHRoaXNcbiAqIG1vZHVsZSBzdGF5cyBhIGxlYWYgd2l0aCBubyBiZWhhdmlvci5cbiAqL1xuXG4vKiogVGFibGUgZW5naW5lLiBFYWNoIHZhbHVlIHVubG9ja3MgZW5naW5lLXNwZWNpZmljIHNlbWFudGljIGNoZWNrcy4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlVHlwZSB7XG4gICAgSElWRV9QQVJRVUVUID0gJ2hpdmVfcGFycXVldCcsXG4gICAgSUNFQkVSR19QQVJRVUVUID0gJ2ljZWJlcmdfcGFycXVldCcsXG4gICAgUE9TVEdSRVNfMTggPSAncG9zdGdyZXNfMTgnLFxufVxuXG4vKiogRXZlcnkga25vd24gYHRhYmxlVHlwZWAgc3RyaW5nLCBmb3IgbWVtYmVyc2hpcCBjaGVja3MuICovXG5leHBvcnQgY29uc3QgVEFCTEVfVFlQRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgIFRhYmxlVHlwZS5ISVZFX1BBUlFVRVQsXG4gICAgVGFibGVUeXBlLklDRUJFUkdfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuUE9TVEdSRVNfMTgsXG5dO1xuXG4vKiogQSBzaW5nbGUgZGF0YSBjb2x1bW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gICAgLyoqIENvbHVtbiBuYW1lICh1bmlxdWUgd2l0aGluIGEgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUtc3BlY2lmaWMgdHlwZSBzdHJpbmcgKGUuZy4gYGxvbmdgLCBgdmFyY2hhcigyNTUpYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gbWF5IGhvbGQgbnVsbC4gT3B0aW9uYWw6IHdoZW4gb21pdHRlZCwgbnVsbGFiaWxpdHkgaXNcbiAgICAgKiB1bnNwZWNpZmllZCBhbmQgdGhlIG51bGxhYmlsaXR5IGNyb3NzLWNoZWNrcyBkbyBub3QgZmlyZS4gYGZhbHNlYCBtYXJrcyBhXG4gICAgICogTk9UIE5VTEwgY29sdW1uIChJY2ViZXJnIGByZXF1aXJlZGApOyBgdHJ1ZWAgbWFya3MgYW4gZXhwbGljaXRseSBudWxsYWJsZVxuICAgICAqIGNvbHVtbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZWQtY29sdW1uIGtpbmQgKFBvc3RncmVzKTogYHN0b3JlZGAgb3IgYHZpcnR1YWxgLiBPcHRpb25hbDsgd2hlblxuICAgICAqIHNldCwgdGhlIGNvbHVtbiBpcyBjb21wdXRlZCBmcm9tIGBleHByZXNzaW9uQ29sdW1uc2AuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZ2VuZXJhdGVkPzogc3RyaW5nO1xuXG4gICAgLyoqIE9wYXF1ZSBnZW5lcmF0aW9uIGV4cHJlc3Npb24gKFBvc3RncmVzIGdlbmVyYXRlZCBjb2x1bW4pLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgICAvKiogQ29sdW1ucyB0aGUgZ2VuZXJhdGlvbiBgZXhwcmVzc2lvbmAgcmVmZXJlbmNlcyAoUG9zdGdyZXMpLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb25Db2x1bW5zPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBJZGVudGl0eS1jb2x1bW4ga2luZCAoUG9zdGdyZXMpOiBgYWx3YXlzYCBvciBgYnlEZWZhdWx0YC4gT3B0aW9uYWw7IHdoZW5cbiAgICAgKiBzZXQsIHRoZSBjb2x1bW4gaXMgYEdFTkVSQVRFRCDigKYgQVMgSURFTlRJVFlgLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGlkZW50aXR5Pzogc3RyaW5nO1xuXG4gICAgLyoqIE9wYXF1ZSBjb2x1bW4gZGVmYXVsdCBleHByZXNzaW9uIChQb3N0Z3JlcykuICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdD86IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW4gY29sbGF0aW9uIG5hbWUgKFBvc3RncmVzKS4gT3BhcXVlOyBsZWdhbCBvbmx5IG9uIHRleHQgdHlwZXMuICovXG4gICAgcmVhZG9ubHkgY29sbGF0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqIFBlci1jb2x1bW4gVE9BU1QgY29tcHJlc3Npb24gKFBvc3RncmVzKTogYHBnbHpgIG9yIGBsejRgLiAqL1xuICAgIHJlYWRvbmx5IGNvbXByZXNzaW9uPzogc3RyaW5nO1xuXG4gICAgLyoqIFBlci1jb2x1bW4gc3RvcmFnZSBzdHJhdGVneSAoUG9zdGdyZXMpOiBgcGxhaW5gL2BleHRlcm5hbGAvYGV4dGVuZGVkYC9gbWFpbmAvYGRlZmF1bHRgLiAqL1xuICAgIHJlYWRvbmx5IHN0b3JhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwYXJ0aXRpb24gZW50cnkuIFRoZSBtZWFuaW5nIG9mIGBuYW1lYCBhbmQgYHR5cGVgIGlzIGVuZ2luZS1zcGVjaWZpYzogZm9yXG4gKiBIaXZlLCBgbmFtZWAgaXMgYSBuZXcgcGFydGl0aW9uIGNvbHVtbiBhbmQgYHR5cGVgIGlzIGEgbm9ybWFsIHR5cGU7IGZvclxuICogSWNlYmVyZywgYG5hbWVgIGlzIGEgc291cmNlIGRhdGEgY29sdW1uIGFuZCBgdHlwZWAgaXMgYSB0cmFuc2Zvcm07IGZvclxuICogUG9zdGdyZXMsIGBuYW1lYCBpcyBhbiBleGlzdGluZyBrZXkgY29sdW1uIGFuZCBgdHlwZWAgaXMgdGhlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbiB7XG4gICAgLyoqIEhpdmU6IG5ldyBwYXJ0aXRpb24gY29sdW1uIG5hbWUuIEljZWJlcmcgLyBQb3N0Z3JlczogZXhpc3RpbmcgZGF0YS9rZXkgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEhpdmU6IGEgbm9ybWFsIHR5cGUuIEljZWJlcmc6IGEgdHJhbnNmb3JtIChlLmcuIGBkYXlgLCBgYnVja2V0WzE2XWApLiBQb3N0Z3JlczogYSBzdHJhdGVneSAoYHJhbmdlYCAvIGBsaXN0YCAvIGBoYXNoYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgc29ydCBmaWVsZCBpbiBhbiBJY2ViZXJnIHRhYmxlJ3Mgc29ydCBvcmRlci4gYGNvbHVtbmAgaXMgYSBkYXRhXG4gKiBjb2x1bW47IGB0cmFuc2Zvcm1gIGlzIGFuIG9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmdcbiAqIChkZWZhdWx0cyB0byBpZGVudGl0eSk7IGBkaXJlY3Rpb25gIGFuZCBgbnVsbE9yZGVyYCBzZXQgdGhlIG9yZGVyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gICAgLyoqIFNvdXJjZSBkYXRhIGNvbHVtbiB0byBzb3J0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIE9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmcgKGUuZy4gYGRheWAsIGBidWNrZXRbMTZdYCkuICovXG4gICAgcmVhZG9ubHkgdHJhbnNmb3JtPzogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqIE51bGwgb3JkZXJpbmcgKGBudWxscy1maXJzdGAgb3IgYG51bGxzLWxhc3RgKS4gKi9cbiAgICByZWFkb25seSBudWxsT3JkZXI6IHN0cmluZztcbn1cblxuLyoqIEEgc2luZ2xlIGtleSBjb2x1bW4gd2l0aGluIGFuIGluZGV4LCB3aXRoIG9wdGlvbmFsIG9yZGVyaW5nIG1vZGlmaWVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDb2x1bW4ge1xuICAgIC8qKiBJbmRleGVkIGNvbHVtbiBuYW1lLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBPcHRpb25hbCBzb3J0IG9yZGVyIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKiogT3B0aW9uYWwgbnVsbCBvcmRlcmluZyAoYGZpcnN0YCBvciBgbGFzdGApLiAqL1xuICAgIHJlYWRvbmx5IG51bGxzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2Vjb25kYXJ5IGluZGV4IChlLmcuIFBvc3RncmVzKS4gYGNvbHVtbnNgIGFyZSB0aGUga2V5IGNvbHVtbnM7IGBpbmNsdWRlYFxuICogYXJlIG5vbi1rZXkgY292ZXJpbmcgY29sdW1uczsgYHdoZXJlYCBpcyBhbiBvcGFxdWUgcGFydGlhbC1pbmRleCBwcmVkaWNhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXgge1xuICAgIC8qKiBJbmRleCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEFjY2VzcyBtZXRob2QgKGUuZy4gYGJ0cmVlYCwgYGhhc2hgLCBgZ2luYCkuICovXG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgaW5kZXggZW5mb3JjZXMgdW5pcXVlbmVzcy4gKi9cbiAgICByZWFkb25seSB1bmlxdWU/OiBib29sZWFuO1xuXG4gICAgLyoqIEtleSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IEluZGV4Q29sdW1uW107XG5cbiAgICAvKiogTm9uLWtleSBjb3ZlcmluZyBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGU6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE9wdGlvbmFsIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlIChvcGFxdWUpLiAqL1xuICAgIHJlYWRvbmx5IHdoZXJlPzogc3RyaW5nO1xufVxuXG4vKiogQSB0YWJsZS1sZXZlbCBVTklRVUUgY29uc3RyYWludCBvdmVyIG9uZSBvciBtb3JlIGNvbHVtbnMgKFBvc3RncmVzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlQ29uc3RyYWludCB7XG4gICAgLyoqIENvbnN0cmFpbnQgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBjb25zdHJhaW50IHNwYW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFdoZXRoZXIgbnVsbHMgYXJlIHRyZWF0ZWQgYXMgbm90IGRpc3RpbmN0IChgTlVMTFMgTk9UIERJU1RJTkNUYCkuICovXG4gICAgcmVhZG9ubHkgbnVsbHNOb3REaXN0aW5jdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBDSEVDSyBjb25zdHJhaW50IChQb3N0Z3JlcykuIGBleHByZXNzaW9uYCBpcyBhbiBvcGFxdWUgcHJlZGljYXRlOyBgY29sdW1uc2BcbiAqIGlzIHRoZSBleHBsaWNpdCBsaXN0IG9mIGNvbHVtbnMgaXQgcmVmZXJlbmNlcywgd2hpY2ggaXMgd2hhdCBnZXRzIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja0NvbnN0cmFpbnQge1xuICAgIC8qKiBDb25zdHJhaW50IG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHRhYmxlKS4gKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogT3BhcXVlIGJvb2xlYW4gcHJlZGljYXRlLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb246IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBwcmVkaWNhdGUgcmVmZXJlbmNlcy4gKi9cbiAgICByZWFkb25seSBjb2x1bW5zOiBzdHJpbmdbXTtcbn1cblxuLyoqIEEgc29ydCBjb2x1bW4gd2l0aGluIGEgSGl2ZSBidWNrZXRpbmcgc3BlYy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U29ydCB7XG4gICAgLyoqIENvbHVtbiB0byBzb3J0IGVhY2ggYnVja2V0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2AsIGNhc2UtaW5zZW5zaXRpdmUpLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhpdmUgYnVja2V0aW5nIChgQ0xVU1RFUkVEIEJZIOKApiBJTlRPIE4gQlVDS0VUUyBbU09SVEVEIEJZIOKApl1gKS4gYGNvbHVtbnNgIGFyZVxuICogdGhlIGJ1Y2tldC1rZXkgY29sdW1ucywgYGJ1Y2tldENvdW50YCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMsIGFuZCBgc29ydGVkQnlgXG4gKiB0aGUgb3B0aW9uYWwgaW50cmEtYnVja2V0IHNvcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0aW5nIHtcbiAgICAvKiogQnVja2V0LWtleSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE51bWJlciBvZiBidWNrZXRzLiAqL1xuICAgIHJlYWRvbmx5IGJ1Y2tldENvdW50OiBudW1iZXI7XG5cbiAgICAvKiogT3B0aW9uYWwgaW50cmEtYnVja2V0IHNvcnQgY29sdW1ucy4gKi9cbiAgICByZWFkb25seSBzb3J0ZWRCeTogQnVja2V0U29ydFtdO1xufVxuXG4vKiogT25lIGVsZW1lbnQgb2YgYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQ6IGEgY29sdW1uIGFuZCBpdHMgb3BlcmF0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2x1c2lvbkVsZW1lbnQge1xuICAgIC8qKiBDb2x1bW4gdGhlIGVsZW1lbnQgYXBwbGllcyB0by4gKi9cbiAgICByZWFkb25seSBjb2x1bW46IHN0cmluZztcblxuICAgIC8qKiBPcGFxdWUgb3BlcmF0b3IgKGUuZy4gYCYmYCwgYD1gKS4gKi9cbiAgICByZWFkb25seSBvcGVyYXRvcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGV4Y2x1c2lvbiBjb25zdHJhaW50IChQb3N0Z3Jlcyk6IG5vIHR3byByb3dzIG1heSBoYXZlIGFsbCBsaXN0ZWRcbiAqIGNvbHVtbi9vcGVyYXRvciBwYWlycyBldmFsdWF0ZSB0cnVlIHRvZ2V0aGVyIChnZW5lcmFsaXplZCB1bmlxdWVuZXNzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGNsdXNpb25Db25zdHJhaW50IHtcbiAgICAvKiogQ29uc3RyYWludCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEluZGV4IGFjY2VzcyBtZXRob2QgKGBnaXN0YCBvciBgc3BnaXN0YCkuICovXG4gICAgcmVhZG9ubHkgdXNpbmc6IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW4vb3BlcmF0b3IgZWxlbWVudHMuICovXG4gICAgcmVhZG9ubHkgZWxlbWVudHM6IEV4Y2x1c2lvbkVsZW1lbnRbXTtcbn1cblxuLyoqIEEgZm9yZWlnbi1rZXkgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIGFub3RoZXIgdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmVpZ25LZXkge1xuICAgIC8qKiBSZWZlcmVuY2VkIHRhYmxlIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBzb3VyY2VUYWJsZTogc3RyaW5nO1xuXG4gICAgLyoqIFJlZmVyZW5jZWQgY29sdW1uIGluIHRoZSBzb3VyY2UgdGFibGUuICovXG4gICAgcmVhZG9ubHkgc291cmNlQ29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogTG9jYWwgY29sdW1uIHRoYXQgaG9sZHMgdGhlIHJlZmVyZW5jZS4gKi9cbiAgICByZWFkb25seSBsb2NhbENvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGxvY2FsIGNvbHVtbiBtYXkgYmUgbnVsbC4gKi9cbiAgICByZWFkb25seSBhbGxvd051bGxzOiBib29sZWFuO1xufVxuXG4vKiogTm9ybWFsaXplZCB0YWJsZSBkZWZpbml0aW9uIChvcHRpb25hbCBhcnJheXMgZGVmYXVsdGVkIHRvIGVtcHR5KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVEZWZpbml0aW9uIHtcbiAgICAvKiogU3BlYyB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgIHJlYWRvbmx5IHNwZWNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUuIE1heSBiZSBhbiB1bmtub3duIHN0cmluZyBpZiB0aGUgZmlsZSBmYWlsZWQgc3RydWN0dXJhbCBjaGVja3MuICovXG4gICAgcmVhZG9ubHkgdGFibGVUeXBlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGlzIHRhYmxlIGlzIHRoZSB0b3Agb2YgdGhlIHBpcGVsaW5lLiAqL1xuICAgIHJlYWRvbmx5IGlzUmF3RGF0YTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEljZWJlcmcgdGFibGUgZm9ybWF0IHZlcnNpb24gKDEsIDIsIG9yIDMpLiBPcHRpb25hbCBhbmQgZW5naW5lLXNwZWNpZmljOlxuICAgICAqIG9ubHkgdGhlIEljZWJlcmcgZW5naW5lIHZhbGlkYXRlcyBpdC4gT3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9ybWF0VmVyc2lvbj86IG51bWJlcjtcblxuICAgIC8qKiBEYXRhIGNvbHVtbnMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uczogQ29sdW1uW107XG5cbiAgICAvKiogUHJpbWFyeS1rZXkgY29sdW1uIG5hbWVzLiAqL1xuICAgIHJlYWRvbmx5IHByaW1hcnlLZXk6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFBhcnRpdGlvbiBlbnRyaWVzIChlbmdpbmUtc3BlY2lmaWMgc2VtYW50aWNzKS4gKi9cbiAgICByZWFkb25seSBwYXJ0aXRpb25zOiBQYXJ0aXRpb25bXTtcblxuICAgIC8qKiBJY2ViZXJnIHNvcnQgb3JkZXIgKG9yZGVyZWQgc29ydCBmaWVsZHMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuICovXG4gICAgcmVhZG9ubHkgc29ydE9yZGVyOiBTb3J0RmllbGRbXTtcblxuICAgIC8qKiBTZWNvbmRhcnkgaW5kZXhlcyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSBpbmRleGVzOiBJbmRleFtdO1xuXG4gICAgLyoqIFVOSVFVRSBjb25zdHJhaW50cyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSB1bmlxdWVDb25zdHJhaW50czogVW5pcXVlQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIENIRUNLIGNvbnN0cmFpbnRzIChQb3N0Z3JlcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSB0aGVtLiAqL1xuICAgIHJlYWRvbmx5IGNoZWNrQ29uc3RyYWludHM6IENoZWNrQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIEV4Y2x1c2lvbiBjb25zdHJhaW50cyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSBleGNsdXNpb25Db25zdHJhaW50czogRXhjbHVzaW9uQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIEhpdmUgYnVja2V0aW5nIHNwZWMuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSBpdC4gKi9cbiAgICByZWFkb25seSBidWNrZXRpbmc/OiBCdWNrZXRpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbmdpbmUgdGFibGUgcHJvcGVydGllcyBhcyBhIHN0cmluZ+KGknN0cmluZyBtYXAgKGUuZy4gSWNlYmVyZ1xuICAgICAqIGB3cml0ZS50YXJnZXQtZmlsZS1zaXplLWJ5dGVzYCwgSGl2ZSBgcGFycXVldC5jb21wcmVzc2lvbmApLiBPcHRpb25hbC5cbiAgICAgKiBPbmx5IGtleXMgd2l0aCBhIGtub3duLCBjbG9zZWQgbGVnYWwgZG9tYWluIGFyZSB2YWxpZGF0ZWQgcGVyIGVuZ2luZTtcbiAgICAgKiB1bmtub3duIGtleXMgcGFzcyB0aHJvdWdoIHVudmFsaWRhdGVkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHRhYmxlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAgIC8qKiBVcHN0cmVhbSB0YWJsZXMgaW4gYHNjaGVtYS50YWJsZWAgZm9ybWF0LiAqL1xuICAgIHJlYWRvbmx5IGRlcGVuZHNPbjogc3RyaW5nW107XG5cbiAgICAvKiogRm9yZWlnbiBrZXlzLiAqL1xuICAgIHJlYWRvbmx5IGZvcmVpZ25LZXlzOiBGb3JlaWduS2V5W107XG59XG5cbi8qKiBBIHNjaGVtYS1kZXNjcmlwdGlvbiBmaWxlJ3Mgbm9ybWFsaXplZCBjb250ZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFEZXNjcmlwdGlvbiB7XG4gICAgLyoqIFNwZWMgdmVyc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICByZWFkb25seSBzcGVjVmVyc2lvbjogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKiBTZXZlcml0eSBvZiBhIHZpb2xhdGlvbi4gKi9cbmV4cG9ydCB0eXBlIFZpb2xhdGlvbkxldmVsID0gJ2Vycm9yJyB8ICd3YXJuaW5nJztcblxuLyoqIEEgc2luZ2xlIHZhbGlkYXRpb24gZmluZGluZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlvbGF0aW9uIHtcbiAgICAvKiogU2V2ZXJpdHkuIGBlcnJvcmAgZmFpbHMgdmFsaWRhdGlvbjsgYHdhcm5pbmdgIGRvZXMgbm90LiAqL1xuICAgIHJlYWRvbmx5IGxldmVsOiBWaW9sYXRpb25MZXZlbDtcblxuICAgIC8qKiBTdGFibGUgbWFjaGluZS1yZWFkYWJsZSBydWxlIGNvZGUgKGUuZy4gYFBLX0NPTFVNTlNfRVhJU1RgKS4gKi9cbiAgICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG5cbiAgICAvKiogT3duaW5nIHNjaGVtYSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBzY2hlbWE/OiBzdHJpbmc7XG5cbiAgICAvKiogT3duaW5nIHRhYmxlLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlPzogc3RyaW5nO1xuXG4gICAgLyoqIEZpZWxkIHBhdGggd2l0aGluIHRoZSBmaWxlLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IGZpZWxkPzogc3RyaW5nO1xuXG4gICAgLyoqIFNvdXJjZSBmaWxlIHBhdGgsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcblxuICAgIC8qKiBIdW1hbi1yZWFkYWJsZSBtZXNzYWdlLiAqL1xuICAgIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqIFRoZSBhZ2dyZWdhdGUgcmVzdWx0IG9mIHZhbGlkYXRpbmcgYSByb290LiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICAvKiogVHJ1ZSB3aGVuIHRoZXJlIGFyZSBubyBgZXJyb3JgLWxldmVsIHZpb2xhdGlvbnMuICovXG4gICAgcmVhZG9ubHkgb2s6IGJvb2xlYW47XG5cbiAgICAvKiogQWxsIGZpbmRpbmdzLCBlcnJvcnMgYW5kIHdhcm5pbmdzLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuIl19
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxlQUFlO0lBQ3pCLFNBQVMsQ0FBQyxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcmUgZGF0YSBtb2RlbCBmb3IgdGhlIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiAoRkREKSBzdGFuZGFyZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlc2NyaWJlIHRoZSAqcHVyZSBkYXRhKiBzaGFwZSBvZiBhIGRhdGFzZXQ6IGNvbHVtbnMsXG4gKiBwYXJ0aXRpb25zLCBmb3JlaWduIGtleXMsIHRhYmxlIGRlZmluaXRpb25zLCBhbmQgdGhlIHZpb2xhdGlvbnMgdGhlXG4gKiB2YWxpZGF0b3IgZW1pdHMuIFRoZSBsb2FkZWQgd29ybGQgKHNjaGVtYXMgKyB0YWJsZSBpbnN0YW5jZXMpIGFuZCB0aGVcbiAqIGFic3RyYWN0IHRhYmxlIGJhc2UgY2xhc3MgbGl2ZSBpbiBgLi93b3JsZGAgYW5kIGAuL3RhYmxlLXR5cGVgIHNvIHRoaXNcbiAqIG1vZHVsZSBzdGF5cyBhIGxlYWYgd2l0aCBubyBiZWhhdmlvci5cbiAqL1xuXG4vKiogVGFibGUgZW5naW5lLiBFYWNoIHZhbHVlIHVubG9ja3MgZW5naW5lLXNwZWNpZmljIHNlbWFudGljIGNoZWNrcy4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlVHlwZSB7XG4gICAgSElWRV9QQVJRVUVUID0gJ2hpdmVfcGFycXVldCcsXG4gICAgSUNFQkVSR19QQVJRVUVUID0gJ2ljZWJlcmdfcGFycXVldCcsXG4gICAgUE9TVEdSRVNfMTggPSAncG9zdGdyZXNfMTgnLFxufVxuXG4vKiogRXZlcnkga25vd24gYHRhYmxlVHlwZWAgc3RyaW5nLCBmb3IgbWVtYmVyc2hpcCBjaGVja3MuICovXG5leHBvcnQgY29uc3QgVEFCTEVfVFlQRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgIFRhYmxlVHlwZS5ISVZFX1BBUlFVRVQsXG4gICAgVGFibGVUeXBlLklDRUJFUkdfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuUE9TVEdSRVNfMTgsXG5dO1xuXG4vKiogQSBzaW5nbGUgZGF0YSBjb2x1bW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gICAgLyoqIENvbHVtbiBuYW1lICh1bmlxdWUgd2l0aGluIGEgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUtc3BlY2lmaWMgdHlwZSBzdHJpbmcgKGUuZy4gYGxvbmdgLCBgdmFyY2hhcigyNTUpYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gbWF5IGhvbGQgbnVsbC4gT3B0aW9uYWw6IHdoZW4gb21pdHRlZCwgbnVsbGFiaWxpdHkgaXNcbiAgICAgKiB1bnNwZWNpZmllZCBhbmQgdGhlIG51bGxhYmlsaXR5IGNyb3NzLWNoZWNrcyBkbyBub3QgZmlyZS4gYGZhbHNlYCBtYXJrcyBhXG4gICAgICogTk9UIE5VTEwgY29sdW1uIChJY2ViZXJnIGByZXF1aXJlZGApOyBgdHJ1ZWAgbWFya3MgYW4gZXhwbGljaXRseSBudWxsYWJsZVxuICAgICAqIGNvbHVtbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZWQtY29sdW1uIGtpbmQgKFBvc3RncmVzKTogYHN0b3JlZGAgb3IgYHZpcnR1YWxgLiBPcHRpb25hbDsgd2hlblxuICAgICAqIHNldCwgdGhlIGNvbHVtbiBpcyBjb21wdXRlZCBmcm9tIGBleHByZXNzaW9uQ29sdW1uc2AuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZ2VuZXJhdGVkPzogc3RyaW5nO1xuXG4gICAgLyoqIE9wYXF1ZSBnZW5lcmF0aW9uIGV4cHJlc3Npb24gKFBvc3RncmVzIGdlbmVyYXRlZCBjb2x1bW4pLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgICAvKiogQ29sdW1ucyB0aGUgZ2VuZXJhdGlvbiBgZXhwcmVzc2lvbmAgcmVmZXJlbmNlcyAoUG9zdGdyZXMpLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb25Db2x1bW5zPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBJZGVudGl0eS1jb2x1bW4ga2luZCAoUG9zdGdyZXMpOiBgYWx3YXlzYCBvciBgYnlEZWZhdWx0YC4gT3B0aW9uYWw7IHdoZW5cbiAgICAgKiBzZXQsIHRoZSBjb2x1bW4gaXMgYEdFTkVSQVRFRCDigKYgQVMgSURFTlRJVFlgLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGlkZW50aXR5Pzogc3RyaW5nO1xuXG4gICAgLyoqIE9wYXF1ZSBjb2x1bW4gZGVmYXVsdCBleHByZXNzaW9uIChQb3N0Z3JlcykuICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdD86IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW4gY29sbGF0aW9uIG5hbWUgKFBvc3RncmVzKS4gT3BhcXVlOyBsZWdhbCBvbmx5IG9uIHRleHQgdHlwZXMuICovXG4gICAgcmVhZG9ubHkgY29sbGF0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqIFBlci1jb2x1bW4gVE9BU1QgY29tcHJlc3Npb24gKFBvc3RncmVzKTogYHBnbHpgIG9yIGBsejRgLiAqL1xuICAgIHJlYWRvbmx5IGNvbXByZXNzaW9uPzogc3RyaW5nO1xuXG4gICAgLyoqIFBlci1jb2x1bW4gc3RvcmFnZSBzdHJhdGVneSAoUG9zdGdyZXMpOiBgcGxhaW5gL2BleHRlcm5hbGAvYGV4dGVuZGVkYC9gbWFpbmAvYGRlZmF1bHRgLiAqL1xuICAgIHJlYWRvbmx5IHN0b3JhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwYXJ0aXRpb24gZW50cnkuIFRoZSBtZWFuaW5nIG9mIGBuYW1lYCBhbmQgYHR5cGVgIGlzIGVuZ2luZS1zcGVjaWZpYzogZm9yXG4gKiBIaXZlLCBgbmFtZWAgaXMgYSBuZXcgcGFydGl0aW9uIGNvbHVtbiBhbmQgYHR5cGVgIGlzIGEgbm9ybWFsIHR5cGU7IGZvclxuICogSWNlYmVyZywgYG5hbWVgIGlzIGEgc291cmNlIGRhdGEgY29sdW1uIGFuZCBgdHlwZWAgaXMgYSB0cmFuc2Zvcm07IGZvclxuICogUG9zdGdyZXMsIGBuYW1lYCBpcyBhbiBleGlzdGluZyBrZXkgY29sdW1uIGFuZCBgdHlwZWAgaXMgdGhlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbiB7XG4gICAgLyoqIEhpdmU6IG5ldyBwYXJ0aXRpb24gY29sdW1uIG5hbWUuIEljZWJlcmcgLyBQb3N0Z3JlczogZXhpc3RpbmcgZGF0YS9rZXkgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEhpdmU6IGEgbm9ybWFsIHR5cGUuIEljZWJlcmc6IGEgdHJhbnNmb3JtIChlLmcuIGBkYXlgLCBgYnVja2V0WzE2XWApLiBQb3N0Z3JlczogYSBzdHJhdGVneSAoYHJhbmdlYCAvIGBsaXN0YCAvIGBoYXNoYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgc29ydCBmaWVsZCBpbiBhbiBJY2ViZXJnIHRhYmxlJ3Mgc29ydCBvcmRlci4gYGNvbHVtbmAgaXMgYSBkYXRhXG4gKiBjb2x1bW47IGB0cmFuc2Zvcm1gIGlzIGFuIG9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmdcbiAqIChkZWZhdWx0cyB0byBpZGVudGl0eSk7IGBkaXJlY3Rpb25gIGFuZCBgbnVsbE9yZGVyYCBzZXQgdGhlIG9yZGVyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gICAgLyoqIFNvdXJjZSBkYXRhIGNvbHVtbiB0byBzb3J0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIE9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmcgKGUuZy4gYGRheWAsIGBidWNrZXRbMTZdYCkuICovXG4gICAgcmVhZG9ubHkgdHJhbnNmb3JtPzogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqIE51bGwgb3JkZXJpbmcgKGBudWxscy1maXJzdGAgb3IgYG51bGxzLWxhc3RgKS4gKi9cbiAgICByZWFkb25seSBudWxsT3JkZXI6IHN0cmluZztcbn1cblxuLyoqIEEgc2luZ2xlIGtleSBjb2x1bW4gd2l0aGluIGFuIGluZGV4LCB3aXRoIG9wdGlvbmFsIG9yZGVyaW5nIG1vZGlmaWVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDb2x1bW4ge1xuICAgIC8qKiBJbmRleGVkIGNvbHVtbiBuYW1lLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBPcHRpb25hbCBzb3J0IG9yZGVyIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKiogT3B0aW9uYWwgbnVsbCBvcmRlcmluZyAoYGZpcnN0YCBvciBgbGFzdGApLiAqL1xuICAgIHJlYWRvbmx5IG51bGxzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2Vjb25kYXJ5IGluZGV4IChlLmcuIFBvc3RncmVzKS4gYGNvbHVtbnNgIGFyZSB0aGUga2V5IGNvbHVtbnM7IGBpbmNsdWRlYFxuICogYXJlIG5vbi1rZXkgY292ZXJpbmcgY29sdW1uczsgYHdoZXJlYCBpcyBhbiBvcGFxdWUgcGFydGlhbC1pbmRleCBwcmVkaWNhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXgge1xuICAgIC8qKiBJbmRleCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEFjY2VzcyBtZXRob2QgKGUuZy4gYGJ0cmVlYCwgYGhhc2hgLCBgZ2luYCkuICovXG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgaW5kZXggZW5mb3JjZXMgdW5pcXVlbmVzcy4gKi9cbiAgICByZWFkb25seSB1bmlxdWU/OiBib29sZWFuO1xuXG4gICAgLyoqIEtleSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IEluZGV4Q29sdW1uW107XG5cbiAgICAvKiogTm9uLWtleSBjb3ZlcmluZyBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGU6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE9wdGlvbmFsIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlIChvcGFxdWUpLiAqL1xuICAgIHJlYWRvbmx5IHdoZXJlPzogc3RyaW5nO1xufVxuXG4vKiogQSB0YWJsZS1sZXZlbCBVTklRVUUgY29uc3RyYWludCBvdmVyIG9uZSBvciBtb3JlIGNvbHVtbnMgKFBvc3RncmVzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlQ29uc3RyYWludCB7XG4gICAgLyoqIENvbnN0cmFpbnQgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBjb25zdHJhaW50IHNwYW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFdoZXRoZXIgbnVsbHMgYXJlIHRyZWF0ZWQgYXMgbm90IGRpc3RpbmN0IChgTlVMTFMgTk9UIERJU1RJTkNUYCkuICovXG4gICAgcmVhZG9ubHkgbnVsbHNOb3REaXN0aW5jdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBDSEVDSyBjb25zdHJhaW50IChQb3N0Z3JlcykuIGBleHByZXNzaW9uYCBpcyBhbiBvcGFxdWUgcHJlZGljYXRlOyBgY29sdW1uc2BcbiAqIGlzIHRoZSBleHBsaWNpdCBsaXN0IG9mIGNvbHVtbnMgaXQgcmVmZXJlbmNlcywgd2hpY2ggaXMgd2hhdCBnZXRzIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja0NvbnN0cmFpbnQge1xuICAgIC8qKiBDb25zdHJhaW50IG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHRhYmxlKS4gKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogT3BhcXVlIGJvb2xlYW4gcHJlZGljYXRlLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb246IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBwcmVkaWNhdGUgcmVmZXJlbmNlcy4gKi9cbiAgICByZWFkb25seSBjb2x1bW5zOiBzdHJpbmdbXTtcbn1cblxuLyoqIEEgc29ydCBjb2x1bW4gd2l0aGluIGEgSGl2ZSBidWNrZXRpbmcgc3BlYy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U29ydCB7XG4gICAgLyoqIENvbHVtbiB0byBzb3J0IGVhY2ggYnVja2V0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2AsIGNhc2UtaW5zZW5zaXRpdmUpLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhpdmUgYnVja2V0aW5nIChgQ0xVU1RFUkVEIEJZIOKApiBJTlRPIE4gQlVDS0VUUyBbU09SVEVEIEJZIOKApl1gKS4gYGNvbHVtbnNgIGFyZVxuICogdGhlIGJ1Y2tldC1rZXkgY29sdW1ucywgYGJ1Y2tldENvdW50YCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMsIGFuZCBgc29ydGVkQnlgXG4gKiB0aGUgb3B0aW9uYWwgaW50cmEtYnVja2V0IHNvcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0aW5nIHtcbiAgICAvKiogQnVja2V0LWtleSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE51bWJlciBvZiBidWNrZXRzLiAqL1xuICAgIHJlYWRvbmx5IGJ1Y2tldENvdW50OiBudW1iZXI7XG5cbiAgICAvKiogT3B0aW9uYWwgaW50cmEtYnVja2V0IHNvcnQgY29sdW1ucy4gKi9cbiAgICByZWFkb25seSBzb3J0ZWRCeTogQnVja2V0U29ydFtdO1xufVxuXG4vKiogT25lIGVsZW1lbnQgb2YgYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQ6IGEgY29sdW1uIGFuZCBpdHMgb3BlcmF0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2x1c2lvbkVsZW1lbnQge1xuICAgIC8qKiBDb2x1bW4gdGhlIGVsZW1lbnQgYXBwbGllcyB0by4gKi9cbiAgICByZWFkb25seSBjb2x1bW46IHN0cmluZztcblxuICAgIC8qKiBPcGFxdWUgb3BlcmF0b3IgKGUuZy4gYCYmYCwgYD1gKS4gKi9cbiAgICByZWFkb25seSBvcGVyYXRvcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGV4Y2x1c2lvbiBjb25zdHJhaW50IChQb3N0Z3Jlcyk6IG5vIHR3byByb3dzIG1heSBoYXZlIGFsbCBsaXN0ZWRcbiAqIGNvbHVtbi9vcGVyYXRvciBwYWlycyBldmFsdWF0ZSB0cnVlIHRvZ2V0aGVyIChnZW5lcmFsaXplZCB1bmlxdWVuZXNzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGNsdXNpb25Db25zdHJhaW50IHtcbiAgICAvKiogQ29uc3RyYWludCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEluZGV4IGFjY2VzcyBtZXRob2QgKGBnaXN0YCBvciBgc3BnaXN0YCkuICovXG4gICAgcmVhZG9ubHkgdXNpbmc6IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW4vb3BlcmF0b3IgZWxlbWVudHMuICovXG4gICAgcmVhZG9ubHkgZWxlbWVudHM6IEV4Y2x1c2lvbkVsZW1lbnRbXTtcbn1cblxuLyoqIEEgZm9yZWlnbi1rZXkgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIGFub3RoZXIgdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmVpZ25LZXkge1xuICAgIC8qKiBSZWZlcmVuY2VkIHRhYmxlIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBzb3VyY2VUYWJsZTogc3RyaW5nO1xuXG4gICAgLyoqIFJlZmVyZW5jZWQgY29sdW1uIGluIHRoZSBzb3VyY2UgdGFibGUuICovXG4gICAgcmVhZG9ubHkgc291cmNlQ29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogTG9jYWwgY29sdW1uIHRoYXQgaG9sZHMgdGhlIHJlZmVyZW5jZS4gKi9cbiAgICByZWFkb25seSBsb2NhbENvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGxvY2FsIGNvbHVtbiBtYXkgYmUgbnVsbC4gKi9cbiAgICByZWFkb25seSBhbGxvd051bGxzOiBib29sZWFuO1xufVxuXG4vKiogTm9ybWFsaXplZCB0YWJsZSBkZWZpbml0aW9uIChvcHRpb25hbCBhcnJheXMgZGVmYXVsdGVkIHRvIGVtcHR5KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVEZWZpbml0aW9uIHtcbiAgICAvKiogU3BlYyB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgIHJlYWRvbmx5IHNwZWNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUuIE1heSBiZSBhbiB1bmtub3duIHN0cmluZyBpZiB0aGUgZmlsZSBmYWlsZWQgc3RydWN0dXJhbCBjaGVja3MuICovXG4gICAgcmVhZG9ubHkgdGFibGVUeXBlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGlzIHRhYmxlIGlzIHRoZSB0b3Agb2YgdGhlIHBpcGVsaW5lLiAqL1xuICAgIHJlYWRvbmx5IGlzUmF3RGF0YTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEljZWJlcmcgdGFibGUgZm9ybWF0IHZlcnNpb24gKDEsIDIsIG9yIDMpLiBPcHRpb25hbCBhbmQgZW5naW5lLXNwZWNpZmljOlxuICAgICAqIG9ubHkgdGhlIEljZWJlcmcgZW5naW5lIHZhbGlkYXRlcyBpdC4gT3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9ybWF0VmVyc2lvbj86IG51bWJlcjtcblxuICAgIC8qKiBEYXRhIGNvbHVtbnMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uczogQ29sdW1uW107XG5cbiAgICAvKiogUHJpbWFyeS1rZXkgY29sdW1uIG5hbWVzLiAqL1xuICAgIHJlYWRvbmx5IHByaW1hcnlLZXk6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFBhcnRpdGlvbiBlbnRyaWVzIChlbmdpbmUtc3BlY2lmaWMgc2VtYW50aWNzKS4gKi9cbiAgICByZWFkb25seSBwYXJ0aXRpb25zOiBQYXJ0aXRpb25bXTtcblxuICAgIC8qKiBJY2ViZXJnIHNvcnQgb3JkZXIgKG9yZGVyZWQgc29ydCBmaWVsZHMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuICovXG4gICAgcmVhZG9ubHkgc29ydE9yZGVyOiBTb3J0RmllbGRbXTtcblxuICAgIC8qKiBJY2ViZXJnIGlkZW50aWZpZXIgZmllbGRzICh0aGUgcm93LWlkZW50aXR5IC8gZXF1YWxpdHktZGVsZXRlIGtleSkuIE9wdGlvbmFsLiAqL1xuICAgIHJlYWRvbmx5IGlkZW50aWZpZXJGaWVsZHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFNlY29uZGFyeSBpbmRleGVzIChQb3N0Z3JlcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSB0aGVtLiAqL1xuICAgIHJlYWRvbmx5IGluZGV4ZXM6IEluZGV4W107XG5cbiAgICAvKiogVU5JUVVFIGNvbnN0cmFpbnRzIChQb3N0Z3JlcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSB0aGVtLiAqL1xuICAgIHJlYWRvbmx5IHVuaXF1ZUNvbnN0cmFpbnRzOiBVbmlxdWVDb25zdHJhaW50W107XG5cbiAgICAvKiogQ0hFQ0sgY29uc3RyYWludHMgKFBvc3RncmVzKS4gT3B0aW9uYWw7IG90aGVyIGVuZ2luZXMgaWdub3JlIHRoZW0uICovXG4gICAgcmVhZG9ubHkgY2hlY2tDb25zdHJhaW50czogQ2hlY2tDb25zdHJhaW50W107XG5cbiAgICAvKiogRXhjbHVzaW9uIGNvbnN0cmFpbnRzIChQb3N0Z3JlcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSB0aGVtLiAqL1xuICAgIHJlYWRvbmx5IGV4Y2x1c2lvbkNvbnN0cmFpbnRzOiBFeGNsdXNpb25Db25zdHJhaW50W107XG5cbiAgICAvKiogSGl2ZSBidWNrZXRpbmcgc3BlYy4gT3B0aW9uYWw7IG90aGVyIGVuZ2luZXMgaWdub3JlIGl0LiAqL1xuICAgIHJlYWRvbmx5IGJ1Y2tldGluZz86IEJ1Y2tldGluZztcblxuICAgIC8qKlxuICAgICAqIEVuZ2luZSB0YWJsZSBwcm9wZXJ0aWVzIGFzIGEgc3RyaW5n4oaSc3RyaW5nIG1hcCAoZS5nLiBJY2ViZXJnXG4gICAgICogYHdyaXRlLnRhcmdldC1maWxlLXNpemUtYnl0ZXNgLCBIaXZlIGBwYXJxdWV0LmNvbXByZXNzaW9uYCkuIE9wdGlvbmFsLlxuICAgICAqIE9ubHkga2V5cyB3aXRoIGEga25vd24sIGNsb3NlZCBsZWdhbCBkb21haW4gYXJlIHZhbGlkYXRlZCBwZXIgZW5naW5lO1xuICAgICAqIHVua25vd24ga2V5cyBwYXNzIHRocm91Z2ggdW52YWxpZGF0ZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgdGFibGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgLyoqIFVwc3RyZWFtIHRhYmxlcyBpbiBgc2NoZW1hLnRhYmxlYCBmb3JtYXQuICovXG4gICAgcmVhZG9ubHkgZGVwZW5kc09uOiBzdHJpbmdbXTtcblxuICAgIC8qKiBGb3JlaWduIGtleXMuICovXG4gICAgcmVhZG9ubHkgZm9yZWlnbktleXM6IEZvcmVpZ25LZXlbXTtcbn1cblxuLyoqIEEgc2NoZW1hLWRlc2NyaXB0aW9uIGZpbGUncyBub3JtYWxpemVkIGNvbnRlbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYURlc2NyaXB0aW9uIHtcbiAgICAvKiogU3BlYyB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgIHJlYWRvbmx5IHNwZWNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuLyoqIFNldmVyaXR5IG9mIGEgdmlvbGF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgVmlvbGF0aW9uTGV2ZWwgPSAnZXJyb3InIHwgJ3dhcm5pbmcnO1xuXG4vKiogQSBzaW5nbGUgdmFsaWRhdGlvbiBmaW5kaW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaW9sYXRpb24ge1xuICAgIC8qKiBTZXZlcml0eS4gYGVycm9yYCBmYWlscyB2YWxpZGF0aW9uOyBgd2FybmluZ2AgZG9lcyBub3QuICovXG4gICAgcmVhZG9ubHkgbGV2ZWw6IFZpb2xhdGlvbkxldmVsO1xuXG4gICAgLyoqIFN0YWJsZSBtYWNoaW5lLXJlYWRhYmxlIHJ1bGUgY29kZSAoZS5nLiBgUEtfQ09MVU1OU19FWElTVGApLiAqL1xuICAgIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcblxuICAgIC8qKiBPd25pbmcgc2NoZW1hLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHNjaGVtYT86IHN0cmluZztcblxuICAgIC8qKiBPd25pbmcgdGFibGUsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgdGFibGU/OiBzdHJpbmc7XG5cbiAgICAvKiogRmllbGQgcGF0aCB3aXRoaW4gdGhlIGZpbGUsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgZmllbGQ/OiBzdHJpbmc7XG5cbiAgICAvKiogU291cmNlIGZpbGUgcGF0aCwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UuICovXG4gICAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKiogVGhlIGFnZ3JlZ2F0ZSByZXN1bHQgb2YgdmFsaWRhdGluZyBhIHJvb3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25SZXN1bHQge1xuICAgIC8qKiBUcnVlIHdoZW4gdGhlcmUgYXJlIG5vIGBlcnJvcmAtbGV2ZWwgdmlvbGF0aW9ucy4gKi9cbiAgICByZWFkb25seSBvazogYm9vbGVhbjtcblxuICAgIC8qKiBBbGwgZmluZGluZ3MsIGVycm9ycyBhbmQgd2FybmluZ3MuICovXG4gICAgcmVhZG9ubHkgdmlvbGF0aW9uczogVmlvbGF0aW9uW107XG59XG4iXX0=
|
|
@@ -31,6 +31,7 @@ export declare class IcebergParquetTable extends TableTypeBase {
|
|
|
31
31
|
private static readonly FORMAT_VERSIONS;
|
|
32
32
|
private static readonly ENUM_PROPERTIES;
|
|
33
33
|
private static readonly POSITIVE_INT_PROPERTIES;
|
|
34
|
+
private static readonly NON_NEGATIVE_INT_PROPERTIES;
|
|
34
35
|
private static readonly INT_RANGE_PROPERTIES;
|
|
35
36
|
private static readonly SORT_DIRECTIONS;
|
|
36
37
|
private static readonly SORT_NULL_ORDERS;
|
|
@@ -65,12 +66,25 @@ export declare class IcebergParquetTable extends TableTypeBase {
|
|
|
65
66
|
* Validate the closed-domain Iceberg table properties. Keys outside the
|
|
66
67
|
* known set pass through unvalidated.
|
|
67
68
|
*
|
|
68
|
-
* Emits `ICEBERG_PROPERTY_ENUM_VALID`, `ICEBERG_PROPERTY_POSITIVE_INT`,
|
|
69
|
-
* `ICEBERG_PROPERTY_INT_RANGE
|
|
69
|
+
* Emits `ICEBERG_PROPERTY_ENUM_VALID`, `ICEBERG_PROPERTY_POSITIVE_INT`,
|
|
70
|
+
* `ICEBERG_PROPERTY_NON_NEGATIVE_INT`, `ICEBERG_PROPERTY_INT_RANGE`, and
|
|
71
|
+
* `ICEBERG_COMMIT_RETRY_ORDERING`.
|
|
70
72
|
*
|
|
71
73
|
* @returns Every table-property violation.
|
|
72
74
|
*/
|
|
73
75
|
private tablePropertyViolations;
|
|
76
|
+
private commitRetryOrderingViolations;
|
|
77
|
+
/**
|
|
78
|
+
* Validate Iceberg identifier fields (the row-identity / equality-delete
|
|
79
|
+
* key). Equality deletes are a format-version 2+ feature, and identifier
|
|
80
|
+
* fields must be required primitive columns that are not float/double.
|
|
81
|
+
*
|
|
82
|
+
* Emits `ICEBERG_IDENTIFIER_NEEDS_FORMAT_V2`, `ICEBERG_IDENTIFIER_COLUMN_EXISTS`,
|
|
83
|
+
* `ICEBERG_IDENTIFIER_REQUIRED`, and `ICEBERG_IDENTIFIER_TYPE_PRIMITIVE`.
|
|
84
|
+
*
|
|
85
|
+
* @returns Every identifier-field violation.
|
|
86
|
+
*/
|
|
87
|
+
private identifierFieldViolations;
|
|
74
88
|
/**
|
|
75
89
|
* Normalize a partition into its identity key. When the transform parses,
|
|
76
90
|
* collapse on `${kind}:${param}` so `day` and `DAY`, `bucket[16]` and
|
|
@@ -20,6 +20,15 @@ const iceberg_1 = require("../iceberg");
|
|
|
20
20
|
function isPositiveInteger(value) {
|
|
21
21
|
return /^\d+$/.test(value) && Number(value) > 0;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Whether a string is a non-negative integer (digits only, value >= 0).
|
|
25
|
+
*
|
|
26
|
+
* @param value Property value string.
|
|
27
|
+
* @returns True when `value` is a non-negative integer.
|
|
28
|
+
*/
|
|
29
|
+
function isNonNegativeInteger(value) {
|
|
30
|
+
return /^\d+$/.test(value);
|
|
31
|
+
}
|
|
23
32
|
/**
|
|
24
33
|
* Whether a string is an integer within an inclusive range.
|
|
25
34
|
*
|
|
@@ -158,6 +167,13 @@ class IcebergParquetTable extends table_type_1.TableTypeBase {
|
|
|
158
167
|
'history.expire.min-snapshots-to-keep',
|
|
159
168
|
'history.expire.max-ref-age-ms',
|
|
160
169
|
'write.metadata.previous-versions-max',
|
|
170
|
+
'commit.retry.min-wait-ms',
|
|
171
|
+
'commit.retry.max-wait-ms',
|
|
172
|
+
'commit.retry.total-timeout-ms',
|
|
173
|
+
];
|
|
174
|
+
/// Table-property keys whose value must be a non-negative integer.
|
|
175
|
+
static NON_NEGATIVE_INT_PROPERTIES = [
|
|
176
|
+
'commit.retry.num-retries',
|
|
161
177
|
];
|
|
162
178
|
/// Table-property keys whose value must be an integer within an inclusive range.
|
|
163
179
|
static INT_RANGE_PROPERTIES = {
|
|
@@ -186,6 +202,7 @@ class IcebergParquetTable extends table_type_1.TableTypeBase {
|
|
|
186
202
|
...this.formatVersionViolations(),
|
|
187
203
|
...this.tablePropertyViolations(),
|
|
188
204
|
...this.sortOrderViolations(),
|
|
205
|
+
...this.identifierFieldViolations(),
|
|
189
206
|
];
|
|
190
207
|
}
|
|
191
208
|
/**
|
|
@@ -304,14 +321,16 @@ class IcebergParquetTable extends table_type_1.TableTypeBase {
|
|
|
304
321
|
* Validate the closed-domain Iceberg table properties. Keys outside the
|
|
305
322
|
* known set pass through unvalidated.
|
|
306
323
|
*
|
|
307
|
-
* Emits `ICEBERG_PROPERTY_ENUM_VALID`, `ICEBERG_PROPERTY_POSITIVE_INT`,
|
|
308
|
-
* `ICEBERG_PROPERTY_INT_RANGE
|
|
324
|
+
* Emits `ICEBERG_PROPERTY_ENUM_VALID`, `ICEBERG_PROPERTY_POSITIVE_INT`,
|
|
325
|
+
* `ICEBERG_PROPERTY_NON_NEGATIVE_INT`, `ICEBERG_PROPERTY_INT_RANGE`, and
|
|
326
|
+
* `ICEBERG_COMMIT_RETRY_ORDERING`.
|
|
309
327
|
*
|
|
310
328
|
* @returns Every table-property violation.
|
|
311
329
|
*/
|
|
312
330
|
tablePropertyViolations() {
|
|
313
331
|
const violations = [];
|
|
314
|
-
|
|
332
|
+
const properties = this.definition.tableProperties;
|
|
333
|
+
for (const [key, value,] of Object.entries(properties)) {
|
|
315
334
|
const allowed = IcebergParquetTable.ENUM_PROPERTIES[key];
|
|
316
335
|
if (allowed !== undefined && !allowed.includes(value)) {
|
|
317
336
|
violations.push(this.violation({
|
|
@@ -329,6 +348,14 @@ class IcebergParquetTable extends table_type_1.TableTypeBase {
|
|
|
329
348
|
message: `table property "${key}" value "${value}" must be a positive integer`,
|
|
330
349
|
}));
|
|
331
350
|
}
|
|
351
|
+
if (IcebergParquetTable.NON_NEGATIVE_INT_PROPERTIES.includes(key) && !isNonNegativeInteger(value)) {
|
|
352
|
+
violations.push(this.violation({
|
|
353
|
+
level: 'error',
|
|
354
|
+
code: 'ICEBERG_PROPERTY_NON_NEGATIVE_INT',
|
|
355
|
+
field: `tableProperties["${key}"]`,
|
|
356
|
+
message: `table property "${key}" value "${value}" must be a non-negative integer`,
|
|
357
|
+
}));
|
|
358
|
+
}
|
|
332
359
|
const range = IcebergParquetTable.INT_RANGE_PROPERTIES[key];
|
|
333
360
|
if (range !== undefined && !isIntegerInRange(value, range.min, range.max)) {
|
|
334
361
|
violations.push(this.violation({
|
|
@@ -340,6 +367,87 @@ class IcebergParquetTable extends table_type_1.TableTypeBase {
|
|
|
340
367
|
}));
|
|
341
368
|
}
|
|
342
369
|
}
|
|
370
|
+
violations.push(...this.commitRetryOrderingViolations(properties));
|
|
371
|
+
return violations;
|
|
372
|
+
}
|
|
373
|
+
/// ICEBERG_COMMIT_RETRY_ORDERING — commit.retry waits obey
|
|
374
|
+
/// min-wait-ms <= max-wait-ms <= total-timeout-ms when all are positive ints.
|
|
375
|
+
commitRetryOrderingViolations(properties) {
|
|
376
|
+
const values = [
|
|
377
|
+
properties['commit.retry.min-wait-ms'],
|
|
378
|
+
properties['commit.retry.max-wait-ms'],
|
|
379
|
+
properties['commit.retry.total-timeout-ms'],
|
|
380
|
+
];
|
|
381
|
+
if (!values.every((value) => value !== undefined && isPositiveInteger(value))) {
|
|
382
|
+
return [];
|
|
383
|
+
}
|
|
384
|
+
const [min, max, total,] = values.map(Number);
|
|
385
|
+
if (min <= max && max <= total) {
|
|
386
|
+
return [];
|
|
387
|
+
}
|
|
388
|
+
return [
|
|
389
|
+
this.violation({
|
|
390
|
+
level: 'error',
|
|
391
|
+
code: 'ICEBERG_COMMIT_RETRY_ORDERING',
|
|
392
|
+
field: 'tableProperties["commit.retry.min-wait-ms"]',
|
|
393
|
+
message: 'commit.retry waits must satisfy min-wait-ms <= max-wait-ms <= total-timeout-ms',
|
|
394
|
+
}),
|
|
395
|
+
];
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Validate Iceberg identifier fields (the row-identity / equality-delete
|
|
399
|
+
* key). Equality deletes are a format-version 2+ feature, and identifier
|
|
400
|
+
* fields must be required primitive columns that are not float/double.
|
|
401
|
+
*
|
|
402
|
+
* Emits `ICEBERG_IDENTIFIER_NEEDS_FORMAT_V2`, `ICEBERG_IDENTIFIER_COLUMN_EXISTS`,
|
|
403
|
+
* `ICEBERG_IDENTIFIER_REQUIRED`, and `ICEBERG_IDENTIFIER_TYPE_PRIMITIVE`.
|
|
404
|
+
*
|
|
405
|
+
* @returns Every identifier-field violation.
|
|
406
|
+
*/
|
|
407
|
+
identifierFieldViolations() {
|
|
408
|
+
const violations = [];
|
|
409
|
+
const { identifierFields, formatVersion, } = this.definition;
|
|
410
|
+
if (identifierFields.length === 0) {
|
|
411
|
+
return [];
|
|
412
|
+
}
|
|
413
|
+
if (formatVersion === 1) {
|
|
414
|
+
violations.push(this.violation({
|
|
415
|
+
level: 'error',
|
|
416
|
+
code: 'ICEBERG_IDENTIFIER_NEEDS_FORMAT_V2',
|
|
417
|
+
field: 'identifierFields',
|
|
418
|
+
message: 'identifier fields require formatVersion 2 or higher (equality deletes are a v2 feature)',
|
|
419
|
+
}));
|
|
420
|
+
}
|
|
421
|
+
identifierFields.forEach((name, index) => {
|
|
422
|
+
const field = `identifierFields[${index}]`;
|
|
423
|
+
const column = this.definition.columns.find((candidate) => candidate.name === name);
|
|
424
|
+
if (column === undefined) {
|
|
425
|
+
violations.push(this.violation({
|
|
426
|
+
level: 'error',
|
|
427
|
+
code: 'ICEBERG_IDENTIFIER_COLUMN_EXISTS',
|
|
428
|
+
field,
|
|
429
|
+
message: `identifier field "${name}" is not defined in columns`,
|
|
430
|
+
}));
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
if (column.nullable === true) {
|
|
434
|
+
violations.push(this.violation({
|
|
435
|
+
level: 'error',
|
|
436
|
+
code: 'ICEBERG_IDENTIFIER_REQUIRED',
|
|
437
|
+
field,
|
|
438
|
+
message: `identifier field "${name}" must be required (nullable: false)`,
|
|
439
|
+
}));
|
|
440
|
+
}
|
|
441
|
+
const type = (0, iceberg_1.parseIcebergType)(column.type);
|
|
442
|
+
if (type === null || type.kind === iceberg_1.IcebergTypeKind.FLOAT || type.kind === iceberg_1.IcebergTypeKind.DOUBLE) {
|
|
443
|
+
violations.push(this.violation({
|
|
444
|
+
level: 'error',
|
|
445
|
+
code: 'ICEBERG_IDENTIFIER_TYPE_PRIMITIVE',
|
|
446
|
+
field,
|
|
447
|
+
message: `identifier field "${name}" must be a primitive type other than float or double`,
|
|
448
|
+
}));
|
|
449
|
+
}
|
|
450
|
+
});
|
|
343
451
|
return violations;
|
|
344
452
|
}
|
|
345
453
|
/**
|
|
@@ -360,4 +468,4 @@ class IcebergParquetTable extends table_type_1.TableTypeBase {
|
|
|
360
468
|
}
|
|
361
469
|
}
|
|
362
470
|
exports.IcebergParquetTable = IcebergParquetTable;
|
|
363
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNlYmVyZy1wYXJxdWV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RhYmxlLXR5cGVzL2ljZWJlcmctcGFycXVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFPSCw4Q0FFdUI7QUFDdkIsd0NBS29CO0FBRXBCOzs7Ozs7R0FNRztBQUNILFNBQVMsaUJBQWlCLENBQUMsS0FBYTtJQUNwQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixPQUFPLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUMxQyxDQUFDO0FBRUQsK0JBQStCO0FBQy9CLE1BQWEsbUJBQW9CLFNBQVEsMEJBQWE7SUFDbEQ7Ozs7O09BS0c7SUFDSSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ2pDLE9BQU8sSUFBQSw0QkFBa0IsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLG1CQUFtQjtRQUN0QixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQ25DLE1BQU0sRUFDRixVQUFVLEdBQ2IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXBCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDL0IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSx5QkFBeUI7b0JBQy9CLEtBQUssRUFBRSxjQUFjLEtBQUssR0FBRztvQkFDN0IsT0FBTyxFQUFFLHlCQUF5QixTQUFTLENBQUMsSUFBSSxxQkFBcUIsU0FBUyxDQUFDLElBQUksR0FBRztpQkFDekYsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5RixJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDN0IsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsaUNBQWlDO29CQUN2QyxLQUFLLEVBQUUsY0FBYyxLQUFLLFFBQVE7b0JBQ2xDLE9BQU8sRUFBRSxvQ0FBb0MsU0FBUyxDQUFDLElBQUksNkJBQTZCO2lCQUMzRixDQUFDLENBQUMsQ0FBQztnQkFDSixPQUFPO1lBQ1gsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsK0JBQXFCLEVBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hELElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNyQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSx5QkFBeUI7b0JBQy9CLEtBQUssRUFBRSxjQUFjLEtBQUssUUFBUTtvQkFDbEMsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksOENBQThDO2lCQUM1RSxDQUFDLENBQUMsQ0FBQztnQkFDSixPQUFPO1lBQ1gsQ0FBQztZQUNELE1BQU0sVUFBVSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksVUFBVSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUEsOEJBQW9CLEVBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLHFDQUFxQztvQkFDM0MsS0FBSyxFQUFFLGNBQWMsS0FBSyxRQUFRO29CQUNsQyxPQUFPLEVBQUUsY0FBYyxTQUFTLENBQUMsSUFBSSxvQkFBb0I7MEJBQ25ELFdBQVcsU0FBUyxDQUFDLElBQUksY0FBYyxZQUFZLENBQUMsSUFBSSxHQUFHO2lCQUNwRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRCwyREFBMkQ7SUFDbkQsTUFBTSxDQUFVLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsQ0FBQztRQUNELENBQUM7S0FDSixDQUFDLENBQUM7SUFFSCxnRUFBZ0U7SUFDeEQsTUFBTSxDQUFVLGVBQWUsR0FBc0M7UUFDekUsc0JBQXNCLEVBQUU7WUFDcEIsU0FBUztZQUNULE1BQU07WUFDTixLQUFLO1NBQ1I7UUFDRCxpQ0FBaUMsRUFBRTtZQUMvQixNQUFNO1lBQ04sTUFBTTtZQUNOLFFBQVE7WUFDUixLQUFLO1lBQ0wsTUFBTTtTQUNUO1FBQ0QsOEJBQThCLEVBQUU7WUFDNUIsTUFBTTtZQUNOLE1BQU07WUFDTixRQUFRO1lBQ1IsY0FBYztTQUNqQjtRQUNELDZCQUE2QixFQUFFO1lBQzNCLE1BQU07WUFDTixLQUFLO1lBQ0wsS0FBSztZQUNMLE1BQU07WUFDTixRQUFRO1lBQ1IsTUFBTTtTQUNUO1FBQ0QseUJBQXlCLEVBQUU7WUFDdkIsTUFBTTtZQUNOLE1BQU07WUFDTixPQUFPO1NBQ1Y7UUFDRCxrQ0FBa0MsRUFBRTtZQUNoQyxNQUFNO1lBQ04sTUFBTTtTQUNUO0tBQ0osQ0FBQztJQUVGLCtEQUErRDtJQUN2RCxNQUFNLENBQVUsdUJBQXVCLEdBQXNCO1FBQ2pFLDhCQUE4QjtRQUM5QixvQ0FBb0M7UUFDcEMsc0NBQXNDO1FBQ3RDLCtCQUErQjtRQUMvQixzQ0FBc0M7S0FDekMsQ0FBQztJQUVGLGlGQUFpRjtJQUN6RSxNQUFNLENBQVUsb0JBQW9CLEdBQWlEO1FBQ3pGLGlDQUFpQyxFQUFFO1lBQy9CLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLEVBQUU7U0FDVjtLQUNKLENBQUM7SUFFRiw2Q0FBNkM7SUFDckMsTUFBTSxDQUFVLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUM5QyxLQUFLO1FBQ0wsTUFBTTtLQUNULENBQUMsQ0FBQztJQUVLLE1BQU0sQ0FBVSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUMvQyxhQUFhO1FBQ2IsWUFBWTtLQUNmLENBQUMsQ0FBQztJQUVIOzs7OztPQUtHO0lBQ0ksd0JBQXdCO1FBQzNCLE9BQU87WUFDSCxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNqQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNqQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtTQUNoQyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNLLG1CQUFtQjtRQUN2QixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQ25DLE1BQU0sRUFDRixTQUFTLEdBQ1osR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXBCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDL0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSwwQkFBMEI7b0JBQ2hDLEtBQUssRUFBRSxhQUFhLEtBQUssR0FBRztvQkFDNUIsT0FBTyxFQUFFLDBCQUEwQixLQUFLLENBQUMsTUFBTSxHQUFHOzBCQUM1QyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtpQkFDM0UsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzVELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLDhCQUE4QjtvQkFDcEMsS0FBSyxFQUFFLGFBQWEsS0FBSyxhQUFhO29CQUN0QyxPQUFPLEVBQUUsbUJBQW1CLEtBQUssQ0FBQyxTQUFTLDJCQUEyQjtpQkFDekUsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1lBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsK0JBQStCO29CQUNyQyxLQUFLLEVBQUUsYUFBYSxLQUFLLGFBQWE7b0JBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsS0FBSyxDQUFDLFNBQVMseUNBQXlDO2lCQUN4RixDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7WUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVGLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSw0QkFBNEI7b0JBQ2xDLEtBQUssRUFBRSxhQUFhLEtBQUssVUFBVTtvQkFDbkMsT0FBTyxFQUFFLGdCQUFnQixLQUFLLENBQUMsTUFBTSw2QkFBNkI7aUJBQ3JFLENBQUMsQ0FBQyxDQUFDO2dCQUNKLE9BQU87WUFDWCxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPO1lBQ1gsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsK0JBQXFCLEVBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pELElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNyQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSw4QkFBOEI7b0JBQ3BDLEtBQUssRUFBRSxhQUFhLEtBQUssYUFBYTtvQkFDdEMsT0FBTyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsb0NBQW9DO2lCQUNuRSxDQUFDLENBQUMsQ0FBQztnQkFDSixPQUFPO1lBQ1gsQ0FBQztZQUNELE1BQU0sVUFBVSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksVUFBVSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUEsOEJBQW9CLEVBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLG1DQUFtQztvQkFDekMsS0FBSyxFQUFFLGFBQWEsS0FBSyxhQUFhO29CQUN0QyxPQUFPLEVBQUUsY0FBYyxLQUFLLENBQUMsU0FBUyxvQkFBb0I7MEJBQ3BELFdBQVcsS0FBSyxDQUFDLE1BQU0sY0FBYyxZQUFZLENBQUMsSUFBSSxHQUFHO2lCQUNsRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxZQUFZLENBQUMsS0FBZ0I7UUFDakMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsK0JBQXFCLEVBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sbUJBQW1CLEdBQUcsU0FBUztZQUNqQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFO1lBQzlDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELDRFQUE0RTtJQUNwRSx1QkFBdUI7UUFDM0IsTUFBTSxFQUNGLGFBQWEsR0FDaEIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3BCLElBQUksYUFBYSxLQUFLLFNBQVMsSUFBSSxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDeEYsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTztZQUNILElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ1gsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLDhCQUE4QjtnQkFDcEMsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLE9BQU8sRUFBRSwwQkFBMEIsYUFBYSxzQkFBc0I7YUFDekUsQ0FBQztTQUNMLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyx1QkFBdUI7UUFDM0IsTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUVuQyxLQUFLLE1BQU0sQ0FDUCxHQUFHLEVBQ0gsS0FBSyxFQUNSLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pELElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsNkJBQTZCO29CQUNuQyxLQUFLLEVBQUUsb0JBQW9CLEdBQUcsSUFBSTtvQkFDbEMsT0FBTyxFQUFFLG1CQUFtQixHQUFHLFlBQVksS0FBSyxxQkFBcUIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtpQkFDNUYsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1lBRUQsSUFBSSxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6RixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSwrQkFBK0I7b0JBQ3JDLEtBQUssRUFBRSxvQkFBb0IsR0FBRyxJQUFJO29CQUNsQyxPQUFPLEVBQUUsbUJBQW1CLEdBQUcsWUFBWSxLQUFLLDhCQUE4QjtpQkFDakYsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLDRCQUE0QjtvQkFDbEMsS0FBSyxFQUFFLG9CQUFvQixHQUFHLElBQUk7b0JBQ2xDLE9BQU8sRUFBRSxtQkFBbUIsR0FBRyxZQUFZLEtBQUssK0JBQStCOzBCQUN6RSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRTtpQkFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLFlBQVksQ0FBQyxTQUFvQjtRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFBLCtCQUFxQixFQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLG1CQUFtQixHQUFHLFNBQVM7WUFDakMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRTtZQUM5QyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0lBQ3RELENBQUM7O0FBbldMLGtEQW9XQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSWNlYmVyZyAocGFycXVldCkgdGFibGUgdHlwZS5cbiAqXG4gKiBJY2ViZXJnIHBhcnRpdGlvbnMgYXJlIHRyYW5zZm9ybXMgYXBwbGllZCB0byBhIGRhdGEgY29sdW1uLCBzbyBkdXBsaWNhdGVcbiAqIGRldGVjdGlvbiBrZXlzIG9uIHRoZSAoc291cmNlIGNvbHVtbiwgbm9ybWFsaXplZCB0cmFuc2Zvcm0pIHBhaXIg4oCUIGB5ZWFyKHRzKWBcbiAqIGFuZCBgbW9udGgodHMpYCBhcmUgZGlzdGluY3QsIHdoaWxlIGBkYXlgIGFuZCBgREFZYCBjb2xsYXBzZS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIFBhcnRpdGlvbixcbiAgICBTb3J0RmllbGQsXG4gICAgVmlvbGF0aW9uLFxufSBmcm9tICcuLi9tb2RlbCc7XG5pbXBvcnQge1xuICAgIFRhYmxlVHlwZUJhc2UsXG59IGZyb20gJy4uL3RhYmxlLXR5cGUnO1xuaW1wb3J0IHtcbiAgICBpc1ZhbGlkSWNlYmVyZ1R5cGUsXG4gICAgcGFyc2VJY2ViZXJnVHJhbnNmb3JtLFxuICAgIHBhcnNlSWNlYmVyZ1R5cGUsXG4gICAgdHJhbnNmb3JtTGVnYWxPblR5cGUsXG59IGZyb20gJy4uL2ljZWJlcmcnO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBzdHJpbmcgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIChkaWdpdHMgb25seSwgdmFsdWUgPiAwKS4gSWNlYmVyZ1xuICogdGFibGUtcHJvcGVydHkgdmFsdWVzIGFyZSBzdHJpbmdzLCBzbyBudW1lcmljIGNoZWNrcyBwYXJzZSB0aGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBQcm9wZXJ0eSB2YWx1ZSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gYHZhbHVlYCBpcyBhIHBvc2l0aXZlIGludGVnZXIuXG4gKi9cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15cXGQrJC8udGVzdCh2YWx1ZSkgJiYgTnVtYmVyKHZhbHVlKSA+IDA7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHN0cmluZyBpcyBhbiBpbnRlZ2VyIHdpdGhpbiBhbiBpbmNsdXNpdmUgcmFuZ2UuXG4gKlxuICogQHBhcmFtIHZhbHVlIFByb3BlcnR5IHZhbHVlIHN0cmluZy5cbiAqIEBwYXJhbSBtaW4gSW5jbHVzaXZlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIG1heCBJbmNsdXNpdmUgdXBwZXIgYm91bmQuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gYHZhbHVlYCBpcyBhbiBpbnRlZ2VyIGluIGBbbWluLCBtYXhdYC5cbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VySW5SYW5nZSh2YWx1ZTogc3RyaW5nLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIS9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKTtcbiAgICByZXR1cm4gcGFyc2VkID49IG1pbiAmJiBwYXJzZWQgPD0gbWF4O1xufVxuXG4vKiogSWNlYmVyZyAocGFycXVldCkgdGFibGUuICovXG5leHBvcnQgY2xhc3MgSWNlYmVyZ1BhcnF1ZXRUYWJsZSBleHRlbmRzIFRhYmxlVHlwZUJhc2Uge1xuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGEgY29sdW1uIHR5cGUgYWdhaW5zdCB0aGUgSWNlYmVyZyB2MCB0eXBlIHJlZ2lzdHJ5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVHlwZSBzdHJpbmcgZnJvbSBhIGNvbHVtbiBkZWZpbml0aW9uLlxuICAgICAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgdHlwZSBpcyBhIHZhbGlkIEljZWJlcmcgdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNWYWxpZENvbHVtblR5cGUodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkSWNlYmVyZ1R5cGUodHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWNlYmVyZyBwYXJ0aXRpb24gcnVsZXMuXG4gICAgICpcbiAgICAgKiBFbWl0czogYE5PX0RVUExJQ0FURV9QQVJUSVRJT05TYCAoa2V5ZWQgYnkgYCR7bmFtZX0gJHt0cmFuc2Zvcm1LaW5kfToke3BhcmFtfWAsXG4gICAgICogZmFsbGluZyBiYWNrIHRvIGEgbG93ZXJjYXNlZCB0cmltIG9mIHRoZSByYXcgdHJhbnNmb3JtIHdoZW4gaXQgZG9lc24ndFxuICAgICAqIHBhcnNlLCBzbyB3aGl0ZXNwYWNlIC8gY2FzZSB2YXJpYW50cyBvZiB0aGUgc2FtZSB0cmFuc2Zvcm0gY29sbGFwc2UpLFxuICAgICAqIGBJQ0VCRVJHX1RSQU5TRk9STV9TT1VSQ0VfRVhJU1RTYCwgYElDRUJFUkdfVFJBTlNGT1JNX1ZBTElEYCwgYW5kXG4gICAgICogYElDRUJFUkdfVFJBTlNGT1JNX1NPVVJDRV9UWVBFX0xFR0FMYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IHBhcnRpdGlvbi1yZWxhdGVkIHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFydGl0aW9uVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcnRpdGlvbnMsXG4gICAgICAgIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBwYXJ0aXRpb25zLmZvckVhY2goKHBhcnRpdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMucGFydGl0aW9uS2V5KHBhcnRpdGlvbik7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnTk9fRFVQTElDQVRFX1BBUlRJVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHBhcnRpdGlvbnNbJHtpbmRleH1dYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGR1cGxpY2F0ZSBwYXJ0aXRpb246IFwiJHtwYXJ0aXRpb24ubmFtZX1cIiB3aXRoIHRyYW5zZm9ybSBcIiR7cGFydGl0aW9uLnR5cGV9XCJgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBhcnRpdGlvbnMuZm9yRWFjaCgocGFydGl0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ29sdW1uID0gdGhpcy5kZWZpbml0aW9uLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gcGFydGl0aW9uLm5hbWUpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1RSQU5TRk9STV9TT1VSQ0VfRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBwYXJ0aXRpb25zWyR7aW5kZXh9XS5uYW1lYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEljZWJlcmcgcGFydGl0aW9uIHNvdXJjZSBjb2x1bW4gXCIke3BhcnRpdGlvbi5uYW1lfVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYXJzZUljZWJlcmdUcmFuc2Zvcm0ocGFydGl0aW9uLnR5cGUpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSUNFQkVSR19UUkFOU0ZPUk1fVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHBhcnRpdGlvbnNbJHtpbmRleH1dLnR5cGVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgXCIke3BhcnRpdGlvbi50eXBlfVwiIGlzIG5vdCBhIHZhbGlkIEljZWJlcmcgcGFydGl0aW9uIHRyYW5zZm9ybWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBwYXJzZUljZWJlcmdUeXBlKHNvdXJjZUNvbHVtbi50eXBlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlICE9PSBudWxsICYmICF0cmFuc2Zvcm1MZWdhbE9uVHlwZSh0cmFuc2Zvcm0sIHNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1RSQU5TRk9STV9TT1VSQ0VfVFlQRV9MRUdBTCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgcGFydGl0aW9uc1ske2luZGV4fV0udHlwZWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0cmFuc2Zvcm0gXCIke3BhcnRpdGlvbi50eXBlfVwiIGlzIG5vdCBsZWdhbCBvbiBgXG4gICAgICAgICAgICAgICAgICAgICAgICArIGBjb2x1bW4gXCIke3BhcnRpdGlvbi5uYW1lfVwiIG9mIHR5cGUgXCIke3NvdXJjZUNvbHVtbi50eXBlfVwiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cblxuICAgIC8vLyBUaGUgSWNlYmVyZyBmb3JtYXQgdmVyc2lvbnMgdGhpcyB2YWxpZGF0b3IgdW5kZXJzdGFuZHMuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRk9STUFUX1ZFUlNJT05TID0gbmV3IFNldChbXG4gICAgICAgIDEsXG4gICAgICAgIDIsXG4gICAgICAgIDMsXG4gICAgXSk7XG5cbiAgICAvLy8gVGFibGUtcHJvcGVydHkga2V5cyB3aG9zZSB2YWx1ZSBtdXN0IGNvbWUgZnJvbSBhIGNsb3NlZCBzZXQuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU5VTV9QUk9QRVJUSUVTOiBSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4gPSB7XG4gICAgICAgICd3cml0ZS5mb3JtYXQuZGVmYXVsdCc6IFtcbiAgICAgICAgICAgICdwYXJxdWV0JyxcbiAgICAgICAgICAgICdhdnJvJyxcbiAgICAgICAgICAgICdvcmMnLFxuICAgICAgICBdLFxuICAgICAgICAnd3JpdGUucGFycXVldC5jb21wcmVzc2lvbi1jb2RlYyc6IFtcbiAgICAgICAgICAgICd6c3RkJyxcbiAgICAgICAgICAgICdnemlwJyxcbiAgICAgICAgICAgICdzbmFwcHknLFxuICAgICAgICAgICAgJ2x6NCcsXG4gICAgICAgICAgICAnbm9uZScsXG4gICAgICAgIF0sXG4gICAgICAgICd3cml0ZS5hdnJvLmNvbXByZXNzaW9uLWNvZGVjJzogW1xuICAgICAgICAgICAgJ2d6aXAnLFxuICAgICAgICAgICAgJ3pzdGQnLFxuICAgICAgICAgICAgJ3NuYXBweScsXG4gICAgICAgICAgICAndW5jb21wcmVzc2VkJyxcbiAgICAgICAgXSxcbiAgICAgICAgJ3dyaXRlLm9yYy5jb21wcmVzc2lvbi1jb2RlYyc6IFtcbiAgICAgICAgICAgICd6c3RkJyxcbiAgICAgICAgICAgICdsejQnLFxuICAgICAgICAgICAgJ2x6bycsXG4gICAgICAgICAgICAnemxpYicsXG4gICAgICAgICAgICAnc25hcHB5JyxcbiAgICAgICAgICAgICdub25lJyxcbiAgICAgICAgXSxcbiAgICAgICAgJ3dyaXRlLmRpc3RyaWJ1dGlvbi1tb2RlJzogW1xuICAgICAgICAgICAgJ25vbmUnLFxuICAgICAgICAgICAgJ2hhc2gnLFxuICAgICAgICAgICAgJ3JhbmdlJyxcbiAgICAgICAgXSxcbiAgICAgICAgJ3dyaXRlLm1ldGFkYXRhLmNvbXByZXNzaW9uLWNvZGVjJzogW1xuICAgICAgICAgICAgJ25vbmUnLFxuICAgICAgICAgICAgJ2d6aXAnLFxuICAgICAgICBdLFxuICAgIH07XG5cbiAgICAvLy8gVGFibGUtcHJvcGVydHkga2V5cyB3aG9zZSB2YWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQT1NJVElWRV9JTlRfUFJPUEVSVElFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICAgICAgICd3cml0ZS50YXJnZXQtZmlsZS1zaXplLWJ5dGVzJyxcbiAgICAgICAgJ2hpc3RvcnkuZXhwaXJlLm1heC1zbmFwc2hvdC1hZ2UtbXMnLFxuICAgICAgICAnaGlzdG9yeS5leHBpcmUubWluLXNuYXBzaG90cy10by1rZWVwJyxcbiAgICAgICAgJ2hpc3RvcnkuZXhwaXJlLm1heC1yZWYtYWdlLW1zJyxcbiAgICAgICAgJ3dyaXRlLm1ldGFkYXRhLnByZXZpb3VzLXZlcnNpb25zLW1heCcsXG4gICAgXTtcblxuICAgIC8vLyBUYWJsZS1wcm9wZXJ0eSBrZXlzIHdob3NlIHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciB3aXRoaW4gYW4gaW5jbHVzaXZlIHJhbmdlLlxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IElOVF9SQU5HRV9QUk9QRVJUSUVTOiBSZWNvcmQ8c3RyaW5nLCB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9PiA9IHtcbiAgICAgICAgJ3dyaXRlLnBhcnF1ZXQuY29tcHJlc3Npb24tbGV2ZWwnOiB7XG4gICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICBtYXg6IDIyLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICAvLy8gTGVnYWwgc29ydCBkaXJlY3Rpb25zIGFuZCBudWxsIG9yZGVyaW5ncy5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTT1JUX0RJUkVDVElPTlMgPSBuZXcgU2V0KFtcbiAgICAgICAgJ2FzYycsXG4gICAgICAgICdkZXNjJyxcbiAgICBdKTtcblxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNPUlRfTlVMTF9PUkRFUlMgPSBuZXcgU2V0KFtcbiAgICAgICAgJ251bGxzLWZpcnN0JyxcbiAgICAgICAgJ251bGxzLWxhc3QnLFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogSWNlYmVyZyBlbmdpbmUtc3BlY2lmaWMgcnVsZXM6IGZvcm1hdCB2ZXJzaW9uLCB0YWJsZSBwcm9wZXJ0aWVzLCBhbmQgc29ydFxuICAgICAqIG9yZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgZW5naW5lLXNwZWNpZmljIHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZW5naW5lU3BlY2lmaWNWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybWF0VmVyc2lvblZpb2xhdGlvbnMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMudGFibGVQcm9wZXJ0eVZpb2xhdGlvbnMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuc29ydE9yZGVyVmlvbGF0aW9ucygpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHRoZSBJY2ViZXJnIHNvcnQgb3JkZXIuXG4gICAgICpcbiAgICAgKiBFbWl0cyBgTk9fRFVQTElDQVRFX1NPUlRfRklFTERTYCAoa2V5ZWQgYnkgc291cmNlIGNvbHVtbiArIG5vcm1hbGl6ZWRcbiAgICAgKiB0cmFuc2Zvcm0pLCBgSUNFQkVSR19TT1JUX0NPTFVNTl9FWElTVFNgLCBgSUNFQkVSR19TT1JUX0RJUkVDVElPTl9WQUxJRGAsXG4gICAgICogYElDRUJFUkdfU09SVF9OVUxMX09SREVSX1ZBTElEYCwgYElDRUJFUkdfU09SVF9UUkFOU0ZPUk1fVkFMSURgLCBhbmRcbiAgICAgKiBgSUNFQkVSR19TT1JUX1RSQU5TRk9STV9UWVBFX0xFR0FMYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IHNvcnQtb3JkZXIgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgc29ydE9yZGVyVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgfSA9IHRoaXMuZGVmaW5pdGlvbjtcblxuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIHNvcnRPcmRlci5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc29ydEZpZWxkS2V5KGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdOT19EVVBMSUNBVEVfU09SVF9GSUVMRFMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHNvcnRPcmRlclske2luZGV4fV1gLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZHVwbGljYXRlIHNvcnQgZmllbGQ6IFwiJHtmaWVsZC5jb2x1bW59XCJgXG4gICAgICAgICAgICAgICAgICAgICAgICArIGAke2ZpZWxkLnRyYW5zZm9ybSA/IGAgd2l0aCB0cmFuc2Zvcm0gXCIke2ZpZWxkLnRyYW5zZm9ybX1cImAgOiAnJ31gLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNvcnRPcmRlci5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghSWNlYmVyZ1BhcnF1ZXRUYWJsZS5TT1JUX0RJUkVDVElPTlMuaGFzKGZpZWxkLmRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfU09SVF9ESVJFQ1RJT05fVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHNvcnRPcmRlclske2luZGV4fV0uZGlyZWN0aW9uYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHNvcnQgZGlyZWN0aW9uIFwiJHtmaWVsZC5kaXJlY3Rpb259XCIgbXVzdCBiZSBcImFzY1wiIG9yIFwiZGVzY1wiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUljZWJlcmdQYXJxdWV0VGFibGUuU09SVF9OVUxMX09SREVSUy5oYXMoZmllbGQubnVsbE9yZGVyKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSUNFQkVSR19TT1JUX05VTExfT1JERVJfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHNvcnRPcmRlclske2luZGV4fV0ubnVsbE9yZGVyYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHNvcnQgbnVsbCBvcmRlciBcIiR7ZmllbGQubnVsbE9yZGVyfVwiIG11c3QgYmUgXCJudWxscy1maXJzdFwiIG9yIFwibnVsbHMtbGFzdFwiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbiA9IHRoaXMuZGVmaW5pdGlvbi5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IGZpZWxkLmNvbHVtbik7XG4gICAgICAgICAgICBpZiAoc291cmNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfU09SVF9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBzb3J0T3JkZXJbJHtpbmRleH1dLmNvbHVtbmAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzb3J0IGNvbHVtbiBcIiR7ZmllbGQuY29sdW1ufVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50cmFuc2Zvcm0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhcnNlSWNlYmVyZ1RyYW5zZm9ybShmaWVsZC50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSUNFQkVSR19TT1JUX1RSQU5TRk9STV9WQUxJRCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgc29ydE9yZGVyWyR7aW5kZXh9XS50cmFuc2Zvcm1gLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgXCIke2ZpZWxkLnRyYW5zZm9ybX1cIiBpcyBub3QgYSB2YWxpZCBJY2ViZXJnIHRyYW5zZm9ybWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBwYXJzZUljZWJlcmdUeXBlKHNvdXJjZUNvbHVtbi50eXBlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlICE9PSBudWxsICYmICF0cmFuc2Zvcm1MZWdhbE9uVHlwZSh0cmFuc2Zvcm0sIHNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1NPUlRfVFJBTlNGT1JNX1RZUEVfTEVHQUwnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHNvcnRPcmRlclske2luZGV4fV0udHJhbnNmb3JtYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRyYW5zZm9ybSBcIiR7ZmllbGQudHJhbnNmb3JtfVwiIGlzIG5vdCBsZWdhbCBvbiBgXG4gICAgICAgICAgICAgICAgICAgICAgICArIGBjb2x1bW4gXCIke2ZpZWxkLmNvbHVtbn1cIiBvZiB0eXBlIFwiJHtzb3VyY2VDb2x1bW4udHlwZX1cImAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgYSBzb3J0IGZpZWxkIGludG8gaXRzIGlkZW50aXR5IGtleS4gQW4gb21pdHRlZCB0cmFuc2Zvcm0gYW5kIGFuXG4gICAgICogZXhwbGljaXQgYGlkZW50aXR5YCBjb2xsYXBzZSB0byB0aGUgc2FtZSBrZXkgc28gdGhleSBjb3VudCBhcyBkdXBsaWNhdGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpZWxkIFNvcnQgZmllbGQgdG8ga2V5LlxuICAgICAqIEByZXR1cm5zIFRoZSBpZGVudGl0eSBzdHJpbmcgZm9yIGR1cGxpY2F0ZSBkZXRlY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzb3J0RmllbGRLZXkoZmllbGQ6IFNvcnRGaWVsZCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChmaWVsZC50cmFuc2Zvcm0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2ZpZWxkLmNvbHVtbn0gaWRlbnRpdHk6YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYXJzZUljZWJlcmdUcmFuc2Zvcm0oZmllbGQudHJhbnNmb3JtKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFRyYW5zZm9ybSA9IHRyYW5zZm9ybVxuICAgICAgICAgICAgPyBgJHt0cmFuc2Zvcm0ua2luZH06JHt0cmFuc2Zvcm0ucGFyYW0gPz8gJyd9YFxuICAgICAgICAgICAgOiBmaWVsZC50cmFuc2Zvcm0udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgJHtmaWVsZC5jb2x1bW59ICR7bm9ybWFsaXplZFRyYW5zZm9ybX1gO1xuICAgIH1cblxuICAgIC8vLyBJQ0VCRVJHX0ZPUk1BVF9WRVJTSU9OX1ZBTElEIOKAlCBgZm9ybWF0VmVyc2lvbmAsIHdoZW4gc2V0LCBpcyAxLCAyLCBvciAzLlxuICAgIHByaXZhdGUgZm9ybWF0VmVyc2lvblZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBmb3JtYXRWZXJzaW9uLFxuICAgICAgICB9ID0gdGhpcy5kZWZpbml0aW9uO1xuICAgICAgICBpZiAoZm9ybWF0VmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IEljZWJlcmdQYXJxdWV0VGFibGUuRk9STUFUX1ZFUlNJT05TLmhhcyhmb3JtYXRWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfRk9STUFUX1ZFUlNJT05fVkFMSUQnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZm9ybWF0VmVyc2lvbicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYEljZWJlcmcgZm9ybWF0VmVyc2lvbiBcIiR7Zm9ybWF0VmVyc2lvbn1cIiBtdXN0IGJlIDEsIDIsIG9yIDNgLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgdGhlIGNsb3NlZC1kb21haW4gSWNlYmVyZyB0YWJsZSBwcm9wZXJ0aWVzLiBLZXlzIG91dHNpZGUgdGhlXG4gICAgICoga25vd24gc2V0IHBhc3MgdGhyb3VnaCB1bnZhbGlkYXRlZC5cbiAgICAgKlxuICAgICAqIEVtaXRzIGBJQ0VCRVJHX1BST1BFUlRZX0VOVU1fVkFMSURgLCBgSUNFQkVSR19QUk9QRVJUWV9QT1NJVElWRV9JTlRgLCBhbmRcbiAgICAgKiBgSUNFQkVSR19QUk9QRVJUWV9JTlRfUkFOR0VgLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgdGFibGUtcHJvcGVydHkgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgdGFibGVQcm9wZXJ0eVZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgW1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgIF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5kZWZpbml0aW9uLnRhYmxlUHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ZWQgPSBJY2ViZXJnUGFycXVldFRhYmxlLkVOVU1fUFJPUEVSVElFU1trZXldO1xuICAgICAgICAgICAgaWYgKGFsbG93ZWQgIT09IHVuZGVmaW5lZCAmJiAhYWxsb3dlZC5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfUFJPUEVSVFlfRU5VTV9WQUxJRCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgdGFibGVQcm9wZXJ0aWVzW1wiJHtrZXl9XCJdYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRhYmxlIHByb3BlcnR5IFwiJHtrZXl9XCIgdmFsdWUgXCIke3ZhbHVlfVwiIG11c3QgYmUgb25lIG9mOiAke2FsbG93ZWQuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKEljZWJlcmdQYXJxdWV0VGFibGUuUE9TSVRJVkVfSU5UX1BST1BFUlRJRVMuaW5jbHVkZXMoa2V5KSAmJiAhaXNQb3NpdGl2ZUludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1BST1BFUlRZX1BPU0lUSVZFX0lOVCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgdGFibGVQcm9wZXJ0aWVzW1wiJHtrZXl9XCJdYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRhYmxlIHByb3BlcnR5IFwiJHtrZXl9XCIgdmFsdWUgXCIke3ZhbHVlfVwiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gSWNlYmVyZ1BhcnF1ZXRUYWJsZS5JTlRfUkFOR0VfUFJPUEVSVElFU1trZXldO1xuICAgICAgICAgICAgaWYgKHJhbmdlICE9PSB1bmRlZmluZWQgJiYgIWlzSW50ZWdlckluUmFuZ2UodmFsdWUsIHJhbmdlLm1pbiwgcmFuZ2UubWF4KSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSUNFQkVSR19QUk9QRVJUWV9JTlRfUkFOR0UnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHRhYmxlUHJvcGVydGllc1tcIiR7a2V5fVwiXWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0YWJsZSBwcm9wZXJ0eSBcIiR7a2V5fVwiIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiBgXG4gICAgICAgICAgICAgICAgICAgICAgICArIGAke3JhbmdlLm1pbn0gYW5kICR7cmFuZ2UubWF4fWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIGEgcGFydGl0aW9uIGludG8gaXRzIGlkZW50aXR5IGtleS4gV2hlbiB0aGUgdHJhbnNmb3JtIHBhcnNlcyxcbiAgICAgKiBjb2xsYXBzZSBvbiBgJHtraW5kfToke3BhcmFtfWAgc28gYGRheWAgYW5kIGBEQVlgLCBgYnVja2V0WzE2XWAgYW5kXG4gICAgICogYGJ1Y2tldFsgMTYgXWAgYXJlIHRoZSBzYW1lLiBXaGVuIHRoZSB0cmFuc2Zvcm0gZG9lc24ndCBwYXJzZSwgdGhlXG4gICAgICogbG93ZXJjYXNlZCB0cmltIG9mIHRoZSByYXcgc3RyaW5nIGlzIHRoZSBiZXN0IGlkZW50aXR5IHdlIGhhdmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFydGl0aW9uIFBhcnRpdGlvbiB0byBrZXkuXG4gICAgICogQHJldHVybnMgVGhlIGlkZW50aXR5IHN0cmluZyBmb3IgZHVwbGljYXRlIGRldGVjdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnRpdGlvbktleShwYXJ0aXRpb246IFBhcnRpdGlvbik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhcnNlSWNlYmVyZ1RyYW5zZm9ybShwYXJ0aXRpb24udHlwZSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbiAgICAgICAgICAgID8gYCR7dHJhbnNmb3JtLmtpbmR9OiR7dHJhbnNmb3JtLnBhcmFtID8/ICcnfWBcbiAgICAgICAgICAgIDogcGFydGl0aW9uLnR5cGUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgJHtwYXJ0aXRpb24ubmFtZX0gJHtub3JtYWxpemVkVHJhbnNmb3JtfWA7XG4gICAgfVxufVxuIl19
|
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNlYmVyZy1wYXJxdWV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RhYmxlLXR5cGVzL2ljZWJlcmctcGFycXVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFPSCw4Q0FFdUI7QUFDdkIsd0NBTW9CO0FBRXBCOzs7Ozs7R0FNRztBQUNILFNBQVMsaUJBQWlCLENBQUMsS0FBYTtJQUNwQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG9CQUFvQixDQUFDLEtBQWE7SUFDdkMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLEdBQVc7SUFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLE9BQU8sTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDO0FBQzFDLENBQUM7QUFFRCwrQkFBK0I7QUFDL0IsTUFBYSxtQkFBb0IsU0FBUSwwQkFBYTtJQUNsRDs7Ozs7T0FLRztJQUNJLGlCQUFpQixDQUFDLElBQVk7UUFDakMsT0FBTyxJQUFBLDRCQUFrQixFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksbUJBQW1CO1FBQ3RCLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFDbkMsTUFBTSxFQUNGLFVBQVUsR0FDYixHQUFHLElB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QkFBcUIsSUFBSSx1REFBdUQ7aUJBQzVGLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssWUFBWSxDQUFDLFNBQW9CO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUEsK0JBQXFCLEVBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sbUJBQW1CLEdBQUcsU0FBUztZQUNqQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFO1lBQzlDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFDdEQsQ0FBQzs7QUF0ZEwsa0RBdWRDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJY2ViZXJnIChwYXJxdWV0KSB0YWJsZSB0eXBlLlxuICpcbiAqIEljZWJlcmcgcGFydGl0aW9ucyBhcmUgdHJhbnNmb3JtcyBhcHBsaWVkIHRvIGEgZGF0YSBjb2x1bW4sIHNvIGR1cGxpY2F0ZVxuICogZGV0ZWN0aW9uIGtleXMgb24gdGhlIChzb3VyY2UgY29sdW1uLCBub3JtYWxpemVkIHRyYW5zZm9ybSkgcGFpciDigJQgYHllYXIodHMpYFxuICogYW5kIGBtb250aCh0cylgIGFyZSBkaXN0aW5jdCwgd2hpbGUgYGRheWAgYW5kIGBEQVlgIGNvbGxhcHNlLlxuICovXG5cbmltcG9ydCB7XG4gICAgUGFydGl0aW9uLFxuICAgIFNvcnRGaWVsZCxcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi4vdGFibGUtdHlwZSc7XG5pbXBvcnQge1xuICAgIEljZWJlcmdUeXBlS2luZCxcbiAgICBpc1ZhbGlkSWNlYmVyZ1R5cGUsXG4gICAgcGFyc2VJY2ViZXJnVHJhbnNmb3JtLFxuICAgIHBhcnNlSWNlYmVyZ1R5cGUsXG4gICAgdHJhbnNmb3JtTGVnYWxPblR5cGUsXG59IGZyb20gJy4uL2ljZWJlcmcnO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBzdHJpbmcgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIChkaWdpdHMgb25seSwgdmFsdWUgPiAwKS4gSWNlYmVyZ1xuICogdGFibGUtcHJvcGVydHkgdmFsdWVzIGFyZSBzdHJpbmdzLCBzbyBudW1lcmljIGNoZWNrcyBwYXJzZSB0aGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBQcm9wZXJ0eSB2YWx1ZSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gYHZhbHVlYCBpcyBhIHBvc2l0aXZlIGludGVnZXIuXG4gKi9cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15cXGQrJC8udGVzdCh2YWx1ZSkgJiYgTnVtYmVyKHZhbHVlKSA+IDA7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHN0cmluZyBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIChkaWdpdHMgb25seSwgdmFsdWUgPj0gMCkuXG4gKlxuICogQHBhcmFtIHZhbHVlIFByb3BlcnR5IHZhbHVlIHN0cmluZy5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiBgdmFsdWVgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuXG4gKi9cbmZ1bmN0aW9uIGlzTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15cXGQrJC8udGVzdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHN0cmluZyBpcyBhbiBpbnRlZ2VyIHdpdGhpbiBhbiBpbmNsdXNpdmUgcmFuZ2UuXG4gKlxuICogQHBhcmFtIHZhbHVlIFByb3BlcnR5IHZhbHVlIHN0cmluZy5cbiAqIEBwYXJhbSBtaW4gSW5jbHVzaXZlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIG1heCBJbmNsdXNpdmUgdXBwZXIgYm91bmQuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gYHZhbHVlYCBpcyBhbiBpbnRlZ2VyIGluIGBbbWluLCBtYXhdYC5cbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VySW5SYW5nZSh2YWx1ZTogc3RyaW5nLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIS9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKTtcbiAgICByZXR1cm4gcGFyc2VkID49IG1pbiAmJiBwYXJzZWQgPD0gbWF4O1xufVxuXG4vKiogSWNlYmVyZyAocGFycXVldCkgdGFibGUuICovXG5leHBvcnQgY2xhc3MgSWNlYmVyZ1BhcnF1ZXRUYWJsZSBleHRlbmRzIFRhYmxlVHlwZUJhc2Uge1xuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGEgY29sdW1uIHR5cGUgYWdhaW5zdCB0aGUgSWNlYmVyZyB2MCB0eXBlIHJlZ2lzdHJ5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVHlwZSBzdHJpbmcgZnJvbSBhIGNvbHVtbiBkZWZpbml0aW9uLlxuICAgICAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgdHlwZSBpcyBhIHZhbGlkIEljZWJlcmcgdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNWYWxpZENvbHVtblR5cGUodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkSWNlYmVyZ1R5cGUodHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWNlYmVyZyBwYXJ0aXRpb24gcnVsZXMuXG4gICAgICpcbiAgICAgKiBFbWl0czogYE5PX0RVUExJQ0FURV9QQVJUSVRJT05TYCAoa2V5ZWQgYnkgYCR7bmFtZX0gJHt0cmFuc2Zvcm1LaW5kfToke3BhcmFtfWAsXG4gICAgICogZmFsbGluZyBiYWNrIHRvIGEgbG93ZXJjYXNlZCB0cmltIG9mIHRoZSByYXcgdHJhbnNmb3JtIHdoZW4gaXQgZG9lc24ndFxuICAgICAqIHBhcnNlLCBzbyB3aGl0ZXNwYWNlIC8gY2FzZSB2YXJpYW50cyBvZiB0aGUgc2FtZSB0cmFuc2Zvcm0gY29sbGFwc2UpLFxuICAgICAqIGBJQ0VCRVJHX1RSQU5TRk9STV9TT1VSQ0VfRVhJU1RTYCwgYElDRUJFUkdfVFJBTlNGT1JNX1ZBTElEYCwgYW5kXG4gICAgICogYElDRUJFUkdfVFJBTlNGT1JNX1NPVVJDRV9UWVBFX0xFR0FMYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IHBhcnRpdGlvbi1yZWxhdGVkIHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFydGl0aW9uVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcnRpdGlvbnMsXG4gICAgICAgIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBwYXJ0aXRpb25zLmZvckVhY2goKHBhcnRpdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMucGFydGl0aW9uS2V5KHBhcnRpdGlvbik7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnTk9fRFVQTElDQVRFX1BBUlRJVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHBhcnRpdGlvbnNbJHtpbmRleH1dYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGR1cGxpY2F0ZSBwYXJ0aXRpb246IFwiJHtwYXJ0aXRpb24ubmFtZX1cIiB3aXRoIHRyYW5zZm9ybSBcIiR7cGFydGl0aW9uLnR5cGV9XCJgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBhcnRpdGlvbnMuZm9yRWFjaCgocGFydGl0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ29sdW1uID0gdGhpcy5kZWZpbml0aW9uLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gcGFydGl0aW9uLm5hbWUpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1RSQU5TRk9STV9TT1VSQ0VfRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBwYXJ0aXRpb25zWyR7aW5kZXh9XS5uYW1lYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEljZWJlcmcgcGFydGl0aW9uIHNvdXJjZSBjb2x1bW4gXCIke3BhcnRpdGlvbi5uYW1lfVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYXJzZUljZWJlcmdUcmFuc2Zvcm0ocGFydGl0aW9uLnR5cGUpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSUNFQkVSR19UUkFOU0ZPUk1fVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHBhcnRpdGlvbnNbJHtpbmRleH1dLnR5cGVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgXCIke3BhcnRpdGlvbi50eXBlfVwiIGlzIG5vdCBhIHZhbGlkIEljZWJlcmcgcGFydGl0aW9uIHRyYW5zZm9ybWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBwYXJzZUljZWJlcmdUeXBlKHNvdXJjZUNvbHVtbi50eXBlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlICE9PSBudWxsICYmICF0cmFuc2Zvcm1MZWdhbE9uVHlwZSh0cmFuc2Zvcm0sIHNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1RSQU5TRk9STV9TT1VSQ0VfVFlQRV9MRUdBTCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgcGFydGl0aW9uc1ske2luZGV4fV0udHlwZWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0cmFuc2Zvcm0gXCIke3BhcnRpdGlvbi50eXBlfVwiIGlzIG5vdCBsZWdhbCBvbiBgXG4gICAgICAgICAgICAgICAgICAgICAgICArIGBjb2x1bW4gXCIke3BhcnRpdGlvbi5uYW1lfVwiIG9mIHR5cGUgXCIke3NvdXJjZUNvbHVtbi50eXBlfVwiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cblxuICAgIC8vLyBUaGUgSWNlYmVyZyBmb3JtYXQgdmVyc2lvbnMgdGhpcyB2YWxpZGF0b3IgdW5kZXJzdGFuZHMuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRk9STUFUX1ZFUlNJT05TID0gbmV3IFNldChbXG4gICAgICAgIDEsXG4gICAgICAgIDIsXG4gICAgICAgIDMsXG4gICAgXSk7XG5cbiAgICAvLy8gVGFibGUtcHJvcGVydHkga2V5cyB3aG9zZSB2YWx1ZSBtdXN0IGNvbWUgZnJvbSBhIGNsb3NlZCBzZXQuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU5VTV9QUk9QRVJUSUVTOiBSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4gPSB7XG4gICAgICAgICd3cml0ZS5mb3JtYXQuZGVmYXVsdCc6IFtcbiAgICAgICAgICAgICdwYXJxdWV0JyxcbiAgICAgICAgICAgICdhdnJvJyxcbiAgICAgICAgICAgICdvcmMnLFxuICAgICAgICBdLFxuICAgICAgICAnd3JpdGUucGFycXVldC5jb21wcmVzc2lvbi1jb2RlYyc6IFtcbiAgICAgICAgICAgICd6c3RkJyxcbiAgICAgICAgICAgICdnemlwJyxcbiAgICAgICAgICAgICdzbmFwcHknLFxuICAgICAgICAgICAgJ2x6NCcsXG4gICAgICAgICAgICAnbm9uZScsXG4gICAgICAgIF0sXG4gICAgICAgICd3cml0ZS5hdnJvLmNvbXByZXNzaW9uLWNvZGVjJzogW1xuICAgICAgICAgICAgJ2d6aXAnLFxuICAgICAgICAgICAgJ3pzdGQnLFxuICAgICAgICAgICAgJ3NuYXBweScsXG4gICAgICAgICAgICAndW5jb21wcmVzc2VkJyxcbiAgICAgICAgXSxcbiAgICAgICAgJ3dyaXRlLm9yYy5jb21wcmVzc2lvbi1jb2RlYyc6IFtcbiAgICAgICAgICAgICd6c3RkJyxcbiAgICAgICAgICAgICdsejQnLFxuICAgICAgICAgICAgJ2x6bycsXG4gICAgICAgICAgICAnemxpYicsXG4gICAgICAgICAgICAnc25hcHB5JyxcbiAgICAgICAgICAgICdub25lJyxcbiAgICAgICAgXSxcbiAgICAgICAgJ3dyaXRlLmRpc3RyaWJ1dGlvbi1tb2RlJzogW1xuICAgICAgICAgICAgJ25vbmUnLFxuICAgICAgICAgICAgJ2hhc2gnLFxuICAgICAgICAgICAgJ3JhbmdlJyxcbiAgICAgICAgXSxcbiAgICAgICAgJ3dyaXRlLm1ldGFkYXRhLmNvbXByZXNzaW9uLWNvZGVjJzogW1xuICAgICAgICAgICAgJ25vbmUnLFxuICAgICAgICAgICAgJ2d6aXAnLFxuICAgICAgICBdLFxuICAgIH07XG5cbiAgICAvLy8gVGFibGUtcHJvcGVydHkga2V5cyB3aG9zZSB2YWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQT1NJVElWRV9JTlRfUFJPUEVSVElFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICAgICAgICd3cml0ZS50YXJnZXQtZmlsZS1zaXplLWJ5dGVzJyxcbiAgICAgICAgJ2hpc3RvcnkuZXhwaXJlLm1heC1zbmFwc2hvdC1hZ2UtbXMnLFxuICAgICAgICAnaGlzdG9yeS5leHBpcmUubWluLXNuYXBzaG90cy10by1rZWVwJyxcbiAgICAgICAgJ2hpc3RvcnkuZXhwaXJlLm1heC1yZWYtYWdlLW1zJyxcbiAgICAgICAgJ3dyaXRlLm1ldGFkYXRhLnByZXZpb3VzLXZlcnNpb25zLW1heCcsXG4gICAgICAgICdjb21taXQucmV0cnkubWluLXdhaXQtbXMnLFxuICAgICAgICAnY29tbWl0LnJldHJ5Lm1heC13YWl0LW1zJyxcbiAgICAgICAgJ2NvbW1pdC5yZXRyeS50b3RhbC10aW1lb3V0LW1zJyxcbiAgICBdO1xuXG4gICAgLy8vIFRhYmxlLXByb3BlcnR5IGtleXMgd2hvc2UgdmFsdWUgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLlxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE5PTl9ORUdBVElWRV9JTlRfUFJPUEVSVElFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICAgICAgICdjb21taXQucmV0cnkubnVtLXJldHJpZXMnLFxuICAgIF07XG5cbiAgICAvLy8gVGFibGUtcHJvcGVydHkga2V5cyB3aG9zZSB2YWx1ZSBtdXN0IGJlIGFuIGludGVnZXIgd2l0aGluIGFuIGluY2x1c2l2ZSByYW5nZS5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTlRfUkFOR0VfUFJPUEVSVElFUzogUmVjb3JkPHN0cmluZywgeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfT4gPSB7XG4gICAgICAgICd3cml0ZS5wYXJxdWV0LmNvbXByZXNzaW9uLWxldmVsJzoge1xuICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgbWF4OiAyMixcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8vIExlZ2FsIHNvcnQgZGlyZWN0aW9ucyBhbmQgbnVsbCBvcmRlcmluZ3MuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU09SVF9ESVJFQ1RJT05TID0gbmV3IFNldChbXG4gICAgICAgICdhc2MnLFxuICAgICAgICAnZGVzYycsXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTT1JUX05VTExfT1JERVJTID0gbmV3IFNldChbXG4gICAgICAgICdudWxscy1maXJzdCcsXG4gICAgICAgICdudWxscy1sYXN0JyxcbiAgICBdKTtcblxuICAgIC8qKlxuICAgICAqIEljZWJlcmcgZW5naW5lLXNwZWNpZmljIHJ1bGVzOiBmb3JtYXQgdmVyc2lvbiwgdGFibGUgcHJvcGVydGllcywgYW5kIHNvcnRcbiAgICAgKiBvcmRlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IGVuZ2luZS1zcGVjaWZpYyB2aW9sYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGVuZ2luZVNwZWNpZmljVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi50aGlzLmZvcm1hdFZlcnNpb25WaW9sYXRpb25zKCksXG4gICAgICAgICAgICAuLi50aGlzLnRhYmxlUHJvcGVydHlWaW9sYXRpb25zKCksXG4gICAgICAgICAgICAuLi50aGlzLnNvcnRPcmRlclZpb2xhdGlvbnMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuaWRlbnRpZmllckZpZWxkVmlvbGF0aW9ucygpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHRoZSBJY2ViZXJnIHNvcnQgb3JkZXIuXG4gICAgICpcbiAgICAgKiBFbWl0cyBgTk9fRFVQTElDQVRFX1NPUlRfRklFTERTYCAoa2V5ZWQgYnkgc291cmNlIGNvbHVtbiArIG5vcm1hbGl6ZWRcbiAgICAgKiB0cmFuc2Zvcm0pLCBgSUNFQkVSR19TT1JUX0NPTFVNTl9FWElTVFNgLCBgSUNFQkVSR19TT1JUX0RJUkVDVElPTl9WQUxJRGAsXG4gICAgICogYElDRUJFUkdfU09SVF9OVUxMX09SREVSX1ZBTElEYCwgYElDRUJFUkdfU09SVF9UUkFOU0ZPUk1fVkFMSURgLCBhbmRcbiAgICAgKiBgSUNFQkVSR19TT1JUX1RSQU5TRk9STV9UWVBFX0xFR0FMYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IHNvcnQtb3JkZXIgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgc29ydE9yZGVyVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgfSA9IHRoaXMuZGVmaW5pdGlvbjtcblxuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIHNvcnRPcmRlci5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc29ydEZpZWxkS2V5KGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdOT19EVVBMSUNBVEVfU09SVF9GSUVMRFMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHNvcnRPcmRlclske2luZGV4fV1gLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZHVwbGljYXRlIHNvcnQgZmllbGQ6IFwiJHtmaWVsZC5jb2x1bW59XCJgXG4gICAgICAgICAgICAgICAgICAgICAgICArIGAke2ZpZWxkLnRyYW5zZm9ybSA/IGAgd2l0aCB0cmFuc2Zvcm0gXCIke2ZpZWxkLnRyYW5zZm9ybX1cImAgOiAnJ31gLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNvcnRPcmRlci5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghSWNlYmVyZ1BhcnF1ZXRUYWJsZS5TT1JUX0RJUkVDVElPTlMuaGFzKGZpZWxkLmRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfU09SVF9ESVJFQ1RJT05fVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHNvcnRPcmRlclske2luZGV4fV0uZGlyZWN0aW9uYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHNvcnQgZGlyZWN0aW9uIFwiJHtmaWVsZC5kaXJlY3Rpb259XCIgbXVzdCBiZSBcImFzY1wiIG9yIFwiZGVzY1wiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUljZWJlcmdQYXJxdWV0VGFibGUuU09SVF9OVUxMX09SREVSUy5oYXMoZmllbGQubnVsbE9yZGVyKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSUNFQkVSR19TT1JUX05VTExfT1JERVJfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHNvcnRPcmRlclske2luZGV4fV0ubnVsbE9yZGVyYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHNvcnQgbnVsbCBvcmRlciBcIiR7ZmllbGQubnVsbE9yZGVyfVwiIG11c3QgYmUgXCJudWxscy1maXJzdFwiIG9yIFwibnVsbHMtbGFzdFwiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbiA9IHRoaXMuZGVmaW5pdGlvbi5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IGZpZWxkLmNvbHVtbik7XG4gICAgICAgICAgICBpZiAoc291cmNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfU09SVF9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBzb3J0T3JkZXJbJHtpbmRleH1dLmNvbHVtbmAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzb3J0IGNvbHVtbiBcIiR7ZmllbGQuY29sdW1ufVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50cmFuc2Zvcm0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhcnNlSWNlYmVyZ1RyYW5zZm9ybShmaWVsZC50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSUNFQkVSR19TT1JUX1RSQU5TRk9STV9WQUxJRCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgc29ydE9yZGVyWyR7aW5kZXh9XS50cmFuc2Zvcm1gLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgXCIke2ZpZWxkLnRyYW5zZm9ybX1cIiBpcyBub3QgYSB2YWxpZCBJY2ViZXJnIHRyYW5zZm9ybWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBwYXJzZUljZWJlcmdUeXBlKHNvdXJjZUNvbHVtbi50eXBlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlICE9PSBudWxsICYmICF0cmFuc2Zvcm1MZWdhbE9uVHlwZSh0cmFuc2Zvcm0sIHNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1NPUlRfVFJBTlNGT1JNX1RZUEVfTEVHQUwnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHNvcnRPcmRlclske2luZGV4fV0udHJhbnNmb3JtYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRyYW5zZm9ybSBcIiR7ZmllbGQudHJhbnNmb3JtfVwiIGlzIG5vdCBsZWdhbCBvbiBgXG4gICAgICAgICAgICAgICAgICAgICAgICArIGBjb2x1bW4gXCIke2ZpZWxkLmNvbHVtbn1cIiBvZiB0eXBlIFwiJHtzb3VyY2VDb2x1bW4udHlwZX1cImAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgYSBzb3J0IGZpZWxkIGludG8gaXRzIGlkZW50aXR5IGtleS4gQW4gb21pdHRlZCB0cmFuc2Zvcm0gYW5kIGFuXG4gICAgICogZXhwbGljaXQgYGlkZW50aXR5YCBjb2xsYXBzZSB0byB0aGUgc2FtZSBrZXkgc28gdGhleSBjb3VudCBhcyBkdXBsaWNhdGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpZWxkIFNvcnQgZmllbGQgdG8ga2V5LlxuICAgICAqIEByZXR1cm5zIFRoZSBpZGVudGl0eSBzdHJpbmcgZm9yIGR1cGxpY2F0ZSBkZXRlY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzb3J0RmllbGRLZXkoZmllbGQ6IFNvcnRGaWVsZCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChmaWVsZC50cmFuc2Zvcm0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2ZpZWxkLmNvbHVtbn0gaWRlbnRpdHk6YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYXJzZUljZWJlcmdUcmFuc2Zvcm0oZmllbGQudHJhbnNmb3JtKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFRyYW5zZm9ybSA9IHRyYW5zZm9ybVxuICAgICAgICAgICAgPyBgJHt0cmFuc2Zvcm0ua2luZH06JHt0cmFuc2Zvcm0ucGFyYW0gPz8gJyd9YFxuICAgICAgICAgICAgOiBmaWVsZC50cmFuc2Zvcm0udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgJHtmaWVsZC5jb2x1bW59ICR7bm9ybWFsaXplZFRyYW5zZm9ybX1gO1xuICAgIH1cblxuICAgIC8vLyBJQ0VCRVJHX0ZPUk1BVF9WRVJTSU9OX1ZBTElEIOKAlCBgZm9ybWF0VmVyc2lvbmAsIHdoZW4gc2V0LCBpcyAxLCAyLCBvciAzLlxuICAgIHByaXZhdGUgZm9ybWF0VmVyc2lvblZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBmb3JtYXRWZXJzaW9uLFxuICAgICAgICB9ID0gdGhpcy5kZWZpbml0aW9uO1xuICAgICAgICBpZiAoZm9ybWF0VmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IEljZWJlcmdQYXJxdWV0VGFibGUuRk9STUFUX1ZFUlNJT05TLmhhcyhmb3JtYXRWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfRk9STUFUX1ZFUlNJT05fVkFMSUQnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZm9ybWF0VmVyc2lvbicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYEljZWJlcmcgZm9ybWF0VmVyc2lvbiBcIiR7Zm9ybWF0VmVyc2lvbn1cIiBtdXN0IGJlIDEsIDIsIG9yIDNgLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgdGhlIGNsb3NlZC1kb21haW4gSWNlYmVyZyB0YWJsZSBwcm9wZXJ0aWVzLiBLZXlzIG91dHNpZGUgdGhlXG4gICAgICoga25vd24gc2V0IHBhc3MgdGhyb3VnaCB1bnZhbGlkYXRlZC5cbiAgICAgKlxuICAgICAqIEVtaXRzIGBJQ0VCRVJHX1BST1BFUlRZX0VOVU1fVkFMSURgLCBgSUNFQkVSR19QUk9QRVJUWV9QT1NJVElWRV9JTlRgLFxuICAgICAqIGBJQ0VCRVJHX1BST1BFUlRZX05PTl9ORUdBVElWRV9JTlRgLCBgSUNFQkVSR19QUk9QRVJUWV9JTlRfUkFOR0VgLCBhbmRcbiAgICAgKiBgSUNFQkVSR19DT01NSVRfUkVUUllfT1JERVJJTkdgLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgdGFibGUtcHJvcGVydHkgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgdGFibGVQcm9wZXJ0eVZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5kZWZpbml0aW9uLnRhYmxlUHJvcGVydGllcztcblxuICAgICAgICBmb3IgKGNvbnN0IFtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICBdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxvd2VkID0gSWNlYmVyZ1BhcnF1ZXRUYWJsZS5FTlVNX1BST1BFUlRJRVNba2V5XTtcbiAgICAgICAgICAgIGlmIChhbGxvd2VkICE9PSB1bmRlZmluZWQgJiYgIWFsbG93ZWQuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1BST1BFUlRZX0VOVU1fVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHRhYmxlUHJvcGVydGllc1tcIiR7a2V5fVwiXWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0YWJsZSBwcm9wZXJ0eSBcIiR7a2V5fVwiIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIG9uZSBvZjogJHthbGxvd2VkLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChJY2ViZXJnUGFycXVldFRhYmxlLlBPU0lUSVZFX0lOVF9QUk9QRVJUSUVTLmluY2x1ZGVzKGtleSkgJiYgIWlzUG9zaXRpdmVJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSUNFQkVSR19QUk9QRVJUWV9QT1NJVElWRV9JTlQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHRhYmxlUHJvcGVydGllc1tcIiR7a2V5fVwiXWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0YWJsZSBwcm9wZXJ0eSBcIiR7a2V5fVwiIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcmAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoSWNlYmVyZ1BhcnF1ZXRUYWJsZS5OT05fTkVHQVRJVkVfSU5UX1BST1BFUlRJRVMuaW5jbHVkZXMoa2V5KSAmJiAhaXNOb25OZWdhdGl2ZUludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1BST1BFUlRZX05PTl9ORUdBVElWRV9JTlQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHRhYmxlUHJvcGVydGllc1tcIiR7a2V5fVwiXWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0YWJsZSBwcm9wZXJ0eSBcIiR7a2V5fVwiIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBJY2ViZXJnUGFycXVldFRhYmxlLklOVF9SQU5HRV9QUk9QRVJUSUVTW2tleV07XG4gICAgICAgICAgICBpZiAocmFuZ2UgIT09IHVuZGVmaW5lZCAmJiAhaXNJbnRlZ2VySW5SYW5nZSh2YWx1ZSwgcmFuZ2UubWluLCByYW5nZS5tYXgpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJQ0VCRVJHX1BST1BFUlRZX0lOVF9SQU5HRScsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgdGFibGVQcm9wZXJ0aWVzW1wiJHtrZXl9XCJdYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRhYmxlIHByb3BlcnR5IFwiJHtrZXl9XCIgdmFsdWUgXCIke3ZhbHVlfVwiIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIGBcbiAgICAgICAgICAgICAgICAgICAgICAgICsgYCR7cmFuZ2UubWlufSBhbmQgJHtyYW5nZS5tYXh9YCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2aW9sYXRpb25zLnB1c2goLi4udGhpcy5jb21taXRSZXRyeU9yZGVyaW5nVmlvbGF0aW9ucyhwcm9wZXJ0aWVzKSk7XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLy8vIElDRUJFUkdfQ09NTUlUX1JFVFJZX09SREVSSU5HIOKAlCBjb21taXQucmV0cnkgd2FpdHMgb2JleVxuICAgIC8vLyBtaW4td2FpdC1tcyA8PSBtYXgtd2FpdC1tcyA8PSB0b3RhbC10aW1lb3V0LW1zIHdoZW4gYWxsIGFyZSBwb3NpdGl2ZSBpbnRzLlxuICAgIHByaXZhdGUgY29tbWl0UmV0cnlPcmRlcmluZ1Zpb2xhdGlvbnMocHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW1xuICAgICAgICAgICAgcHJvcGVydGllc1snY29tbWl0LnJldHJ5Lm1pbi13YWl0LW1zJ10sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzWydjb21taXQucmV0cnkubWF4LXdhaXQtbXMnXSxcbiAgICAgICAgICAgIHByb3BlcnRpZXNbJ2NvbW1pdC5yZXRyeS50b3RhbC10aW1lb3V0LW1zJ10sXG4gICAgICAgIF07XG4gICAgICAgIGlmICghdmFsdWVzLmV2ZXJ5KCh2YWx1ZSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpc1Bvc2l0aXZlSW50ZWdlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW1xuICAgICAgICAgICAgbWluLFxuICAgICAgICAgICAgbWF4LFxuICAgICAgICAgICAgdG90YWwsXG4gICAgICAgIF0gPSB2YWx1ZXMubWFwKE51bWJlcik7XG4gICAgICAgIGlmIChtaW4gPD0gbWF4ICYmIG1heCA8PSB0b3RhbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfQ09NTUlUX1JFVFJZX09SREVSSU5HJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3RhYmxlUHJvcGVydGllc1tcImNvbW1pdC5yZXRyeS5taW4td2FpdC1tc1wiXScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2NvbW1pdC5yZXRyeSB3YWl0cyBtdXN0IHNhdGlzZnkgbWluLXdhaXQtbXMgPD0gbWF4LXdhaXQtbXMgPD0gdG90YWwtdGltZW91dC1tcycsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBJY2ViZXJnIGlkZW50aWZpZXIgZmllbGRzICh0aGUgcm93LWlkZW50aXR5IC8gZXF1YWxpdHktZGVsZXRlXG4gICAgICoga2V5KS4gRXF1YWxpdHkgZGVsZXRlcyBhcmUgYSBmb3JtYXQtdmVyc2lvbiAyKyBmZWF0dXJlLCBhbmQgaWRlbnRpZmllclxuICAgICAqIGZpZWxkcyBtdXN0IGJlIHJlcXVpcmVkIHByaW1pdGl2ZSBjb2x1bW5zIHRoYXQgYXJlIG5vdCBmbG9hdC9kb3VibGUuXG4gICAgICpcbiAgICAgKiBFbWl0cyBgSUNFQkVSR19JREVOVElGSUVSX05FRURTX0ZPUk1BVF9WMmAsIGBJQ0VCRVJHX0lERU5USUZJRVJfQ09MVU1OX0VYSVNUU2AsXG4gICAgICogYElDRUJFUkdfSURFTlRJRklFUl9SRVFVSVJFRGAsIGFuZCBgSUNFQkVSR19JREVOVElGSUVSX1RZUEVfUFJJTUlUSVZFYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IGlkZW50aWZpZXItZmllbGQgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgaWRlbnRpZmllckZpZWxkVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlkZW50aWZpZXJGaWVsZHMsXG4gICAgICAgICAgICBmb3JtYXRWZXJzaW9uLFxuICAgICAgICB9ID0gdGhpcy5kZWZpbml0aW9uO1xuXG4gICAgICAgIGlmIChpZGVudGlmaWVyRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdFZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfSURFTlRJRklFUl9ORUVEU19GT1JNQVRfVjInLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRlbnRpZmllckZpZWxkcycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2lkZW50aWZpZXIgZmllbGRzIHJlcXVpcmUgZm9ybWF0VmVyc2lvbiAyIG9yIGhpZ2hlciAoZXF1YWxpdHkgZGVsZXRlcyBhcmUgYSB2MiBmZWF0dXJlKScsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZGVudGlmaWVyRmllbGRzLmZvckVhY2goKG5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGBpZGVudGlmaWVyRmllbGRzWyR7aW5kZXh9XWA7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmRlZmluaXRpb24uY29sdW1ucy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSUNFQkVSR19JREVOVElGSUVSX0NPTFVNTl9FWElTVFMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGlkZW50aWZpZXIgZmllbGQgXCIke25hbWV9XCIgaXMgbm90IGRlZmluZWQgaW4gY29sdW1uc2AsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4ubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfSURFTlRJRklFUl9SRVFVSVJFRCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaWRlbnRpZmllciBmaWVsZCBcIiR7bmFtZX1cIiBtdXN0IGJlIHJlcXVpcmVkIChudWxsYWJsZTogZmFsc2UpYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VJY2ViZXJnVHlwZShjb2x1bW4udHlwZSk7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlLmtpbmQgPT09IEljZWJlcmdUeXBlS2luZC5GTE9BVCB8fCB0eXBlLmtpbmQgPT09IEljZWJlcmdUeXBlS2luZC5ET1VCTEUpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0lDRUJFUkdfSURFTlRJRklFUl9UWVBFX1BSSU1JVElWRScsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaWRlbnRpZmllciBmaWVsZCBcIiR7bmFtZX1cIiBtdXN0IGJlIGEgcHJpbWl0aXZlIHR5cGUgb3RoZXIgdGhhbiBmbG9hdCBvciBkb3VibGVgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIGEgcGFydGl0aW9uIGludG8gaXRzIGlkZW50aXR5IGtleS4gV2hlbiB0aGUgdHJhbnNmb3JtIHBhcnNlcyxcbiAgICAgKiBjb2xsYXBzZSBvbiBgJHtraW5kfToke3BhcmFtfWAgc28gYGRheWAgYW5kIGBEQVlgLCBgYnVja2V0WzE2XWAgYW5kXG4gICAgICogYGJ1Y2tldFsgMTYgXWAgYXJlIHRoZSBzYW1lLiBXaGVuIHRoZSB0cmFuc2Zvcm0gZG9lc24ndCBwYXJzZSwgdGhlXG4gICAgICogbG93ZXJjYXNlZCB0cmltIG9mIHRoZSByYXcgc3RyaW5nIGlzIHRoZSBiZXN0IGlkZW50aXR5IHdlIGhhdmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFydGl0aW9uIFBhcnRpdGlvbiB0byBrZXkuXG4gICAgICogQHJldHVybnMgVGhlIGlkZW50aXR5IHN0cmluZyBmb3IgZHVwbGljYXRlIGRldGVjdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnRpdGlvbktleShwYXJ0aXRpb246IFBhcnRpdGlvbik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhcnNlSWNlYmVyZ1RyYW5zZm9ybShwYXJ0aXRpb24udHlwZSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbiAgICAgICAgICAgID8gYCR7dHJhbnNmb3JtLmtpbmR9OiR7dHJhbnNmb3JtLnBhcmFtID8/ICcnfWBcbiAgICAgICAgICAgIDogcGFydGl0aW9uLnR5cGUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgJHtwYXJ0aXRpb24ubmFtZX0gJHtub3JtYWxpemVkVHJhbnNmb3JtfWA7XG4gICAgfVxufVxuIl19
|
package/package.json
CHANGED