UNPKG

@grnsft/if

Version:

Impact Framework

82 lines 19.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.STRINGS = void 0; exports.STRINGS = { MISSING_METHOD: "Initalization param 'method' is missing.", MISSING_PATH: "Initalization param 'path' is missing.", NOT_NATIVE_PLUGIN: (path) => ` You are using plugin ${path} which is not part of the Impact Framework standard library. You should do your own research to ensure the plugins are up to date and accurate. They may not be actively maintained.`, INVALID_MODULE_PATH: (path, error) => `Provided module \`${path}\` is invalid or not found. ${error ?? ''} `, INCOMPATIBLE_RESOLUTION_WITH_INTERVAL: 'The upsampling resolution must be a divisor of the given interval, but the provided value does not satisfy this criteria.', INCOMPATIBLE_RESOLUTION_WITH_INPUTS: 'The upsampling resolution must be a divisor of all inputs durations, but the provided values do not satisfy this criteria.', INCOMPATIBLE_RESOLUTION_WITH_GAPS: 'The upsampling resolution must be a divisor of gaps and paddings in the time-series, but the provided values do not satisfy this criteria.', UNEXPECTED_TIME_CONFIG: 'Unexpected node-level config provided for time-sync plugin.', AVOIDING_PADDING_BY_EDGES: (start, end) => `Avoiding padding at ${start && end ? 'start and end' : start ? 'start' : 'end'}`, METRIC_MISSING: (metric, index) => `Aggregation metric ${metric} is not found in inputs[${index}].`, INVALID_GROUP_KEY: (key) => `Invalid group ${key}.`, REGROUP_ERROR: 'not an array or should contain at least one key', UNKNOWN_PARAM: (name) => `Unknown parameter: ${name}. Omitting from the output.`, NOT_INITALIZED_PLUGIN: (name) => `Not initalized plugin: ${name}. Check if ${name} is in 'manifest.initalize.plugins'.`, NO_OUTPUT: ` You have not added an output command: --output <savepath>: will save your output data to the given filepath (do not provide file extension) Note that for the '--output' option you also need to define the output type in your manifest file. See https://if.greensoftware.foundation/major-concepts/imp-file#initialize`, UNSUPPORTED_ERROR: (errorName) => `UnsupportedErrorClass: plugin threw error class: ${errorName} that is not recognized by Impact Framework`, /** Debugging logs */ STARTING_IF: 'Starting IF', EXITING_IF: 'Exiting IF', LOADING_MANIFEST: 'Loading manifest', VALIDATING_MANIFEST: 'Validating manifest', CAPTURING_RUNTIME_ENVIRONMENT_DATA: 'Capturing runtime environment data', CHECKING_AGGREGATION_METHOD: (unitName) => `Checking aggregation method for ${unitName}`, INITIALIZING_PLUGINS: 'Initializing plugins', INITIALIZING_PLUGIN: (pluginName) => `Initializing \`${pluginName}\` instance`, LOADING_PLUGIN_FROM_PATH: (pluginName, path) => `Loading ${pluginName} from ${path}`, COMPUTING_PIPELINE_FOR_NODE: (nodeName) => `Running compute pipeline: \`${nodeName}\` plugin`, COMPUTING_COMPONENT_PIPELINE: (component) => `**Computing \`${component}\` pipeline**`, REGROUPING: 'Regrouping', SKIPPING_REGROUP: 'Already correctly grouped - skipping regrouping.', OBSERVING: (nodeName) => `Running observe pipeline: \`${nodeName}\` plugin`, MERGING_DEFAULTS_WITH_INPUT_DATA: 'Merging defaults with input data', AGGREGATING_OUTPUTS: 'Aggregating outputs', AGGREGATING_NODE: (nodeName) => `Aggregating node ${nodeName}`, PREPARING_OUTPUT_DATA: () => { console.debug('\n'); return 'Preparing output data'; }, EXPORTING_TO_YAML_FILE: (savepath) => `Exporting to yaml file: ${savepath}`, EMPTY_PIPELINE: `You're using an old style manifest. Please update for phased execution. More information can be found here: https://if.greensoftware.foundation/major-concepts/imp-file`, /** Exhaust messages */ OUTPUT_REQUIRED: 'Output path is required, please make sure output is configured properly.', /** Plugins messages */ INVALID_NAME: '`name` config parameter is empty or contains all spaces', START_LOWER_END: '`start-time` should be lower than `end-time`', X_Y_EQUAL: 'The length of `x` and `y` should be equal', ARRAY_LENGTH_NON_EMPTY: 'the length of the input arrays must be greater than 1', WITHIN_THE_RANGE: 'The target x value must be within the range of the given x values', MISSING_CSV_COLUMN: (columnName) => `There is no column with the name: ${columnName}.`, NO_QUERY_DATA: 'One or more of the given query parameters are not found in the target CSV file column headers.', INVALID_DATE_TYPE: (date) => `Unexpected date datatype: ${typeof date}: ${date}`, INVALID_OBSERVATION_OVERLAP: 'Observation timestamps overlap, please check inputs.', SCI_MISSING_FN_UNIT: (functionalUnit) => `'carbon' and ${functionalUnit} should be present in your input data.`, MISSING_FUNCTIONAL_UNIT_CONFIG: '`functional-unit` should be provided in your config', MISSING_FUNCTIONAL_UNIT_INPUT: '`functional-unit` value is missing from input data or it is not a positive integer', REGEX_MISMATCH: (input, match) => `\`${input}\` does not match the ${match} regex expression`, MISSING_MIN_MAX: 'Config is missing min or max value', INVALID_MIN_MAX: (name) => `Min value should not be greater than or equal to max value of ${name}`, FILE_FETCH_FAILED: (filepath, message) => `Failed fetching the file: ${filepath}. ${message}`, FILE_READ_FAILED: (filepath, error) => `Failed reading the file: ${filepath}. ${error}`, ZERO_DIVISION: (moduleName, index) => `-- SKIPPING -- DivisionByZero: you are attempting to divide by zero in ${moduleName} plugin : inputs[${index}]\n`, MISSING_CONFIG: 'Config is not provided.', MISSING_INPUT_DATA: (param) => `${param} is missing from the input array, or has nullish value.`, CONFIG_WARN: (plugins, isMore) => { const withoutPlugins = 'You have included node-level config in your manifest. IF no longer supports node-level config. The manifest should be refactored to accept all its node-level config from config or input data.'; const withPlugins = `You have included node-level config in your manifest to support \`${plugins}\` plugin${isMore ? 's' : ''}. IF no longer supports node-level config. \`${plugins}\` plugin${isMore ? 's' : ''} should be refactored to accept all its config from config or input data.`; return plugins.length ? withPlugins : withoutPlugins; }, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vY29uZmlnL3N0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxPQUFPLEdBQUc7SUFDckIsY0FBYyxFQUFFLDBDQUEwQztJQUMxRCxZQUFZLEVBQUUsd0NBQXdDO0lBQ3RELGlCQUFpQixFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDbEM7eUJBQ3FCLElBQUksc0xBQXNMO0lBQ2pOLG1CQUFtQixFQUFFLENBQUMsSUFBWSxFQUFFLEtBQVcsRUFBRSxFQUFFLENBQ2pELHFCQUFxQixJQUFJLCtCQUErQixLQUFLLElBQUksRUFBRTtDQUN0RTtJQUNDLHFDQUFxQyxFQUNuQywySEFBMkg7SUFDN0gsbUNBQW1DLEVBQ2pDLDRIQUE0SDtJQUM5SCxpQ0FBaUMsRUFDL0IsNElBQTRJO0lBQzlJLHNCQUFzQixFQUNwQiw2REFBNkQ7SUFDL0QseUJBQXlCLEVBQUUsQ0FBQyxLQUFjLEVBQUUsR0FBWSxFQUFFLEVBQUUsQ0FDMUQsdUJBQ0UsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FDckQsRUFBRTtJQUNKLGNBQWMsRUFBRSxDQUFDLE1BQWMsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUNoRCxzQkFBc0IsTUFBTSwyQkFBMkIsS0FBSyxJQUFJO0lBQ2xFLGlCQUFpQixFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHO0lBQzNELGFBQWEsRUFBRSxpREFBaUQ7SUFDaEUsYUFBYSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDOUIsc0JBQXNCLElBQUksNkJBQTZCO0lBQ3pELHFCQUFxQixFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDdEMsMEJBQTBCLElBQUksY0FBYyxJ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QUFFLENBQUMsVUFBa0IsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUNuRCwwRUFBMEUsVUFBVSxvQkFBb0IsS0FBSyxLQUFLO0lBQ3BILGNBQWMsRUFBRSx5QkFBeUI7SUFDekMsa0JBQWtCLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUNwQyxHQUFHLEtBQUsseURBQXlEO0lBQ25FLFdBQVcsRUFBRSxDQUFDLE9BQWUsRUFBRSxNQUFlLEVBQUUsRUFBRTtRQUNoRCxNQUFNLGNBQWMsR0FDbEIsaU1BQWlNLENBQUM7UUFDcE0sTUFBTSxXQUFXLEdBQUcscUVBQXFFLE9BQU8sWUFDOUYsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2pCLGdEQUFnRCxPQUFPLFlBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNqQiwyRUFBMkUsQ0FBQztRQUU1RSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQ3ZELENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNUUklOR1MgPSB7XG4gIE1JU1NJTkdfTUVUSE9EOiBcIkluaXRhbGl6YXRpb24gcGFyYW0gJ21ldGhvZCcgaXMgbWlzc2luZy5cIixcbiAgTUlTU0lOR19QQVRIOiBcIkluaXRhbGl6YXRpb24gcGFyYW0gJ3BhdGgnIGlzIG1pc3NpbmcuXCIsXG4gIE5PVF9OQVRJVkVfUExVR0lOOiAocGF0aDogc3RyaW5nKSA9PlxuICAgIGBcbiAgWW91IGFyZSB1c2luZyBwbHVnaW4gJHtwYXRofSB3aGljaCBpcyBub3QgcGFydCBvZiB0aGUgSW1wYWN0IEZyYW1ld29yayBzdGFuZGFyZCBsaWJyYXJ5LiBZb3Ugc2hvdWxkIGRvIHlvdXIgb3duIHJlc2VhcmNoIHRvIGVuc3VyZSB0aGUgcGx1Z2lucyBhcmUgdXAgdG8gZGF0ZSBhbmQgYWNjdXJhdGUuIFRoZXkgbWF5IG5vdCBiZSBhY3RpdmVseSBtYWludGFpbmVkLmAsXG4gIElOVkFMSURfTU9EVUxFX1BBVEg6IChwYXRoOiBzdHJpbmcsIGVycm9yPzogYW55KSA9PlxuICAgIGBQcm92aWRlZCBtb2R1bGUgXFxgJHtwYXRofVxcYCBpcyBpbnZhbGlkIG9yIG5vdCBmb3VuZC4gJHtlcnJvciA/PyAnJ31cbmAsXG4gIElOQ09NUEFUSUJMRV9SRVNPTFVUSU9OX1dJVEhfSU5URVJWQUw6XG4gICAgJ1RoZSB1cHNhbXBsaW5nIHJlc29sdXRpb24gbXVzdCBiZSBhIGRpdmlzb3Igb2YgdGhlIGdpdmVuIGludGVydmFsLCBidXQgdGhlIHByb3ZpZGVkIHZhbHVlIGRvZXMgbm90IHNhdGlzZnkgdGhpcyBjcml0ZXJpYS4nLFxuICBJTkNPTVBBVElCTEVfUkVTT0xVVElPTl9XSVRIX0lOUFVUUzpcbiAgICAnVGhlIHVwc2FtcGxpbmcgcmVzb2x1dGlvbiBtdXN0IGJlIGEgZGl2aXNvciBvZiBhbGwgaW5wdXRzIGR1cmF0aW9ucywgYnV0IHRoZSBwcm92aWRlZCB2YWx1ZXMgZG8gbm90IHNhdGlzZnkgdGhpcyBjcml0ZXJpYS4nLFxuICBJTkNPTVBBVElCTEVfUkVTT0xVVElPTl9XSVRIX0dBUFM6XG4gICAgJ1RoZSB1cHNhbXBsaW5nIHJlc29sdXRpb24gbXVzdCBiZSBhIGRpdmlzb3Igb2YgZ2FwcyBhbmQgcGFkZGluZ3MgaW4gdGhlIHRpbWUtc2VyaWVzLCBidXQgdGhlIHByb3ZpZGVkIHZhbHVlcyBkbyBub3Qgc2F0aXNmeSB0aGlzIGNyaXRlcmlhLicsXG4gIFVORVhQRUNURURfVElNRV9DT05GSUc6XG4gICAgJ1VuZXhwZWN0ZWQgbm9kZS1sZXZlbCBjb25maWcgcHJvdmlkZWQgZm9yIHRpbWUtc3luYyBwbHVnaW4uJyxcbiAgQVZPSURJTkdfUEFERElOR19CWV9FREdFUzogKHN0YXJ0OiBib29sZWFuLCBlbmQ6IGJvb2xlYW4pID0+XG4gICAgYEF2b2lkaW5nIHBhZGRpbmcgYXQgJHtcbiAgICAgIHN0YXJ0ICYmIGVuZCA/ICdzdGFydCBhbmQgZW5kJyA6IHN0YXJ0ID8gJ3N0YXJ0JyA6ICdlbmQnXG4gICAgfWAsXG4gIE1FVFJJQ19NSVNTSU5HOiAobWV0cmljOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+XG4gICAgYEFnZ3JlZ2F0aW9uIG1ldHJpYyAke21ldHJpY30gaXMgbm90IGZvdW5kIGluIGlucHV0c1ske2luZGV4fV0uYCxcbiAgSU5WQUxJRF9HUk9VUF9LRVk6IChrZXk6IHN0cmluZykgPT4gYEludmFsaWQgZ3JvdXAgJHtrZXl9LmAsXG4gIFJFR1JPVVBfRVJST1I6ICdub3QgYW4gYXJyYXkgb3Igc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3Qgb25lIGtleScsXG4gIFVOS05PV05fUEFSQU06IChuYW1lOiBzdHJpbmcpID0+XG4gICAgYFVua25vd24gcGFyYW1ldGVyOiAke25hbWV9LiBPbWl0dGluZyBmcm9tIHRoZSBvdXRwdXQuYCxcbiAgTk9UX0lOSVRBTElaRURfUExVR0lOOiAobmFtZTogc3RyaW5nKSA9PlxuICAgIGBOb3QgaW5pdGFsaXplZCBwbHVnaW46ICR7bmFtZX0uIENoZWNrIGlmICR7bmFtZX0gaXMgaW4gJ21hbmlmZXN0LmluaXRhbGl6ZS5wbHVnaW5zJy5gLFxuICBOT19PVVRQVVQ6IGBcbllvdSBoYXZlIG5vdCBhZGRlZCBhbiBvdXRwdXQgY29tbWFuZDogXG4tLW91dHB1dCA8c2F2ZXBhdGg+OiB3aWxsIHNhdmUgeW91ciBvdXRwdXQgZGF0YSB0byB0aGUgZ2l2ZW4gZmlsZXBhdGggKGRvIG5vdCBwcm92aWRlIGZpbGUgZXh0ZW5zaW9uKVxuTm90ZSB0aGF0IGZvciB0aGUgJy0tb3V0cHV0JyBvcHRpb24geW91IGFsc28gbmVlZCB0byBkZWZpbmUgdGhlIG91dHB1dCB0eXBlIGluIHlvdXIgbWFuaWZlc3QgZmlsZS4gU2VlIGh0dHBzOi8vaWYuZ3JlZW5zb2Z0d2FyZS5mb3VuZGF0aW9uL21ham9yLWNvbmNlcHRzL2ltcC1maWxlI2luaXRpYWxpemVgLFxuICBVTlNVUFBPUlRFRF9FUlJPUjogKGVycm9yTmFtZTogc3RyaW5nKSA9PlxuICAgIGBVbnN1cHBvcnRlZEVycm9yQ2xhc3M6IHBsdWdpbiB0aHJldyBlcnJvciBjbGFzczogJHtlcnJvck5hbWV9IHRoYXQgaXMgbm90IHJlY29nbml6ZWQgYnkgSW1wYWN0IEZyYW1ld29ya2AsXG4gIC8qKiBEZWJ1Z2dpbmcgbG9ncyAqL1xuICBTVEFSVElOR19JRjogJ1N0YXJ0aW5nIElGJyxcbiAgRVhJVElOR19JRjogJ0V4aXRpbmcgSUYnLFxuICBMT0FESU5HX01BTklGRVNUOiAnTG9hZGluZyBtYW5pZmVzdCcsXG4gIFZBTElEQVRJTkdfTUFOSUZFU1Q6ICdWYWxpZGF0aW5nIG1hbmlmZXN0JyxcbiAgQ0FQVFVSSU5HX1JVTlRJTUVfRU5WSVJPTk1FTlRfREFUQTogJ0NhcHR1cmluZyBydW50aW1lIGVudmlyb25tZW50IGRhdGEnLFxuICBDSEVDS0lOR19BR0dSRUdBVElPTl9NRVRIT0Q6ICh1bml0TmFtZTogc3RyaW5nKSA9PlxuICAgIGBDaGVja2luZyBhZ2dyZWdhdGlvbiBtZXRob2QgZm9yICR7dW5pdE5hbWV9YCxcbiAgSU5JVElBTElaSU5HX1BMVUdJTlM6ICdJbml0aWFsaXppbmcgcGx1Z2lucycsXG4gIElOSVRJQUxJWklOR19QTFVHSU46IChwbHVnaW5OYW1lOiBzdHJpbmcpID0+XG4gICAgYEluaXRpYWxpemluZyBcXGAke3BsdWdpbk5hbWV9XFxgIGluc3RhbmNlYCxcbiAgTE9BRElOR19QTFVHSU5fRlJPTV9QQVRIOiAocGx1Z2luTmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpID0+XG4gICAgYExvYWRpbmcgJHtwbHVnaW5OYW1lfSBmcm9tICR7cGF0aH1gLFxuICBDT01QVVRJTkdfUElQRUxJTkVfRk9SX05PREU6IChub2RlTmFtZTogc3RyaW5nKSA9PlxuICAgIGBSdW5uaW5nIGNvbXB1dGUgcGlwZWxpbmU6IFxcYCR7bm9kZU5hbWV9XFxgIHBsdWdpbmAsXG4gIENPTVBVVElOR19DT01QT05FTlRfUElQRUxJTkU6IChjb21wb25lbnQ6IHN0cmluZykgPT5cbiAgICBgKipDb21wdXRpbmcgXFxgJHtjb21wb25lbnR9XFxgIHBpcGVsaW5lKipgLFxuICBSRUdST1VQSU5HOiAnUmVncm91cGluZycsXG4gIFNLSVBQSU5HX1JFR1JPVVA6ICdBbHJlYWR5IGNvcnJlY3RseSBncm91cGVkIC0gc2tpcHBpbmcgcmVncm91cGluZy4nLFxuICBPQlNFUlZJTkc6IChub2RlTmFtZTogc3RyaW5nKSA9PlxuICAgIGBSdW5uaW5nIG9ic2VydmUgcGlwZWxpbmU6IFxcYCR7bm9kZU5hbWV9XFxgIHBsdWdpbmAsXG4gIE1FUkdJTkdfREVGQVVMVFNfV0lUSF9JTlBVVF9EQVRBOiAnTWVyZ2luZyBkZWZhdWx0cyB3aXRoIGlucHV0IGRhdGEnLFxuICBBR0dSRUdBVElOR19PVVRQVVRTOiAnQWdncmVnYXRpbmcgb3V0cHV0cycsXG4gIEFHR1JFR0FUSU5HX05PREU6IChub2RlTmFtZTogc3RyaW5nKSA9PiBgQWdncmVnYXRpbmcgbm9kZSAke25vZGVOYW1lfWAsXG4gIFBSRVBBUklOR19PVVRQVVRfREFUQTogKCkgPT4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1xcbicpO1xuICAgIHJldHVybiAnUHJlcGFyaW5nIG91dHB1dCBkYXRhJztcbiAgfSxcbiAgRVhQT1JUSU5HX1RPX1lBTUxfRklMRTogKHNhdmVwYXRoOiBzdHJpbmcpID0+XG4gICAgYEV4cG9ydGluZyB0byB5YW1sIGZpbGU6ICR7c2F2ZXBhdGh9YCxcbiAgRU1QVFlfUElQRUxJTkU6IGBZb3UncmUgdXNpbmcgYW4gb2xkIHN0eWxlIG1hbmlmZXN0LiBQbGVhc2UgdXBkYXRlIGZvciBwaGFzZWQgZXhlY3V0aW9uLiBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOiBcbmh0dHBzOi8vaWYuZ3JlZW5zb2Z0d2FyZS5mb3VuZGF0aW9uL21ham9yLWNvbmNlcHRzL2ltcC1maWxlYCxcbiAgLyoqIEV4aGF1c3QgbWVzc2FnZXMgKi9cbiAgT1VUUFVUX1JFUVVJUkVEOlxuICAgICdPdXRwdXQgcGF0aCBpcyByZXF1aXJlZCwgcGxlYXNlIG1ha2Ugc3VyZSBvdXRwdXQgaXMgY29uZmlndXJlZCBwcm9wZXJseS4nLFxuICAvKiogUGx1Z2lucyBtZXNzYWdlcyAqL1xuICBJTlZBTElEX05BTUU6ICdgbmFtZWAgY29uZmlnIHBhcmFtZXRlciBpcyBlbXB0eSBvciBjb250YWlucyBhbGwgc3BhY2VzJyxcbiAgU1RBUlRfTE9XRVJfRU5EOiAnYHN0YXJ0LXRpbWVgIHNob3VsZCBiZSBsb3dlciB0aGFuIGBlbmQtdGltZWAnLFxuICBYX1lfRVFVQUw6ICdUaGUgbGVuZ3RoIG9mIGB4YCBhbmQgYHlgIHNob3VsZCBiZSBlcXVhbCcsXG4gIEFSUkFZX0xFTkdUSF9OT05fRU1QVFk6XG4gICAgJ3RoZSBsZW5ndGggb2YgdGhlIGlucHV0IGFycmF5cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxJyxcbiAgV0lUSElOX1RIRV9SQU5HRTpcbiAgICAnVGhlIHRhcmdldCB4IHZhbHVlIG11c3QgYmUgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgZ2l2ZW4geCB2YWx1ZXMnLFxuICBNSVNTSU5HX0NTVl9DT0xVTU46IChjb2x1bW5OYW1lOiBzdHJpbmcpID0+XG4gICAgYFRoZXJlIGlzIG5vIGNvbHVtbiB3aXRoIHRoZSBuYW1lOiAke2NvbHVtbk5hbWV9LmAsXG4gIE5PX1FVRVJZX0RBVEE6XG4gICAgJ09uZSBvciBtb3JlIG9mIHRoZSBnaXZlbiBxdWVyeSBwYXJhbWV0ZXJzIGFyZSBub3QgZm91bmQgaW4gdGhlIHRhcmdldCBDU1YgZmlsZSBjb2x1bW4gaGVhZGVycy4nLFxuICBJTlZBTElEX0RBVEVfVFlQRTogKGRhdGU6IGFueSkgPT5cbiAgICBgVW5leHBlY3RlZCBkYXRlIGRhdGF0eXBlOiAke3R5cGVvZiBkYXRlfTogJHtkYXRlfWAsXG4gIElOVkFMSURfT0JTRVJWQVRJT05fT1ZFUkxBUDpcbiAgICAnT2JzZXJ2YXRpb24gdGltZXN0YW1wcyBvdmVybGFwLCBwbGVhc2UgY2hlY2sgaW5wdXRzLicsXG4gIFNDSV9NSVNTSU5HX0ZOX1VOSVQ6IChmdW5jdGlvbmFsVW5pdDogc3RyaW5nKSA9PlxuICAgIGAnY2FyYm9uJyBhbmQgJHtmdW5jdGlvbmFsVW5pdH0gc2hvdWxkIGJlIHByZXNlbnQgaW4geW91ciBpbnB1dCBkYXRhLmAsXG4gIE1JU1NJTkdfRlVOQ1RJT05BTF9VTklUX0NPTkZJRzpcbiAgICAnYGZ1bmN0aW9uYWwtdW5pdGAgc2hvdWxkIGJlIHByb3ZpZGVkIGluIHlvdXIgY29uZmlnJyxcbiAgTUlTU0lOR19GVU5DVElPTkFMX1VOSVRfSU5QVVQ6XG4gICAgJ2BmdW5jdGlvbmFsLXVuaXRgIHZhbHVlIGlzIG1pc3NpbmcgZnJvbSBpbnB1dCBkYXRhIG9yIGl0IGlzIG5vdCBhIHBvc2l0aXZlIGludGVnZXInLFxuICBSRUdFWF9NSVNNQVRDSDogKGlucHV0OiBhbnksIG1hdGNoOiBzdHJpbmcpID0+XG4gICAgYFxcYCR7aW5wdXR9XFxgIGRvZXMgbm90IG1hdGNoIHRoZSAke21hdGNofSByZWdleCBleHByZXNzaW9uYCxcbiAgTUlTU0lOR19NSU5fTUFYOiAnQ29uZmlnIGlzIG1pc3NpbmcgbWluIG9yIG1heCB2YWx1ZScsXG4gIElOVkFMSURfTUlOX01BWDogKG5hbWU6IHN0cmluZykgPT5cbiAgICBgTWluIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1heCB2YWx1ZSBvZiAke25hbWV9YCxcbiAgRklMRV9GRVRDSF9GQUlMRUQ6IChcbiAgICBmaWxlcGF0aDogc3RyaW5nLFxuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICApID0+IGBGYWlsZWQgZmV0Y2hpbmcgdGhlIGZpbGU6ICR7ZmlsZXBhdGh9LlxuJHttZXNzYWdlfWAsXG4gIEZJTEVfUkVBRF9GQUlMRUQ6IChcbiAgICBmaWxlcGF0aDogc3RyaW5nLFxuICAgIGVycm9yOiBzdHJpbmdcbiAgKSA9PiBgRmFpbGVkIHJlYWRpbmcgdGhlIGZpbGU6ICR7ZmlsZXBhdGh9LiBcbiR7ZXJyb3J9YCxcbiAgWkVST19ESVZJU0lPTjogKG1vZHVsZU5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT5cbiAgICBgLS0gU0tJUFBJTkcgLS0gRGl2aXNpb25CeVplcm86IHlvdSBhcmUgYXR0ZW1wdGluZyB0byBkaXZpZGUgYnkgemVybyBpbiAke21vZHVsZU5hbWV9IHBsdWdpbiA6IGlucHV0c1ske2luZGV4fV1cXG5gLFxuICBNSVNTSU5HX0NPTkZJRzogJ0NvbmZpZyBpcyBub3QgcHJvdmlkZWQuJyxcbiAgTUlTU0lOR19JTlBVVF9EQVRBOiAocGFyYW06IHN0cmluZykgPT5cbiAgICBgJHtwYXJhbX0gaXMgbWlzc2luZyBmcm9tIHRoZSBpbnB1dCBhcnJheSwgb3IgaGFzIG51bGxpc2ggdmFsdWUuYCxcbiAgQ09ORklHX1dBUk46IChwbHVnaW5zOiBzdHJpbmcsIGlzTW9yZTogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHdpdGhvdXRQbHVnaW5zID1cbiAgICAgICdZb3UgaGF2ZSBpbmNsdWRlZCBub2RlLWxldmVsIGNvbmZpZyBpbiB5b3VyIG1hbmlmZXN0LiBJRiBubyBsb25nZXIgc3VwcG9ydHMgbm9kZS1sZXZlbCBjb25maWcuIFRoZSBtYW5pZmVzdCBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byBhY2NlcHQgYWxsIGl0cyBub2RlLWxldmVsIGNvbmZpZyBmcm9tIGNvbmZpZyBvciBpbnB1dCBkYXRhLic7XG4gICAgY29uc3Qgd2l0aFBsdWdpbnMgPSBgWW91IGhhdmUgaW5jbHVkZWQgbm9kZS1sZXZlbCBjb25maWcgaW4geW91ciBtYW5pZmVzdCB0byBzdXBwb3J0IFxcYCR7cGx1Z2luc31cXGAgcGx1Z2luJHtcbiAgICAgIGlzTW9yZSA/ICdzJyA6ICcnXG4gICAgfS4gSUYgbm8gbG9uZ2VyIHN1cHBvcnRzIG5vZGUtbGV2ZWwgY29uZmlnLiBcXGAke3BsdWdpbnN9XFxgIHBsdWdpbiR7XG4gICAgICBpc01vcmUgPyAncycgOiAnJ1xuICAgIH0gc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gYWNjZXB0IGFsbCBpdHMgY29uZmlnIGZyb20gY29uZmlnIG9yIGlucHV0IGRhdGEuYDtcblxuICAgIHJldHVybiBwbHVnaW5zLmxlbmd0aCA/IHdpdGhQbHVnaW5zIDogd2l0aG91dFBsdWdpbnM7XG4gIH0sXG59O1xuIl19