oci-cdk-test 0.0.5 → 0.0.7

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.
@@ -259,7 +259,9 @@ function ensureDefaultApiGwDeploymentJson(projectDir) {
259
259
  const TAIL_FUNCTION_LOGS_SCRIPT = `#!/usr/bin/env node
260
260
  /**
261
261
  * Tail OCI Functions execution logs. Generated by OCDK.
262
- * Run from project root after deploy. Requires: OCI CLI, OCI_COMPARTMENT_ID, and .ocdk-outputs.json (created on deploy).
262
+ * Run from project root after deploy. Requires: OCI CLI, OCI_COMPARTMENT_ID.
263
+ * Log IDs: from .ocdk-outputs.json (created on deploy), or pass for testing:
264
+ * OCI_LOG_GROUP_ID=ocid1... OCI_EXECUTION_LOG_ID=ocid1... node tail-function-logs.js
263
265
  */
264
266
  const path = require('path');
265
267
  const fs = require('fs');
@@ -267,39 +269,61 @@ const { spawnSync } = require('child_process');
267
269
 
268
270
  const dir = process.env.OCDK_PROJECT_DIR || __dirname;
269
271
  const outputsPath = path.join(dir, '.ocdk-outputs.json');
270
- if (!fs.existsSync(outputsPath)) {
271
- console.error('Run deploy first to create .ocdk-outputs.json in the project root.');
272
- process.exit(1);
273
- }
274
272
  const compId = process.env.OCI_COMPARTMENT_ID || process.env.OCI_COMPARTMENT_OCID;
275
273
  if (!compId) {
276
274
  console.error('Set OCI_COMPARTMENT_ID (or OCI_COMPARTMENT_OCID).');
277
275
  process.exit(1);
278
276
  }
279
- let out;
280
- try {
281
- const raw = fs.readFileSync(outputsPath, 'utf8').replace(/^\uFEFF/, '').trim();
282
- const first = raw.indexOf('{');
283
- const last = raw.lastIndexOf('}');
284
- if (first === -1 || last <= first) throw new Error('No JSON');
285
- out = JSON.parse(raw.slice(first, last + 1));
286
- } catch (e) {
287
- console.error('Invalid or missing .ocdk-outputs.json. Run deploy first.');
288
- process.exit(1);
289
- }
290
- const outputs = out.log_group_id != null ? out : Object.values(out).find((v) => v && typeof v === 'object' && (v.log_group_id != null || v.execution_log_id != null)) || out;
291
- function val(o, k) {
292
- const v = o[k];
293
- if (!v) return undefined;
294
- if (typeof v === 'string') return v;
295
- if (v && typeof v.value === 'string') return v.value;
296
- return undefined;
297
- }
298
- const logGroupId = val(outputs, 'log_group_id');
299
- const executionLogId = val(outputs, 'execution_log_id');
277
+ let logGroupId = (process.env.OCI_LOG_GROUP_ID || '').trim();
278
+ let executionLogId = (process.env.OCI_EXECUTION_LOG_ID || '').trim();
300
279
  if (!logGroupId || !executionLogId) {
301
- console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json');
302
- process.exit(1);
280
+ if (!fs.existsSync(outputsPath)) {
281
+ console.error('Run deploy first to create .ocdk-outputs.json, or set OCI_LOG_GROUP_ID and OCI_EXECUTION_LOG_ID for testing.');
282
+ process.exit(1);
283
+ }
284
+ let out;
285
+ try {
286
+ const raw = fs.readFileSync(outputsPath, 'utf8').replace(/^\uFEFF/, '').trim();
287
+ const first = raw.indexOf('{');
288
+ const last = raw.lastIndexOf('}');
289
+ if (first === -1 || last <= first) throw new Error('No JSON');
290
+ out = JSON.parse(raw.slice(first, last + 1));
291
+ } catch (e) {
292
+ console.error('Invalid or missing .ocdk-outputs.json. Run deploy first.');
293
+ process.exit(1);
294
+ }
295
+ function findOutputs(obj) {
296
+ if (!obj || typeof obj !== 'object') return null;
297
+ if (obj.log_group_id != null || obj.execution_log_id != null || obj.logGroupId != null || obj.executionLogId != null) return obj;
298
+ if (obj.outputs && typeof obj.outputs === 'object') return findOutputs(obj.outputs) || obj.outputs;
299
+ for (const v of Object.values(obj)) {
300
+ const found = findOutputs(v);
301
+ if (found) return found;
302
+ }
303
+ return null;
304
+ }
305
+ function val(o, k) {
306
+ let v = o[k];
307
+ if (v == null) v = o[k.replace(/_([a-z])/g, (_, c) => c.toUpperCase())];
308
+ if (v == null) return undefined;
309
+ if (typeof v === 'string') return v.trim();
310
+ if (typeof v === 'object' && v != null && 'value' in v) return String(v.value).trim();
311
+ return undefined;
312
+ }
313
+ function findBySubstring(o, sub) {
314
+ const key = Object.keys(o).find(function(k) { return k.toLowerCase().includes(sub); });
315
+ return key ? val(o, key) : undefined;
316
+ }
317
+ const outputs = findOutputs(out) || out;
318
+ logGroupId = val(outputs, 'log_group_id') || val(outputs, 'logGroupId') || findBySubstring(outputs, 'log_group');
319
+ executionLogId = val(outputs, 'execution_log_id') || val(outputs, 'executionLogId') || findBySubstring(outputs, 'execution_log');
320
+ if (!logGroupId || !executionLogId) {
321
+ console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json');
322
+ console.error('Top-level keys: ' + Object.keys(out).join(', '));
323
+ console.error('Outputs keys: ' + Object.keys(outputs).join(', '));
324
+ console.error('Sample: ' + JSON.stringify(out).slice(0, 400));
325
+ process.exit(1);
326
+ }
303
327
  }
304
328
  const now = new Date();
305
329
  const start = new Date(now.getTime() - 10 * 60 * 1000);
@@ -552,4 +576,4 @@ async function getOciConfig() {
552
576
  backend: backendConfig,
553
577
  };
554
578
  }
555
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NvbmZpZy9vY2ktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkVILGtDQUVDO0FBR0Qsd0NBS0M7QUFpWEQsb0NBd0ZDO0FBOWhCRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixtREFBcUM7QUFDckMsaUVBQW1EO0FBMENuRCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xEO0lBQ0UsTUFBTSxFQUFFO1FBQ047WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUNuQyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsRUFBRTthQUN6QjtTQUNGO0tBQ0Y7Q0FDRixFQUNELElBQUksRUFDSixDQUFDLENBQ0YsQ0FBQztBQUVGLHFJQUFxSTtBQUN4SCxRQUFBLG1CQUFtQixHQUEyQjtJQUN6RCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLO0lBQzNGLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLO0lBQ3JGLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLO0lBQ3ZGLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixF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QUFxQixFQUFFLElBQUksRUFBRSxJQUFJLFNBQVM7UUFDdkUsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksU0FBUztRQUNqRCxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTO1FBQzdCLGlCQUFpQjtRQUNqQixrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLFNBQVM7UUFDckUsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksU0FBUztRQUMvQyxzQkFBc0IsRUFBRSxzQkFBc0IsSUFBSSxTQUFTO1FBQzNELGNBQWM7UUFDZCx1QkFBdUIsRUFBRSx1QkFBdUIsSUFBSSxTQUFTO1FBQzdELE9BQU8sRUFBRSxhQUFhO0tBQ3ZCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPQ0kgQ29uZmlndXJhdGlvblxuICpcbiAqIFNldCB0aGVzZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHVwZGF0ZSBkZWZhdWx0czpcbiAqIC0gT0NJX0NPTVBBUlRNRU5UX0lEXG4gKiAtIE9DSV9URU5BTkNZX0lEXG4gKiAtIE9DSV9SRUdJT05cbiAqIC0gT0NJX05BTUVTUEFDRSAoaWYgdW5zZXQsIG9idGFpbmVkIHZpYSBPQ0kgU0RLIGdldE5hbWVzcGFjZSlcbiAqIC0gT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgKGZvciBPQ0lSOyBtdXN0IGJlIG5vbi1yb290IGZvciBmdWxsIHN0YWNrKVxuICogLSBPQ0lfRlVOQ1RJT05fQVBQX05BTUUgKEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiBuYW1lOyBkZWZhdWx0IGVtcHR5KVxuICogLSBPQ0lfRlVOQ1RJT05fTkFNRSAoRnVuY3Rpb24gbmFtZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX0hBTkRMRVIgKEphdmEgRkRLIENNRCBoYW5kbGVyLCBlLmcuIGNvbS5leGFtcGxlLkhhbmRsZXI6OmhhbmRsZVJlcXVlc3Q7IGZyb20gZnVuYy55YW1sIGNtZC9oYW5kbGVyIGlmIHVuc2V0KVxuICogLSBPQ0lfRlVOQ1RJT05fSkFSX1BBVEggKFBhdGggdG8gSkFSIG9yIHByb2plY3QgZGlyIGZvciBmdW5jdGlvbiBpbWFnZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX01FTU9SWV9NQiAoZnVuY3Rpb24gbWVtb3J5IGluIE1COyBmcm9tIGZ1bmMueWFtbCBtZW1vcnkgaWYgdW5zZXQpXG4gKiAtIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMgKGZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kczsgZnJvbSBmdW5jLnlhbWwgdGltZW91dCBpZiB1bnNldClcbiAqIC0gT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nIGZvciBmdW5jdGlvbiBjb25maWcvZW52OyBtZXJnZWQgd2l0aCBmdW5jLnlhbWwgY29uZmlnKVxuICogLSBPQ0lfQVBJR0FURVdBWV9ERVBMT1lNRU5UX0pTT04gKHBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT047IGRlZmF1bHQgcHJvamVjdCByb290IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbilcbiAqIC0gT0NES19QUk9KRUNUX0RJUiAoc2V0IGJ5IG9jZGsgQ0xJIHRvIGNhbGxlciBjd2Q7IHVzZWQgdG8gZGlzY292ZXIgZnVuYy55YW1sIGFuZCB0YXJnZXQvKVxuICogLSBPQ0lfU1RBVEVfQlVDS0VUIChmb3IgcmVtb3RlIHN0YXRlKVxuICogLSBPQ0lfU1RBVEVfQkFDS0VORF9UWVBFIChvY2l8aHR0cHxsb2NhbClcbiAqXG4gKiBXaGVuIE9DREtfUFJPSkVDVF9ESVIgaXMgc2V0IChlLmcuIHJ1bm5pbmcgYG5weCBvY2RrIGRlcGxveWAgZnJvbSBhIEphdmEgcHJvamVjdCksIGNvbmZpZ1xuICogZGlzY292ZXJzIGVpdGhlciB0YXJnZXQvKi5qYXIgb3IgcG9tLnhtbCtzcmMvIChhbmQgb3B0aW9uYWxseSBmdW5jLnlhbWwgbmFtZSwgdmVyc2lvbiwgY21kL2hhbmRsZXIpLlxuICogTm8gRG9ja2VyZmlsZSBpcyByZXF1aXJlZOKAlHRoZSBzdGFjayBnZW5lcmF0ZXMgb25lIGluIGxvY2FsLWV4ZWMgKGV4Y2x1ZGluZyBub2RlX21vZHVsZXMgdmlhIC5kb2NrZXJpZ25vcmUpLFxuICogdGhlbiBidWlsZHMsIHRhZ3MgKGZyb20gZnVuYy55YW1sIHZlcnNpb24pLCBhbmQgcHVzaGVzIHRvIE9DSVIuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICdvY2ktY29tbW9uJztcbmltcG9ydCAqIGFzIG9iamVjdHN0b3JhZ2UgZnJvbSAnb2NpLW9iamVjdHN0b3JhZ2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUJhY2tlbmRDb25maWcge1xuICB0eXBlOiAnb2NpJyB8ICdodHRwJyB8ICdsb2NhbCc7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB1cGRhdGVNZXRob2Q/OiBzdHJpbmc7XG4gIGxvY2tBZGRyZXNzPzogc3RyaW5nO1xuICB1bmxvY2tBZGRyZXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUNvbmZpZyB7XG4gIGNvbXBhcnRtZW50SWQ6IHN0cmluZztcbiAgb2NpckNvbXBhcnRtZW50SWQ/OiBzdHJpbmc7XG4gIHRlbmFuY3lJZDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQXBwTmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIFBhdGggdG8gSkFSIG9yIERvY2tlcmZpbGUgY29udGV4dCBmb3IgZnVuY3Rpb24gaW1hZ2U7IGVtcHR5ID0gbm8gYnVpbGQvZGVwbG95LiAqL1xuICBmdW5jdGlvbkphclBhdGg/OiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhcmdldC8gKGRpc2NvdmVyZWQ7IERvY2tlcmZpbGUgaXMgZ2VuZXJhdGVkIGluIGxvY2FsLWV4ZWMpLiAqL1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgLyoqIEltYWdlIHRhZyBmb3IgT0NJUiAoZnJvbSBmdW5jLnlhbWwgdmVyc2lvbiBvciBPQ0lfSU1BR0VfVEFHOyBkZWZhdWx0ICdsYXRlc3QnKS4gKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIC8qKiBKYXZhIEZESyBDTUQgaGFuZGxlciAoZnJvbSBmdW5jLnlhbWwgY21kL2hhbmRsZXIgb3IgT0NJX0ZVTkNUSU9OX0hBTkRMRVI7IGRlZmF1bHQgYmVsb3cpLiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBkZXBsb3kgdXNlcyBhIHRoaW4gRG9ja2VyZmlsZSAoQ09QWSB0YXJnZXQvKi5qYXIgb25seSk7IGZ1bGwgTWF2ZW4gYnVpbGQgb25seSBpbiByZWRlcGxveTpmdW5jdGlvbi4gKi9cbiAgdXNlVGhpbkRvY2tlcmZpbGU/OiBib29sZWFuO1xuICBvY2lyUmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiBtZW1vcnkgaW4gTUIgKDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzIpLiBGcm9tIGZ1bmMueWFtbCBtZW1vcnkgb3IgT0NJX0ZVTkNUSU9OX01FTU9SWV9NQi4gKi9cbiAgZnVuY3Rpb25NZW1vcnlNYj86IHN0cmluZztcbiAgLyoqIEZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kcyAoMeKAkzMwMCkuIEZyb20gZnVuYy55YW1sIHRpbWVvdXQgb3IgT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUy4gKi9cbiAgZnVuY3Rpb25UaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIEZ1bmN0aW9uIGNvbmZpZy9lbnYga2V5LXZhbHVlLiBGcm9tIGZ1bmMueWFtbCBjb25maWcgb3IgT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nKS4gKi9cbiAgZnVuY3Rpb25Db25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogUGF0aCB0byBBUEkgR2F0ZXdheSBkZXBsb3ltZW50IHNwZWMgSlNPTiAocm91dGVzKS4gVXNlIE9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTiBvciBkZWZhdWx0IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBpbiBwcm9qZWN0IHJvb3QuICovXG4gIGFwaUd3RGVwbG95bWVudEpzb25QYXRoPzogc3RyaW5nO1xuICBiYWNrZW5kPzogT2NpQmFja2VuZENvbmZpZztcbn1cblxuY29uc3QgREVGQVVMVF9BUElHV19ERVBMT1lNRU5UX0pTT04gPSBKU09OLnN0cmluZ2lmeShcbiAge1xuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnL3twYXRoKn0nLFxuICAgICAgICBtZXRob2RzOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgIHR5cGU6ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgIGZ1bmN0aW9uSWQ6ICcke2Z1bmN0aW9uX2lkfScsXG4gICAgICAgICAgcmVhZFRpbWVvdXRJblNlY29uZHM6IDMwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBudWxsLFxuICAyXG4pO1xuXG4vKiogT0NJUiBzaG9ydCByZWdpb24ga2V5cyAoZS5nLiBldS1mcmFua2Z1cnQtMSAtPiBmcmEpLiBVc2VkIHNvIGxvZ2luLCBidWlsZCwgcHVzaCBhbmQgZnVuY3Rpb24gaW1hZ2UgYWxsIHVzZSBzYW1lIHJlZ2lzdHJ5IGhvc3QuICovXG5leHBvcnQgY29uc3QgUkVHSU9OX1RPX09DSVJfSE9TVDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ2V1LWZyYW5rZnVydC0xJzogJ2ZyYScsICd1cy1waG9lbml4LTEnOiAncGh4JywgJ3VzLWFzaGJ1cm4tMSc6ICdpYWQnLCAndWstbG9uZG9uLTEnOiAnbGhyJyxcbiAgJ2FwLXRva3lvLTEnOiAnbnJ0JywgJ2FwLW11bWJhaS0xJzogJ2JvbScsICdhcC1zZW91bC0xJzogJ2ljbicsICdjYS10b3JvbnRvLTEnOiAneXl6JyxcbiAgJ3NhLXNhb3BhdWxvLTEnOiAnZ3J1JywgJ2FwLXN5ZG5leS0xJzogJ3N5ZCcsICdldS16dXJpY2gtMSc6ICd6cmgnLCAnbWUtZHViYWktMSc6ICdkeGInLFxuICAnYXAtb3Nha2EtMSc6ICdraXgnLCAnZXUtYW1zdGVyZGFtLTEnOiAnYW1zJywgJ2FwLXNpbmdhcG9yZS0xJzogJ3NpbicsICdhcC1oeWRlcmFiYWQtMSc6ICdoeWQnLFxuICAnZXUtbWlsYW4tMSc6ICdteHAnLCAnc2Etc2FudGlhZ28tMSc6ICdzY2wnLCAnYXAtbWVsYm91cm5lLTEnOiAnbWVsJywgJ2V1LXN0b2NraG9sbS0xJzogJ2FybicsXG4gICdtZS1qZWRkYWgtMSc6ICdqZWQnLCAnYWYtam9oYW5uZXNidXJnLTEnOiAnam5iJywgJ2lsLWplcnVzYWxlbS0xJzogJ3RsdicsICdteC1xdWVyZXRhcm8tMSc6ICdxcm8nLFxuICAnZXUtbWFyc2VpbGxlLTEnOiAnbXJzJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvY2lySG9zdEtleShyZWdpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBSRUdJT05fVE9fT0NJUl9IT1NUW3JlZ2lvbl0gPz8gcmVnaW9uO1xufVxuXG4vKiogRnVsbCBPQ0lSIGltYWdlIFVSTCBmb3IgdGhlIGZ1bmN0aW9uIChyZWdpc3RyeS9uYW1lc3BhY2UvcmVwbzp0YWcpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9jaUltYWdlVXJsKGNvbmZpZzogT2NpQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnaXN0cnkgPSBgJHtvY2lySG9zdEtleShjb25maWcucmVnaW9uKX0ub2Npci5pb2A7XG4gIGNvbnN0IHJlcG8gPSBjb25maWcub2NpclJlcG9zaXRvcnlOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUgfHwgJ29jaS1mdW5jdGlvbic7XG4gIGNvbnN0IHRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgcmV0dXJuIGAke3JlZ2lzdHJ5fS8ke2NvbmZpZy5uYW1lc3BhY2V9LyR7cmVwb306JHt0YWd9YDtcbn1cblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBmdW5jdGlvbiBuYW1lIGZyb20gZnVuYy55YW1sIChPQ0kgRnVuY3Rpb25zIGZvcm1hdCkuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJuYW1lOlwiIGxpbmUsIHRyaW1tZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sTmFtZShwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbmFtZTpcXHMqW1wiJ10/KFteXCInXFxzXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKG0pIHJldHVybiBtWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY21kL2hhbmRsZXIgZnJvbSBmdW5jLnlhbWwgKE9DSS9GbiBmb3JtYXQpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgXCJjbWQ6XCIgb3IgXCJoYW5kbGVyOlwiIGxpbmUsIHRyaW1tZWQ7IHVzZWQgYXMgRG9ja2VyIENNRCBmb3IgSmF2YSBGREsuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgY21kTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eXFxzKmNtZDpcXHMqW1wiJ10/KFteXCInXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKGNtZE1hdGNoKSByZXR1cm4gY21kTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgY29uc3QgaGFuZGxlck1hdGNoID0gY29udGVudC5tYXRjaCgvXlxccypoYW5kbGVyOlxccypbXCInXT8oW15cIidcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAoaGFuZGxlck1hdGNoKSByZXR1cm4gaGFuZGxlck1hdGNoWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdmVyc2lvbiBmcm9tIGZ1bmMueWFtbCAodXNlZCBhcyBPQ0lSIGltYWdlIHRhZykuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJ2ZXJzaW9uOlwiIGxpbmUsIHRyaW1tZWQ7IHNhbml0aXplZCBmb3IgRG9ja2VyIHRhZyAoYS16QS1aMC05Xy4tKS5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxWZXJzaW9uKHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ2Z1bmMueWFtbCcpO1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4Jyk7XG4gICAgICBjb25zdCBtID0gY29udGVudC5tYXRjaCgvXlxccyp2ZXJzaW9uOlxccypbXCInXT8oW15cIidcXHNcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCByYXcgPSBtWzFdLnRyaW0oKTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0gcmF3LnJlcGxhY2UoL1teYS16QS1aMC05Xy4tXS9nLCAnLScpLnJlcGxhY2UoLy0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkIHx8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFZBTElEX01FTU9SWV9NQiA9IG5ldyBTZXQoWzEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzJdKTtcblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBtZW1vcnkgKE1CKSBmcm9tIGZ1bmMueWFtbC4gT0NJIGFsbG93cyAxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIHZhbGlkOyBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbE1lbW9yeShwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbWVtb3J5OlxccyooXFxkKylcXHMqJC9tKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChtWzFdLCAxMCk7XG4gICAgICAgIGlmIChWQUxJRF9NRU1PUllfTUIuaGFzKG4pKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdGltZW91dCAoc2Vjb25kcykgZnJvbSBmdW5jLnlhbWwuIE9DSSBtYXggaXMgMzAwLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIGluIHJhbmdlIDHigJMzMDA7IG90aGVyd2lzZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sVGltZW91dChwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqdGltZW91dDpcXHMqKFxcZCspXFxzKiQvbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQobVsxXSwgMTApO1xuICAgICAgICBpZiAobiA+PSAxICYmIG4gPD0gMzAwKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY29uZmlnIChrZXktdmFsdWUgZW52KSBmcm9tIGZ1bmMueWFtbC4gRXhwZWN0cyBhIHRvcC1sZXZlbCBcImNvbmZpZzpcIiBibG9jayB3aXRoIGtleTogdmFsdWUgbGluZXMuXG4gKiBSZXR1cm5zIGEgcmVjb3JkIG9mIHN0cmluZyBrZXlzIGFuZCBzdHJpbmcgdmFsdWVzOyBlbXB0eSBpZiBub25lIG9yIHBhcnNlIGVycm9yLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Db25maWcgPSBmYWxzZTtcbiAgICBjb25zdCBjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkID09PSAnY29uZmlnOicgfHwgL15jb25maWdcXHMqOlxccyokLy50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgIGluQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5Db25maWcpIHtcbiAgICAgICAgaWYgKHRyaW1tZWQgIT09ICcnICYmICFsaW5lLnN0YXJ0c1dpdGgoJyAnKSAmJiAhbGluZS5zdGFydHNXaXRoKCdcXHQnKSkgYnJlYWs7XG4gICAgICAgIGNvbnN0IGt2ID0gbGluZS5tYXRjaCgvXlxccysoW2EtekEtWl9dW2EtekEtWjAtOV8tXSopXFxzKjpcXHMqKC4qKSQvKTtcbiAgICAgICAgaWYgKGt2KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga3ZbMV0udHJpbSgpO1xuICAgICAgICAgIGxldCB2YWwgPSBrdlsyXS50cmltKCk7XG4gICAgICAgICAgaWYgKCh2YWwuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWwuZW5kc1dpdGgoJ1wiJykpIHx8ICh2YWwuc3RhcnRzV2l0aChcIidcIikgJiYgdmFsLmVuZHNXaXRoKFwiJ1wiKSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA/IGNvbmZpZyA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogRW5zdXJlIG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVEZWZhdWx0QXBpR3dEZXBsb3ltZW50SnNvbihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24nKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwLCBERUZBVUxUX0FQSUdXX0RFUExPWU1FTlRfSlNPTiwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuY29uc3QgVEFJTF9GVU5DVElPTl9MT0dTX1NDUklQVCA9IGAjIS91c3IvYmluL2VudiBub2RlXG4vKipcbiAqIFRhaWwgT0NJIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9ncy4gR2VuZXJhdGVkIGJ5IE9DREsuXG4gKiBSdW4gZnJvbSBwcm9qZWN0IHJvb3QgYWZ0ZXIgZGVwbG95LiBSZXF1aXJlczogT0NJIENMSSwgT0NJX0NPTVBBUlRNRU5UX0lELCBhbmQgLm9jZGstb3V0cHV0cy5qc29uIChjcmVhdGVkIG9uIGRlcGxveSkuXG4gKi9cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IHNwYXduU3luYyB9ID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuXG5jb25zdCBkaXIgPSBwcm9jZXNzLmVudi5PQ0RLX1BST0pFQ1RfRElSIHx8IF9fZGlybmFtZTtcbmNvbnN0IG91dHB1dHNQYXRoID0gcGF0aC5qb2luKGRpciwgJy5vY2RrLW91dHB1dHMuanNvbicpO1xuaWYgKCFmcy5leGlzdHNTeW5jKG91dHB1dHNQYXRoKSkge1xuICBjb25zb2xlLmVycm9yKCdSdW4gZGVwbG95IGZpcnN0IHRvIGNyZWF0ZSAub2Nkay1vdXRwdXRzLmpzb24gaW4gdGhlIHByb2plY3Qgcm9vdC4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuY29uc3QgY29tcElkID0gcHJvY2Vzcy5lbnYuT0NJX0NPTVBBUlRNRU5UX0lEIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9PQ0lEO1xuaWYgKCFjb21wSWQpIHtcbiAgY29uc29sZS5lcnJvcignU2V0IE9DSV9DT01QQVJUTUVOVF9JRCAob3IgT0NJX0NPTVBBUlRNRU5UX09DSUQpLicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5sZXQgb3V0O1xudHJ5IHtcbiAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKG91dHB1dHNQYXRoLCAndXRmOCcpLnJlcGxhY2UoL15cXHVGRUZGLywgJycpLnRyaW0oKTtcbiAgY29uc3QgZmlyc3QgPSByYXcuaW5kZXhPZigneycpO1xuICBjb25zdCBsYXN0ID0gcmF3Lmxhc3RJbmRleE9mKCd9Jyk7XG4gIGlmIChmaXJzdCA9PT0gLTEgfHwgbGFzdCA8PSBmaXJzdCkgdGhyb3cgbmV3IEVycm9yKCdObyBKU09OJyk7XG4gIG91dCA9IEpTT04ucGFyc2UocmF3LnNsaWNlKGZpcnN0LCBsYXN0ICsgMSkpO1xufSBjYXRjaCAoZSkge1xuICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgLm9jZGstb3V0cHV0cy5qc29uLiBSdW4gZGVwbG95IGZpcnN0LicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5jb25zdCBvdXRwdXRzID0gb3V0LmxvZ19ncm91cF9pZCAhPSBudWxsID8gb3V0IDogT2JqZWN0LnZhbHVlcyhvdXQpLmZpbmQoKHYpID0+IHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICh2LmxvZ19ncm91cF9pZCAhPSBudWxsIHx8IHYuZXhlY3V0aW9uX2xvZ19pZCAhPSBudWxsKSkgfHwgb3V0O1xuZnVuY3Rpb24gdmFsKG8sIGspIHtcbiAgY29uc3QgdiA9IG9ba107XG4gIGlmICghdikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgcmV0dXJuIHY7XG4gIGlmICh2ICYmIHR5cGVvZiB2LnZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHYudmFsdWU7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5jb25zdCBsb2dHcm91cElkID0gdmFsKG91dHB1dHMsICdsb2dfZ3JvdXBfaWQnKTtcbmNvbnN0IGV4ZWN1dGlvbkxvZ0lkID0gdmFsKG91dHB1dHMsICdleGVjdXRpb25fbG9nX2lkJyk7XG5pZiAoIWxvZ0dyb3VwSWQgfHwgIWV4ZWN1dGlvbkxvZ0lkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ2xvZ19ncm91cF9pZCBvciBleGVjdXRpb25fbG9nX2lkIG1pc3NpbmcgaW4gLm9jZGstb3V0cHV0cy5qc29uJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbmNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5jb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSAxMCAqIDYwICogMTAwMCk7XG5jb25zdCB0aW1lU3RhcnQgPSBzdGFydC50b0lTT1N0cmluZygpO1xuY29uc3QgdGltZUVuZCA9IG5vdy50b0lTT1N0cmluZygpO1xuY29uc3Qgc2NvcGUgPSBjb21wSWQgKyAnLycgKyBsb2dHcm91cElkICsgJy8nICsgZXhlY3V0aW9uTG9nSWQ7XG5jb25zdCBxdWVyeSA9ICdzZWFyY2ggXCInICsgc2NvcGUgKyAnXCIgfCBzb3J0IGJ5IGRhdGV0aW1lIGRlc2MgfCBsaW1pdCA1MCc7XG5jb25zdCByID0gc3Bhd25TeW5jKCdvY2knLCBbJ2xvZ2dpbmctc2VhcmNoJywgJ3NlYXJjaC1sb2dzJywgJy0tc2VhcmNoLXF1ZXJ5JywgcXVlcnksICctLXRpbWUtc3RhcnQnLCB0aW1lU3RhcnQsICctLXRpbWUtZW5kJywgdGltZUVuZF0sIHsgc3RkaW86ICdpbmhlcml0Jywgc2hlbGw6IHRydWUgfSk7XG5wcm9jZXNzLmV4aXQoci5zdGF0dXMgPz8gMSk7XG5gO1xuXG4vKiogRW5zdXJlIHRhaWwtZnVuY3Rpb24tbG9ncy5qcyBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVUYWlsRnVuY3Rpb25Mb2dzU2NyaXB0KHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhaWwtZnVuY3Rpb24tbG9ncy5qcycpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHAsIFRBSUxfRlVOQ1RJT05fTE9HU19TQ1JJUFQsICd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbi8qKiBSZWFkIHRlbmFuY3kgYW5kIHJlZ2lvbiBmcm9tIE9DSSBDTEkgY29uZmlnLiBEZWZhdWx0IGZpbGU6IH4vLm9jaS9jb25maWcsIGRlZmF1bHQgcHJvZmlsZTogREVGQVVMVC4gKi9cbmZ1bmN0aW9uIHJlYWRUZW5hbmN5QW5kUmVnaW9uRnJvbUNsaUNvbmZpZygpOiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSByZXR1cm4ge307XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Qcm9maWxlID0gZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0OiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9ID0ge307XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdbJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgIGluUHJvZmlsZSA9IHRyaW1tZWQuc2xpY2UoMSwgLTEpID09PSBwcm9maWxlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Qcm9maWxlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGVxID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgICBpZiAoZXEgPD0gMCkgY29udGludWU7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZC5zbGljZShlcSArIDEpLnRyaW0oKTtcbiAgICAgIGlmIChrZXkgPT09ICd0ZW5hbmN5JykgcmVzdWx0LnRlbmFuY3kgPSB2YWx1ZTtcbiAgICAgIGlmIChrZXkgPT09ICdyZWdpb24nKSByZXN1bHQucmVnaW9uID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKiogR2V0IG9iamVjdCBzdG9yYWdlIG5hbWVzcGFjZSB2aWEgT0NJIFNESyAoc2FtZSBhcyBcIm9jaSBvcyBucyBnZXRcIikuIFVzZXMgfi8ub2NpL2NvbmZpZywgREVGQVVMVCBwcm9maWxlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgY29tbW9uLkNvbmZpZ0ZpbGVBdXRoZW50aWNhdGlvbkRldGFpbHNQcm92aWRlcihjb25maWdQYXRoLCBwcm9maWxlKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgb2JqZWN0c3RvcmFnZS5PYmplY3RTdG9yYWdlQ2xpZW50KHsgYXV0aGVudGljYXRpb25EZXRhaWxzUHJvdmlkZXI6IHByb3ZpZGVyIH0pO1xuICAgIGNsaWVudC5yZWdpb25JZCA9IHJlZ2lvbjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXROYW1lc3BhY2Uoe1xuICAgICAgY29tcGFydG1lbnRJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UudmFsdWU/LnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgYSBKQVIgdW5kZXIgdGFyZ2V0LyAocHJlZmVyIG9uZSBtYXRjaGluZyBuYW1lLCBlbHNlIGZpcnN0IC5qYXIpLlxuICovXG5mdW5jdGlvbiBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpcjogc3RyaW5nLCBmdW5jdGlvbk5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhcmdldCcpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRhcmdldERpcik7XG4gICAgY29uc3QgamFycyA9IGZpbGVzLmZpbHRlcigoZikgPT4gZi5lbmRzV2l0aCgnLmphcicpICYmICFmLmVuZHNXaXRoKCctc291cmNlcy5qYXInKSk7XG4gICAgaWYgKGphcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gamFycy5maW5kKChqKSA9PiBqLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIGlmIChtYXRjaCkgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIGphcnNbMF0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBUcnVlIGlmIHByb2plY3QgaGFzIHBvbS54bWwgYW5kIHNyYy8gKE1hdmVuIHNvdXJjZSBsYXlvdXQgZm9yIGJ1aWxkLWZyb20tc291cmNlIERvY2tlcmZpbGUpLiAqL1xuZnVuY3Rpb24gaGFzUG9tQW5kU3JjKHByb2plY3REaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwb20gPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3BvbS54bWwnKTtcbiAgY29uc3Qgc3JjID0gcGF0aC5qb2luKHByb2plY3REaXIsICdzcmMnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwb20pICYmIGZzLmV4aXN0c1N5bmMoc3JjKSAmJiBmcy5zdGF0U3luYyhzcmMpLmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNjb3ZlckZyb21GdW5jWWFtbEFuZFRhcmdldCgpOiB7XG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbiAgZnVuY3Rpb25BcHBOYW1lPzogc3RyaW5nO1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIGhhbmRsZXI/OiBzdHJpbmc7XG4gIHVzZVRoaW5Eb2NrZXJmaWxlPzogYm9vbGVhbjtcbiAgbWVtb3J5TWI/OiBudW1iZXI7XG4gIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufSB7XG4gIGxldCBwcm9qZWN0RGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUj8udHJpbSgpO1xuICBpZiAoIXByb2plY3REaXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLm9jZGstcHJvamVjdC1kaXInKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBwcm9qZWN0RGlyID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4JykudHJpbSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG4gIGlmICghcHJvamVjdERpciAmJiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSkge1xuICAgIGNvbnN0IHAgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRILnRyaW0oKSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHByb2plY3REaXIgPSBmcy5zdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpID8gcCA6IHBhdGguZGlybmFtZShwKTtcbiAgfVxuICBpZiAoIXByb2plY3REaXIpIHByb2plY3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBwcm9qZWN0RGlyID0gcHJvamVjdERpciA/IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyKSA6ICcnO1xuICBpZiAoIXByb2plY3REaXIgfHwgIWZzLmV4aXN0c1N5bmMocHJvamVjdERpcikpIHJldHVybiB7fTtcblxuICBjb25zdCBuYW1lRnJvbVlhbWwgPSBnZXRGdW5jWWFtbE5hbWUocHJvamVjdERpcik7XG4gIGNvbnN0IGphclBhdGggPSBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpciwgbmFtZUZyb21ZYW1sIHx8IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhhc1NvdXJjZSA9IGhhc1BvbUFuZFNyYyhwcm9qZWN0RGlyKTtcbiAgaWYgKCFqYXJQYXRoICYmICFoYXNTb3VyY2UpIHJldHVybiB7fTtcblxuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fTkFNRT8udHJpbSgpIHx8IG5hbWVGcm9tWWFtbCB8fCBwYXRoLmJhc2VuYW1lKHByb2plY3REaXIpIHx8ICdvY2ktZnVuY3Rpb24nO1xuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBnZXRGdW5jWWFtbFZlcnNpb24ocHJvamVjdERpcik7XG4gIGNvbnN0IGhhbmRsZXIgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSEFORExFUj8udHJpbSgpIHx8IGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyKTtcbiAgY29uc3QgdXNlVGhpbkRvY2tlcmZpbGUgPSAhIWphclBhdGg7XG4gIGNvbnN0IG1lbW9yeU1iID0gZ2V0RnVuY1lhbWxNZW1vcnkocHJvamVjdERpcik7XG4gIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gZ2V0RnVuY1lhbWxUaW1lb3V0KHByb2plY3REaXIpO1xuICBjb25zdCBjb25maWcgPSBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyKTtcblxuICByZXR1cm4ge1xuICAgIGZ1bmN0aW9uTmFtZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRT8udHJpbSgpIHx8IGZ1bmN0aW9uTmFtZSxcbiAgICBkb2NrZXJDb250ZXh0UGF0aDogcGF0aC5yZXNvbHZlKHByb2plY3REaXIpLFxuICAgIGltYWdlVGFnOiBpbWFnZVRhZyB8fCB1bmRlZmluZWQsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgbWVtb3J5TWIsXG4gICAgdGltZW91dFNlY29uZHMsXG4gICAgY29uZmlnLFxuICB9O1xufVxuXG5jb25zdCBiYWNrZW5kVHlwZSA9IChwcm9jZXNzLmVudi5PQ0lfU1RBVEVfQkFDS0VORF9UWVBFIHx8ICdsb2NhbCcpIGFzICdvY2knIHwgJ2h0dHAnIHwgJ2xvY2FsJztcblxuY29uc3QgYmFja2VuZENvbmZpZzogT2NpQmFja2VuZENvbmZpZyB8IHVuZGVmaW5lZCA9IGJhY2tlbmRUeXBlID09PSAnbG9jYWwnXG4gID8gdW5kZWZpbmVkXG4gIDogYmFja2VuZFR5cGUgPT09ICdvY2knXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdvY2knLFxuICAgICAgICBidWNrZXQ6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9CVUNLRVQgfHwgJ3RmLXN0YXRlJyxcbiAgICAgICAga2V5OiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfS0VZIHx8ICdmdW5jdGlvbi1zdGFjay90ZXJyYWZvcm0udGZzdGF0ZScsXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIHR5cGU6ICdodHRwJyxcbiAgICAgICAgYWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfQUREUkVTUyB8fCAnJyxcbiAgICAgICAgdXBkYXRlTWV0aG9kOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VUERBVEVfTUVUSE9EIHx8ICdQVVQnLFxuICAgICAgICBsb2NrQWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfTE9DS19BRERSRVNTLFxuICAgICAgICB1bmxvY2tBZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VTkxPQ0tfQUREUkVTUyxcbiAgICAgIH07XG5cbi8qKlxuICogTG9hZCBPQ0kgY29uZmlnIGZyb20gZW52IGFuZCBDTEkgY29uZmlnLiBXaGVuIE9DSV9OQU1FU1BBQ0UgaXMgdW5zZXQsIGZldGNoZXMgaXQgdmlhIE9DSSBTREsgKGdldE5hbWVzcGFjZSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPY2lDb25maWcoKTogUHJvbWlzZTxPY2lDb25maWc+IHtcbiAgY29uc3QgY2xpQ29uZmlnID0gcmVhZFRlbmFuY3lBbmRSZWdpb25Gcm9tQ2xpQ29uZmlnKCk7XG4gIGNvbnN0IGNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfSUQ/LnRyaW0oKSB8fCAnb2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uJztcbiAgY29uc3Qgb2NpckNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfT0NJUl9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IGNvbXBhcnRtZW50SWQ7XG4gIGNvbnN0IHRlbmFuY3lJZCA9IHByb2Nlc3MuZW52Lk9DSV9URU5BTkNZX0lEPy50cmltKCkgfHwgY2xpQ29uZmlnLnRlbmFuY3k/LnRyaW0oKSB8fCAnb2NpZDEudGVuYW5jeS5vYzEuLmFhYWFhYWEuLi4nO1xuICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5PQ0lfUkVHSU9OPy50cmltKCkgfHwgY2xpQ29uZmlnLnJlZ2lvbj8udHJpbSgpIHx8ICdldS1mcmFua2Z1cnQtMSc7XG5cbiAgaWYgKCFvY2lyQ29tcGFydG1lbnRJZCB8fCBvY2lyQ29tcGFydG1lbnRJZC5pbmNsdWRlcygncm9vdCcpKSB7XG4gICAgY29uc29sZS53YXJuKCfimqDvuI8gIFdBUk5JTkc6IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIG5vdCBzZXQgb3Igc2V0IHRvIHJvb3QgY29tcGFydG1lbnQuJyk7XG4gICAgY29uc29sZS53YXJuKCcgICBQbGVhc2Ugc2V0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIHRvIHlvdXIgaG9tZSBjb21wYXJ0bWVudCBPQ0lELicpO1xuICAgIGNvbnNvbGUud2FybignICAgRXhhbXBsZTogZXhwb3J0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEPVwib2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uXCInKTtcbiAgfVxuXG4gIGxldCBuYW1lc3BhY2UgPSBwcm9jZXNzLmVudi5PQ0lfTkFNRVNQQUNFPy50cmltKCk7XG4gIGlmICghbmFtZXNwYWNlIHx8IG5hbWVzcGFjZSA9PT0gJ3lvdXItbmFtZXNwYWNlJykge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkLCByZWdpb24pO1xuICAgIGlmIChyZXNvbHZlZCkgbmFtZXNwYWNlID0gcmVzb2x2ZWQ7XG4gICAgZWxzZSBpZiAoIW5hbWVzcGFjZSkgbmFtZXNwYWNlID0gJ3lvdXItbmFtZXNwYWNlJztcbiAgICBpZiAobmFtZXNwYWNlID09PSAneW91ci1uYW1lc3BhY2UnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyAgT0NJX05BTUVTUEFDRSBub3Qgc2V0IGFuZCBTREsgY291bGQgbm90IHJlc29sdmUgaXQuIFNldCBPQ0lfTkFNRVNQQUNFIG9yIHJ1biBcIm9jaSBzZXR1cCBjb25maWdcIi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkaXNjb3ZlcmVkID0gZGlzY292ZXJGcm9tRnVuY1lhbWxBbmRUYXJnZXQoKTtcblxuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBkaXNjb3ZlcmVkLmltYWdlVGFnIHx8ICdsYXRlc3QnO1xuXG4gIGxldCBkb2NrZXJDb250ZXh0UGF0aCA9IGRpc2NvdmVyZWQuZG9ja2VyQ29udGV4dFBhdGg7XG4gIGlmICghZG9ja2VyQ29udGV4dFBhdGggJiYgcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkpIHtcbiAgICBjb25zdCBwID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9KQVJfUEFUSC50cmltKCkpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBkb2NrZXJDb250ZXh0UGF0aCA9IGZzLnN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkgPyBwIDogcGF0aC5kaXJuYW1lKHApO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlciA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9IQU5ETEVSPy50cmltKCkgfHwgZGlzY292ZXJlZC5oYW5kbGVyO1xuICBjb25zdCB1c2VUaGluRG9ja2VyZmlsZSA9IGRpc2NvdmVyZWQudXNlVGhpbkRvY2tlcmZpbGUgPz8gZmFsc2U7XG5cbiAgY29uc3QgbWVtb3J5RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX01FTU9SWV9NQj8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvbk1lbW9yeU1iID0gbWVtb3J5RW52XG4gICAgPyBTdHJpbmcocGFyc2VJbnQobWVtb3J5RW52LCAxMCkpXG4gICAgOiAoZGlzY292ZXJlZC5tZW1vcnlNYiAhPSBudWxsID8gU3RyaW5nKGRpc2NvdmVyZWQubWVtb3J5TWIpIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCB0aW1lb3V0RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUz8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvblRpbWVvdXRTZWNvbmRzID0gdGltZW91dEVudlxuICAgID8gcGFyc2VJbnQodGltZW91dEVudiwgMTApXG4gICAgOiBkaXNjb3ZlcmVkLnRpbWVvdXRTZWNvbmRzO1xuXG4gIGxldCBmdW5jdGlvbkNvbmZpZyA9IGRpc2NvdmVyZWQuY29uZmlnO1xuICBjb25zdCBjb25maWdFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fQ09ORklHPy50cmltKCk7XG4gIGlmIChjb25maWdFbnYpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb25maWdFbnYpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBmdW5jdGlvbkNvbmZpZyA9IHsgLi4uZnVuY3Rpb25Db25maWcsIC4uLnBhcnNlZCB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlIGludmFsaWQgSlNPTlxuICAgIH1cbiAgfVxuICBpZiAoZnVuY3Rpb25Db25maWcgJiYgT2JqZWN0LmtleXMoZnVuY3Rpb25Db25maWcpLmxlbmd0aCA9PT0gMCkgZnVuY3Rpb25Db25maWcgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYXBpR3dEZXBsb3ltZW50SnNvbkVudiA9IHByb2Nlc3MuZW52Lk9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTj8udHJpbSgpO1xuICBjb25zdCBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCA9IGFwaUd3RGVwbG95bWVudEpzb25FbnZcbiAgICA/IHBhdGgucmVzb2x2ZShhcGlHd0RlcGxveW1lbnRKc29uRW52KVxuICAgIDogZG9ja2VyQ29udGV4dFBhdGhcbiAgICAgID8gZW5zdXJlRGVmYXVsdEFwaUd3RGVwbG95bWVudEpzb24oZG9ja2VyQ29udGV4dFBhdGgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgZW5zdXJlVGFpbEZ1bmN0aW9uTG9nc1NjcmlwdChkb2NrZXJDb250ZXh0UGF0aCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbXBhcnRtZW50SWQsXG4gICAgb2NpckNvbXBhcnRtZW50SWQ6IG9jaXJDb21wYXJ0bWVudElkIHx8IHVuZGVmaW5lZCxcbiAgICB0ZW5hbmN5SWQsXG4gICAgcmVnaW9uLFxuICAgIG5hbWVzcGFjZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRSA/PyBkaXNjb3ZlcmVkLmZ1bmN0aW9uQXBwTmFtZSA/PyAnJyxcbiAgICBmdW5jdGlvbk5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9OQU1FID8/IGRpc2NvdmVyZWQuZnVuY3Rpb25OYW1lID8/ICcnLFxuICAgIGZ1bmN0aW9uSmFyUGF0aDogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkgfHwgdW5kZWZpbmVkLFxuICAgIGRvY2tlckNvbnRleHRQYXRoOiBkb2NrZXJDb250ZXh0UGF0aCB8fCB1bmRlZmluZWQsXG4gICAgaW1hZ2VUYWcsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgb2NpclJlcG9zaXRvcnlOYW1lOiBwcm9jZXNzLmVudi5PQ0lfT0NJUl9SRVBPU0lUT1JZX05BTUUgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uTWVtb3J5TWI6IGZ1bmN0aW9uTWVtb3J5TWIgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uVGltZW91dFNlY29uZHM6IGZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uQ29uZmlnLFxuICAgIGFwaUd3RGVwbG95bWVudEpzb25QYXRoOiBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCB8fCB1bmRlZmluZWQsXG4gICAgYmFja2VuZDogYmFja2VuZENvbmZpZyxcbiAgfTtcbn1cbiJdfQ==
579
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NvbmZpZy9vY2ktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkVILGtDQUVDO0FBR0Qsd0NBS0M7QUF5WUQsb0NBd0ZDO0FBdGpCRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixtREFBcUM7QUFDckMsaUVBQW1EO0FBMENuRCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xEO0lBQ0UsTUFBTSxFQUFFO1FBQ047WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUNuQyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsRUFBRTthQUN6QjtTQUNGO0tBQ0Y7Q0FDRixFQUNELElBQUksRUFDSixDQUFDLENBQ0YsQ0FBQztBQUVGLHFJQUFxSTtBQUN4SCxRQUFBLG1CQUFtQixHQUEyQjtJQUN6RCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLO0lBQzNGLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLO0lBQ3JGLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLO0lBQ3ZGLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixF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RSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxJQUFJLFNBQVM7UUFDdkUsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksU0FBUztRQUNqRCxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTO1FBQzdCLGlCQUFpQjtRQUNqQixrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLFNBQVM7UUFDckUsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksU0FBUztRQUMvQyxzQkFBc0IsRUFBRSxzQkFBc0IsSUFBSSxTQUFTO1FBQzNELGNBQWM7UUFDZCx1QkFBdUIsRUFBRSx1QkFBdUIsSUFBSSxTQUFTO1FBQzdELE9BQU8sRUFBRSxhQUFhO0tBQ3ZCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPQ0kgQ29uZmlndXJhdGlvblxuICpcbiAqIFNldCB0aGVzZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHVwZGF0ZSBkZWZhdWx0czpcbiAqIC0gT0NJX0NPTVBBUlRNRU5UX0lEXG4gKiAtIE9DSV9URU5BTkNZX0lEXG4gKiAtIE9DSV9SRUdJT05cbiAqIC0gT0NJX05BTUVTUEFDRSAoaWYgdW5zZXQsIG9idGFpbmVkIHZpYSBPQ0kgU0RLIGdldE5hbWVzcGFjZSlcbiAqIC0gT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgKGZvciBPQ0lSOyBtdXN0IGJlIG5vbi1yb290IGZvciBmdWxsIHN0YWNrKVxuICogLSBPQ0lfRlVOQ1RJT05fQVBQX05BTUUgKEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiBuYW1lOyBkZWZhdWx0IGVtcHR5KVxuICogLSBPQ0lfRlVOQ1RJT05fTkFNRSAoRnVuY3Rpb24gbmFtZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX0hBTkRMRVIgKEphdmEgRkRLIENNRCBoYW5kbGVyLCBlLmcuIGNvbS5leGFtcGxlLkhhbmRsZXI6OmhhbmRsZVJlcXVlc3Q7IGZyb20gZnVuYy55YW1sIGNtZC9oYW5kbGVyIGlmIHVuc2V0KVxuICogLSBPQ0lfRlVOQ1RJT05fSkFSX1BBVEggKFBhdGggdG8gSkFSIG9yIHByb2plY3QgZGlyIGZvciBmdW5jdGlvbiBpbWFnZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX01FTU9SWV9NQiAoZnVuY3Rpb24gbWVtb3J5IGluIE1COyBmcm9tIGZ1bmMueWFtbCBtZW1vcnkgaWYgdW5zZXQpXG4gKiAtIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMgKGZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kczsgZnJvbSBmdW5jLnlhbWwgdGltZW91dCBpZiB1bnNldClcbiAqIC0gT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nIGZvciBmdW5jdGlvbiBjb25maWcvZW52OyBtZXJnZWQgd2l0aCBmdW5jLnlhbWwgY29uZmlnKVxuICogLSBPQ0lfQVBJR0FURVdBWV9ERVBMT1lNRU5UX0pTT04gKHBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT047IGRlZmF1bHQgcHJvamVjdCByb290IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbilcbiAqIC0gT0NES19QUk9KRUNUX0RJUiAoc2V0IGJ5IG9jZGsgQ0xJIHRvIGNhbGxlciBjd2Q7IHVzZWQgdG8gZGlzY292ZXIgZnVuYy55YW1sIGFuZCB0YXJnZXQvKVxuICogLSBPQ0lfU1RBVEVfQlVDS0VUIChmb3IgcmVtb3RlIHN0YXRlKVxuICogLSBPQ0lfU1RBVEVfQkFDS0VORF9UWVBFIChvY2l8aHR0cHxsb2NhbClcbiAqXG4gKiBXaGVuIE9DREtfUFJPSkVDVF9ESVIgaXMgc2V0IChlLmcuIHJ1bm5pbmcgYG5weCBvY2RrIGRlcGxveWAgZnJvbSBhIEphdmEgcHJvamVjdCksIGNvbmZpZ1xuICogZGlzY292ZXJzIGVpdGhlciB0YXJnZXQvKi5qYXIgb3IgcG9tLnhtbCtzcmMvIChhbmQgb3B0aW9uYWxseSBmdW5jLnlhbWwgbmFtZSwgdmVyc2lvbiwgY21kL2hhbmRsZXIpLlxuICogTm8gRG9ja2VyZmlsZSBpcyByZXF1aXJlZOKAlHRoZSBzdGFjayBnZW5lcmF0ZXMgb25lIGluIGxvY2FsLWV4ZWMgKGV4Y2x1ZGluZyBub2RlX21vZHVsZXMgdmlhIC5kb2NrZXJpZ25vcmUpLFxuICogdGhlbiBidWlsZHMsIHRhZ3MgKGZyb20gZnVuYy55YW1sIHZlcnNpb24pLCBhbmQgcHVzaGVzIHRvIE9DSVIuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICdvY2ktY29tbW9uJztcbmltcG9ydCAqIGFzIG9iamVjdHN0b3JhZ2UgZnJvbSAnb2NpLW9iamVjdHN0b3JhZ2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUJhY2tlbmRDb25maWcge1xuICB0eXBlOiAnb2NpJyB8ICdodHRwJyB8ICdsb2NhbCc7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB1cGRhdGVNZXRob2Q/OiBzdHJpbmc7XG4gIGxvY2tBZGRyZXNzPzogc3RyaW5nO1xuICB1bmxvY2tBZGRyZXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUNvbmZpZyB7XG4gIGNvbXBhcnRtZW50SWQ6IHN0cmluZztcbiAgb2NpckNvbXBhcnRtZW50SWQ/OiBzdHJpbmc7XG4gIHRlbmFuY3lJZDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQXBwTmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIFBhdGggdG8gSkFSIG9yIERvY2tlcmZpbGUgY29udGV4dCBmb3IgZnVuY3Rpb24gaW1hZ2U7IGVtcHR5ID0gbm8gYnVpbGQvZGVwbG95LiAqL1xuICBmdW5jdGlvbkphclBhdGg/OiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhcmdldC8gKGRpc2NvdmVyZWQ7IERvY2tlcmZpbGUgaXMgZ2VuZXJhdGVkIGluIGxvY2FsLWV4ZWMpLiAqL1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgLyoqIEltYWdlIHRhZyBmb3IgT0NJUiAoZnJvbSBmdW5jLnlhbWwgdmVyc2lvbiBvciBPQ0lfSU1BR0VfVEFHOyBkZWZhdWx0ICdsYXRlc3QnKS4gKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIC8qKiBKYXZhIEZESyBDTUQgaGFuZGxlciAoZnJvbSBmdW5jLnlhbWwgY21kL2hhbmRsZXIgb3IgT0NJX0ZVTkNUSU9OX0hBTkRMRVI7IGRlZmF1bHQgYmVsb3cpLiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBkZXBsb3kgdXNlcyBhIHRoaW4gRG9ja2VyZmlsZSAoQ09QWSB0YXJnZXQvKi5qYXIgb25seSk7IGZ1bGwgTWF2ZW4gYnVpbGQgb25seSBpbiByZWRlcGxveTpmdW5jdGlvbi4gKi9cbiAgdXNlVGhpbkRvY2tlcmZpbGU/OiBib29sZWFuO1xuICBvY2lyUmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiBtZW1vcnkgaW4gTUIgKDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzIpLiBGcm9tIGZ1bmMueWFtbCBtZW1vcnkgb3IgT0NJX0ZVTkNUSU9OX01FTU9SWV9NQi4gKi9cbiAgZnVuY3Rpb25NZW1vcnlNYj86IHN0cmluZztcbiAgLyoqIEZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kcyAoMeKAkzMwMCkuIEZyb20gZnVuYy55YW1sIHRpbWVvdXQgb3IgT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUy4gKi9cbiAgZnVuY3Rpb25UaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIEZ1bmN0aW9uIGNvbmZpZy9lbnYga2V5LXZhbHVlLiBGcm9tIGZ1bmMueWFtbCBjb25maWcgb3IgT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nKS4gKi9cbiAgZnVuY3Rpb25Db25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogUGF0aCB0byBBUEkgR2F0ZXdheSBkZXBsb3ltZW50IHNwZWMgSlNPTiAocm91dGVzKS4gVXNlIE9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTiBvciBkZWZhdWx0IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBpbiBwcm9qZWN0IHJvb3QuICovXG4gIGFwaUd3RGVwbG95bWVudEpzb25QYXRoPzogc3RyaW5nO1xuICBiYWNrZW5kPzogT2NpQmFja2VuZENvbmZpZztcbn1cblxuY29uc3QgREVGQVVMVF9BUElHV19ERVBMT1lNRU5UX0pTT04gPSBKU09OLnN0cmluZ2lmeShcbiAge1xuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnL3twYXRoKn0nLFxuICAgICAgICBtZXRob2RzOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgIHR5cGU6ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgIGZ1bmN0aW9uSWQ6ICcke2Z1bmN0aW9uX2lkfScsXG4gICAgICAgICAgcmVhZFRpbWVvdXRJblNlY29uZHM6IDMwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBudWxsLFxuICAyXG4pO1xuXG4vKiogT0NJUiBzaG9ydCByZWdpb24ga2V5cyAoZS5nLiBldS1mcmFua2Z1cnQtMSAtPiBmcmEpLiBVc2VkIHNvIGxvZ2luLCBidWlsZCwgcHVzaCBhbmQgZnVuY3Rpb24gaW1hZ2UgYWxsIHVzZSBzYW1lIHJlZ2lzdHJ5IGhvc3QuICovXG5leHBvcnQgY29uc3QgUkVHSU9OX1RPX09DSVJfSE9TVDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ2V1LWZyYW5rZnVydC0xJzogJ2ZyYScsICd1cy1waG9lbml4LTEnOiAncGh4JywgJ3VzLWFzaGJ1cm4tMSc6ICdpYWQnLCAndWstbG9uZG9uLTEnOiAnbGhyJyxcbiAgJ2FwLXRva3lvLTEnOiAnbnJ0JywgJ2FwLW11bWJhaS0xJzogJ2JvbScsICdhcC1zZW91bC0xJzogJ2ljbicsICdjYS10b3JvbnRvLTEnOiAneXl6JyxcbiAgJ3NhLXNhb3BhdWxvLTEnOiAnZ3J1JywgJ2FwLXN5ZG5leS0xJzogJ3N5ZCcsICdldS16dXJpY2gtMSc6ICd6cmgnLCAnbWUtZHViYWktMSc6ICdkeGInLFxuICAnYXAtb3Nha2EtMSc6ICdraXgnLCAnZXUtYW1zdGVyZGFtLTEnOiAnYW1zJywgJ2FwLXNpbmdhcG9yZS0xJzogJ3NpbicsICdhcC1oeWRlcmFiYWQtMSc6ICdoeWQnLFxuICAnZXUtbWlsYW4tMSc6ICdteHAnLCAnc2Etc2FudGlhZ28tMSc6ICdzY2wnLCAnYXAtbWVsYm91cm5lLTEnOiAnbWVsJywgJ2V1LXN0b2NraG9sbS0xJzogJ2FybicsXG4gICdtZS1qZWRkYWgtMSc6ICdqZWQnLCAnYWYtam9oYW5uZXNidXJnLTEnOiAnam5iJywgJ2lsLWplcnVzYWxlbS0xJzogJ3RsdicsICdteC1xdWVyZXRhcm8tMSc6ICdxcm8nLFxuICAnZXUtbWFyc2VpbGxlLTEnOiAnbXJzJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvY2lySG9zdEtleShyZWdpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBSRUdJT05fVE9fT0NJUl9IT1NUW3JlZ2lvbl0gPz8gcmVnaW9uO1xufVxuXG4vKiogRnVsbCBPQ0lSIGltYWdlIFVSTCBmb3IgdGhlIGZ1bmN0aW9uIChyZWdpc3RyeS9uYW1lc3BhY2UvcmVwbzp0YWcpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9jaUltYWdlVXJsKGNvbmZpZzogT2NpQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnaXN0cnkgPSBgJHtvY2lySG9zdEtleShjb25maWcucmVnaW9uKX0ub2Npci5pb2A7XG4gIGNvbnN0IHJlcG8gPSBjb25maWcub2NpclJlcG9zaXRvcnlOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUgfHwgJ29jaS1mdW5jdGlvbic7XG4gIGNvbnN0IHRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgcmV0dXJuIGAke3JlZ2lzdHJ5fS8ke2NvbmZpZy5uYW1lc3BhY2V9LyR7cmVwb306JHt0YWd9YDtcbn1cblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBmdW5jdGlvbiBuYW1lIGZyb20gZnVuYy55YW1sIChPQ0kgRnVuY3Rpb25zIGZvcm1hdCkuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJuYW1lOlwiIGxpbmUsIHRyaW1tZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sTmFtZShwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbmFtZTpcXHMqW1wiJ10/KFteXCInXFxzXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKG0pIHJldHVybiBtWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY21kL2hhbmRsZXIgZnJvbSBmdW5jLnlhbWwgKE9DSS9GbiBmb3JtYXQpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgXCJjbWQ6XCIgb3IgXCJoYW5kbGVyOlwiIGxpbmUsIHRyaW1tZWQ7IHVzZWQgYXMgRG9ja2VyIENNRCBmb3IgSmF2YSBGREsuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgY21kTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eXFxzKmNtZDpcXHMqW1wiJ10/KFteXCInXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKGNtZE1hdGNoKSByZXR1cm4gY21kTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgY29uc3QgaGFuZGxlck1hdGNoID0gY29udGVudC5tYXRjaCgvXlxccypoYW5kbGVyOlxccypbXCInXT8oW15cIidcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAoaGFuZGxlck1hdGNoKSByZXR1cm4gaGFuZGxlck1hdGNoWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdmVyc2lvbiBmcm9tIGZ1bmMueWFtbCAodXNlZCBhcyBPQ0lSIGltYWdlIHRhZykuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJ2ZXJzaW9uOlwiIGxpbmUsIHRyaW1tZWQ7IHNhbml0aXplZCBmb3IgRG9ja2VyIHRhZyAoYS16QS1aMC05Xy4tKS5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxWZXJzaW9uKHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ2Z1bmMueWFtbCcpO1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4Jyk7XG4gICAgICBjb25zdCBtID0gY29udGVudC5tYXRjaCgvXlxccyp2ZXJzaW9uOlxccypbXCInXT8oW15cIidcXHNcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCByYXcgPSBtWzFdLnRyaW0oKTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0gcmF3LnJlcGxhY2UoL1teYS16QS1aMC05Xy4tXS9nLCAnLScpLnJlcGxhY2UoLy0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkIHx8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFZBTElEX01FTU9SWV9NQiA9IG5ldyBTZXQoWzEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzJdKTtcblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBtZW1vcnkgKE1CKSBmcm9tIGZ1bmMueWFtbC4gT0NJIGFsbG93cyAxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIHZhbGlkOyBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbE1lbW9yeShwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbWVtb3J5OlxccyooXFxkKylcXHMqJC9tKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChtWzFdLCAxMCk7XG4gICAgICAgIGlmIChWQUxJRF9NRU1PUllfTUIuaGFzKG4pKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdGltZW91dCAoc2Vjb25kcykgZnJvbSBmdW5jLnlhbWwuIE9DSSBtYXggaXMgMzAwLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIGluIHJhbmdlIDHigJMzMDA7IG90aGVyd2lzZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sVGltZW91dChwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqdGltZW91dDpcXHMqKFxcZCspXFxzKiQvbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQobVsxXSwgMTApO1xuICAgICAgICBpZiAobiA+PSAxICYmIG4gPD0gMzAwKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY29uZmlnIChrZXktdmFsdWUgZW52KSBmcm9tIGZ1bmMueWFtbC4gRXhwZWN0cyBhIHRvcC1sZXZlbCBcImNvbmZpZzpcIiBibG9jayB3aXRoIGtleTogdmFsdWUgbGluZXMuXG4gKiBSZXR1cm5zIGEgcmVjb3JkIG9mIHN0cmluZyBrZXlzIGFuZCBzdHJpbmcgdmFsdWVzOyBlbXB0eSBpZiBub25lIG9yIHBhcnNlIGVycm9yLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Db25maWcgPSBmYWxzZTtcbiAgICBjb25zdCBjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkID09PSAnY29uZmlnOicgfHwgL15jb25maWdcXHMqOlxccyokLy50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgIGluQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5Db25maWcpIHtcbiAgICAgICAgaWYgKHRyaW1tZWQgIT09ICcnICYmICFsaW5lLnN0YXJ0c1dpdGgoJyAnKSAmJiAhbGluZS5zdGFydHNXaXRoKCdcXHQnKSkgYnJlYWs7XG4gICAgICAgIGNvbnN0IGt2ID0gbGluZS5tYXRjaCgvXlxccysoW2EtekEtWl9dW2EtekEtWjAtOV8tXSopXFxzKjpcXHMqKC4qKSQvKTtcbiAgICAgICAgaWYgKGt2KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga3ZbMV0udHJpbSgpO1xuICAgICAgICAgIGxldCB2YWwgPSBrdlsyXS50cmltKCk7XG4gICAgICAgICAgaWYgKCh2YWwuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWwuZW5kc1dpdGgoJ1wiJykpIHx8ICh2YWwuc3RhcnRzV2l0aChcIidcIikgJiYgdmFsLmVuZHNXaXRoKFwiJ1wiKSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA/IGNvbmZpZyA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogRW5zdXJlIG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVEZWZhdWx0QXBpR3dEZXBsb3ltZW50SnNvbihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24nKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwLCBERUZBVUxUX0FQSUdXX0RFUExPWU1FTlRfSlNPTiwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuY29uc3QgVEFJTF9GVU5DVElPTl9MT0dTX1NDUklQVCA9IGAjIS91c3IvYmluL2VudiBub2RlXG4vKipcbiAqIFRhaWwgT0NJIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9ncy4gR2VuZXJhdGVkIGJ5IE9DREsuXG4gKiBSdW4gZnJvbSBwcm9qZWN0IHJvb3QgYWZ0ZXIgZGVwbG95LiBSZXF1aXJlczogT0NJIENMSSwgT0NJX0NPTVBBUlRNRU5UX0lELlxuICogTG9nIElEczogZnJvbSAub2Nkay1vdXRwdXRzLmpzb24gKGNyZWF0ZWQgb24gZGVwbG95KSwgb3IgcGFzcyBmb3IgdGVzdGluZzpcbiAqICAgT0NJX0xPR19HUk9VUF9JRD1vY2lkMS4uLiBPQ0lfRVhFQ1VUSU9OX0xPR19JRD1vY2lkMS4uLiBub2RlIHRhaWwtZnVuY3Rpb24tbG9ncy5qc1xuICovXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBzcGF3blN5bmMgfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcblxuY29uc3QgZGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUiB8fCBfX2Rpcm5hbWU7XG5jb25zdCBvdXRwdXRzUGF0aCA9IHBhdGguam9pbihkaXIsICcub2Nkay1vdXRwdXRzLmpzb24nKTtcbmNvbnN0IGNvbXBJZCA9IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRCB8fCBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfT0NJRDtcbmlmICghY29tcElkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ1NldCBPQ0lfQ09NUEFSVE1FTlRfSUQgKG9yIE9DSV9DT01QQVJUTUVOVF9PQ0lEKS4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxubGV0IGxvZ0dyb3VwSWQgPSAocHJvY2Vzcy5lbnYuT0NJX0xPR19HUk9VUF9JRCB8fCAnJykudHJpbSgpO1xubGV0IGV4ZWN1dGlvbkxvZ0lkID0gKHByb2Nlc3MuZW52Lk9DSV9FWEVDVVRJT05fTE9HX0lEIHx8ICcnKS50cmltKCk7XG5pZiAoIWxvZ0dyb3VwSWQgfHwgIWV4ZWN1dGlvbkxvZ0lkKSB7XG4gIGlmICghZnMuZXhpc3RzU3luYyhvdXRwdXRzUGF0aCkpIHtcbiAgICBjb25zb2xlLmVycm9yKCdSdW4gZGVwbG95IGZpcnN0IHRvIGNyZWF0ZSAub2Nkay1vdXRwdXRzLmpzb24sIG9yIHNldCBPQ0lfTE9HX0dST1VQX0lEIGFuZCBPQ0lfRVhFQ1VUSU9OX0xPR19JRCBmb3IgdGVzdGluZy4nKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgbGV0IG91dDtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMob3V0cHV0c1BhdGgsICd1dGY4JykucmVwbGFjZSgvXlxcdUZFRkYvLCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGZpcnN0ID0gcmF3LmluZGV4T2YoJ3snKTtcbiAgICBjb25zdCBsYXN0ID0gcmF3Lmxhc3RJbmRleE9mKCd9Jyk7XG4gICAgaWYgKGZpcnN0ID09PSAtMSB8fCBsYXN0IDw9IGZpcnN0KSB0aHJvdyBuZXcgRXJyb3IoJ05vIEpTT04nKTtcbiAgICBvdXQgPSBKU09OLnBhcnNlKHJhdy5zbGljZShmaXJzdCwgbGFzdCArIDEpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyAub2Nkay1vdXRwdXRzLmpzb24uIFJ1biBkZXBsb3kgZmlyc3QuJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIGZ1bmN0aW9uIGZpbmRPdXRwdXRzKG9iaikge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgICBpZiAob2JqLmxvZ19ncm91cF9pZCAhPSBudWxsIHx8IG9iai5leGVjdXRpb25fbG9nX2lkICE9IG51bGwgfHwgb2JqLmxvZ0dyb3VwSWQgIT0gbnVsbCB8fCBvYmouZXhlY3V0aW9uTG9nSWQgIT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICBpZiAob2JqLm91dHB1dHMgJiYgdHlwZW9mIG9iai5vdXRwdXRzID09PSAnb2JqZWN0JykgcmV0dXJuIGZpbmRPdXRwdXRzKG9iai5vdXRwdXRzKSB8fCBvYmoub3V0cHV0cztcbiAgICBmb3IgKGNvbnN0IHYgb2YgT2JqZWN0LnZhbHVlcyhvYmopKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRPdXRwdXRzKHYpO1xuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIHZhbChvLCBrKSB7XG4gICAgbGV0IHYgPSBvW2tdO1xuICAgIGlmICh2ID09IG51bGwpIHYgPSBvW2sucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGMpID0+IGMudG9VcHBlckNhc2UoKSldO1xuICAgIGlmICh2ID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgcmV0dXJuIHYudHJpbSgpO1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPSBudWxsICYmICd2YWx1ZScgaW4gdikgcmV0dXJuIFN0cmluZyh2LnZhbHVlKS50cmltKCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBmdW5jdGlvbiBmaW5kQnlTdWJzdHJpbmcobywgc3ViKSB7XG4gICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMobykuZmluZChmdW5jdGlvbihrKSB7IHJldHVybiBrLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc3ViKTsgfSk7XG4gICAgcmV0dXJuIGtleSA/IHZhbChvLCBrZXkpIDogdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG91dHB1dHMgPSBmaW5kT3V0cHV0cyhvdXQpIHx8IG91dDtcbiAgbG9nR3JvdXBJZCA9IHZhbChvdXRwdXRzLCAnbG9nX2dyb3VwX2lkJykgfHwgdmFsKG91dHB1dHMsICdsb2dHcm91cElkJykgfHwgZmluZEJ5U3Vic3RyaW5nKG91dHB1dHMsICdsb2dfZ3JvdXAnKTtcbiAgZXhlY3V0aW9uTG9nSWQgPSB2YWwob3V0cHV0cywgJ2V4ZWN1dGlvbl9sb2dfaWQnKSB8fCB2YWwob3V0cHV0cywgJ2V4ZWN1dGlvbkxvZ0lkJykgfHwgZmluZEJ5U3Vic3RyaW5nKG91dHB1dHMsICdleGVjdXRpb25fbG9nJyk7XG4gIGlmICghbG9nR3JvdXBJZCB8fCAhZXhlY3V0aW9uTG9nSWQpIHtcbiAgICBjb25zb2xlLmVycm9yKCdsb2dfZ3JvdXBfaWQgb3IgZXhlY3V0aW9uX2xvZ19pZCBtaXNzaW5nIGluIC5vY2RrLW91dHB1dHMuanNvbicpO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RvcC1sZXZlbCBrZXlzOiAnICsgT2JqZWN0LmtleXMob3V0KS5qb2luKCcsICcpKTtcbiAgICBjb25zb2xlLmVycm9yKCdPdXRwdXRzIGtleXM6ICcgKyBPYmplY3Qua2V5cyhvdXRwdXRzKS5qb2luKCcsICcpKTtcbiAgICBjb25zb2xlLmVycm9yKCdTYW1wbGU6ICcgKyBKU09OLnN0cmluZ2lmeShvdXQpLnNsaWNlKDAsIDQwMCkpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbmNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93LmdldFRpbWUoKSAtIDEwICogNjAgKiAxMDAwKTtcbmNvbnN0IHRpbWVTdGFydCA9IHN0YXJ0LnRvSVNPU3RyaW5nKCk7XG5jb25zdCB0aW1lRW5kID0gbm93LnRvSVNPU3RyaW5nKCk7XG5jb25zdCBzY29wZSA9IGNvbXBJZCArICcvJyArIGxvZ0dyb3VwSWQgKyAnLycgKyBleGVjdXRpb25Mb2dJZDtcbmNvbnN0IHF1ZXJ5ID0gJ3NlYXJjaCBcIicgKyBzY29wZSArICdcIiB8IHNvcnQgYnkgZGF0ZXRpbWUgZGVzYyB8IGxpbWl0IDUwJztcbmNvbnN0IHIgPSBzcGF3blN5bmMoJ29jaScsIFsnbG9nZ2luZy1zZWFyY2gnLCAnc2VhcmNoLWxvZ3MnLCAnLS1zZWFyY2gtcXVlcnknLCBxdWVyeSwgJy0tdGltZS1zdGFydCcsIHRpbWVTdGFydCwgJy0tdGltZS1lbmQnLCB0aW1lRW5kXSwgeyBzdGRpbzogJ2luaGVyaXQnLCBzaGVsbDogdHJ1ZSB9KTtcbnByb2Nlc3MuZXhpdChyLnN0YXR1cyA/PyAxKTtcbmA7XG5cbi8qKiBFbnN1cmUgdGFpbC1mdW5jdGlvbi1sb2dzLmpzIGV4aXN0cyBpbiBwcm9qZWN0RGlyOyB3cml0ZSBkZWZhdWx0IGlmIG1pc3NpbmcuIFJldHVybnMgcGF0aC4gKi9cbmZ1bmN0aW9uIGVuc3VyZVRhaWxGdW5jdGlvbkxvZ3NTY3JpcHQocHJvamVjdERpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAndGFpbC1mdW5jdGlvbi1sb2dzLmpzJyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhwKSkge1xuICAgIGZzLndyaXRlRmlsZVN5bmMocCwgVEFJTF9GVU5DVElPTl9MT0dTX1NDUklQVCwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuLyoqIFJlYWQgdGVuYW5jeSBhbmQgcmVnaW9uIGZyb20gT0NJIENMSSBjb25maWcuIERlZmF1bHQgZmlsZTogfi8ub2NpL2NvbmZpZywgZGVmYXVsdCBwcm9maWxlOiBERUZBVUxULiAqL1xuZnVuY3Rpb24gcmVhZFRlbmFuY3lBbmRSZWdpb25Gcm9tQ2xpQ29uZmlnKCk6IHsgdGVuYW5jeT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nIH0ge1xuICBjb25zdCBjb25maWdQYXRoID0gcHJvY2Vzcy5lbnYuT0NJX0NPTkZJR19GSUxFIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcub2NpJywgJ2NvbmZpZycpO1xuICBjb25zdCBwcm9maWxlID0gcHJvY2Vzcy5lbnYuT0NJX0NMSV9QUk9GSUxFIHx8ICdERUZBVUxUJztcbiAgdHJ5IHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHJldHVybiB7fTtcbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIGxldCBpblByb2ZpbGUgPSBmYWxzZTtcbiAgICBjb25zdCByZXN1bHQ6IHsgdGVuYW5jeT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nIH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoJ1snKSAmJiB0cmltbWVkLmVuZHNXaXRoKCddJykpIHtcbiAgICAgICAgaW5Qcm9maWxlID0gdHJpbW1lZC5zbGljZSgxLCAtMSkgPT09IHByb2ZpbGU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFpblByb2ZpbGUpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZXEgPSB0cmltbWVkLmluZGV4T2YoJz0nKTtcbiAgICAgIGlmIChlcSA8PSAwKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGtleSA9IHRyaW1tZWQuc2xpY2UoMCwgZXEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdmFsdWUgPSB0cmltbWVkLnNsaWNlKGVxICsgMSkudHJpbSgpO1xuICAgICAgaWYgKGtleSA9PT0gJ3RlbmFuY3knKSByZXN1bHQudGVuYW5jeSA9IHZhbHVlO1xuICAgICAgaWYgKGtleSA9PT0gJ3JlZ2lvbicpIHJlc3VsdC5yZWdpb24gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKiBHZXQgb2JqZWN0IHN0b3JhZ2UgbmFtZXNwYWNlIHZpYSBPQ0kgU0RLIChzYW1lIGFzIFwib2NpIG9zIG5zIGdldFwiKS4gVXNlcyB+Ly5vY2kvY29uZmlnLCBERUZBVUxUIHByb2ZpbGUuICovXG5hc3luYyBmdW5jdGlvbiBnZXROYW1lc3BhY2VGcm9tT2NpU2RrKGNvbXBhcnRtZW50SWQ6IHN0cmluZywgcmVnaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBjb25maWdQYXRoID0gcHJvY2Vzcy5lbnYuT0NJX0NPTkZJR19GSUxFIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcub2NpJywgJ2NvbmZpZycpO1xuICBjb25zdCBwcm9maWxlID0gcHJvY2Vzcy5lbnYuT0NJX0NMSV9QUk9GSUxFIHx8ICdERUZBVUxUJztcbiAgdHJ5IHtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBjb21tb24uQ29uZmlnRmlsZUF1dGhlbnRpY2F0aW9uRGV0YWlsc1Byb3ZpZGVyKGNvbmZpZ1BhdGgsIHByb2ZpbGUpO1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBvYmplY3RzdG9yYWdlLk9iamVjdFN0b3JhZ2VDbGllbnQoeyBhdXRoZW50aWNhdGlvbkRldGFpbHNQcm92aWRlcjogcHJvdmlkZXIgfSk7XG4gICAgY2xpZW50LnJlZ2lvbklkID0gcmVnaW9uO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldE5hbWVzcGFjZSh7XG4gICAgICBjb21wYXJ0bWVudElkLFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZS52YWx1ZT8udHJpbSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRmluZCBhIEpBUiB1bmRlciB0YXJnZXQvIChwcmVmZXIgb25lIG1hdGNoaW5nIG5hbWUsIGVsc2UgZmlyc3QgLmphcikuXG4gKi9cbmZ1bmN0aW9uIGZpbmRKYXJJblRhcmdldChwcm9qZWN0RGlyOiBzdHJpbmcsIGZ1bmN0aW9uTmFtZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRhcmdldERpciA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAndGFyZ2V0Jyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXREaXIpKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGFyZ2V0RGlyKTtcbiAgICBjb25zdCBqYXJzID0gZmlsZXMuZmlsdGVyKChmKSA9PiBmLmVuZHNXaXRoKCcuamFyJykgJiYgIWYuZW5kc1dpdGgoJy1zb3VyY2VzLmphcicpKTtcbiAgICBpZiAoamFycy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKGZ1bmN0aW9uTmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBqYXJzLmZpbmQoKGopID0+IGoudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmdW5jdGlvbk5hbWUudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgaWYgKG1hdGNoKSByZXR1cm4gcGF0aC5qb2luKHRhcmdldERpciwgbWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aC5qb2luKHRhcmdldERpciwgamFyc1swXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIFRydWUgaWYgcHJvamVjdCBoYXMgcG9tLnhtbCBhbmQgc3JjLyAoTWF2ZW4gc291cmNlIGxheW91dCBmb3IgYnVpbGQtZnJvbS1zb3VyY2UgRG9ja2VyZmlsZSkuICovXG5mdW5jdGlvbiBoYXNQb21BbmRTcmMocHJvamVjdERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBvbSA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAncG9tLnhtbCcpO1xuICBjb25zdCBzcmMgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3NyYycpO1xuICB0cnkge1xuICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHBvbSkgJiYgZnMuZXhpc3RzU3luYyhzcmMpICYmIGZzLnN0YXRTeW5jKHNyYykuaXNEaXJlY3RvcnkoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc2NvdmVyRnJvbUZ1bmNZYW1sQW5kVGFyZ2V0KCk6IHtcbiAgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xuICBmdW5jdGlvbkFwcE5hbWU/OiBzdHJpbmc7XG4gIGRvY2tlckNvbnRleHRQYXRoPzogc3RyaW5nO1xuICBpbWFnZVRhZz86IHN0cmluZztcbiAgaGFuZGxlcj86IHN0cmluZztcbiAgdXNlVGhpbkRvY2tlcmZpbGU/OiBib29sZWFuO1xuICBtZW1vcnlNYj86IG51bWJlcjtcbiAgdGltZW91dFNlY29uZHM/OiBudW1iZXI7XG4gIGNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59IHtcbiAgbGV0IHByb2plY3REaXIgPSBwcm9jZXNzLmVudi5PQ0RLX1BST0pFQ1RfRElSPy50cmltKCk7XG4gIGlmICghcHJvamVjdERpcikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcub2Nkay1wcm9qZWN0LWRpcicpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHByb2plY3REaXIgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKS50cmltKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cbiAgaWYgKCFwcm9qZWN0RGlyICYmIHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9KQVJfUEFUSD8udHJpbSgpKSB7XG4gICAgY29uc3QgcCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEgudHJpbSgpKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkgcHJvamVjdERpciA9IGZzLnN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkgPyBwIDogcGF0aC5kaXJuYW1lKHApO1xuICB9XG4gIGlmICghcHJvamVjdERpcikgcHJvamVjdERpciA9IHByb2Nlc3MuY3dkKCk7XG4gIHByb2plY3REaXIgPSBwcm9qZWN0RGlyID8gcGF0aC5yZXNvbHZlKHByb2plY3REaXIpIDogJyc7XG4gIGlmICghcHJvamVjdERpciB8fCAhZnMuZXhpc3RzU3luYyhwcm9qZWN0RGlyKSkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IG5hbWVGcm9tWWFtbCA9IGdldEZ1bmNZYW1sTmFtZShwcm9qZWN0RGlyKTtcbiAgY29uc3QgamFyUGF0aCA9IGZpbmRKYXJJblRhcmdldChwcm9qZWN0RGlyLCBuYW1lRnJvbVlhbWwgfHwgdW5kZWZpbmVkKTtcbiAgY29uc3QgaGFzU291cmNlID0gaGFzUG9tQW5kU3JjKHByb2plY3REaXIpO1xuICBpZiAoIWphclBhdGggJiYgIWhhc1NvdXJjZSkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9OQU1FPy50cmltKCkgfHwgbmFtZUZyb21ZYW1sIHx8IHBhdGguYmFzZW5hbWUocHJvamVjdERpcikgfHwgJ29jaS1mdW5jdGlvbic7XG4gIGNvbnN0IGltYWdlVGFnID0gcHJvY2Vzcy5lbnYuT0NJX0lNQUdFX1RBRz8udHJpbSgpIHx8IGdldEZ1bmNZYW1sVmVyc2lvbihwcm9qZWN0RGlyKTtcbiAgY29uc3QgaGFuZGxlciA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9IQU5ETEVSPy50cmltKCkgfHwgZ2V0RnVuY1lhbWxIYW5kbGVyKHByb2plY3REaXIpO1xuICBjb25zdCB1c2VUaGluRG9ja2VyZmlsZSA9ICEhamFyUGF0aDtcbiAgY29uc3QgbWVtb3J5TWIgPSBnZXRGdW5jWWFtbE1lbW9yeShwcm9qZWN0RGlyKTtcbiAgY29uc3QgdGltZW91dFNlY29uZHMgPSBnZXRGdW5jWWFtbFRpbWVvdXQocHJvamVjdERpcik7XG4gIGNvbnN0IGNvbmZpZyA9IGdldEZ1bmNZYW1sQ29uZmlnKHByb2plY3REaXIpO1xuXG4gIHJldHVybiB7XG4gICAgZnVuY3Rpb25OYW1lLFxuICAgIGZ1bmN0aW9uQXBwTmFtZTogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0FQUF9OQU1FPy50cmltKCkgfHwgZnVuY3Rpb25OYW1lLFxuICAgIGRvY2tlckNvbnRleHRQYXRoOiBwYXRoLnJlc29sdmUocHJvamVjdERpciksXG4gICAgaW1hZ2VUYWc6IGltYWdlVGFnIHx8IHVuZGVmaW5lZCxcbiAgICBoYW5kbGVyOiBoYW5kbGVyIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VUaGluRG9ja2VyZmlsZSxcbiAgICBtZW1vcnlNYixcbiAgICB0aW1lb3V0U2Vjb25kcyxcbiAgICBjb25maWcsXG4gIH07XG59XG5cbmNvbnN0IGJhY2tlbmRUeXBlID0gKHByb2Nlc3MuZW52Lk9DSV9TVEFURV9CQUNLRU5EX1RZUEUgfHwgJ2xvY2FsJykgYXMgJ29jaScgfCAnaHR0cCcgfCAnbG9jYWwnO1xuXG5jb25zdCBiYWNrZW5kQ29uZmlnOiBPY2lCYWNrZW5kQ29uZmlnIHwgdW5kZWZpbmVkID0gYmFja2VuZFR5cGUgPT09ICdsb2NhbCdcbiAgPyB1bmRlZmluZWRcbiAgOiBiYWNrZW5kVHlwZSA9PT0gJ29jaSdcbiAgICA/IHtcbiAgICAgICAgdHlwZTogJ29jaScsXG4gICAgICAgIGJ1Y2tldDogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0JVQ0tFVCB8fCAndGYtc3RhdGUnLFxuICAgICAgICBrZXk6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9LRVkgfHwgJ2Z1bmN0aW9uLXN0YWNrL3RlcnJhZm9ybS50ZnN0YXRlJyxcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgdHlwZTogJ2h0dHAnLFxuICAgICAgICBhZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9BRERSRVNTIHx8ICcnLFxuICAgICAgICB1cGRhdGVNZXRob2Q6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9IVFRQX1VQREFURV9NRVRIT0QgfHwgJ1BVVCcsXG4gICAgICAgIGxvY2tBZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9MT0NLX0FERFJFU1MsXG4gICAgICAgIHVubG9ja0FkZHJlc3M6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9IVFRQX1VOTE9DS19BRERSRVNTLFxuICAgICAgfTtcblxuLyoqXG4gKiBMb2FkIE9DSSBjb25maWcgZnJvbSBlbnYgYW5kIENMSSBjb25maWcuIFdoZW4gT0NJX05BTUVTUEFDRSBpcyB1bnNldCwgZmV0Y2hlcyBpdCB2aWEgT0NJIFNESyAoZ2V0TmFtZXNwYWNlKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9jaUNvbmZpZygpOiBQcm9taXNlPE9jaUNvbmZpZz4ge1xuICBjb25zdCBjbGlDb25maWcgPSByZWFkVGVuYW5jeUFuZFJlZ2lvbkZyb21DbGlDb25maWcoKTtcbiAgY29uc3QgY29tcGFydG1lbnRJZCA9IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8ICdvY2lkMS5jb21wYXJ0bWVudC5vYzEuLmFhYWFhYWEuLi4nO1xuICBjb25zdCBvY2lyQ29tcGFydG1lbnRJZCA9IHByb2Nlc3MuZW52Lk9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEPy50cmltKCkgfHwgcHJvY2Vzcy5lbnYuT0NJX0NPTVBBUlRNRU5UX0lEPy50cmltKCkgfHwgY29tcGFydG1lbnRJZDtcbiAgY29uc3QgdGVuYW5jeUlkID0gcHJvY2Vzcy5lbnYuT0NJX1RFTkFOQ1lfSUQ/LnRyaW0oKSB8fCBjbGlDb25maWcudGVuYW5jeT8udHJpbSgpIHx8ICdvY2lkMS50ZW5hbmN5Lm9jMS4uYWFhYWFhYS4uLic7XG4gIGNvbnN0IHJlZ2lvbiA9IHByb2Nlc3MuZW52Lk9DSV9SRUdJT04/LnRyaW0oKSB8fCBjbGlDb25maWcucmVnaW9uPy50cmltKCkgfHwgJ2V1LWZyYW5rZnVydC0xJztcblxuICBpZiAoIW9jaXJDb21wYXJ0bWVudElkIHx8IG9jaXJDb21wYXJ0bWVudElkLmluY2x1ZGVzKCdyb290JykpIHtcbiAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyAgV0FSTklORzogT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgbm90IHNldCBvciBzZXQgdG8gcm9vdCBjb21wYXJ0bWVudC4nKTtcbiAgICBjb25zb2xlLndhcm4oJyAgIFBsZWFzZSBzZXQgT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgdG8geW91ciBob21lIGNvbXBhcnRtZW50IE9DSUQuJyk7XG4gICAgY29uc29sZS53YXJuKCcgICBFeGFtcGxlOiBleHBvcnQgT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQ9XCJvY2lkMS5jb21wYXJ0bWVudC5vYzEuLmFhYWFhYWEuLi5cIicpO1xuICB9XG5cbiAgbGV0IG5hbWVzcGFjZSA9IHByb2Nlc3MuZW52Lk9DSV9OQU1FU1BBQ0U/LnRyaW0oKTtcbiAgaWYgKCFuYW1lc3BhY2UgfHwgbmFtZXNwYWNlID09PSAneW91ci1uYW1lc3BhY2UnKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBnZXROYW1lc3BhY2VGcm9tT2NpU2RrKGNvbXBhcnRtZW50SWQsIHJlZ2lvbik7XG4gICAgaWYgKHJlc29sdmVkKSBuYW1lc3BhY2UgPSByZXNvbHZlZDtcbiAgICBlbHNlIGlmICghbmFtZXNwYWNlKSBuYW1lc3BhY2UgPSAneW91ci1uYW1lc3BhY2UnO1xuICAgIGlmIChuYW1lc3BhY2UgPT09ICd5b3VyLW5hbWVzcGFjZScpIHtcbiAgICAgIGNvbnNvbGUud2Fybign4pqg77iPICBPQ0lfTkFNRVNQQUNFIG5vdCBzZXQgYW5kIFNESyBjb3VsZCBub3QgcmVzb2x2ZSBpdC4gU2V0IE9DSV9OQU1FU1BBQ0Ugb3IgcnVuIFwib2NpIHNldHVwIGNvbmZpZ1wiLicpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRpc2NvdmVyZWQgPSBkaXNjb3ZlckZyb21GdW5jWWFtbEFuZFRhcmdldCgpO1xuXG4gIGNvbnN0IGltYWdlVGFnID0gcHJvY2Vzcy5lbnYuT0NJX0lNQUdFX1RBRz8udHJpbSgpIHx8IGRpc2NvdmVyZWQuaW1hZ2VUYWcgfHwgJ2xhdGVzdCc7XG5cbiAgbGV0IGRvY2tlckNvbnRleHRQYXRoID0gZGlzY292ZXJlZC5kb2NrZXJDb250ZXh0UGF0aDtcbiAgaWYgKCFkb2NrZXJDb250ZXh0UGF0aCAmJiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSkge1xuICAgIGNvbnN0IHAgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRILnRyaW0oKSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIGRvY2tlckNvbnRleHRQYXRoID0gZnMuc3RhdFN5bmMocCkuaXNEaXJlY3RvcnkoKSA/IHAgOiBwYXRoLmRpcm5hbWUocCk7XG4gIH1cblxuICBjb25zdCBoYW5kbGVyID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0hBTkRMRVI/LnRyaW0oKSB8fCBkaXNjb3ZlcmVkLmhhbmRsZXI7XG4gIGNvbnN0IHVzZVRoaW5Eb2NrZXJmaWxlID0gZGlzY292ZXJlZC51c2VUaGluRG9ja2VyZmlsZSA/PyBmYWxzZTtcblxuICBjb25zdCBtZW1vcnlFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fTUVNT1JZX01CPy50cmltKCk7XG4gIGNvbnN0IGZ1bmN0aW9uTWVtb3J5TWIgPSBtZW1vcnlFbnZcbiAgICA/IFN0cmluZyhwYXJzZUludChtZW1vcnlFbnYsIDEwKSlcbiAgICA6IChkaXNjb3ZlcmVkLm1lbW9yeU1iICE9IG51bGwgPyBTdHJpbmcoZGlzY292ZXJlZC5tZW1vcnlNYikgOiB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHRpbWVvdXRFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fVElNRU9VVF9TRUNPTkRTPy50cmltKCk7XG4gIGNvbnN0IGZ1bmN0aW9uVGltZW91dFNlY29uZHMgPSB0aW1lb3V0RW52XG4gICAgPyBwYXJzZUludCh0aW1lb3V0RW52LCAxMClcbiAgICA6IGRpc2NvdmVyZWQudGltZW91dFNlY29uZHM7XG5cbiAgbGV0IGZ1bmN0aW9uQ29uZmlnID0gZGlzY292ZXJlZC5jb25maWc7XG4gIGNvbnN0IGNvbmZpZ0VudiA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9DT05GSUc/LnRyaW0oKTtcbiAgaWYgKGNvbmZpZ0Vudikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbmZpZ0VudikgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIGZ1bmN0aW9uQ29uZmlnID0geyAuLi5mdW5jdGlvbkNvbmZpZywgLi4ucGFyc2VkIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmUgaW52YWxpZCBKU09OXG4gICAgfVxuICB9XG4gIGlmIChmdW5jdGlvbkNvbmZpZyAmJiBPYmplY3Qua2V5cyhmdW5jdGlvbkNvbmZpZykubGVuZ3RoID09PSAwKSBmdW5jdGlvbkNvbmZpZyA9IHVuZGVmaW5lZDtcblxuICBjb25zdCBhcGlHd0RlcGxveW1lbnRKc29uRW52ID0gcHJvY2Vzcy5lbnYuT0NJX0FQSUdBVEVXQVlfREVQTE9ZTUVOVF9KU09OPy50cmltKCk7XG4gIGNvbnN0IGFwaUd3RGVwbG95bWVudEpzb25QYXRoID0gYXBpR3dEZXBsb3ltZW50SnNvbkVudlxuICAgID8gcGF0aC5yZXNvbHZlKGFwaUd3RGVwbG95bWVudEpzb25FbnYpXG4gICAgOiBkb2NrZXJDb250ZXh0UGF0aFxuICAgICAgPyBlbnN1cmVEZWZhdWx0QXBpR3dEZXBsb3ltZW50SnNvbihkb2NrZXJDb250ZXh0UGF0aClcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoZG9ja2VyQ29udGV4dFBhdGgpIHtcbiAgICBlbnN1cmVUYWlsRnVuY3Rpb25Mb2dzU2NyaXB0KGRvY2tlckNvbnRleHRQYXRoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29tcGFydG1lbnRJZCxcbiAgICBvY2lyQ29tcGFydG1lbnRJZDogb2NpckNvbXBhcnRtZW50SWQgfHwgdW5kZWZpbmVkLFxuICAgIHRlbmFuY3lJZCxcbiAgICByZWdpb24sXG4gICAgbmFtZXNwYWNlLFxuICAgIGZ1bmN0aW9uQXBwTmFtZTogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0FQUF9OQU1FID8/IGRpc2NvdmVyZWQuZnVuY3Rpb25BcHBOYW1lID8/ICcnLFxuICAgIGZ1bmN0aW9uTmFtZTogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX05BTUUgPz8gZGlzY292ZXJlZC5mdW5jdGlvbk5hbWUgPz8gJycsXG4gICAgZnVuY3Rpb25KYXJQYXRoOiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSB8fCB1bmRlZmluZWQsXG4gICAgZG9ja2VyQ29udGV4dFBhdGg6IGRvY2tlckNvbnRleHRQYXRoIHx8IHVuZGVmaW5lZCxcbiAgICBpbWFnZVRhZyxcbiAgICBoYW5kbGVyOiBoYW5kbGVyIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VUaGluRG9ja2VyZmlsZSxcbiAgICBvY2lyUmVwb3NpdG9yeU5hbWU6IHByb2Nlc3MuZW52Lk9DSV9PQ0lSX1JFUE9TSVRPUllfTkFNRSB8fCB1bmRlZmluZWQsXG4gICAgZnVuY3Rpb25NZW1vcnlNYjogZnVuY3Rpb25NZW1vcnlNYiB8fCB1bmRlZmluZWQsXG4gICAgZnVuY3Rpb25UaW1lb3V0U2Vjb25kczogZnVuY3Rpb25UaW1lb3V0U2Vjb25kcyA/PyB1bmRlZmluZWQsXG4gICAgZnVuY3Rpb25Db25maWcsXG4gICAgYXBpR3dEZXBsb3ltZW50SnNvblBhdGg6IGFwaUd3RGVwbG95bWVudEpzb25QYXRoIHx8IHVuZGVmaW5lZCxcbiAgICBiYWNrZW5kOiBiYWNrZW5kQ29uZmlnLFxuICB9O1xufVxuIl19
@@ -265,7 +265,9 @@ function ensureDefaultApiGwDeploymentJson(projectDir: string): string {
265
265
  const TAIL_FUNCTION_LOGS_SCRIPT = `#!/usr/bin/env node
266
266
  /**
267
267
  * Tail OCI Functions execution logs. Generated by OCDK.
268
- * Run from project root after deploy. Requires: OCI CLI, OCI_COMPARTMENT_ID, and .ocdk-outputs.json (created on deploy).
268
+ * Run from project root after deploy. Requires: OCI CLI, OCI_COMPARTMENT_ID.
269
+ * Log IDs: from .ocdk-outputs.json (created on deploy), or pass for testing:
270
+ * OCI_LOG_GROUP_ID=ocid1... OCI_EXECUTION_LOG_ID=ocid1... node tail-function-logs.js
269
271
  */
270
272
  const path = require('path');
271
273
  const fs = require('fs');
@@ -273,39 +275,61 @@ const { spawnSync } = require('child_process');
273
275
 
274
276
  const dir = process.env.OCDK_PROJECT_DIR || __dirname;
275
277
  const outputsPath = path.join(dir, '.ocdk-outputs.json');
276
- if (!fs.existsSync(outputsPath)) {
277
- console.error('Run deploy first to create .ocdk-outputs.json in the project root.');
278
- process.exit(1);
279
- }
280
278
  const compId = process.env.OCI_COMPARTMENT_ID || process.env.OCI_COMPARTMENT_OCID;
281
279
  if (!compId) {
282
280
  console.error('Set OCI_COMPARTMENT_ID (or OCI_COMPARTMENT_OCID).');
283
281
  process.exit(1);
284
282
  }
285
- let out;
286
- try {
287
- const raw = fs.readFileSync(outputsPath, 'utf8').replace(/^\uFEFF/, '').trim();
288
- const first = raw.indexOf('{');
289
- const last = raw.lastIndexOf('}');
290
- if (first === -1 || last <= first) throw new Error('No JSON');
291
- out = JSON.parse(raw.slice(first, last + 1));
292
- } catch (e) {
293
- console.error('Invalid or missing .ocdk-outputs.json. Run deploy first.');
294
- process.exit(1);
295
- }
296
- const outputs = out.log_group_id != null ? out : Object.values(out).find((v) => v && typeof v === 'object' && (v.log_group_id != null || v.execution_log_id != null)) || out;
297
- function val(o, k) {
298
- const v = o[k];
299
- if (!v) return undefined;
300
- if (typeof v === 'string') return v;
301
- if (v && typeof v.value === 'string') return v.value;
302
- return undefined;
303
- }
304
- const logGroupId = val(outputs, 'log_group_id');
305
- const executionLogId = val(outputs, 'execution_log_id');
283
+ let logGroupId = (process.env.OCI_LOG_GROUP_ID || '').trim();
284
+ let executionLogId = (process.env.OCI_EXECUTION_LOG_ID || '').trim();
306
285
  if (!logGroupId || !executionLogId) {
307
- console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json');
308
- process.exit(1);
286
+ if (!fs.existsSync(outputsPath)) {
287
+ console.error('Run deploy first to create .ocdk-outputs.json, or set OCI_LOG_GROUP_ID and OCI_EXECUTION_LOG_ID for testing.');
288
+ process.exit(1);
289
+ }
290
+ let out;
291
+ try {
292
+ const raw = fs.readFileSync(outputsPath, 'utf8').replace(/^\uFEFF/, '').trim();
293
+ const first = raw.indexOf('{');
294
+ const last = raw.lastIndexOf('}');
295
+ if (first === -1 || last <= first) throw new Error('No JSON');
296
+ out = JSON.parse(raw.slice(first, last + 1));
297
+ } catch (e) {
298
+ console.error('Invalid or missing .ocdk-outputs.json. Run deploy first.');
299
+ process.exit(1);
300
+ }
301
+ function findOutputs(obj) {
302
+ if (!obj || typeof obj !== 'object') return null;
303
+ if (obj.log_group_id != null || obj.execution_log_id != null || obj.logGroupId != null || obj.executionLogId != null) return obj;
304
+ if (obj.outputs && typeof obj.outputs === 'object') return findOutputs(obj.outputs) || obj.outputs;
305
+ for (const v of Object.values(obj)) {
306
+ const found = findOutputs(v);
307
+ if (found) return found;
308
+ }
309
+ return null;
310
+ }
311
+ function val(o, k) {
312
+ let v = o[k];
313
+ if (v == null) v = o[k.replace(/_([a-z])/g, (_, c) => c.toUpperCase())];
314
+ if (v == null) return undefined;
315
+ if (typeof v === 'string') return v.trim();
316
+ if (typeof v === 'object' && v != null && 'value' in v) return String(v.value).trim();
317
+ return undefined;
318
+ }
319
+ function findBySubstring(o, sub) {
320
+ const key = Object.keys(o).find(function(k) { return k.toLowerCase().includes(sub); });
321
+ return key ? val(o, key) : undefined;
322
+ }
323
+ const outputs = findOutputs(out) || out;
324
+ logGroupId = val(outputs, 'log_group_id') || val(outputs, 'logGroupId') || findBySubstring(outputs, 'log_group');
325
+ executionLogId = val(outputs, 'execution_log_id') || val(outputs, 'executionLogId') || findBySubstring(outputs, 'execution_log');
326
+ if (!logGroupId || !executionLogId) {
327
+ console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json');
328
+ console.error('Top-level keys: ' + Object.keys(out).join(', '));
329
+ console.error('Outputs keys: ' + Object.keys(outputs).join(', '));
330
+ console.error('Sample: ' + JSON.stringify(out).slice(0, 400));
331
+ process.exit(1);
332
+ }
309
333
  }
310
334
  const now = new Date();
311
335
  const start = new Date(now.getTime() - 10 * 60 * 1000);
@@ -259,7 +259,9 @@ function ensureDefaultApiGwDeploymentJson(projectDir) {
259
259
  const TAIL_FUNCTION_LOGS_SCRIPT = `#!/usr/bin/env node
260
260
  /**
261
261
  * Tail OCI Functions execution logs. Generated by OCDK.
262
- * Run from project root after deploy. Requires: OCI CLI, OCI_COMPARTMENT_ID, and .ocdk-outputs.json (created on deploy).
262
+ * Run from project root after deploy. Requires: OCI CLI, OCI_COMPARTMENT_ID.
263
+ * Log IDs: from .ocdk-outputs.json (created on deploy), or pass for testing:
264
+ * OCI_LOG_GROUP_ID=ocid1... OCI_EXECUTION_LOG_ID=ocid1... node tail-function-logs.js
263
265
  */
264
266
  const path = require('path');
265
267
  const fs = require('fs');
@@ -267,39 +269,61 @@ const { spawnSync } = require('child_process');
267
269
 
268
270
  const dir = process.env.OCDK_PROJECT_DIR || __dirname;
269
271
  const outputsPath = path.join(dir, '.ocdk-outputs.json');
270
- if (!fs.existsSync(outputsPath)) {
271
- console.error('Run deploy first to create .ocdk-outputs.json in the project root.');
272
- process.exit(1);
273
- }
274
272
  const compId = process.env.OCI_COMPARTMENT_ID || process.env.OCI_COMPARTMENT_OCID;
275
273
  if (!compId) {
276
274
  console.error('Set OCI_COMPARTMENT_ID (or OCI_COMPARTMENT_OCID).');
277
275
  process.exit(1);
278
276
  }
279
- let out;
280
- try {
281
- const raw = fs.readFileSync(outputsPath, 'utf8').replace(/^\uFEFF/, '').trim();
282
- const first = raw.indexOf('{');
283
- const last = raw.lastIndexOf('}');
284
- if (first === -1 || last <= first) throw new Error('No JSON');
285
- out = JSON.parse(raw.slice(first, last + 1));
286
- } catch (e) {
287
- console.error('Invalid or missing .ocdk-outputs.json. Run deploy first.');
288
- process.exit(1);
289
- }
290
- const outputs = out.log_group_id != null ? out : Object.values(out).find((v) => v && typeof v === 'object' && (v.log_group_id != null || v.execution_log_id != null)) || out;
291
- function val(o, k) {
292
- const v = o[k];
293
- if (!v) return undefined;
294
- if (typeof v === 'string') return v;
295
- if (v && typeof v.value === 'string') return v.value;
296
- return undefined;
297
- }
298
- const logGroupId = val(outputs, 'log_group_id');
299
- const executionLogId = val(outputs, 'execution_log_id');
277
+ let logGroupId = (process.env.OCI_LOG_GROUP_ID || '').trim();
278
+ let executionLogId = (process.env.OCI_EXECUTION_LOG_ID || '').trim();
300
279
  if (!logGroupId || !executionLogId) {
301
- console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json');
302
- process.exit(1);
280
+ if (!fs.existsSync(outputsPath)) {
281
+ console.error('Run deploy first to create .ocdk-outputs.json, or set OCI_LOG_GROUP_ID and OCI_EXECUTION_LOG_ID for testing.');
282
+ process.exit(1);
283
+ }
284
+ let out;
285
+ try {
286
+ const raw = fs.readFileSync(outputsPath, 'utf8').replace(/^\uFEFF/, '').trim();
287
+ const first = raw.indexOf('{');
288
+ const last = raw.lastIndexOf('}');
289
+ if (first === -1 || last <= first) throw new Error('No JSON');
290
+ out = JSON.parse(raw.slice(first, last + 1));
291
+ } catch (e) {
292
+ console.error('Invalid or missing .ocdk-outputs.json. Run deploy first.');
293
+ process.exit(1);
294
+ }
295
+ function findOutputs(obj) {
296
+ if (!obj || typeof obj !== 'object') return null;
297
+ if (obj.log_group_id != null || obj.execution_log_id != null || obj.logGroupId != null || obj.executionLogId != null) return obj;
298
+ if (obj.outputs && typeof obj.outputs === 'object') return findOutputs(obj.outputs) || obj.outputs;
299
+ for (const v of Object.values(obj)) {
300
+ const found = findOutputs(v);
301
+ if (found) return found;
302
+ }
303
+ return null;
304
+ }
305
+ function val(o, k) {
306
+ let v = o[k];
307
+ if (v == null) v = o[k.replace(/_([a-z])/g, (_, c) => c.toUpperCase())];
308
+ if (v == null) return undefined;
309
+ if (typeof v === 'string') return v.trim();
310
+ if (typeof v === 'object' && v != null && 'value' in v) return String(v.value).trim();
311
+ return undefined;
312
+ }
313
+ function findBySubstring(o, sub) {
314
+ const key = Object.keys(o).find(function(k) { return k.toLowerCase().includes(sub); });
315
+ return key ? val(o, key) : undefined;
316
+ }
317
+ const outputs = findOutputs(out) || out;
318
+ logGroupId = val(outputs, 'log_group_id') || val(outputs, 'logGroupId') || findBySubstring(outputs, 'log_group');
319
+ executionLogId = val(outputs, 'execution_log_id') || val(outputs, 'executionLogId') || findBySubstring(outputs, 'execution_log');
320
+ if (!logGroupId || !executionLogId) {
321
+ console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json');
322
+ console.error('Top-level keys: ' + Object.keys(out).join(', '));
323
+ console.error('Outputs keys: ' + Object.keys(outputs).join(', '));
324
+ console.error('Sample: ' + JSON.stringify(out).slice(0, 400));
325
+ process.exit(1);
326
+ }
303
327
  }
304
328
  const now = new Date();
305
329
  const start = new Date(now.getTime() - 10 * 60 * 1000);
@@ -552,4 +576,4 @@ async function getOciConfig() {
552
576
  backend: backendConfig,
553
577
  };
554
578
  }
555
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NvbmZpZy9vY2ktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkVILGtDQUVDO0FBR0Qsd0NBS0M7QUFpWEQsb0NBd0ZDO0FBOWhCRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixtREFBcUM7QUFDckMsaUVBQW1EO0FBMENuRCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xEO0lBQ0UsTUFBTSxFQUFFO1FBQ047WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUNuQyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsRUFBRTthQUN6QjtTQUNGO0tBQ0Y7Q0FDRixFQUNELElBQUksRUFDSixDQUFDLENBQ0YsQ0FBQztBQUVGLHFJQUFxSTtBQUN4SCxRQUFBLG1CQUFtQixHQUEyQjtJQUN6RCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLO0lBQzNGLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLO0lBQ3JGLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLO0lBQ3ZGLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixF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QUFxQixFQUFFLElBQUksRUFBRSxJQUFJLFNBQVM7UUFDdkUsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksU0FBUztRQUNqRCxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTO1FBQzdCLGlCQUFpQjtRQUNqQixrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLFNBQVM7UUFDckUsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksU0FBUztRQUMvQyxzQkFBc0IsRUFBRSxzQkFBc0IsSUFBSSxTQUFTO1FBQzNELGNBQWM7UUFDZCx1QkFBdUIsRUFBRSx1QkFBdUIsSUFBSSxTQUFTO1FBQzdELE9BQU8sRUFBRSxhQUFhO0tBQ3ZCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPQ0kgQ29uZmlndXJhdGlvblxuICpcbiAqIFNldCB0aGVzZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHVwZGF0ZSBkZWZhdWx0czpcbiAqIC0gT0NJX0NPTVBBUlRNRU5UX0lEXG4gKiAtIE9DSV9URU5BTkNZX0lEXG4gKiAtIE9DSV9SRUdJT05cbiAqIC0gT0NJX05BTUVTUEFDRSAoaWYgdW5zZXQsIG9idGFpbmVkIHZpYSBPQ0kgU0RLIGdldE5hbWVzcGFjZSlcbiAqIC0gT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgKGZvciBPQ0lSOyBtdXN0IGJlIG5vbi1yb290IGZvciBmdWxsIHN0YWNrKVxuICogLSBPQ0lfRlVOQ1RJT05fQVBQX05BTUUgKEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiBuYW1lOyBkZWZhdWx0IGVtcHR5KVxuICogLSBPQ0lfRlVOQ1RJT05fTkFNRSAoRnVuY3Rpb24gbmFtZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX0hBTkRMRVIgKEphdmEgRkRLIENNRCBoYW5kbGVyLCBlLmcuIGNvbS5leGFtcGxlLkhhbmRsZXI6OmhhbmRsZVJlcXVlc3Q7IGZyb20gZnVuYy55YW1sIGNtZC9oYW5kbGVyIGlmIHVuc2V0KVxuICogLSBPQ0lfRlVOQ1RJT05fSkFSX1BBVEggKFBhdGggdG8gSkFSIG9yIHByb2plY3QgZGlyIGZvciBmdW5jdGlvbiBpbWFnZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX01FTU9SWV9NQiAoZnVuY3Rpb24gbWVtb3J5IGluIE1COyBmcm9tIGZ1bmMueWFtbCBtZW1vcnkgaWYgdW5zZXQpXG4gKiAtIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMgKGZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kczsgZnJvbSBmdW5jLnlhbWwgdGltZW91dCBpZiB1bnNldClcbiAqIC0gT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nIGZvciBmdW5jdGlvbiBjb25maWcvZW52OyBtZXJnZWQgd2l0aCBmdW5jLnlhbWwgY29uZmlnKVxuICogLSBPQ0lfQVBJR0FURVdBWV9ERVBMT1lNRU5UX0pTT04gKHBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT047IGRlZmF1bHQgcHJvamVjdCByb290IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbilcbiAqIC0gT0NES19QUk9KRUNUX0RJUiAoc2V0IGJ5IG9jZGsgQ0xJIHRvIGNhbGxlciBjd2Q7IHVzZWQgdG8gZGlzY292ZXIgZnVuYy55YW1sIGFuZCB0YXJnZXQvKVxuICogLSBPQ0lfU1RBVEVfQlVDS0VUIChmb3IgcmVtb3RlIHN0YXRlKVxuICogLSBPQ0lfU1RBVEVfQkFDS0VORF9UWVBFIChvY2l8aHR0cHxsb2NhbClcbiAqXG4gKiBXaGVuIE9DREtfUFJPSkVDVF9ESVIgaXMgc2V0IChlLmcuIHJ1bm5pbmcgYG5weCBvY2RrIGRlcGxveWAgZnJvbSBhIEphdmEgcHJvamVjdCksIGNvbmZpZ1xuICogZGlzY292ZXJzIGVpdGhlciB0YXJnZXQvKi5qYXIgb3IgcG9tLnhtbCtzcmMvIChhbmQgb3B0aW9uYWxseSBmdW5jLnlhbWwgbmFtZSwgdmVyc2lvbiwgY21kL2hhbmRsZXIpLlxuICogTm8gRG9ja2VyZmlsZSBpcyByZXF1aXJlZOKAlHRoZSBzdGFjayBnZW5lcmF0ZXMgb25lIGluIGxvY2FsLWV4ZWMgKGV4Y2x1ZGluZyBub2RlX21vZHVsZXMgdmlhIC5kb2NrZXJpZ25vcmUpLFxuICogdGhlbiBidWlsZHMsIHRhZ3MgKGZyb20gZnVuYy55YW1sIHZlcnNpb24pLCBhbmQgcHVzaGVzIHRvIE9DSVIuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICdvY2ktY29tbW9uJztcbmltcG9ydCAqIGFzIG9iamVjdHN0b3JhZ2UgZnJvbSAnb2NpLW9iamVjdHN0b3JhZ2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUJhY2tlbmRDb25maWcge1xuICB0eXBlOiAnb2NpJyB8ICdodHRwJyB8ICdsb2NhbCc7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB1cGRhdGVNZXRob2Q/OiBzdHJpbmc7XG4gIGxvY2tBZGRyZXNzPzogc3RyaW5nO1xuICB1bmxvY2tBZGRyZXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUNvbmZpZyB7XG4gIGNvbXBhcnRtZW50SWQ6IHN0cmluZztcbiAgb2NpckNvbXBhcnRtZW50SWQ/OiBzdHJpbmc7XG4gIHRlbmFuY3lJZDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQXBwTmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIFBhdGggdG8gSkFSIG9yIERvY2tlcmZpbGUgY29udGV4dCBmb3IgZnVuY3Rpb24gaW1hZ2U7IGVtcHR5ID0gbm8gYnVpbGQvZGVwbG95LiAqL1xuICBmdW5jdGlvbkphclBhdGg/OiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhcmdldC8gKGRpc2NvdmVyZWQ7IERvY2tlcmZpbGUgaXMgZ2VuZXJhdGVkIGluIGxvY2FsLWV4ZWMpLiAqL1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgLyoqIEltYWdlIHRhZyBmb3IgT0NJUiAoZnJvbSBmdW5jLnlhbWwgdmVyc2lvbiBvciBPQ0lfSU1BR0VfVEFHOyBkZWZhdWx0ICdsYXRlc3QnKS4gKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIC8qKiBKYXZhIEZESyBDTUQgaGFuZGxlciAoZnJvbSBmdW5jLnlhbWwgY21kL2hhbmRsZXIgb3IgT0NJX0ZVTkNUSU9OX0hBTkRMRVI7IGRlZmF1bHQgYmVsb3cpLiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBkZXBsb3kgdXNlcyBhIHRoaW4gRG9ja2VyZmlsZSAoQ09QWSB0YXJnZXQvKi5qYXIgb25seSk7IGZ1bGwgTWF2ZW4gYnVpbGQgb25seSBpbiByZWRlcGxveTpmdW5jdGlvbi4gKi9cbiAgdXNlVGhpbkRvY2tlcmZpbGU/OiBib29sZWFuO1xuICBvY2lyUmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiBtZW1vcnkgaW4gTUIgKDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzIpLiBGcm9tIGZ1bmMueWFtbCBtZW1vcnkgb3IgT0NJX0ZVTkNUSU9OX01FTU9SWV9NQi4gKi9cbiAgZnVuY3Rpb25NZW1vcnlNYj86IHN0cmluZztcbiAgLyoqIEZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kcyAoMeKAkzMwMCkuIEZyb20gZnVuYy55YW1sIHRpbWVvdXQgb3IgT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUy4gKi9cbiAgZnVuY3Rpb25UaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIEZ1bmN0aW9uIGNvbmZpZy9lbnYga2V5LXZhbHVlLiBGcm9tIGZ1bmMueWFtbCBjb25maWcgb3IgT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nKS4gKi9cbiAgZnVuY3Rpb25Db25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogUGF0aCB0byBBUEkgR2F0ZXdheSBkZXBsb3ltZW50IHNwZWMgSlNPTiAocm91dGVzKS4gVXNlIE9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTiBvciBkZWZhdWx0IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBpbiBwcm9qZWN0IHJvb3QuICovXG4gIGFwaUd3RGVwbG95bWVudEpzb25QYXRoPzogc3RyaW5nO1xuICBiYWNrZW5kPzogT2NpQmFja2VuZENvbmZpZztcbn1cblxuY29uc3QgREVGQVVMVF9BUElHV19ERVBMT1lNRU5UX0pTT04gPSBKU09OLnN0cmluZ2lmeShcbiAge1xuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnL3twYXRoKn0nLFxuICAgICAgICBtZXRob2RzOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgIHR5cGU6ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgIGZ1bmN0aW9uSWQ6ICcke2Z1bmN0aW9uX2lkfScsXG4gICAgICAgICAgcmVhZFRpbWVvdXRJblNlY29uZHM6IDMwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBudWxsLFxuICAyXG4pO1xuXG4vKiogT0NJUiBzaG9ydCByZWdpb24ga2V5cyAoZS5nLiBldS1mcmFua2Z1cnQtMSAtPiBmcmEpLiBVc2VkIHNvIGxvZ2luLCBidWlsZCwgcHVzaCBhbmQgZnVuY3Rpb24gaW1hZ2UgYWxsIHVzZSBzYW1lIHJlZ2lzdHJ5IGhvc3QuICovXG5leHBvcnQgY29uc3QgUkVHSU9OX1RPX09DSVJfSE9TVDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ2V1LWZyYW5rZnVydC0xJzogJ2ZyYScsICd1cy1waG9lbml4LTEnOiAncGh4JywgJ3VzLWFzaGJ1cm4tMSc6ICdpYWQnLCAndWstbG9uZG9uLTEnOiAnbGhyJyxcbiAgJ2FwLXRva3lvLTEnOiAnbnJ0JywgJ2FwLW11bWJhaS0xJzogJ2JvbScsICdhcC1zZW91bC0xJzogJ2ljbicsICdjYS10b3JvbnRvLTEnOiAneXl6JyxcbiAgJ3NhLXNhb3BhdWxvLTEnOiAnZ3J1JywgJ2FwLXN5ZG5leS0xJzogJ3N5ZCcsICdldS16dXJpY2gtMSc6ICd6cmgnLCAnbWUtZHViYWktMSc6ICdkeGInLFxuICAnYXAtb3Nha2EtMSc6ICdraXgnLCAnZXUtYW1zdGVyZGFtLTEnOiAnYW1zJywgJ2FwLXNpbmdhcG9yZS0xJzogJ3NpbicsICdhcC1oeWRlcmFiYWQtMSc6ICdoeWQnLFxuICAnZXUtbWlsYW4tMSc6ICdteHAnLCAnc2Etc2FudGlhZ28tMSc6ICdzY2wnLCAnYXAtbWVsYm91cm5lLTEnOiAnbWVsJywgJ2V1LXN0b2NraG9sbS0xJzogJ2FybicsXG4gICdtZS1qZWRkYWgtMSc6ICdqZWQnLCAnYWYtam9oYW5uZXNidXJnLTEnOiAnam5iJywgJ2lsLWplcnVzYWxlbS0xJzogJ3RsdicsICdteC1xdWVyZXRhcm8tMSc6ICdxcm8nLFxuICAnZXUtbWFyc2VpbGxlLTEnOiAnbXJzJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvY2lySG9zdEtleShyZWdpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBSRUdJT05fVE9fT0NJUl9IT1NUW3JlZ2lvbl0gPz8gcmVnaW9uO1xufVxuXG4vKiogRnVsbCBPQ0lSIGltYWdlIFVSTCBmb3IgdGhlIGZ1bmN0aW9uIChyZWdpc3RyeS9uYW1lc3BhY2UvcmVwbzp0YWcpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9jaUltYWdlVXJsKGNvbmZpZzogT2NpQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnaXN0cnkgPSBgJHtvY2lySG9zdEtleShjb25maWcucmVnaW9uKX0ub2Npci5pb2A7XG4gIGNvbnN0IHJlcG8gPSBjb25maWcub2NpclJlcG9zaXRvcnlOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUgfHwgJ29jaS1mdW5jdGlvbic7XG4gIGNvbnN0IHRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgcmV0dXJuIGAke3JlZ2lzdHJ5fS8ke2NvbmZpZy5uYW1lc3BhY2V9LyR7cmVwb306JHt0YWd9YDtcbn1cblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBmdW5jdGlvbiBuYW1lIGZyb20gZnVuYy55YW1sIChPQ0kgRnVuY3Rpb25zIGZvcm1hdCkuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJuYW1lOlwiIGxpbmUsIHRyaW1tZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sTmFtZShwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbmFtZTpcXHMqW1wiJ10/KFteXCInXFxzXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKG0pIHJldHVybiBtWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY21kL2hhbmRsZXIgZnJvbSBmdW5jLnlhbWwgKE9DSS9GbiBmb3JtYXQpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgXCJjbWQ6XCIgb3IgXCJoYW5kbGVyOlwiIGxpbmUsIHRyaW1tZWQ7IHVzZWQgYXMgRG9ja2VyIENNRCBmb3IgSmF2YSBGREsuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgY21kTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eXFxzKmNtZDpcXHMqW1wiJ10/KFteXCInXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKGNtZE1hdGNoKSByZXR1cm4gY21kTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgY29uc3QgaGFuZGxlck1hdGNoID0gY29udGVudC5tYXRjaCgvXlxccypoYW5kbGVyOlxccypbXCInXT8oW15cIidcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAoaGFuZGxlck1hdGNoKSByZXR1cm4gaGFuZGxlck1hdGNoWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdmVyc2lvbiBmcm9tIGZ1bmMueWFtbCAodXNlZCBhcyBPQ0lSIGltYWdlIHRhZykuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJ2ZXJzaW9uOlwiIGxpbmUsIHRyaW1tZWQ7IHNhbml0aXplZCBmb3IgRG9ja2VyIHRhZyAoYS16QS1aMC05Xy4tKS5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxWZXJzaW9uKHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ2Z1bmMueWFtbCcpO1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4Jyk7XG4gICAgICBjb25zdCBtID0gY29udGVudC5tYXRjaCgvXlxccyp2ZXJzaW9uOlxccypbXCInXT8oW15cIidcXHNcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCByYXcgPSBtWzFdLnRyaW0oKTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0gcmF3LnJlcGxhY2UoL1teYS16QS1aMC05Xy4tXS9nLCAnLScpLnJlcGxhY2UoLy0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkIHx8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFZBTElEX01FTU9SWV9NQiA9IG5ldyBTZXQoWzEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzJdKTtcblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBtZW1vcnkgKE1CKSBmcm9tIGZ1bmMueWFtbC4gT0NJIGFsbG93cyAxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIHZhbGlkOyBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbE1lbW9yeShwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbWVtb3J5OlxccyooXFxkKylcXHMqJC9tKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChtWzFdLCAxMCk7XG4gICAgICAgIGlmIChWQUxJRF9NRU1PUllfTUIuaGFzKG4pKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdGltZW91dCAoc2Vjb25kcykgZnJvbSBmdW5jLnlhbWwuIE9DSSBtYXggaXMgMzAwLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIGluIHJhbmdlIDHigJMzMDA7IG90aGVyd2lzZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sVGltZW91dChwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqdGltZW91dDpcXHMqKFxcZCspXFxzKiQvbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQobVsxXSwgMTApO1xuICAgICAgICBpZiAobiA+PSAxICYmIG4gPD0gMzAwKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY29uZmlnIChrZXktdmFsdWUgZW52KSBmcm9tIGZ1bmMueWFtbC4gRXhwZWN0cyBhIHRvcC1sZXZlbCBcImNvbmZpZzpcIiBibG9jayB3aXRoIGtleTogdmFsdWUgbGluZXMuXG4gKiBSZXR1cm5zIGEgcmVjb3JkIG9mIHN0cmluZyBrZXlzIGFuZCBzdHJpbmcgdmFsdWVzOyBlbXB0eSBpZiBub25lIG9yIHBhcnNlIGVycm9yLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Db25maWcgPSBmYWxzZTtcbiAgICBjb25zdCBjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkID09PSAnY29uZmlnOicgfHwgL15jb25maWdcXHMqOlxccyokLy50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgIGluQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5Db25maWcpIHtcbiAgICAgICAgaWYgKHRyaW1tZWQgIT09ICcnICYmICFsaW5lLnN0YXJ0c1dpdGgoJyAnKSAmJiAhbGluZS5zdGFydHNXaXRoKCdcXHQnKSkgYnJlYWs7XG4gICAgICAgIGNvbnN0IGt2ID0gbGluZS5tYXRjaCgvXlxccysoW2EtekEtWl9dW2EtekEtWjAtOV8tXSopXFxzKjpcXHMqKC4qKSQvKTtcbiAgICAgICAgaWYgKGt2KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga3ZbMV0udHJpbSgpO1xuICAgICAgICAgIGxldCB2YWwgPSBrdlsyXS50cmltKCk7XG4gICAgICAgICAgaWYgKCh2YWwuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWwuZW5kc1dpdGgoJ1wiJykpIHx8ICh2YWwuc3RhcnRzV2l0aChcIidcIikgJiYgdmFsLmVuZHNXaXRoKFwiJ1wiKSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA/IGNvbmZpZyA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogRW5zdXJlIG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVEZWZhdWx0QXBpR3dEZXBsb3ltZW50SnNvbihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24nKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwLCBERUZBVUxUX0FQSUdXX0RFUExPWU1FTlRfSlNPTiwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuY29uc3QgVEFJTF9GVU5DVElPTl9MT0dTX1NDUklQVCA9IGAjIS91c3IvYmluL2VudiBub2RlXG4vKipcbiAqIFRhaWwgT0NJIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9ncy4gR2VuZXJhdGVkIGJ5IE9DREsuXG4gKiBSdW4gZnJvbSBwcm9qZWN0IHJvb3QgYWZ0ZXIgZGVwbG95LiBSZXF1aXJlczogT0NJIENMSSwgT0NJX0NPTVBBUlRNRU5UX0lELCBhbmQgLm9jZGstb3V0cHV0cy5qc29uIChjcmVhdGVkIG9uIGRlcGxveSkuXG4gKi9cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IHNwYXduU3luYyB9ID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuXG5jb25zdCBkaXIgPSBwcm9jZXNzLmVudi5PQ0RLX1BST0pFQ1RfRElSIHx8IF9fZGlybmFtZTtcbmNvbnN0IG91dHB1dHNQYXRoID0gcGF0aC5qb2luKGRpciwgJy5vY2RrLW91dHB1dHMuanNvbicpO1xuaWYgKCFmcy5leGlzdHNTeW5jKG91dHB1dHNQYXRoKSkge1xuICBjb25zb2xlLmVycm9yKCdSdW4gZGVwbG95IGZpcnN0IHRvIGNyZWF0ZSAub2Nkay1vdXRwdXRzLmpzb24gaW4gdGhlIHByb2plY3Qgcm9vdC4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuY29uc3QgY29tcElkID0gcHJvY2Vzcy5lbnYuT0NJX0NPTVBBUlRNRU5UX0lEIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9PQ0lEO1xuaWYgKCFjb21wSWQpIHtcbiAgY29uc29sZS5lcnJvcignU2V0IE9DSV9DT01QQVJUTUVOVF9JRCAob3IgT0NJX0NPTVBBUlRNRU5UX09DSUQpLicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5sZXQgb3V0O1xudHJ5IHtcbiAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKG91dHB1dHNQYXRoLCAndXRmOCcpLnJlcGxhY2UoL15cXHVGRUZGLywgJycpLnRyaW0oKTtcbiAgY29uc3QgZmlyc3QgPSByYXcuaW5kZXhPZigneycpO1xuICBjb25zdCBsYXN0ID0gcmF3Lmxhc3RJbmRleE9mKCd9Jyk7XG4gIGlmIChmaXJzdCA9PT0gLTEgfHwgbGFzdCA8PSBmaXJzdCkgdGhyb3cgbmV3IEVycm9yKCdObyBKU09OJyk7XG4gIG91dCA9IEpTT04ucGFyc2UocmF3LnNsaWNlKGZpcnN0LCBsYXN0ICsgMSkpO1xufSBjYXRjaCAoZSkge1xuICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgLm9jZGstb3V0cHV0cy5qc29uLiBSdW4gZGVwbG95IGZpcnN0LicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5jb25zdCBvdXRwdXRzID0gb3V0LmxvZ19ncm91cF9pZCAhPSBudWxsID8gb3V0IDogT2JqZWN0LnZhbHVlcyhvdXQpLmZpbmQoKHYpID0+IHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICh2LmxvZ19ncm91cF9pZCAhPSBudWxsIHx8IHYuZXhlY3V0aW9uX2xvZ19pZCAhPSBudWxsKSkgfHwgb3V0O1xuZnVuY3Rpb24gdmFsKG8sIGspIHtcbiAgY29uc3QgdiA9IG9ba107XG4gIGlmICghdikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgcmV0dXJuIHY7XG4gIGlmICh2ICYmIHR5cGVvZiB2LnZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHYudmFsdWU7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5jb25zdCBsb2dHcm91cElkID0gdmFsKG91dHB1dHMsICdsb2dfZ3JvdXBfaWQnKTtcbmNvbnN0IGV4ZWN1dGlvbkxvZ0lkID0gdmFsKG91dHB1dHMsICdleGVjdXRpb25fbG9nX2lkJyk7XG5pZiAoIWxvZ0dyb3VwSWQgfHwgIWV4ZWN1dGlvbkxvZ0lkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ2xvZ19ncm91cF9pZCBvciBleGVjdXRpb25fbG9nX2lkIG1pc3NpbmcgaW4gLm9jZGstb3V0cHV0cy5qc29uJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbmNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5jb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSAxMCAqIDYwICogMTAwMCk7XG5jb25zdCB0aW1lU3RhcnQgPSBzdGFydC50b0lTT1N0cmluZygpO1xuY29uc3QgdGltZUVuZCA9IG5vdy50b0lTT1N0cmluZygpO1xuY29uc3Qgc2NvcGUgPSBjb21wSWQgKyAnLycgKyBsb2dHcm91cElkICsgJy8nICsgZXhlY3V0aW9uTG9nSWQ7XG5jb25zdCBxdWVyeSA9ICdzZWFyY2ggXCInICsgc2NvcGUgKyAnXCIgfCBzb3J0IGJ5IGRhdGV0aW1lIGRlc2MgfCBsaW1pdCA1MCc7XG5jb25zdCByID0gc3Bhd25TeW5jKCdvY2knLCBbJ2xvZ2dpbmctc2VhcmNoJywgJ3NlYXJjaC1sb2dzJywgJy0tc2VhcmNoLXF1ZXJ5JywgcXVlcnksICctLXRpbWUtc3RhcnQnLCB0aW1lU3RhcnQsICctLXRpbWUtZW5kJywgdGltZUVuZF0sIHsgc3RkaW86ICdpbmhlcml0Jywgc2hlbGw6IHRydWUgfSk7XG5wcm9jZXNzLmV4aXQoci5zdGF0dXMgPz8gMSk7XG5gO1xuXG4vKiogRW5zdXJlIHRhaWwtZnVuY3Rpb24tbG9ncy5qcyBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVUYWlsRnVuY3Rpb25Mb2dzU2NyaXB0KHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhaWwtZnVuY3Rpb24tbG9ncy5qcycpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHAsIFRBSUxfRlVOQ1RJT05fTE9HU19TQ1JJUFQsICd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbi8qKiBSZWFkIHRlbmFuY3kgYW5kIHJlZ2lvbiBmcm9tIE9DSSBDTEkgY29uZmlnLiBEZWZhdWx0IGZpbGU6IH4vLm9jaS9jb25maWcsIGRlZmF1bHQgcHJvZmlsZTogREVGQVVMVC4gKi9cbmZ1bmN0aW9uIHJlYWRUZW5hbmN5QW5kUmVnaW9uRnJvbUNsaUNvbmZpZygpOiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSByZXR1cm4ge307XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Qcm9maWxlID0gZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0OiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9ID0ge307XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdbJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgIGluUHJvZmlsZSA9IHRyaW1tZWQuc2xpY2UoMSwgLTEpID09PSBwcm9maWxlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Qcm9maWxlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGVxID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgICBpZiAoZXEgPD0gMCkgY29udGludWU7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZC5zbGljZShlcSArIDEpLnRyaW0oKTtcbiAgICAgIGlmIChrZXkgPT09ICd0ZW5hbmN5JykgcmVzdWx0LnRlbmFuY3kgPSB2YWx1ZTtcbiAgICAgIGlmIChrZXkgPT09ICdyZWdpb24nKSByZXN1bHQucmVnaW9uID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKiogR2V0IG9iamVjdCBzdG9yYWdlIG5hbWVzcGFjZSB2aWEgT0NJIFNESyAoc2FtZSBhcyBcIm9jaSBvcyBucyBnZXRcIikuIFVzZXMgfi8ub2NpL2NvbmZpZywgREVGQVVMVCBwcm9maWxlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgY29tbW9uLkNvbmZpZ0ZpbGVBdXRoZW50aWNhdGlvbkRldGFpbHNQcm92aWRlcihjb25maWdQYXRoLCBwcm9maWxlKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgb2JqZWN0c3RvcmFnZS5PYmplY3RTdG9yYWdlQ2xpZW50KHsgYXV0aGVudGljYXRpb25EZXRhaWxzUHJvdmlkZXI6IHByb3ZpZGVyIH0pO1xuICAgIGNsaWVudC5yZWdpb25JZCA9IHJlZ2lvbjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXROYW1lc3BhY2Uoe1xuICAgICAgY29tcGFydG1lbnRJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UudmFsdWU/LnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgYSBKQVIgdW5kZXIgdGFyZ2V0LyAocHJlZmVyIG9uZSBtYXRjaGluZyBuYW1lLCBlbHNlIGZpcnN0IC5qYXIpLlxuICovXG5mdW5jdGlvbiBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpcjogc3RyaW5nLCBmdW5jdGlvbk5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhcmdldCcpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRhcmdldERpcik7XG4gICAgY29uc3QgamFycyA9IGZpbGVzLmZpbHRlcigoZikgPT4gZi5lbmRzV2l0aCgnLmphcicpICYmICFmLmVuZHNXaXRoKCctc291cmNlcy5qYXInKSk7XG4gICAgaWYgKGphcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gamFycy5maW5kKChqKSA9PiBqLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIGlmIChtYXRjaCkgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIGphcnNbMF0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBUcnVlIGlmIHByb2plY3QgaGFzIHBvbS54bWwgYW5kIHNyYy8gKE1hdmVuIHNvdXJjZSBsYXlvdXQgZm9yIGJ1aWxkLWZyb20tc291cmNlIERvY2tlcmZpbGUpLiAqL1xuZnVuY3Rpb24gaGFzUG9tQW5kU3JjKHByb2plY3REaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwb20gPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3BvbS54bWwnKTtcbiAgY29uc3Qgc3JjID0gcGF0aC5qb2luKHByb2plY3REaXIsICdzcmMnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwb20pICYmIGZzLmV4aXN0c1N5bmMoc3JjKSAmJiBmcy5zdGF0U3luYyhzcmMpLmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNjb3ZlckZyb21GdW5jWWFtbEFuZFRhcmdldCgpOiB7XG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbiAgZnVuY3Rpb25BcHBOYW1lPzogc3RyaW5nO1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIGhhbmRsZXI/OiBzdHJpbmc7XG4gIHVzZVRoaW5Eb2NrZXJmaWxlPzogYm9vbGVhbjtcbiAgbWVtb3J5TWI/OiBudW1iZXI7XG4gIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufSB7XG4gIGxldCBwcm9qZWN0RGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUj8udHJpbSgpO1xuICBpZiAoIXByb2plY3REaXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLm9jZGstcHJvamVjdC1kaXInKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBwcm9qZWN0RGlyID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4JykudHJpbSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG4gIGlmICghcHJvamVjdERpciAmJiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSkge1xuICAgIGNvbnN0IHAgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRILnRyaW0oKSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHByb2plY3REaXIgPSBmcy5zdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpID8gcCA6IHBhdGguZGlybmFtZShwKTtcbiAgfVxuICBpZiAoIXByb2plY3REaXIpIHByb2plY3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBwcm9qZWN0RGlyID0gcHJvamVjdERpciA/IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyKSA6ICcnO1xuICBpZiAoIXByb2plY3REaXIgfHwgIWZzLmV4aXN0c1N5bmMocHJvamVjdERpcikpIHJldHVybiB7fTtcblxuICBjb25zdCBuYW1lRnJvbVlhbWwgPSBnZXRGdW5jWWFtbE5hbWUocHJvamVjdERpcik7XG4gIGNvbnN0IGphclBhdGggPSBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpciwgbmFtZUZyb21ZYW1sIHx8IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhhc1NvdXJjZSA9IGhhc1BvbUFuZFNyYyhwcm9qZWN0RGlyKTtcbiAgaWYgKCFqYXJQYXRoICYmICFoYXNTb3VyY2UpIHJldHVybiB7fTtcblxuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fTkFNRT8udHJpbSgpIHx8IG5hbWVGcm9tWWFtbCB8fCBwYXRoLmJhc2VuYW1lKHByb2plY3REaXIpIHx8ICdvY2ktZnVuY3Rpb24nO1xuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBnZXRGdW5jWWFtbFZlcnNpb24ocHJvamVjdERpcik7XG4gIGNvbnN0IGhhbmRsZXIgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSEFORExFUj8udHJpbSgpIHx8IGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyKTtcbiAgY29uc3QgdXNlVGhpbkRvY2tlcmZpbGUgPSAhIWphclBhdGg7XG4gIGNvbnN0IG1lbW9yeU1iID0gZ2V0RnVuY1lhbWxNZW1vcnkocHJvamVjdERpcik7XG4gIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gZ2V0RnVuY1lhbWxUaW1lb3V0KHByb2plY3REaXIpO1xuICBjb25zdCBjb25maWcgPSBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyKTtcblxuICByZXR1cm4ge1xuICAgIGZ1bmN0aW9uTmFtZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRT8udHJpbSgpIHx8IGZ1bmN0aW9uTmFtZSxcbiAgICBkb2NrZXJDb250ZXh0UGF0aDogcGF0aC5yZXNvbHZlKHByb2plY3REaXIpLFxuICAgIGltYWdlVGFnOiBpbWFnZVRhZyB8fCB1bmRlZmluZWQsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgbWVtb3J5TWIsXG4gICAgdGltZW91dFNlY29uZHMsXG4gICAgY29uZmlnLFxuICB9O1xufVxuXG5jb25zdCBiYWNrZW5kVHlwZSA9IChwcm9jZXNzLmVudi5PQ0lfU1RBVEVfQkFDS0VORF9UWVBFIHx8ICdsb2NhbCcpIGFzICdvY2knIHwgJ2h0dHAnIHwgJ2xvY2FsJztcblxuY29uc3QgYmFja2VuZENvbmZpZzogT2NpQmFja2VuZENvbmZpZyB8IHVuZGVmaW5lZCA9IGJhY2tlbmRUeXBlID09PSAnbG9jYWwnXG4gID8gdW5kZWZpbmVkXG4gIDogYmFja2VuZFR5cGUgPT09ICdvY2knXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdvY2knLFxuICAgICAgICBidWNrZXQ6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9CVUNLRVQgfHwgJ3RmLXN0YXRlJyxcbiAgICAgICAga2V5OiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfS0VZIHx8ICdmdW5jdGlvbi1zdGFjay90ZXJyYWZvcm0udGZzdGF0ZScsXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIHR5cGU6ICdodHRwJyxcbiAgICAgICAgYWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfQUREUkVTUyB8fCAnJyxcbiAgICAgICAgdXBkYXRlTWV0aG9kOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VUERBVEVfTUVUSE9EIHx8ICdQVVQnLFxuICAgICAgICBsb2NrQWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfTE9DS19BRERSRVNTLFxuICAgICAgICB1bmxvY2tBZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VTkxPQ0tfQUREUkVTUyxcbiAgICAgIH07XG5cbi8qKlxuICogTG9hZCBPQ0kgY29uZmlnIGZyb20gZW52IGFuZCBDTEkgY29uZmlnLiBXaGVuIE9DSV9OQU1FU1BBQ0UgaXMgdW5zZXQsIGZldGNoZXMgaXQgdmlhIE9DSSBTREsgKGdldE5hbWVzcGFjZSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPY2lDb25maWcoKTogUHJvbWlzZTxPY2lDb25maWc+IHtcbiAgY29uc3QgY2xpQ29uZmlnID0gcmVhZFRlbmFuY3lBbmRSZWdpb25Gcm9tQ2xpQ29uZmlnKCk7XG4gIGNvbnN0IGNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfSUQ/LnRyaW0oKSB8fCAnb2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uJztcbiAgY29uc3Qgb2NpckNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfT0NJUl9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IGNvbXBhcnRtZW50SWQ7XG4gIGNvbnN0IHRlbmFuY3lJZCA9IHByb2Nlc3MuZW52Lk9DSV9URU5BTkNZX0lEPy50cmltKCkgfHwgY2xpQ29uZmlnLnRlbmFuY3k/LnRyaW0oKSB8fCAnb2NpZDEudGVuYW5jeS5vYzEuLmFhYWFhYWEuLi4nO1xuICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5PQ0lfUkVHSU9OPy50cmltKCkgfHwgY2xpQ29uZmlnLnJlZ2lvbj8udHJpbSgpIHx8ICdldS1mcmFua2Z1cnQtMSc7XG5cbiAgaWYgKCFvY2lyQ29tcGFydG1lbnRJZCB8fCBvY2lyQ29tcGFydG1lbnRJZC5pbmNsdWRlcygncm9vdCcpKSB7XG4gICAgY29uc29sZS53YXJuKCfimqDvuI8gIFdBUk5JTkc6IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIG5vdCBzZXQgb3Igc2V0IHRvIHJvb3QgY29tcGFydG1lbnQuJyk7XG4gICAgY29uc29sZS53YXJuKCcgICBQbGVhc2Ugc2V0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIHRvIHlvdXIgaG9tZSBjb21wYXJ0bWVudCBPQ0lELicpO1xuICAgIGNvbnNvbGUud2FybignICAgRXhhbXBsZTogZXhwb3J0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEPVwib2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uXCInKTtcbiAgfVxuXG4gIGxldCBuYW1lc3BhY2UgPSBwcm9jZXNzLmVudi5PQ0lfTkFNRVNQQUNFPy50cmltKCk7XG4gIGlmICghbmFtZXNwYWNlIHx8IG5hbWVzcGFjZSA9PT0gJ3lvdXItbmFtZXNwYWNlJykge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkLCByZWdpb24pO1xuICAgIGlmIChyZXNvbHZlZCkgbmFtZXNwYWNlID0gcmVzb2x2ZWQ7XG4gICAgZWxzZSBpZiAoIW5hbWVzcGFjZSkgbmFtZXNwYWNlID0gJ3lvdXItbmFtZXNwYWNlJztcbiAgICBpZiAobmFtZXNwYWNlID09PSAneW91ci1uYW1lc3BhY2UnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyAgT0NJX05BTUVTUEFDRSBub3Qgc2V0IGFuZCBTREsgY291bGQgbm90IHJlc29sdmUgaXQuIFNldCBPQ0lfTkFNRVNQQUNFIG9yIHJ1biBcIm9jaSBzZXR1cCBjb25maWdcIi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkaXNjb3ZlcmVkID0gZGlzY292ZXJGcm9tRnVuY1lhbWxBbmRUYXJnZXQoKTtcblxuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBkaXNjb3ZlcmVkLmltYWdlVGFnIHx8ICdsYXRlc3QnO1xuXG4gIGxldCBkb2NrZXJDb250ZXh0UGF0aCA9IGRpc2NvdmVyZWQuZG9ja2VyQ29udGV4dFBhdGg7XG4gIGlmICghZG9ja2VyQ29udGV4dFBhdGggJiYgcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkpIHtcbiAgICBjb25zdCBwID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9KQVJfUEFUSC50cmltKCkpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBkb2NrZXJDb250ZXh0UGF0aCA9IGZzLnN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkgPyBwIDogcGF0aC5kaXJuYW1lKHApO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlciA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9IQU5ETEVSPy50cmltKCkgfHwgZGlzY292ZXJlZC5oYW5kbGVyO1xuICBjb25zdCB1c2VUaGluRG9ja2VyZmlsZSA9IGRpc2NvdmVyZWQudXNlVGhpbkRvY2tlcmZpbGUgPz8gZmFsc2U7XG5cbiAgY29uc3QgbWVtb3J5RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX01FTU9SWV9NQj8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvbk1lbW9yeU1iID0gbWVtb3J5RW52XG4gICAgPyBTdHJpbmcocGFyc2VJbnQobWVtb3J5RW52LCAxMCkpXG4gICAgOiAoZGlzY292ZXJlZC5tZW1vcnlNYiAhPSBudWxsID8gU3RyaW5nKGRpc2NvdmVyZWQubWVtb3J5TWIpIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCB0aW1lb3V0RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUz8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvblRpbWVvdXRTZWNvbmRzID0gdGltZW91dEVudlxuICAgID8gcGFyc2VJbnQodGltZW91dEVudiwgMTApXG4gICAgOiBkaXNjb3ZlcmVkLnRpbWVvdXRTZWNvbmRzO1xuXG4gIGxldCBmdW5jdGlvbkNvbmZpZyA9IGRpc2NvdmVyZWQuY29uZmlnO1xuICBjb25zdCBjb25maWdFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fQ09ORklHPy50cmltKCk7XG4gIGlmIChjb25maWdFbnYpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb25maWdFbnYpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBmdW5jdGlvbkNvbmZpZyA9IHsgLi4uZnVuY3Rpb25Db25maWcsIC4uLnBhcnNlZCB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlIGludmFsaWQgSlNPTlxuICAgIH1cbiAgfVxuICBpZiAoZnVuY3Rpb25Db25maWcgJiYgT2JqZWN0LmtleXMoZnVuY3Rpb25Db25maWcpLmxlbmd0aCA9PT0gMCkgZnVuY3Rpb25Db25maWcgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYXBpR3dEZXBsb3ltZW50SnNvbkVudiA9IHByb2Nlc3MuZW52Lk9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTj8udHJpbSgpO1xuICBjb25zdCBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCA9IGFwaUd3RGVwbG95bWVudEpzb25FbnZcbiAgICA/IHBhdGgucmVzb2x2ZShhcGlHd0RlcGxveW1lbnRKc29uRW52KVxuICAgIDogZG9ja2VyQ29udGV4dFBhdGhcbiAgICAgID8gZW5zdXJlRGVmYXVsdEFwaUd3RGVwbG95bWVudEpzb24oZG9ja2VyQ29udGV4dFBhdGgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgZW5zdXJlVGFpbEZ1bmN0aW9uTG9nc1NjcmlwdChkb2NrZXJDb250ZXh0UGF0aCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbXBhcnRtZW50SWQsXG4gICAgb2NpckNvbXBhcnRtZW50SWQ6IG9jaXJDb21wYXJ0bWVudElkIHx8IHVuZGVmaW5lZCxcbiAgICB0ZW5hbmN5SWQsXG4gICAgcmVnaW9uLFxuICAgIG5hbWVzcGFjZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRSA/PyBkaXNjb3ZlcmVkLmZ1bmN0aW9uQXBwTmFtZSA/PyAnJyxcbiAgICBmdW5jdGlvbk5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9OQU1FID8/IGRpc2NvdmVyZWQuZnVuY3Rpb25OYW1lID8/ICcnLFxuICAgIGZ1bmN0aW9uSmFyUGF0aDogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkgfHwgdW5kZWZpbmVkLFxuICAgIGRvY2tlckNvbnRleHRQYXRoOiBkb2NrZXJDb250ZXh0UGF0aCB8fCB1bmRlZmluZWQsXG4gICAgaW1hZ2VUYWcsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgb2NpclJlcG9zaXRvcnlOYW1lOiBwcm9jZXNzLmVudi5PQ0lfT0NJUl9SRVBPU0lUT1JZX05BTUUgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uTWVtb3J5TWI6IGZ1bmN0aW9uTWVtb3J5TWIgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uVGltZW91dFNlY29uZHM6IGZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uQ29uZmlnLFxuICAgIGFwaUd3RGVwbG95bWVudEpzb25QYXRoOiBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCB8fCB1bmRlZmluZWQsXG4gICAgYmFja2VuZDogYmFja2VuZENvbmZpZyxcbiAgfTtcbn1cbiJdfQ==
579
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NvbmZpZy9vY2ktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkVILGtDQUVDO0FBR0Qsd0NBS0M7QUF5WUQsb0NBd0ZDO0FBdGpCRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixtREFBcUM7QUFDckMsaUVBQW1EO0FBMENuRCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xEO0lBQ0UsTUFBTSxFQUFFO1FBQ047WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUNuQyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsRUFBRTthQUN6QjtTQUNGO0tBQ0Y7Q0FDRixFQUNELElBQUksRUFDSixDQUFDLENBQ0YsQ0FBQztBQUVGLHFJQUFxSTtBQUN4SCxRQUFBLG1CQUFtQixHQUEyQjtJQUN6RCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLO0lBQzNGLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLO0lBQ3JGLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLO0lBQ3ZGLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixF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RSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxJQUFJLFNBQVM7UUFDdkUsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksU0FBUztRQUNqRCxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTO1FBQzdCLGlCQUFpQjtRQUNqQixrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLFNBQVM7UUFDckUsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksU0FBUztRQUMvQyxzQkFBc0IsRUFBRSxzQkFBc0IsSUFBSSxTQUFTO1FBQzNELGNBQWM7UUFDZCx1QkFBdUIsRUFBRSx1QkFBdUIsSUFBSSxTQUFTO1FBQzdELE9BQU8sRUFBRSxhQUFhO0tBQ3ZCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPQ0kgQ29uZmlndXJhdGlvblxuICpcbiAqIFNldCB0aGVzZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHVwZGF0ZSBkZWZhdWx0czpcbiAqIC0gT0NJX0NPTVBBUlRNRU5UX0lEXG4gKiAtIE9DSV9URU5BTkNZX0lEXG4gKiAtIE9DSV9SRUdJT05cbiAqIC0gT0NJX05BTUVTUEFDRSAoaWYgdW5zZXQsIG9idGFpbmVkIHZpYSBPQ0kgU0RLIGdldE5hbWVzcGFjZSlcbiAqIC0gT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgKGZvciBPQ0lSOyBtdXN0IGJlIG5vbi1yb290IGZvciBmdWxsIHN0YWNrKVxuICogLSBPQ0lfRlVOQ1RJT05fQVBQX05BTUUgKEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiBuYW1lOyBkZWZhdWx0IGVtcHR5KVxuICogLSBPQ0lfRlVOQ1RJT05fTkFNRSAoRnVuY3Rpb24gbmFtZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX0hBTkRMRVIgKEphdmEgRkRLIENNRCBoYW5kbGVyLCBlLmcuIGNvbS5leGFtcGxlLkhhbmRsZXI6OmhhbmRsZVJlcXVlc3Q7IGZyb20gZnVuYy55YW1sIGNtZC9oYW5kbGVyIGlmIHVuc2V0KVxuICogLSBPQ0lfRlVOQ1RJT05fSkFSX1BBVEggKFBhdGggdG8gSkFSIG9yIHByb2plY3QgZGlyIGZvciBmdW5jdGlvbiBpbWFnZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX01FTU9SWV9NQiAoZnVuY3Rpb24gbWVtb3J5IGluIE1COyBmcm9tIGZ1bmMueWFtbCBtZW1vcnkgaWYgdW5zZXQpXG4gKiAtIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMgKGZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kczsgZnJvbSBmdW5jLnlhbWwgdGltZW91dCBpZiB1bnNldClcbiAqIC0gT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nIGZvciBmdW5jdGlvbiBjb25maWcvZW52OyBtZXJnZWQgd2l0aCBmdW5jLnlhbWwgY29uZmlnKVxuICogLSBPQ0lfQVBJR0FURVdBWV9ERVBMT1lNRU5UX0pTT04gKHBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT047IGRlZmF1bHQgcHJvamVjdCByb290IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbilcbiAqIC0gT0NES19QUk9KRUNUX0RJUiAoc2V0IGJ5IG9jZGsgQ0xJIHRvIGNhbGxlciBjd2Q7IHVzZWQgdG8gZGlzY292ZXIgZnVuYy55YW1sIGFuZCB0YXJnZXQvKVxuICogLSBPQ0lfU1RBVEVfQlVDS0VUIChmb3IgcmVtb3RlIHN0YXRlKVxuICogLSBPQ0lfU1RBVEVfQkFDS0VORF9UWVBFIChvY2l8aHR0cHxsb2NhbClcbiAqXG4gKiBXaGVuIE9DREtfUFJPSkVDVF9ESVIgaXMgc2V0IChlLmcuIHJ1bm5pbmcgYG5weCBvY2RrIGRlcGxveWAgZnJvbSBhIEphdmEgcHJvamVjdCksIGNvbmZpZ1xuICogZGlzY292ZXJzIGVpdGhlciB0YXJnZXQvKi5qYXIgb3IgcG9tLnhtbCtzcmMvIChhbmQgb3B0aW9uYWxseSBmdW5jLnlhbWwgbmFtZSwgdmVyc2lvbiwgY21kL2hhbmRsZXIpLlxuICogTm8gRG9ja2VyZmlsZSBpcyByZXF1aXJlZOKAlHRoZSBzdGFjayBnZW5lcmF0ZXMgb25lIGluIGxvY2FsLWV4ZWMgKGV4Y2x1ZGluZyBub2RlX21vZHVsZXMgdmlhIC5kb2NrZXJpZ25vcmUpLFxuICogdGhlbiBidWlsZHMsIHRhZ3MgKGZyb20gZnVuYy55YW1sIHZlcnNpb24pLCBhbmQgcHVzaGVzIHRvIE9DSVIuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICdvY2ktY29tbW9uJztcbmltcG9ydCAqIGFzIG9iamVjdHN0b3JhZ2UgZnJvbSAnb2NpLW9iamVjdHN0b3JhZ2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUJhY2tlbmRDb25maWcge1xuICB0eXBlOiAnb2NpJyB8ICdodHRwJyB8ICdsb2NhbCc7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB1cGRhdGVNZXRob2Q/OiBzdHJpbmc7XG4gIGxvY2tBZGRyZXNzPzogc3RyaW5nO1xuICB1bmxvY2tBZGRyZXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUNvbmZpZyB7XG4gIGNvbXBhcnRtZW50SWQ6IHN0cmluZztcbiAgb2NpckNvbXBhcnRtZW50SWQ/OiBzdHJpbmc7XG4gIHRlbmFuY3lJZDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQXBwTmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIFBhdGggdG8gSkFSIG9yIERvY2tlcmZpbGUgY29udGV4dCBmb3IgZnVuY3Rpb24gaW1hZ2U7IGVtcHR5ID0gbm8gYnVpbGQvZGVwbG95LiAqL1xuICBmdW5jdGlvbkphclBhdGg/OiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhcmdldC8gKGRpc2NvdmVyZWQ7IERvY2tlcmZpbGUgaXMgZ2VuZXJhdGVkIGluIGxvY2FsLWV4ZWMpLiAqL1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgLyoqIEltYWdlIHRhZyBmb3IgT0NJUiAoZnJvbSBmdW5jLnlhbWwgdmVyc2lvbiBvciBPQ0lfSU1BR0VfVEFHOyBkZWZhdWx0ICdsYXRlc3QnKS4gKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIC8qKiBKYXZhIEZESyBDTUQgaGFuZGxlciAoZnJvbSBmdW5jLnlhbWwgY21kL2hhbmRsZXIgb3IgT0NJX0ZVTkNUSU9OX0hBTkRMRVI7IGRlZmF1bHQgYmVsb3cpLiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBkZXBsb3kgdXNlcyBhIHRoaW4gRG9ja2VyZmlsZSAoQ09QWSB0YXJnZXQvKi5qYXIgb25seSk7IGZ1bGwgTWF2ZW4gYnVpbGQgb25seSBpbiByZWRlcGxveTpmdW5jdGlvbi4gKi9cbiAgdXNlVGhpbkRvY2tlcmZpbGU/OiBib29sZWFuO1xuICBvY2lyUmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiBtZW1vcnkgaW4gTUIgKDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzIpLiBGcm9tIGZ1bmMueWFtbCBtZW1vcnkgb3IgT0NJX0ZVTkNUSU9OX01FTU9SWV9NQi4gKi9cbiAgZnVuY3Rpb25NZW1vcnlNYj86IHN0cmluZztcbiAgLyoqIEZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kcyAoMeKAkzMwMCkuIEZyb20gZnVuYy55YW1sIHRpbWVvdXQgb3IgT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUy4gKi9cbiAgZnVuY3Rpb25UaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIEZ1bmN0aW9uIGNvbmZpZy9lbnYga2V5LXZhbHVlLiBGcm9tIGZ1bmMueWFtbCBjb25maWcgb3IgT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nKS4gKi9cbiAgZnVuY3Rpb25Db25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogUGF0aCB0byBBUEkgR2F0ZXdheSBkZXBsb3ltZW50IHNwZWMgSlNPTiAocm91dGVzKS4gVXNlIE9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTiBvciBkZWZhdWx0IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBpbiBwcm9qZWN0IHJvb3QuICovXG4gIGFwaUd3RGVwbG95bWVudEpzb25QYXRoPzogc3RyaW5nO1xuICBiYWNrZW5kPzogT2NpQmFja2VuZENvbmZpZztcbn1cblxuY29uc3QgREVGQVVMVF9BUElHV19ERVBMT1lNRU5UX0pTT04gPSBKU09OLnN0cmluZ2lmeShcbiAge1xuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnL3twYXRoKn0nLFxuICAgICAgICBtZXRob2RzOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgIHR5cGU6ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgIGZ1bmN0aW9uSWQ6ICcke2Z1bmN0aW9uX2lkfScsXG4gICAgICAgICAgcmVhZFRpbWVvdXRJblNlY29uZHM6IDMwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBudWxsLFxuICAyXG4pO1xuXG4vKiogT0NJUiBzaG9ydCByZWdpb24ga2V5cyAoZS5nLiBldS1mcmFua2Z1cnQtMSAtPiBmcmEpLiBVc2VkIHNvIGxvZ2luLCBidWlsZCwgcHVzaCBhbmQgZnVuY3Rpb24gaW1hZ2UgYWxsIHVzZSBzYW1lIHJlZ2lzdHJ5IGhvc3QuICovXG5leHBvcnQgY29uc3QgUkVHSU9OX1RPX09DSVJfSE9TVDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ2V1LWZyYW5rZnVydC0xJzogJ2ZyYScsICd1cy1waG9lbml4LTEnOiAncGh4JywgJ3VzLWFzaGJ1cm4tMSc6ICdpYWQnLCAndWstbG9uZG9uLTEnOiAnbGhyJyxcbiAgJ2FwLXRva3lvLTEnOiAnbnJ0JywgJ2FwLW11bWJhaS0xJzogJ2JvbScsICdhcC1zZW91bC0xJzogJ2ljbicsICdjYS10b3JvbnRvLTEnOiAneXl6JyxcbiAgJ3NhLXNhb3BhdWxvLTEnOiAnZ3J1JywgJ2FwLXN5ZG5leS0xJzogJ3N5ZCcsICdldS16dXJpY2gtMSc6ICd6cmgnLCAnbWUtZHViYWktMSc6ICdkeGInLFxuICAnYXAtb3Nha2EtMSc6ICdraXgnLCAnZXUtYW1zdGVyZGFtLTEnOiAnYW1zJywgJ2FwLXNpbmdhcG9yZS0xJzogJ3NpbicsICdhcC1oeWRlcmFiYWQtMSc6ICdoeWQnLFxuICAnZXUtbWlsYW4tMSc6ICdteHAnLCAnc2Etc2FudGlhZ28tMSc6ICdzY2wnLCAnYXAtbWVsYm91cm5lLTEnOiAnbWVsJywgJ2V1LXN0b2NraG9sbS0xJzogJ2FybicsXG4gICdtZS1qZWRkYWgtMSc6ICdqZWQnLCAnYWYtam9oYW5uZXNidXJnLTEnOiAnam5iJywgJ2lsLWplcnVzYWxlbS0xJzogJ3RsdicsICdteC1xdWVyZXRhcm8tMSc6ICdxcm8nLFxuICAnZXUtbWFyc2VpbGxlLTEnOiAnbXJzJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvY2lySG9zdEtleShyZWdpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBSRUdJT05fVE9fT0NJUl9IT1NUW3JlZ2lvbl0gPz8gcmVnaW9uO1xufVxuXG4vKiogRnVsbCBPQ0lSIGltYWdlIFVSTCBmb3IgdGhlIGZ1bmN0aW9uIChyZWdpc3RyeS9uYW1lc3BhY2UvcmVwbzp0YWcpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9jaUltYWdlVXJsKGNvbmZpZzogT2NpQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnaXN0cnkgPSBgJHtvY2lySG9zdEtleShjb25maWcucmVnaW9uKX0ub2Npci5pb2A7XG4gIGNvbnN0IHJlcG8gPSBjb25maWcub2NpclJlcG9zaXRvcnlOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUgfHwgJ29jaS1mdW5jdGlvbic7XG4gIGNvbnN0IHRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgcmV0dXJuIGAke3JlZ2lzdHJ5fS8ke2NvbmZpZy5uYW1lc3BhY2V9LyR7cmVwb306JHt0YWd9YDtcbn1cblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBmdW5jdGlvbiBuYW1lIGZyb20gZnVuYy55YW1sIChPQ0kgRnVuY3Rpb25zIGZvcm1hdCkuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJuYW1lOlwiIGxpbmUsIHRyaW1tZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sTmFtZShwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbmFtZTpcXHMqW1wiJ10/KFteXCInXFxzXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKG0pIHJldHVybiBtWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY21kL2hhbmRsZXIgZnJvbSBmdW5jLnlhbWwgKE9DSS9GbiBmb3JtYXQpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgXCJjbWQ6XCIgb3IgXCJoYW5kbGVyOlwiIGxpbmUsIHRyaW1tZWQ7IHVzZWQgYXMgRG9ja2VyIENNRCBmb3IgSmF2YSBGREsuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgY21kTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eXFxzKmNtZDpcXHMqW1wiJ10/KFteXCInXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKGNtZE1hdGNoKSByZXR1cm4gY21kTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgY29uc3QgaGFuZGxlck1hdGNoID0gY29udGVudC5tYXRjaCgvXlxccypoYW5kbGVyOlxccypbXCInXT8oW15cIidcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAoaGFuZGxlck1hdGNoKSByZXR1cm4gaGFuZGxlck1hdGNoWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdmVyc2lvbiBmcm9tIGZ1bmMueWFtbCAodXNlZCBhcyBPQ0lSIGltYWdlIHRhZykuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJ2ZXJzaW9uOlwiIGxpbmUsIHRyaW1tZWQ7IHNhbml0aXplZCBmb3IgRG9ja2VyIHRhZyAoYS16QS1aMC05Xy4tKS5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxWZXJzaW9uKHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ2Z1bmMueWFtbCcpO1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4Jyk7XG4gICAgICBjb25zdCBtID0gY29udGVudC5tYXRjaCgvXlxccyp2ZXJzaW9uOlxccypbXCInXT8oW15cIidcXHNcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCByYXcgPSBtWzFdLnRyaW0oKTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0gcmF3LnJlcGxhY2UoL1teYS16QS1aMC05Xy4tXS9nLCAnLScpLnJlcGxhY2UoLy0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkIHx8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFZBTElEX01FTU9SWV9NQiA9IG5ldyBTZXQoWzEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzJdKTtcblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBtZW1vcnkgKE1CKSBmcm9tIGZ1bmMueWFtbC4gT0NJIGFsbG93cyAxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIHZhbGlkOyBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbE1lbW9yeShwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbWVtb3J5OlxccyooXFxkKylcXHMqJC9tKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChtWzFdLCAxMCk7XG4gICAgICAgIGlmIChWQUxJRF9NRU1PUllfTUIuaGFzKG4pKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdGltZW91dCAoc2Vjb25kcykgZnJvbSBmdW5jLnlhbWwuIE9DSSBtYXggaXMgMzAwLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIGluIHJhbmdlIDHigJMzMDA7IG90aGVyd2lzZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sVGltZW91dChwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqdGltZW91dDpcXHMqKFxcZCspXFxzKiQvbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQobVsxXSwgMTApO1xuICAgICAgICBpZiAobiA+PSAxICYmIG4gPD0gMzAwKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY29uZmlnIChrZXktdmFsdWUgZW52KSBmcm9tIGZ1bmMueWFtbC4gRXhwZWN0cyBhIHRvcC1sZXZlbCBcImNvbmZpZzpcIiBibG9jayB3aXRoIGtleTogdmFsdWUgbGluZXMuXG4gKiBSZXR1cm5zIGEgcmVjb3JkIG9mIHN0cmluZyBrZXlzIGFuZCBzdHJpbmcgdmFsdWVzOyBlbXB0eSBpZiBub25lIG9yIHBhcnNlIGVycm9yLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Db25maWcgPSBmYWxzZTtcbiAgICBjb25zdCBjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkID09PSAnY29uZmlnOicgfHwgL15jb25maWdcXHMqOlxccyokLy50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgIGluQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5Db25maWcpIHtcbiAgICAgICAgaWYgKHRyaW1tZWQgIT09ICcnICYmICFsaW5lLnN0YXJ0c1dpdGgoJyAnKSAmJiAhbGluZS5zdGFydHNXaXRoKCdcXHQnKSkgYnJlYWs7XG4gICAgICAgIGNvbnN0IGt2ID0gbGluZS5tYXRjaCgvXlxccysoW2EtekEtWl9dW2EtekEtWjAtOV8tXSopXFxzKjpcXHMqKC4qKSQvKTtcbiAgICAgICAgaWYgKGt2KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga3ZbMV0udHJpbSgpO1xuICAgICAgICAgIGxldCB2YWwgPSBrdlsyXS50cmltKCk7XG4gICAgICAgICAgaWYgKCh2YWwuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWwuZW5kc1dpdGgoJ1wiJykpIHx8ICh2YWwuc3RhcnRzV2l0aChcIidcIikgJiYgdmFsLmVuZHNXaXRoKFwiJ1wiKSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA/IGNvbmZpZyA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogRW5zdXJlIG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVEZWZhdWx0QXBpR3dEZXBsb3ltZW50SnNvbihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24nKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwLCBERUZBVUxUX0FQSUdXX0RFUExPWU1FTlRfSlNPTiwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuY29uc3QgVEFJTF9GVU5DVElPTl9MT0dTX1NDUklQVCA9IGAjIS91c3IvYmluL2VudiBub2RlXG4vKipcbiAqIFRhaWwgT0NJIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9ncy4gR2VuZXJhdGVkIGJ5IE9DREsuXG4gKiBSdW4gZnJvbSBwcm9qZWN0IHJvb3QgYWZ0ZXIgZGVwbG95LiBSZXF1aXJlczogT0NJIENMSSwgT0NJX0NPTVBBUlRNRU5UX0lELlxuICogTG9nIElEczogZnJvbSAub2Nkay1vdXRwdXRzLmpzb24gKGNyZWF0ZWQgb24gZGVwbG95KSwgb3IgcGFzcyBmb3IgdGVzdGluZzpcbiAqICAgT0NJX0xPR19HUk9VUF9JRD1vY2lkMS4uLiBPQ0lfRVhFQ1VUSU9OX0xPR19JRD1vY2lkMS4uLiBub2RlIHRhaWwtZnVuY3Rpb24tbG9ncy5qc1xuICovXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBzcGF3blN5bmMgfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcblxuY29uc3QgZGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUiB8fCBfX2Rpcm5hbWU7XG5jb25zdCBvdXRwdXRzUGF0aCA9IHBhdGguam9pbihkaXIsICcub2Nkay1vdXRwdXRzLmpzb24nKTtcbmNvbnN0IGNvbXBJZCA9IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRCB8fCBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfT0NJRDtcbmlmICghY29tcElkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ1NldCBPQ0lfQ09NUEFSVE1FTlRfSUQgKG9yIE9DSV9DT01QQVJUTUVOVF9PQ0lEKS4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxubGV0IGxvZ0dyb3VwSWQgPSAocHJvY2Vzcy5lbnYuT0NJX0xPR19HUk9VUF9JRCB8fCAnJykudHJpbSgpO1xubGV0IGV4ZWN1dGlvbkxvZ0lkID0gKHByb2Nlc3MuZW52Lk9DSV9FWEVDVVRJT05fTE9HX0lEIHx8ICcnKS50cmltKCk7XG5pZiAoIWxvZ0dyb3VwSWQgfHwgIWV4ZWN1dGlvbkxvZ0lkKSB7XG4gIGlmICghZnMuZXhpc3RzU3luYyhvdXRwdXRzUGF0aCkpIHtcbiAgICBjb25zb2xlLmVycm9yKCdSdW4gZGVwbG95IGZpcnN0IHRvIGNyZWF0ZSAub2Nkay1vdXRwdXRzLmpzb24sIG9yIHNldCBPQ0lfTE9HX0dST1VQX0lEIGFuZCBPQ0lfRVhFQ1VUSU9OX0xPR19JRCBmb3IgdGVzdGluZy4nKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgbGV0IG91dDtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMob3V0cHV0c1BhdGgsICd1dGY4JykucmVwbGFjZSgvXlxcdUZFRkYvLCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGZpcnN0ID0gcmF3LmluZGV4T2YoJ3snKTtcbiAgICBjb25zdCBsYXN0ID0gcmF3Lmxhc3RJbmRleE9mKCd9Jyk7XG4gICAgaWYgKGZpcnN0ID09PSAtMSB8fCBsYXN0IDw9IGZpcnN0KSB0aHJvdyBuZXcgRXJyb3IoJ05vIEpTT04nKTtcbiAgICBvdXQgPSBKU09OLnBhcnNlKHJhdy5zbGljZShmaXJzdCwgbGFzdCArIDEpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyAub2Nkay1vdXRwdXRzLmpzb24uIFJ1biBkZXBsb3kgZmlyc3QuJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIGZ1bmN0aW9uIGZpbmRPdXRwdXRzKG9iaikge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgICBpZiAob2JqLmxvZ19ncm91cF9pZCAhPSBudWxsIHx8IG9iai5leGVjdXRpb25fbG9nX2lkICE9IG51bGwgfHwgb2JqLmxvZ0dyb3VwSWQgIT0gbnVsbCB8fCBvYmouZXhlY3V0aW9uTG9nSWQgIT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICBpZiAob2JqLm91dHB1dHMgJiYgdHlwZW9mIG9iai5vdXRwdXRzID09PSAnb2JqZWN0JykgcmV0dXJuIGZpbmRPdXRwdXRzKG9iai5vdXRwdXRzKSB8fCBvYmoub3V0cHV0cztcbiAgICBmb3IgKGNvbnN0IHYgb2YgT2JqZWN0LnZhbHVlcyhvYmopKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRPdXRwdXRzKHYpO1xuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIHZhbChvLCBrKSB7XG4gICAgbGV0IHYgPSBvW2tdO1xuICAgIGlmICh2ID09IG51bGwpIHYgPSBvW2sucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGMpID0+IGMudG9VcHBlckNhc2UoKSldO1xuICAgIGlmICh2ID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgcmV0dXJuIHYudHJpbSgpO1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPSBudWxsICYmICd2YWx1ZScgaW4gdikgcmV0dXJuIFN0cmluZyh2LnZhbHVlKS50cmltKCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBmdW5jdGlvbiBmaW5kQnlTdWJzdHJpbmcobywgc3ViKSB7XG4gICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMobykuZmluZChmdW5jdGlvbihrKSB7IHJldHVybiBrLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc3ViKTsgfSk7XG4gICAgcmV0dXJuIGtleSA/IHZhbChvLCBrZXkpIDogdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG91dHB1dHMgPSBmaW5kT3V0cHV0cyhvdXQpIHx8IG91dDtcbiAgbG9nR3JvdXBJZCA9IHZhbChvdXRwdXRzLCAnbG9nX2dyb3VwX2lkJykgfHwgdmFsKG91dHB1dHMsICdsb2dHcm91cElkJykgfHwgZmluZEJ5U3Vic3RyaW5nKG91dHB1dHMsICdsb2dfZ3JvdXAnKTtcbiAgZXhlY3V0aW9uTG9nSWQgPSB2YWwob3V0cHV0cywgJ2V4ZWN1dGlvbl9sb2dfaWQnKSB8fCB2YWwob3V0cHV0cywgJ2V4ZWN1dGlvbkxvZ0lkJykgfHwgZmluZEJ5U3Vic3RyaW5nKG91dHB1dHMsICdleGVjdXRpb25fbG9nJyk7XG4gIGlmICghbG9nR3JvdXBJZCB8fCAhZXhlY3V0aW9uTG9nSWQpIHtcbiAgICBjb25zb2xlLmVycm9yKCdsb2dfZ3JvdXBfaWQgb3IgZXhlY3V0aW9uX2xvZ19pZCBtaXNzaW5nIGluIC5vY2RrLW91dHB1dHMuanNvbicpO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RvcC1sZXZlbCBrZXlzOiAnICsgT2JqZWN0LmtleXMob3V0KS5qb2luKCcsICcpKTtcbiAgICBjb25zb2xlLmVycm9yKCdPdXRwdXRzIGtleXM6ICcgKyBPYmplY3Qua2V5cyhvdXRwdXRzKS5qb2luKCcsICcpKTtcbiAgICBjb25zb2xlLmVycm9yKCdTYW1wbGU6ICcgKyBKU09OLnN0cmluZ2lmeShvdXQpLnNsaWNlKDAsIDQwMCkpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbmNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93LmdldFRpbWUoKSAtIDEwICogNjAgKiAxMDAwKTtcbmNvbnN0IHRpbWVTdGFydCA9IHN0YXJ0LnRvSVNPU3RyaW5nKCk7XG5jb25zdCB0aW1lRW5kID0gbm93LnRvSVNPU3RyaW5nKCk7XG5jb25zdCBzY29wZSA9IGNvbXBJZCArICcvJyArIGxvZ0dyb3VwSWQgKyAnLycgKyBleGVjdXRpb25Mb2dJZDtcbmNvbnN0IHF1ZXJ5ID0gJ3NlYXJjaCBcIicgKyBzY29wZSArICdcIiB8IHNvcnQgYnkgZGF0ZXRpbWUgZGVzYyB8IGxpbWl0IDUwJztcbmNvbnN0IHIgPSBzcGF3blN5bmMoJ29jaScsIFsnbG9nZ2luZy1zZWFyY2gnLCAnc2VhcmNoLWxvZ3MnLCAnLS1zZWFyY2gtcXVlcnknLCBxdWVyeSwgJy0tdGltZS1zdGFydCcsIHRpbWVTdGFydCwgJy0tdGltZS1lbmQnLCB0aW1lRW5kXSwgeyBzdGRpbzogJ2luaGVyaXQnLCBzaGVsbDogdHJ1ZSB9KTtcbnByb2Nlc3MuZXhpdChyLnN0YXR1cyA/PyAxKTtcbmA7XG5cbi8qKiBFbnN1cmUgdGFpbC1mdW5jdGlvbi1sb2dzLmpzIGV4aXN0cyBpbiBwcm9qZWN0RGlyOyB3cml0ZSBkZWZhdWx0IGlmIG1pc3NpbmcuIFJldHVybnMgcGF0aC4gKi9cbmZ1bmN0aW9uIGVuc3VyZVRhaWxGdW5jdGlvbkxvZ3NTY3JpcHQocHJvamVjdERpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAndGFpbC1mdW5jdGlvbi1sb2dzLmpzJyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhwKSkge1xuICAgIGZzLndyaXRlRmlsZVN5bmMocCwgVEFJTF9GVU5DVElPTl9MT0dTX1NDUklQVCwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuLyoqIFJlYWQgdGVuYW5jeSBhbmQgcmVnaW9uIGZyb20gT0NJIENMSSBjb25maWcuIERlZmF1bHQgZmlsZTogfi8ub2NpL2NvbmZpZywgZGVmYXVsdCBwcm9maWxlOiBERUZBVUxULiAqL1xuZnVuY3Rpb24gcmVhZFRlbmFuY3lBbmRSZWdpb25Gcm9tQ2xpQ29uZmlnKCk6IHsgdGVuYW5jeT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nIH0ge1xuICBjb25zdCBjb25maWdQYXRoID0gcHJvY2Vzcy5lbnYuT0NJX0NPTkZJR19GSUxFIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcub2NpJywgJ2NvbmZpZycpO1xuICBjb25zdCBwcm9maWxlID0gcHJvY2Vzcy5lbnYuT0NJX0NMSV9QUk9GSUxFIHx8ICdERUZBVUxUJztcbiAgdHJ5IHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHJldHVybiB7fTtcbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIGxldCBpblByb2ZpbGUgPSBmYWxzZTtcbiAgICBjb25zdCByZXN1bHQ6IHsgdGVuYW5jeT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nIH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoJ1snKSAmJiB0cmltbWVkLmVuZHNXaXRoKCddJykpIHtcbiAgICAgICAgaW5Qcm9maWxlID0gdHJpbW1lZC5zbGljZSgxLCAtMSkgPT09IHByb2ZpbGU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFpblByb2ZpbGUpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZXEgPSB0cmltbWVkLmluZGV4T2YoJz0nKTtcbiAgICAgIGlmIChlcSA8PSAwKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGtleSA9IHRyaW1tZWQuc2xpY2UoMCwgZXEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdmFsdWUgPSB0cmltbWVkLnNsaWNlKGVxICsgMSkudHJpbSgpO1xuICAgICAgaWYgKGtleSA9PT0gJ3RlbmFuY3knKSByZXN1bHQudGVuYW5jeSA9IHZhbHVlO1xuICAgICAgaWYgKGtleSA9PT0gJ3JlZ2lvbicpIHJlc3VsdC5yZWdpb24gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKiBHZXQgb2JqZWN0IHN0b3JhZ2UgbmFtZXNwYWNlIHZpYSBPQ0kgU0RLIChzYW1lIGFzIFwib2NpIG9zIG5zIGdldFwiKS4gVXNlcyB+Ly5vY2kvY29uZmlnLCBERUZBVUxUIHByb2ZpbGUuICovXG5hc3luYyBmdW5jdGlvbiBnZXROYW1lc3BhY2VGcm9tT2NpU2RrKGNvbXBhcnRtZW50SWQ6IHN0cmluZywgcmVnaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBjb25maWdQYXRoID0gcHJvY2Vzcy5lbnYuT0NJX0NPTkZJR19GSUxFIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcub2NpJywgJ2NvbmZpZycpO1xuICBjb25zdCBwcm9maWxlID0gcHJvY2Vzcy5lbnYuT0NJX0NMSV9QUk9GSUxFIHx8ICdERUZBVUxUJztcbiAgdHJ5IHtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBjb21tb24uQ29uZmlnRmlsZUF1dGhlbnRpY2F0aW9uRGV0YWlsc1Byb3ZpZGVyKGNvbmZpZ1BhdGgsIHByb2ZpbGUpO1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBvYmplY3RzdG9yYWdlLk9iamVjdFN0b3JhZ2VDbGllbnQoeyBhdXRoZW50aWNhdGlvbkRldGFpbHNQcm92aWRlcjogcHJvdmlkZXIgfSk7XG4gICAgY2xpZW50LnJlZ2lvbklkID0gcmVnaW9uO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldE5hbWVzcGFjZSh7XG4gICAgICBjb21wYXJ0bWVudElkLFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZS52YWx1ZT8udHJpbSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRmluZCBhIEpBUiB1bmRlciB0YXJnZXQvIChwcmVmZXIgb25lIG1hdGNoaW5nIG5hbWUsIGVsc2UgZmlyc3QgLmphcikuXG4gKi9cbmZ1bmN0aW9uIGZpbmRKYXJJblRhcmdldChwcm9qZWN0RGlyOiBzdHJpbmcsIGZ1bmN0aW9uTmFtZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRhcmdldERpciA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAndGFyZ2V0Jyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXREaXIpKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGFyZ2V0RGlyKTtcbiAgICBjb25zdCBqYXJzID0gZmlsZXMuZmlsdGVyKChmKSA9PiBmLmVuZHNXaXRoKCcuamFyJykgJiYgIWYuZW5kc1dpdGgoJy1zb3VyY2VzLmphcicpKTtcbiAgICBpZiAoamFycy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKGZ1bmN0aW9uTmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBqYXJzLmZpbmQoKGopID0+IGoudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmdW5jdGlvbk5hbWUudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgaWYgKG1hdGNoKSByZXR1cm4gcGF0aC5qb2luKHRhcmdldERpciwgbWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aC5qb2luKHRhcmdldERpciwgamFyc1swXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIFRydWUgaWYgcHJvamVjdCBoYXMgcG9tLnhtbCBhbmQgc3JjLyAoTWF2ZW4gc291cmNlIGxheW91dCBmb3IgYnVpbGQtZnJvbS1zb3VyY2UgRG9ja2VyZmlsZSkuICovXG5mdW5jdGlvbiBoYXNQb21BbmRTcmMocHJvamVjdERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBvbSA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAncG9tLnhtbCcpO1xuICBjb25zdCBzcmMgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3NyYycpO1xuICB0cnkge1xuICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHBvbSkgJiYgZnMuZXhpc3RzU3luYyhzcmMpICYmIGZzLnN0YXRTeW5jKHNyYykuaXNEaXJlY3RvcnkoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc2NvdmVyRnJvbUZ1bmNZYW1sQW5kVGFyZ2V0KCk6IHtcbiAgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xuICBmdW5jdGlvbkFwcE5hbWU/OiBzdHJpbmc7XG4gIGRvY2tlckNvbnRleHRQYXRoPzogc3RyaW5nO1xuICBpbWFnZVRhZz86IHN0cmluZztcbiAgaGFuZGxlcj86IHN0cmluZztcbiAgdXNlVGhpbkRvY2tlcmZpbGU/OiBib29sZWFuO1xuICBtZW1vcnlNYj86IG51bWJlcjtcbiAgdGltZW91dFNlY29uZHM/OiBudW1iZXI7XG4gIGNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59IHtcbiAgbGV0IHByb2plY3REaXIgPSBwcm9jZXNzLmVudi5PQ0RLX1BST0pFQ1RfRElSPy50cmltKCk7XG4gIGlmICghcHJvamVjdERpcikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcub2Nkay1wcm9qZWN0LWRpcicpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHByb2plY3REaXIgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKS50cmltKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cbiAgaWYgKCFwcm9qZWN0RGlyICYmIHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9KQVJfUEFUSD8udHJpbSgpKSB7XG4gICAgY29uc3QgcCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEgudHJpbSgpKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkgcHJvamVjdERpciA9IGZzLnN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkgPyBwIDogcGF0aC5kaXJuYW1lKHApO1xuICB9XG4gIGlmICghcHJvamVjdERpcikgcHJvamVjdERpciA9IHByb2Nlc3MuY3dkKCk7XG4gIHByb2plY3REaXIgPSBwcm9qZWN0RGlyID8gcGF0aC5yZXNvbHZlKHByb2plY3REaXIpIDogJyc7XG4gIGlmICghcHJvamVjdERpciB8fCAhZnMuZXhpc3RzU3luYyhwcm9qZWN0RGlyKSkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IG5hbWVGcm9tWWFtbCA9IGdldEZ1bmNZYW1sTmFtZShwcm9qZWN0RGlyKTtcbiAgY29uc3QgamFyUGF0aCA9IGZpbmRKYXJJblRhcmdldChwcm9qZWN0RGlyLCBuYW1lRnJvbVlhbWwgfHwgdW5kZWZpbmVkKTtcbiAgY29uc3QgaGFzU291cmNlID0gaGFzUG9tQW5kU3JjKHByb2plY3REaXIpO1xuICBpZiAoIWphclBhdGggJiYgIWhhc1NvdXJjZSkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9OQU1FPy50cmltKCkgfHwgbmFtZUZyb21ZYW1sIHx8IHBhdGguYmFzZW5hbWUocHJvamVjdERpcikgfHwgJ29jaS1mdW5jdGlvbic7XG4gIGNvbnN0IGltYWdlVGFnID0gcHJvY2Vzcy5lbnYuT0NJX0lNQUdFX1RBRz8udHJpbSgpIHx8IGdldEZ1bmNZYW1sVmVyc2lvbihwcm9qZWN0RGlyKTtcbiAgY29uc3QgaGFuZGxlciA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9IQU5ETEVSPy50cmltKCkgfHwgZ2V0RnVuY1lhbWxIYW5kbGVyKHByb2plY3REaXIpO1xuICBjb25zdCB1c2VUaGluRG9ja2VyZmlsZSA9ICEhamFyUGF0aDtcbiAgY29uc3QgbWVtb3J5TWIgPSBnZXRGdW5jWWFtbE1lbW9yeShwcm9qZWN0RGlyKTtcbiAgY29uc3QgdGltZW91dFNlY29uZHMgPSBnZXRGdW5jWWFtbFRpbWVvdXQocHJvamVjdERpcik7XG4gIGNvbnN0IGNvbmZpZyA9IGdldEZ1bmNZYW1sQ29uZmlnKHByb2plY3REaXIpO1xuXG4gIHJldHVybiB7XG4gICAgZnVuY3Rpb25OYW1lLFxuICAgIGZ1bmN0aW9uQXBwTmFtZTogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0FQUF9OQU1FPy50cmltKCkgfHwgZnVuY3Rpb25OYW1lLFxuICAgIGRvY2tlckNvbnRleHRQYXRoOiBwYXRoLnJlc29sdmUocHJvamVjdERpciksXG4gICAgaW1hZ2VUYWc6IGltYWdlVGFnIHx8IHVuZGVmaW5lZCxcbiAgICBoYW5kbGVyOiBoYW5kbGVyIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VUaGluRG9ja2VyZmlsZSxcbiAgICBtZW1vcnlNYixcbiAgICB0aW1lb3V0U2Vjb25kcyxcbiAgICBjb25maWcsXG4gIH07XG59XG5cbmNvbnN0IGJhY2tlbmRUeXBlID0gKHByb2Nlc3MuZW52Lk9DSV9TVEFURV9CQUNLRU5EX1RZUEUgfHwgJ2xvY2FsJykgYXMgJ29jaScgfCAnaHR0cCcgfCAnbG9jYWwnO1xuXG5jb25zdCBiYWNrZW5kQ29uZmlnOiBPY2lCYWNrZW5kQ29uZmlnIHwgdW5kZWZpbmVkID0gYmFja2VuZFR5cGUgPT09ICdsb2NhbCdcbiAgPyB1bmRlZmluZWRcbiAgOiBiYWNrZW5kVHlwZSA9PT0gJ29jaSdcbiAgICA/IHtcbiAgICAgICAgdHlwZTogJ29jaScsXG4gICAgICAgIGJ1Y2tldDogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0JVQ0tFVCB8fCAndGYtc3RhdGUnLFxuICAgICAgICBrZXk6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9LRVkgfHwgJ2Z1bmN0aW9uLXN0YWNrL3RlcnJhZm9ybS50ZnN0YXRlJyxcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgdHlwZTogJ2h0dHAnLFxuICAgICAgICBhZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9BRERSRVNTIHx8ICcnLFxuICAgICAgICB1cGRhdGVNZXRob2Q6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9IVFRQX1VQREFURV9NRVRIT0QgfHwgJ1BVVCcsXG4gICAgICAgIGxvY2tBZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9MT0NLX0FERFJFU1MsXG4gICAgICAgIHVubG9ja0FkZHJlc3M6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9IVFRQX1VOTE9DS19BRERSRVNTLFxuICAgICAgfTtcblxuLyoqXG4gKiBMb2FkIE9DSSBjb25maWcgZnJvbSBlbnYgYW5kIENMSSBjb25maWcuIFdoZW4gT0NJX05BTUVTUEFDRSBpcyB1bnNldCwgZmV0Y2hlcyBpdCB2aWEgT0NJIFNESyAoZ2V0TmFtZXNwYWNlKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9jaUNvbmZpZygpOiBQcm9taXNlPE9jaUNvbmZpZz4ge1xuICBjb25zdCBjbGlDb25maWcgPSByZWFkVGVuYW5jeUFuZFJlZ2lvbkZyb21DbGlDb25maWcoKTtcbiAgY29uc3QgY29tcGFydG1lbnRJZCA9IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8ICdvY2lkMS5jb21wYXJ0bWVudC5vYzEuLmFhYWFhYWEuLi4nO1xuICBjb25zdCBvY2lyQ29tcGFydG1lbnRJZCA9IHByb2Nlc3MuZW52Lk9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEPy50cmltKCkgfHwgcHJvY2Vzcy5lbnYuT0NJX0NPTVBBUlRNRU5UX0lEPy50cmltKCkgfHwgY29tcGFydG1lbnRJZDtcbiAgY29uc3QgdGVuYW5jeUlkID0gcHJvY2Vzcy5lbnYuT0NJX1RFTkFOQ1lfSUQ/LnRyaW0oKSB8fCBjbGlDb25maWcudGVuYW5jeT8udHJpbSgpIHx8ICdvY2lkMS50ZW5hbmN5Lm9jMS4uYWFhYWFhYS4uLic7XG4gIGNvbnN0IHJlZ2lvbiA9IHByb2Nlc3MuZW52Lk9DSV9SRUdJT04/LnRyaW0oKSB8fCBjbGlDb25maWcucmVnaW9uPy50cmltKCkgfHwgJ2V1LWZyYW5rZnVydC0xJztcblxuICBpZiAoIW9jaXJDb21wYXJ0bWVudElkIHx8IG9jaXJDb21wYXJ0bWVudElkLmluY2x1ZGVzKCdyb290JykpIHtcbiAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyAgV0FSTklORzogT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgbm90IHNldCBvciBzZXQgdG8gcm9vdCBjb21wYXJ0bWVudC4nKTtcbiAgICBjb25zb2xlLndhcm4oJyAgIFBsZWFzZSBzZXQgT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgdG8geW91ciBob21lIGNvbXBhcnRtZW50IE9DSUQuJyk7XG4gICAgY29uc29sZS53YXJuKCcgICBFeGFtcGxlOiBleHBvcnQgT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQ9XCJvY2lkMS5jb21wYXJ0bWVudC5vYzEuLmFhYWFhYWEuLi5cIicpO1xuICB9XG5cbiAgbGV0IG5hbWVzcGFjZSA9IHByb2Nlc3MuZW52Lk9DSV9OQU1FU1BBQ0U/LnRyaW0oKTtcbiAgaWYgKCFuYW1lc3BhY2UgfHwgbmFtZXNwYWNlID09PSAneW91ci1uYW1lc3BhY2UnKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBnZXROYW1lc3BhY2VGcm9tT2NpU2RrKGNvbXBhcnRtZW50SWQsIHJlZ2lvbik7XG4gICAgaWYgKHJlc29sdmVkKSBuYW1lc3BhY2UgPSByZXNvbHZlZDtcbiAgICBlbHNlIGlmICghbmFtZXNwYWNlKSBuYW1lc3BhY2UgPSAneW91ci1uYW1lc3BhY2UnO1xuICAgIGlmIChuYW1lc3BhY2UgPT09ICd5b3VyLW5hbWVzcGFjZScpIHtcbiAgICAgIGNvbnNvbGUud2Fybign4pqg77iPICBPQ0lfTkFNRVNQQUNFIG5vdCBzZXQgYW5kIFNESyBjb3VsZCBub3QgcmVzb2x2ZSBpdC4gU2V0IE9DSV9OQU1FU1BBQ0Ugb3IgcnVuIFwib2NpIHNldHVwIGNvbmZpZ1wiLicpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRpc2NvdmVyZWQgPSBkaXNjb3ZlckZyb21GdW5jWWFtbEFuZFRhcmdldCgpO1xuXG4gIGNvbnN0IGltYWdlVGFnID0gcHJvY2Vzcy5lbnYuT0NJX0lNQUdFX1RBRz8udHJpbSgpIHx8IGRpc2NvdmVyZWQuaW1hZ2VUYWcgfHwgJ2xhdGVzdCc7XG5cbiAgbGV0IGRvY2tlckNvbnRleHRQYXRoID0gZGlzY292ZXJlZC5kb2NrZXJDb250ZXh0UGF0aDtcbiAgaWYgKCFkb2NrZXJDb250ZXh0UGF0aCAmJiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSkge1xuICAgIGNvbnN0IHAgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRILnRyaW0oKSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIGRvY2tlckNvbnRleHRQYXRoID0gZnMuc3RhdFN5bmMocCkuaXNEaXJlY3RvcnkoKSA/IHAgOiBwYXRoLmRpcm5hbWUocCk7XG4gIH1cblxuICBjb25zdCBoYW5kbGVyID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0hBTkRMRVI/LnRyaW0oKSB8fCBkaXNjb3ZlcmVkLmhhbmRsZXI7XG4gIGNvbnN0IHVzZVRoaW5Eb2NrZXJmaWxlID0gZGlzY292ZXJlZC51c2VUaGluRG9ja2VyZmlsZSA/PyBmYWxzZTtcblxuICBjb25zdCBtZW1vcnlFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fTUVNT1JZX01CPy50cmltKCk7XG4gIGNvbnN0IGZ1bmN0aW9uTWVtb3J5TWIgPSBtZW1vcnlFbnZcbiAgICA/IFN0cmluZyhwYXJzZUludChtZW1vcnlFbnYsIDEwKSlcbiAgICA6IChkaXNjb3ZlcmVkLm1lbW9yeU1iICE9IG51bGwgPyBTdHJpbmcoZGlzY292ZXJlZC5tZW1vcnlNYikgOiB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHRpbWVvdXRFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fVElNRU9VVF9TRUNPTkRTPy50cmltKCk7XG4gIGNvbnN0IGZ1bmN0aW9uVGltZW91dFNlY29uZHMgPSB0aW1lb3V0RW52XG4gICAgPyBwYXJzZUludCh0aW1lb3V0RW52LCAxMClcbiAgICA6IGRpc2NvdmVyZWQudGltZW91dFNlY29uZHM7XG5cbiAgbGV0IGZ1bmN0aW9uQ29uZmlnID0gZGlzY292ZXJlZC5jb25maWc7XG4gIGNvbnN0IGNvbmZpZ0VudiA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9DT05GSUc/LnRyaW0oKTtcbiAgaWYgKGNvbmZpZ0Vudikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbmZpZ0VudikgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIGZ1bmN0aW9uQ29uZmlnID0geyAuLi5mdW5jdGlvbkNvbmZpZywgLi4ucGFyc2VkIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmUgaW52YWxpZCBKU09OXG4gICAgfVxuICB9XG4gIGlmIChmdW5jdGlvbkNvbmZpZyAmJiBPYmplY3Qua2V5cyhmdW5jdGlvbkNvbmZpZykubGVuZ3RoID09PSAwKSBmdW5jdGlvbkNvbmZpZyA9IHVuZGVmaW5lZDtcblxuICBjb25zdCBhcGlHd0RlcGxveW1lbnRKc29uRW52ID0gcHJvY2Vzcy5lbnYuT0NJX0FQSUdBVEVXQVlfREVQTE9ZTUVOVF9KU09OPy50cmltKCk7XG4gIGNvbnN0IGFwaUd3RGVwbG95bWVudEpzb25QYXRoID0gYXBpR3dEZXBsb3ltZW50SnNvbkVudlxuICAgID8gcGF0aC5yZXNvbHZlKGFwaUd3RGVwbG95bWVudEpzb25FbnYpXG4gICAgOiBkb2NrZXJDb250ZXh0UGF0aFxuICAgICAgPyBlbnN1cmVEZWZhdWx0QXBpR3dEZXBsb3ltZW50SnNvbihkb2NrZXJDb250ZXh0UGF0aClcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoZG9ja2VyQ29udGV4dFBhdGgpIHtcbiAgICBlbnN1cmVUYWlsRnVuY3Rpb25Mb2dzU2NyaXB0KGRvY2tlckNvbnRleHRQYXRoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29tcGFydG1lbnRJZCxcbiAgICBvY2lyQ29tcGFydG1lbnRJZDogb2NpckNvbXBhcnRtZW50SWQgfHwgdW5kZWZpbmVkLFxuICAgIHRlbmFuY3lJZCxcbiAgICByZWdpb24sXG4gICAgbmFtZXNwYWNlLFxuICAgIGZ1bmN0aW9uQXBwTmFtZTogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0FQUF9OQU1FID8/IGRpc2NvdmVyZWQuZnVuY3Rpb25BcHBOYW1lID8/ICcnLFxuICAgIGZ1bmN0aW9uTmFtZTogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX05BTUUgPz8gZGlzY292ZXJlZC5mdW5jdGlvbk5hbWUgPz8gJycsXG4gICAgZnVuY3Rpb25KYXJQYXRoOiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSB8fCB1bmRlZmluZWQsXG4gICAgZG9ja2VyQ29udGV4dFBhdGg6IGRvY2tlckNvbnRleHRQYXRoIHx8IHVuZGVmaW5lZCxcbiAgICBpbWFnZVRhZyxcbiAgICBoYW5kbGVyOiBoYW5kbGVyIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VUaGluRG9ja2VyZmlsZSxcbiAgICBvY2lyUmVwb3NpdG9yeU5hbWU6IHByb2Nlc3MuZW52Lk9DSV9PQ0lSX1JFUE9TSVRPUllfTkFNRSB8fCB1bmRlZmluZWQsXG4gICAgZnVuY3Rpb25NZW1vcnlNYjogZnVuY3Rpb25NZW1vcnlNYiB8fCB1bmRlZmluZWQsXG4gICAgZnVuY3Rpb25UaW1lb3V0U2Vjb25kczogZnVuY3Rpb25UaW1lb3V0U2Vjb25kcyA/PyB1bmRlZmluZWQsXG4gICAgZnVuY3Rpb25Db25maWcsXG4gICAgYXBpR3dEZXBsb3ltZW50SnNvblBhdGg6IGFwaUd3RGVwbG95bWVudEpzb25QYXRoIHx8IHVuZGVmaW5lZCxcbiAgICBiYWNrZW5kOiBiYWNrZW5kQ29uZmlnLFxuICB9O1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oci-cdk-test",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "OCI CDK stack for OCI Functions, API Gateway, and related infrastructure",
5
5
  "main": "lib/index.js",
6
6
  "bin": {