angular-odata 0.100.0 → 0.100.1

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.
@@ -25,10 +25,10 @@ export class ODataModule {
25
25
  };
26
26
  }
27
27
  }
28
- ODataModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ODataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
29
- ODataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ODataModule, imports: [HttpClientModule] });
30
- ODataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ODataModule, providers: [ODataClient, ODataServiceFactory], imports: [[HttpClientModule]] });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ODataModule, decorators: [{
28
+ ODataModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ODataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
29
+ ODataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ODataModule, imports: [HttpClientModule] });
30
+ ODataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ODataModule, providers: [ODataClient, ODataServiceFactory], imports: [[HttpClientModule]] });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ODataModule, decorators: [{
32
32
  type: NgModule,
33
33
  args: [{
34
34
  imports: [HttpClientModule],
@@ -382,7 +382,7 @@ function escapeIllegalChars(string) {
382
382
  string = string.replace(/'/g, "''");
383
383
  return string;
384
384
  }
385
- export function normalizeValue(value, { aliases, escape = false }) {
385
+ export function normalizeValue(value, { aliases, escape = false, } = {}) {
386
386
  if (typeof value === 'string') {
387
387
  return escape ? `'${escapeIllegalChars(value)}'` : `'${value}'`;
388
388
  }
@@ -585,4 +585,4 @@ function buildUrl(path, params) {
585
585
  function parseNot(builtFilters) {
586
586
  return `not(${builtFilters.join(' and ')})`;
587
587
  }
588
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsS0FBSztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtDQUNULENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUM7QUFRN0MsTUFBTSxDQUFOLElBQVksd0JBTVg7QUFORCxXQUFZLHdCQUF3QjtJQUNsQyx1Q0FBVyxDQUFBO0lBQ1gsdUNBQVcsQ0FBQTtJQUNYLHVDQUFXLENBQUE7SUFDWCwrQ0FBbUIsQ0FBQTtJQUNuQiwyREFBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBTlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQU1uQztBQTZDRCxNQUFNLENBQU4sSUFBWSxnQkFLWDtBQUxELFdBQVksZ0JBQWdCO0lBQzFCLHFEQUFHLENBQUE7SUFDSCx5REFBSyxDQUFBO0lBQ0wsK0RBQVEsQ0FBQTtJQUNSLDJEQUFNLENBQUE7QUFDUixDQUFDLEVBTFcsZ0JBQWdC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SUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IENPTVBBUklTT05fT1BFUkFUT1JTID0gWydlcScsICduZScsICdndCcsICdnZScsICdsdCcsICdsZSddO1xuY29uc3QgTE9HSUNBTF9PUEVSQVRPUlMgPSBbJ2FuZCcsICdvcicsICdub3QnXTtcbmNvbnN0IENPTExFQ1RJT05fT1BFUkFUT1JTID0gWydhbnknLCAnYWxsJ107XG5jb25zdCBCT09MRUFOX0ZVTkNUSU9OUyA9IFsnc3RhcnRzd2l0aCcsICdlbmRzd2l0aCcsICdjb250YWlucyddO1xuY29uc3QgU1VQUE9SVEVEX0VYUEFORF9QUk9QRVJUSUVTID0gW1xuICAnZXhwYW5kJyxcbiAgJ2xldmVscycsXG4gICdzZWxlY3QnLFxuICAndG9wJyxcbiAgJ2NvdW50JyxcbiAgJ29yZGVyYnknLFxuICAnZmlsdGVyJyxcbl07XG5cbmNvbnN0IEZVTkNUSU9OX1JFR0VYID0gL1xcKCguKilcXCkvO1xuY29uc3QgSU5ERVhPRl9SRUdFWCA9IC8oPyFpbmRleG9mKVxcKChcXHcrKVxcKS87XG5cbmV4cG9ydCB0eXBlIFVucGFja2VkPFQ+ID0gVCBleHRlbmRzIChpbmZlciBVKVtdID8gVSA6IFQ7XG5leHBvcnQgdHlwZSBTZWxlY3Q8VD4gPSBTZWxlY3RUeXBlPFQ+IHwgU2VsZWN0VHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgU2VsZWN0VHlwZTxUPiA9IHN0cmluZyB8IGtleW9mIFQ7XG5leHBvcnQgdHlwZSBGaWx0ZXI8VD4gPSBGaWx0ZXJUeXBlIHwgRmlsdGVyVHlwZVtdO1xuZXhwb3J0IHR5cGUgRmlsdGVyVHlwZSA9IHN0cmluZyB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuXG5leHBvcnQgZW51bSBTdGFuZGFyZEFnZ3JlZ2F0ZU1ldGhvZHMge1xuICBzdW0gPSAnc3VtJyxcbiAgbWluID0gJ21pbicsXG4gIG1heCA9ICdtYXgnLFxuICBhdmVyYWdlID0gJ2F2ZXJhZ2UnLFxuICBjb3VudGRpc3RpbmN0ID0gJ2NvdW50ZGlzdGluY3QnLFxufVxuZXhwb3J0IHR5cGUgQWdncmVnYXRlID1cbiAgfCBzdHJpbmdcbiAgfCB7IFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IHsgd2l0aDogU3RhbmRhcmRBZ2dyZWdhdGVNZXRob2RzOyBhczogc3RyaW5nIH0gfTtcblxuLy8gT3JkZXJCeVxuXG5leHBvcnQgdHlwZSBPcmRlckJ5PFQ+ID0gT3JkZXJCeVR5cGU8VD4gfCBPcmRlckJ5VHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgT3JkZXJCeVR5cGU8VD4gPSBzdHJpbmcgfCBPcmRlckJ5T2JqZWN0PFQ+O1xuZXhwb3J0IHR5cGUgT3JkZXJCeU9iamVjdDxUPiA9IGtleW9mIFQgfCBba2V5b2YgVCB8IHN0cmluZywgJ2FzYycgfCAnZGVzYyddO1xuLy9UT0RPOiBzdXBwb3J0IGFuZ3VsYXIgMTIgcmVjdXJzaXZlIHR5cGU6XG4vKlxuZXhwb3J0IHR5cGUgT3JkZXJCeU9wdGlvbnM8VD4gPSBrZXlvZiBUIHwgWyBrZXlvZiBUIHwgc3RyaW5nLCAnYXNjJyB8ICdkZXNjJyBdO1xuZXhwb3J0IHR5cGUgTmVzdGVkT3JkZXJCeTxUPiA9IHsgW1AgaW4ga2V5b2YgVF0/OiBUW1BdIGV4dGVuZHMgQXJyYXk8aW5mZXIgRT4gPyBPcmRlckJ5PEU+IDogT3JkZXJCeTxUW1BdPiB9XG5leHBvcnQgdHlwZSBPcmRlckJ5PFQ+ID0gc3RyaW5nIHwgT3JkZXJCeU9wdGlvbnM8VD4gfCBBcnJheTxPcmRlckJ5T3B0aW9uczxUPj4gfCBOZXN0ZWRPcmRlckJ5PFQ+O1xuKi9cblxuLy8gRXhwYW5kXG5leHBvcnQgdHlwZSBFeHBhbmQ8VD4gPSBFeHBhbmRUeXBlPFQ+IHwgRXhwYW5kVHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZTxUPiA9IHN0cmluZyB8IEV4cGFuZE9iamVjdDxUPjtcbmV4cG9ydCB0eXBlIEV4cGFuZE9iamVjdDxUPiA9IGtleW9mIFQgfCBOZXN0ZWRFeHBhbmRPcHRpb25zPFQ+O1xuZXhwb3J0IHR5cGUgTmVzdGVkRXhwYW5kT3B0aW9uczxUPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF0/OiBFeHBhbmRPcHRpb25zPFVucGFja2VkPFRbUF0+Pjtcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRPcHRpb25zPFQ+ID0ge1xuICBzZWxlY3Q/OiBTZWxlY3Q8VD47XG4gIGZpbHRlcj86IEZpbHRlcjxUPjtcbiAgb3JkZXJCeT86IE9yZGVyQnk8VD47XG4gIHRvcD86IG51bWJlcjtcbiAgc2tpcD86IG51bWJlcjtcbiAgbGV2ZWxzPzogbnVtYmVyIHwgJ21heCc7XG4gIGNvdW50PzogYm9vbGVhbiB8IEZpbHRlcjxUPjtcbiAgZXhwYW5kPzogRXhwYW5kPFQ+O1xufTtcblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtPFQ+ID0ge1xuICBhZ2dyZWdhdGU/OiBBZ2dyZWdhdGUgfCBBcnJheTxBZ2dyZWdhdGU+O1xuICBmaWx0ZXI/OiBGaWx0ZXI8VD47XG4gIGdyb3VwQnk/OiBHcm91cEJ5PFQ+O1xufTtcbmV4cG9ydCB0eXBlIEdyb3VwQnk8VD4gPSB7XG4gIHByb3BlcnRpZXM6IEFycmF5PGtleW9mIFQ+O1xuICB0cmFuc2Zvcm0/OiBUcmFuc2Zvcm08VD47XG59O1xuXG5leHBvcnQgZW51bSBRdWVyeUN1c3RvbVR5cGVzIHtcbiAgUmF3LFxuICBBbGlhcyxcbiAgRHVyYXRpb24sXG4gIEJpbmFyeSxcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlDdXN0b21UeXBlID0ge1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzO1xuICB2YWx1ZTogYW55O1xuICBuYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFZhbHVlID0gc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IGJvb2xlYW4gfCBRdWVyeUN1c3RvbVR5cGU7XG5cbi8vaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19RdWVyeU9wdGlvbnNcbmV4cG9ydCBjb25zdCByYXcgPSAodmFsdWU6IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLlJhdyxcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBhbGlhcyA9ICh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKTogUXVlcnlDdXN0b21UeXBlID0+ICh7XG4gIHR5cGU6IFF1ZXJ5Q3VzdG9tVHlwZXMuQWxpYXMsXG4gIHZhbHVlLFxuICBuYW1lLFxufSk7XG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSAodmFsdWU6IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLkR1cmF0aW9uLFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGJpbmFyeSA9ICh2YWx1ZTogc3RyaW5nKTogUXVlcnlDdXN0b21UeXBlID0+ICh7XG4gIHR5cGU6IFF1ZXJ5Q3VzdG9tVHlwZXMuQmluYXJ5LFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGlzUXVlcnlDdXN0b21UeXBlID0gKHZhbHVlOiBhbnkpID0+XG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgJ3R5cGUnIGluIHZhbHVlICYmXG4gIHZhbHVlLnR5cGUgaW4gUXVlcnlDdXN0b21UeXBlcztcbmV4cG9ydCB0eXBlIFF1ZXJ5T3B0aW9uczxUPiA9IEV4cGFuZE9wdGlvbnM8VD4gJiB7XG4gIHNlYXJjaDogc3RyaW5nO1xuICB0cmFuc2Zvcm06IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXTtcbiAgc2tpcDogbnVtYmVyO1xuICBza2lwdG9rZW46IHN0cmluZztcbiAga2V5OiBzdHJpbmcgfCBudW1iZXIgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgY291bnQ6IGJvb2xlYW4gfCBGaWx0ZXI8VD47XG4gIGFjdGlvbjogc3RyaW5nO1xuICBmdW5jOiBzdHJpbmcgfCB7IFtmdW5jdGlvbk5hbWU6IHN0cmluZ106IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IGFueSB9IH07XG4gIGZvcm1hdDogc3RyaW5nO1xuICBhbGlhc2VzOiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgZXNjYXBlOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IElURU1fUk9PVCA9ICcnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiA8VD4oe1xuICBzZWxlY3QsXG4gIHNlYXJjaCxcbiAgc2tpcHRva2VuLFxuICBmb3JtYXQsXG4gIHRvcCxcbiAgc2tpcCxcbiAgZmlsdGVyLFxuICB0cmFuc2Zvcm0sXG4gIG9yZGVyQnksXG4gIGtleSxcbiAgY291bnQsXG4gIGV4cGFuZCxcbiAgYWN0aW9uLFxuICBmdW5jLFxuICBhbGlhc2VzLFxuICBlc2NhcGUsXG59OiBQYXJ0aWFsPFF1ZXJ5T3B0aW9uczxUPj4gPSB7fSkge1xuICBjb25zdCBbcGF0aCwgcGFyYW1zXSA9IGJ1aWxkUGF0aEFuZFF1ZXJ5KHtcbiAgICBzZWxlY3QsXG4gICAgc2VhcmNoLFxuICAgIHNraXB0b2tlbixcbiAgICBmb3JtYXQsXG4gICAgdG9wLFxuICAgIHNraXAsXG4gICAgZmlsdGVyLFxuICAgIHRyYW5zZm9ybSxcbiAgICBvcmRlckJ5LFxuICAgIGtleSxcbiAgICBjb3VudCxcbiAgICBleHBhbmQsXG4gICAgYWN0aW9uLFxuICAgIGZ1bmMsXG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gIH0pO1xuXG4gIHJldHVybiBidWlsZFVybChwYXRoLCBwYXJhbXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQYXRoQW5kUXVlcnk8VD4oe1xuICBzZWxlY3QsXG4gIHNlYXJjaCxcbiAgc2tpcHRva2VuLFxuICBmb3JtYXQsXG4gIHRvcCxcbiAgc2tpcCxcbiAgZmlsdGVyLFxuICB0cmFuc2Zvcm0sXG4gIG9yZGVyQnksXG4gIGtleSxcbiAgY291bnQsXG4gIGV4cGFuZCxcbiAgYWN0aW9uLFxuICBmdW5jLFxuICBhbGlhc2VzLFxuICBlc2NhcGUsXG59OiBQYXJ0aWFsPFF1ZXJ5T3B0aW9uczxUPj4gPSB7fSk6IFtzdHJpbmcsIHsgW25hbWU6IHN0cmluZ106IGFueSB9XSB7XG4gIGxldCBwYXRoOiBzdHJpbmcgPSAnJztcbiAgYWxpYXNlcyA9IGFsaWFzZXMgfHwgW107XG5cbiAgY29uc3QgcXVlcnk6IGFueSA9IHt9O1xuXG4gIC8vIGtleSBpcyBub3QgKG51bGwsIHVuZGVmaW5lZClcbiAgaWYgKGtleSAhPSB1bmRlZmluZWQpIHtcbiAgICBwYXRoICs9IGAoJHtub3JtYWxpemVWYWx1ZShrZXkgYXMgVmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pfSlgO1xuICB9XG5cbiAgaWYgKHNlbGVjdCkge1xuICAgIHF1ZXJ5LiRzZWxlY3QgPSBBcnJheS5pc0FycmF5KHNlbGVjdCkgPyBzZWxlY3Quam9pbignLCcpIDogc2VsZWN0O1xuICB9XG5cbiAgaWYgKHNlYXJjaCkge1xuICAgIHF1ZXJ5LiRzZWFyY2ggPSBzZWFyY2g7XG4gIH1cblxuICBpZiAoc2tpcHRva2VuKSB7XG4gICAgcXVlcnkuJHNraXB0b2tlbiA9IHNraXB0b2tlbjtcbiAgfVxuXG4gIGlmIChmb3JtYXQpIHtcbiAgICBxdWVyeS4kZm9ybWF0ID0gZm9ybWF0O1xuICB9XG5cbiAgaWYgKGZpbHRlciB8fCB0eXBlb2YgY291bnQgPT09ICdvYmplY3QnKSB7XG4gICAgcXVlcnkuJGZpbHRlciA9IGJ1aWxkRmlsdGVyKHR5cGVvZiBjb3VudCA9PT0gJ29iamVjdCcgPyBjb3VudCA6IGZpbHRlciwge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIGVzY2FwZSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICBxdWVyeS4kYXBwbHkgPSBidWlsZFRyYW5zZm9ybXModHJhbnNmb3JtLCB7IGFsaWFzZXMsIGVzY2FwZSB9KTtcbiAgfVxuXG4gIGlmIChleHBhbmQpIHtcbiAgICBxdWVyeS4kZXhwYW5kID0gYnVpbGRFeHBhbmQoZXhwYW5kLCB7IGFsaWFzZXMsIGVzY2FwZSB9KTtcbiAgfVxuXG4gIGlmIChvcmRlckJ5KSB7XG4gICAgcXVlcnkuJG9yZGVyYnkgPSBidWlsZE9yZGVyQnkob3JkZXJCeSk7XG4gIH1cblxuICBpZiAoY291bnQpIHtcbiAgICBpZiAodHlwZW9mIGNvdW50ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHF1ZXJ5LiRjb3VudCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggKz0gJy8kY291bnQnO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdG9wID09PSAnbnVtYmVyJykge1xuICAgIHF1ZXJ5LiR0b3AgPSB0b3A7XG4gIH1cblxuICBpZiAodHlwZW9mIHNraXAgPT09ICdudW1iZXInKSB7XG4gICAgcXVlcnkuJHNraXAgPSBza2lwO1xuICB9XG5cbiAgaWYgKGFjdGlvbikge1xuICAgIHBhdGggKz0gYC8ke2FjdGlvbn1gO1xuICB9XG5cbiAgaWYgKGZ1bmMpIHtcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwYXRoICs9IGAvJHtmdW5jfSgpYDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmdW5jID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgW2Z1bmNOYW1lXSA9IE9iamVjdC5rZXlzKGZ1bmMpO1xuICAgICAgY29uc3QgZnVuY0FyZ3MgPSBub3JtYWxpemVWYWx1ZShmdW5jW2Z1bmNOYW1lXSBhcyBWYWx1ZSwge1xuICAgICAgICBhbGlhc2VzLFxuICAgICAgICBlc2NhcGUsXG4gICAgICB9KTtcblxuICAgICAgcGF0aCArPSBgLyR7ZnVuY05hbWV9KCR7ZnVuY0FyZ3N9KWA7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsaWFzZXMubGVuZ3RoID4gMCkge1xuICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICBxdWVyeSxcbiAgICAgIGFsaWFzZXMucmVkdWNlKFxuICAgICAgICAoYWNjLCBhbGlhcykgPT5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKGFjYywge1xuICAgICAgICAgICAgW2BAJHthbGlhcy5uYW1lfWBdOiBub3JtYWxpemVWYWx1ZShhbGlhcy52YWx1ZSwge1xuICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLy8gRmlsdGVyIGVtcHR5IHZhbHVlc1xuICBjb25zdCBwYXJhbXMgPSBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnKVxuICAgIC5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiBPYmplY3QuYXNzaWduKGFjYywgeyBba2V5XTogdmFsdWUgfSksIHt9KTtcblxuICByZXR1cm4gW3BhdGgsIHBhcmFtc107XG59XG5cbmZ1bmN0aW9uIHJlbmRlclByaW1pdGl2ZVZhbHVlKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsOiBhbnksXG4gIHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICB9XG4pIHtcbiAgcmV0dXJuIGAke2tleX0gZXEgJHtub3JtYWxpemVWYWx1ZSh2YWwsIHsgYWxpYXNlcywgZXNjYXBlIH0pfWA7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmlsdGVyKFxuICBmaWx0ZXJzOiBGaWx0ZXI8YW55PiA9IHt9LFxuICB7XG4gICAgYWxpYXNlcyxcbiAgICBwcm9wUHJlZml4LFxuICAgIGVzY2FwZSxcbiAgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IHByb3BQcmVmaXg/OiBzdHJpbmc7IGVzY2FwZT86IGJvb2xlYW4gfVxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICAoQXJyYXkuaXNBcnJheShmaWx0ZXJzKSA/IGZpbHRlcnMgOiBbZmlsdGVyc10pLnJlZHVjZShcbiAgICAgIChhY2M6IHN0cmluZ1tdLCBmaWx0ZXIpID0+IHtcbiAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgIGNvbnN0IGJ1aWx0RmlsdGVyID0gYnVpbGRGaWx0ZXJDb3JlKGZpbHRlciwge1xuICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgIHByb3BQcmVmaXgsXG4gICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGJ1aWx0RmlsdGVyKSB7XG4gICAgICAgICAgICBhY2MucHVzaChidWlsdEZpbHRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAgW11cbiAgICApIGFzIHN0cmluZ1tdXG4gICkuam9pbignIGFuZCAnKTtcblxuICBmdW5jdGlvbiBidWlsZEZpbHRlckNvcmUoXG4gICAgZmlsdGVyOiBGaWx0ZXI8YW55PiA9IHt9LFxuICAgIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBwcm9wUHJlZml4LFxuICAgICAgZXNjYXBlLFxuICAgIH06IHsgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdOyBwcm9wUHJlZml4Pzogc3RyaW5nOyBlc2NhcGU/OiBib29sZWFuIH1cbiAgKSB7XG4gICAgbGV0IGZpbHRlckV4cHIgPSAnJztcbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFVzZSByYXcgZmlsdGVyIHN0cmluZ1xuICAgICAgZmlsdGVyRXhwciA9IGZpbHRlcjtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiB0eXBlb2YgZmlsdGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgZmlsdGVyc0FycmF5ID0gT2JqZWN0LmtleXMoZmlsdGVyKS5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQ6IGFueVtdLCBmaWx0ZXJLZXkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IChmaWx0ZXIgYXMgYW55KVtmaWx0ZXJLZXldO1xuICAgICAgICAgIGxldCBwcm9wTmFtZSA9ICcnO1xuICAgICAgICAgIGlmIChwcm9wUHJlZml4KSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyS2V5ID09PSBJVEVNX1JPT1QpIHtcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPSBwcm9wUHJlZml4O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChJTkRFWE9GX1JFR0VYLnRlc3QoZmlsdGVyS2V5KSkge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IGZpbHRlcktleS5yZXBsYWNlKElOREVYT0ZfUkVHRVgsIChfLCAkMSkgPT5cbiAgICAgICAgICAgICAgICAkMS50cmltKCkgPT09IElURU1fUk9PVFxuICAgICAgICAgICAgICAgICAgPyBgKCR7cHJvcFByZWZpeH0pYFxuICAgICAgICAgICAgICAgICAgOiBgKCR7cHJvcFByZWZpeH0vJHskMS50cmltKCl9KWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoRlVOQ1RJT05fUkVHRVgudGVzdChmaWx0ZXJLZXkpKSB7XG4gICAgICAgICAgICAgIHByb3BOYW1lID0gZmlsdGVyS2V5LnJlcGxhY2UoRlVOQ1RJT05fUkVHRVgsIChfLCAkMSkgPT5cbiAgICAgICAgICAgICAgICAkMS50cmltKCkgPT09IElURU1fUk9PVFxuICAgICAgICAgICAgICAgICAgPyBgKCR7cHJvcFByZWZpeH0pYFxuICAgICAgICAgICAgICAgICAgOiBgKCR7cHJvcFByZWZpeH0vJHskMS50cmltKCl9KWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByb3BOYW1lID0gYCR7cHJvcFByZWZpeH0vJHtmaWx0ZXJLZXl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvcE5hbWUgPSBmaWx0ZXJLZXk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpbHRlcktleSA9PT0gSVRFTV9ST09UICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdChcbiAgICAgICAgICAgICAgdmFsdWUubWFwKChhcnJheVZhbHVlOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgcmVuZGVyUHJpbWl0aXZlVmFsdWUocHJvcE5hbWUsIGFycmF5VmFsdWUsIHsgZXNjYXBlLCBhbGlhc2VzIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgWydudW1iZXInLCAnc3RyaW5nJywgJ2Jvb2xlYW4nXS5pbmRleE9mKHR5cGVvZiB2YWx1ZSkgIT09IC0xIHx8XG4gICAgICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBTaW1wbGUga2V5L3ZhbHVlIGhhbmRsZWQgYXMgZXF1YWxzIG9wZXJhdG9yXG4gICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgcmVuZGVyUHJpbWl0aXZlVmFsdWUocHJvcE5hbWUsIHZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBvcCA9IGZpbHRlcktleTtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWx0RmlsdGVycyA9IHZhbHVlXG4gICAgICAgICAgICAgIC5tYXAoKHYpID0+IGJ1aWxkRmlsdGVyKHYsIHsgYWxpYXNlcywgcHJvcFByZWZpeCwgZXNjYXBlIH0pKVxuICAgICAgICAgICAgICAuZmlsdGVyKChmKSA9PiBmKVxuICAgICAgICAgICAgICAubWFwKChmKSA9PlxuICAgICAgICAgICAgICAgIExPR0lDQUxfT1BFUkFUT1JTLmluZGV4T2Yob3ApICE9PSAtMSA/IGAoJHtmfSlgIDogZlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGJ1aWx0RmlsdGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgaWYgKExPR0lDQUxfT1BFUkFUT1JTLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChidWlsdEZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBpZiAob3AgPT09ICdub3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlTm90KGJ1aWx0RmlsdGVycyBhcyBzdHJpbmdbXSkpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCgke2J1aWx0RmlsdGVycy5qb2luKGAgJHtvcH0gYCl9KWApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChidWlsdEZpbHRlcnMuam9pbihgICR7b3B9IGApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoTE9HSUNBTF9PUEVSQVRPUlMuaW5kZXhPZihwcm9wTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBvcCA9IHByb3BOYW1lO1xuICAgICAgICAgICAgY29uc3QgYnVpbHRGaWx0ZXJzID0gT2JqZWN0LmtleXModmFsdWUpLm1hcCgodmFsdWVLZXkpID0+XG4gICAgICAgICAgICAgIGJ1aWxkRmlsdGVyQ29yZShcbiAgICAgICAgICAgICAgICB7IFt2YWx1ZUtleV06IHZhbHVlW3ZhbHVlS2V5XSB9LFxuICAgICAgICAgICAgICAgIHsgYWxpYXNlcywgZXNjYXBlIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChidWlsdEZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlmIChvcCA9PT0gJ25vdCcpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZU5vdChidWlsdEZpbHRlcnMgYXMgc3RyaW5nW10pKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHtidWlsdEZpbHRlcnMuam9pbihgICR7b3B9IGApfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoJ3R5cGUnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgIHJlbmRlclByaW1pdGl2ZVZhbHVlKHByb3BOYW1lLCB2YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgICAgICAgICAgb3BlcmF0b3JzLmZvckVhY2goKG9wKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKENPTVBBUklTT05fT1BFUkFUT1JTLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGAke3Byb3BOYW1lfSAke29wfSAke25vcm1hbGl6ZVZhbHVlKHZhbHVlW29wXSwge1xuICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICB9KX1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTE9HSUNBTF9PUEVSQVRPUlMuaW5kZXhPZihvcCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVtvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW29wXVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHY6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkRmlsdGVyQ29yZSh2LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFByZWZpeDogcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oYCAke29wfSBgKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgJygnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkRmlsdGVyQ29yZSh2YWx1ZVtvcF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFByZWZpeDogcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQ09MTEVDVElPTl9PUEVSQVRPUlMuaW5kZXhPZihvcCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uQ2xhdXNlID0gYnVpbGRDb2xsZWN0aW9uQ2xhdXNlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJLZXkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVbb3BdLFxuICAgICAgICAgICAgICAgICAgICBvcCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbkNsYXVzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjb2xsZWN0aW9uQ2xhdXNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAnaGFzJykge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGAke3Byb3BOYW1lfSAke29wfSAke25vcm1hbGl6ZVZhbHVlKHZhbHVlW29wXSwge1xuICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICB9KX1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09ICdpbicpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdGluZ1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWVbb3BdKVxuICAgICAgICAgICAgICAgICAgICA/IHZhbHVlW29wXVxuICAgICAgICAgICAgICAgICAgICA6IHZhbHVlW29wXS52YWx1ZS5tYXAoKHR5cGVkVmFsdWU6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlW29wXS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHR5cGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICcgaW4gKCcgK1xuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgodjogYW55KSA9PiBub3JtYWxpemVWYWx1ZSh2LCB7IGFsaWFzZXMsIGVzY2FwZSB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsJykgK1xuICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEJPT0xFQU5fRlVOQ1RJT05TLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgLy8gU2ltcGxlIGJvb2xlYW4gZnVuY3Rpb25zIChzdGFydHN3aXRoLCBlbmRzd2l0aCwgY29udGFpbnMpXG4gICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgYCR7b3B9KCR7cHJvcE5hbWV9LCR7bm9ybWFsaXplVmFsdWUodmFsdWVbb3BdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfSlgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgcHJvcGVydHlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGJ1aWxkRmlsdGVyQ29yZSh2YWx1ZSwge1xuICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICBwcm9wUHJlZml4OiBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIElnbm9yZS9vbWl0IGZpbHRlciBpZiB2YWx1ZSBpcyBgdW5kZWZpbmVkYFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgdHlwZTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyRXhwciA9IGZpbHRlcnNBcnJheS5qb2luKCcgYW5kICcpO1xuICAgIH0gLyogZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBmaWx0ZXJzIHR5cGU6ICR7ZmlsdGVyfWApO1xuICAgICAgfSAqL1xuICAgIHJldHVybiBmaWx0ZXJFeHByO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRDb2xsZWN0aW9uQ2xhdXNlKFxuICAgIGxhbWJkYVBhcmFtZXRlcjogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgb3A6IHN0cmluZyxcbiAgICBwcm9wTmFtZTogc3RyaW5nXG4gICkge1xuICAgIGxldCBjbGF1c2UgPSAnJztcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBjbGF1c2UgPSBnZXRTdHJpbmdDb2xsZWN0aW9uQ2xhdXNlKGxhbWJkYVBhcmFtZXRlciwgdmFsdWUsIG9wLCBwcm9wTmFtZSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgLy8gbm9ybWFsaXplIHthbnk6W3twcm9wMTogMX0sIHtwcm9wMjogMX1dfSAtLT4ge2FueTp7cHJvcDE6IDEsIHByb3AyOiAxfX07IHNhbWUgZm9yICdhbGwnLFxuICAgICAgLy8gc2ltcGxlIHZhbHVlcyBjb2xsZWN0aW9uOiB7YW55Olt7Jyc6ICdzaW1wbGVWYWwxJ30sIHsnJzogJ3NpbXBsZVZhbDInfV19IC0tPiB7YW55OnsnJzogWydzaW1wbGVWYWwxJywgJ3NpbXBsZVZhbDInXX19OyBzYW1lIGZvciAnYWxsJyxcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoSVRFTV9ST09UKSkge1xuICAgICAgICAgICAgICBpZiAoIWFjYy5oYXNPd25Qcm9wZXJ0eShJVEVNX1JPT1QpKSB7XG4gICAgICAgICAgICAgICAgYWNjW0lURU1fUk9PVF0gPSBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhY2NbSVRFTV9ST09UXS5wdXNoKGl0ZW1bSVRFTV9ST09UXSk7XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIC4uLml0ZW0gfTtcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB2YWx1ZTtcblxuICAgICAgY29uc3QgZmlsdGVyID0gYnVpbGRGaWx0ZXJDb3JlKGZpbHRlclZhbHVlLCB7XG4gICAgICAgIGFsaWFzZXMsXG4gICAgICAgIHByb3BQcmVmaXg6IGxhbWJkYVBhcmFtZXRlcixcbiAgICAgICAgZXNjYXBlLFxuICAgICAgfSk7XG4gICAgICBjbGF1c2UgPSBgJHtwcm9wTmFtZX0vJHtvcH0oJHtcbiAgICAgICAgZmlsdGVyID8gYCR7bGFtYmRhUGFyYW1ldGVyfToke2ZpbHRlcn1gIDogJydcbiAgICAgIH0pYDtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXVzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdHJpbmdDb2xsZWN0aW9uQ2xhdXNlKFxuICBsYW1iZGFQYXJhbWV0ZXI6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgY29sbGVjdGlvbk9wZXJhdG9yOiBzdHJpbmcsXG4gIHByb3BOYW1lOiBzdHJpbmdcbikge1xuICBsZXQgY2xhdXNlID0gJyc7XG4gIGNvbnN0IGNvbmRpdGlvbk9wZXJhdG9yID0gY29sbGVjdGlvbk9wZXJhdG9yID09ICdhbGwnID8gJ25lJyA6ICdlcSc7XG4gIGNsYXVzZSA9IGAke3Byb3BOYW1lfS8ke2NvbGxlY3Rpb25PcGVyYXRvcn0oJHtsYW1iZGFQYXJhbWV0ZXJ9OiAke2xhbWJkYVBhcmFtZXRlcn0gJHtjb25kaXRpb25PcGVyYXRvcn0gJyR7dmFsdWV9JylgO1xuXG4gIHJldHVybiBjbGF1c2U7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUlsbGVnYWxDaGFycyhzdHJpbmc6IHN0cmluZykge1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvJS9nLCAnJTI1Jyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXCsvZywgJyUyQicpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwvL2csICclMkYnKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcPy9nLCAnJTNGJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC8jL2csICclMjMnKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyYvZywgJyUyNicpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvJy9nLCBcIicnXCIpO1xuICByZXR1cm4gc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUoXG4gIHZhbHVlOiBWYWx1ZSxcbiAgeyBhbGlhc2VzLCBlc2NhcGUgPSBmYWxzZSB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9XG4pOiBhbnkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlc2NhcGUgPyBgJyR7ZXNjYXBlSWxsZWdhbENoYXJzKHZhbHVlKX0nYCA6IGAnJHt2YWx1ZX0nYDtcbiAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGBbJHt2YWx1ZVxuICAgICAgLm1hcCgoZCkgPT4gbm9ybWFsaXplVmFsdWUoZCwgeyBhbGlhc2VzLCBlc2NhcGUgfSkpXG4gICAgICAuam9pbignLCcpfV1gO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5SYXc6XG4gICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5EdXJhdGlvbjpcbiAgICAgICAgcmV0dXJuIGBkdXJhdGlvbicke3ZhbHVlLnZhbHVlfSdgO1xuICAgICAgY2FzZSBRdWVyeUN1c3RvbVR5cGVzLkJpbmFyeTpcbiAgICAgICAgcmV0dXJuIGBiaW5hcnknJHt2YWx1ZS52YWx1ZX0nYDtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5BbGlhczpcbiAgICAgICAgLy8gU3RvcmVcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWxpYXNlcykpIHtcbiAgICAgICAgICBpZiAodmFsdWUubmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZS5uYW1lID0gYGEke2FsaWFzZXMubGVuZ3RoICsgMX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhbGlhc2VzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgQCR7dmFsdWUubmFtZX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKVxuICAgICAgICAgIC5maWx0ZXIoKFssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChbaywgdl0pID0+XG4gICAgICAgICAgICAgIGAke2t9PSR7bm9ybWFsaXplVmFsdWUodiBhcyBWYWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9YFxuICAgICAgICAgIClcbiAgICAgICAgICAuam9pbignLCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRXhwYW5kPFQ+KFxuICBleHBhbmRzOiBFeHBhbmQ8VD4sXG4gIHsgYWxpYXNlcywgZXNjYXBlID0gZmFsc2UgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfVxuKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBleHBhbmRzID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBleHBhbmRzIGFzIGFueTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwYW5kcyA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoZXhwYW5kcy5pbmRleE9mKCcvJykgPT09IC0xKSB7XG4gICAgICByZXR1cm4gZXhwYW5kcztcbiAgICB9XG5cbiAgICAvLyBDaGFuZ2UgYEZvby9CYXIvQmF6YCB0byBgRm9vKCRleHBhbmQ9QmFyKCRleHBhbmQ9QmF6KSlgXG4gICAgcmV0dXJuIGV4cGFuZHNcbiAgICAgIC5zcGxpdCgnLycpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAucmVkdWNlKChyZXN1bHRzLCBpdGVtLCBpbmRleCwgYXJyKSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIC8vIElubmVyLW1vc3QgaXRlbVxuICAgICAgICAgIHJldHVybiBgJGV4cGFuZD0ke2l0ZW19YDtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gYXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBPdXRlci1tb3N0IGl0ZW0sIGRvbid0IGFkZCBgJGV4cGFuZD1gIHByZWZpeCAoYWRkZWQgYWJvdmUpXG4gICAgICAgICAgcmV0dXJuIGAke2l0ZW19KCR7cmVzdWx0c30pYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlciBpdGVtc1xuICAgICAgICAgIHJldHVybiBgJGV4cGFuZD0ke2l0ZW19KCR7cmVzdWx0c30pYDtcbiAgICAgICAgfVxuICAgICAgfSwgJycpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhwYW5kcykpIHtcbiAgICByZXR1cm4gYCR7KGV4cGFuZHMgYXMgQXJyYXk8TmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+PilcbiAgICAgIC5tYXAoKGUpID0+IGJ1aWxkRXhwYW5kKGUsIHsgYWxpYXNlcywgZXNjYXBlIH0pKVxuICAgICAgLmpvaW4oJywnKX1gO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBhbmRzID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGV4cGFuZEtleXMgPSBPYmplY3Qua2V5cyhleHBhbmRzKTtcblxuICAgIGlmIChcbiAgICAgIGV4cGFuZEtleXMuc29tZShcbiAgICAgICAgKGtleSkgPT4gU1VQUE9SVEVEX0VYUEFORF9QUk9QRVJUSUVTLmluZGV4T2Yoa2V5LnRvTG93ZXJDYXNlKCkpICE9PSAtMVxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIGV4cGFuZEtleXNcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdmaWx0ZXInOlxuICAgICAgICAgICAgICB2YWx1ZSA9IGJ1aWxkRmlsdGVyKChleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pilba2V5XSwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlckJ5JzpcbiAgICAgICAgICAgICAgdmFsdWUgPSBidWlsZE9yZGVyQnkoXG4gICAgICAgICAgICAgICAgKGV4cGFuZHMgYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+KVtrZXldIGFzIE9yZGVyQnk8VD5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZXZlbHMnOlxuICAgICAgICAgICAgY2FzZSAnY291bnQnOlxuICAgICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIGNhc2UgJ3NraXAnOlxuICAgICAgICAgICAgICB2YWx1ZSA9IGAkeyhleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pilba2V5XX1gO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHZhbHVlID0gYnVpbGRFeHBhbmQoXG4gICAgICAgICAgICAgICAgKGV4cGFuZHMgYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+KVtrZXldIGFzIEV4cGFuZDxUPixcbiAgICAgICAgICAgICAgICB7IGFsaWFzZXMsIGVzY2FwZSB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgJCR7a2V5LnRvTG93ZXJDYXNlKCl9PSR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJzsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGV4cGFuZEtleXNcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbHRFeHBhbmQgPSBidWlsZEV4cGFuZChcbiAgICAgICAgICAgIChleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55PilbXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgXSBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4sXG4gICAgICAgICAgICB7IGFsaWFzZXMsIGVzY2FwZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gYnVpbHRFeHBhbmQgPyBgJHtrZXl9KCR7YnVpbHRFeHBhbmR9KWAgOiBrZXk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcsJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gYnVpbGRUcmFuc2Zvcm1zPFQ+KFxuICB0cmFuc2Zvcm1zOiBUcmFuc2Zvcm08VD4gfCBUcmFuc2Zvcm08VD5bXSxcbiAgeyBhbGlhc2VzLCBlc2NhcGUgPSBmYWxzZSB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9XG4pIHtcbiAgLy8gV3JhcCBzaW5nbGUgb2JqZWN0IGFuIGFycmF5IGZvciBzaW1wbGlmaWVkIHByb2Nlc3NpbmdcbiAgY29uc3QgdHJhbnNmb3Jtc0FycmF5ID0gQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1zKSA/IHRyYW5zZm9ybXMgOiBbdHJhbnNmb3Jtc107XG5cbiAgY29uc3QgdHJhbnNmb3Jtc1Jlc3VsdCA9IHRyYW5zZm9ybXNBcnJheS5yZWR1Y2UoXG4gICAgKHJlc3VsdDogc3RyaW5nW10sIHRyYW5zZm9ybSkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2dyZWdhdGUsIGZpbHRlciwgZ3JvdXBCeSwgLi4ucmVzdCB9ID0gdHJhbnNmb3JtO1xuXG4gICAgICAvLyBUT0RPOiBzdXBwb3J0IGFzIG1hbnkgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgIC8vICAgdG9wY291bnQsIHRvcHN1bSwgdG9wcGVyY2VudCxcbiAgICAgIC8vICAgYm90dG9tc3VtLCBib3R0b21jb3VudCwgYm90dG9tcGVyY2VudCxcbiAgICAgIC8vICAgaWRlbnRpdHksIGNvbmNhdCwgZXhwYW5kLCBzZWFyY2gsIGNvbXB1dGUsIGlzZGVmaW5lZFxuICAgICAgY29uc3QgdW5zdXBwb3J0ZWRLZXlzID0gT2JqZWN0LmtleXMocmVzdCk7XG4gICAgICBpZiAodW5zdXBwb3J0ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHRyYW5zZm9ybShzKTogJHt1bnN1cHBvcnRlZEtleXN9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhZ2dyZWdhdGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYGFnZ3JlZ2F0ZSgke2J1aWxkQWdncmVnYXRlKGFnZ3JlZ2F0ZSl9KWApO1xuICAgICAgfVxuICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICBjb25zdCBidWlsdEZpbHRlciA9IGJ1aWxkRmlsdGVyKGZpbHRlciwgeyBhbGlhc2VzLCBlc2NhcGUgfSk7XG4gICAgICAgIGlmIChidWlsdEZpbHRlcikge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgYGZpbHRlcigke2J1aWxkRmlsdGVyKGJ1aWx0RmlsdGVyLCB7IGFsaWFzZXMsIGVzY2FwZSB9KX0pYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGBncm91cGJ5KCR7YnVpbGRHcm91cEJ5KGdyb3VwQnksIHsgYWxpYXNlcywgZXNjYXBlIH0pfSlgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybXNSZXN1bHQuam9pbignLycpIHx8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRBZ2dyZWdhdGUoYWdncmVnYXRlOiBBZ2dyZWdhdGUgfCBBZ2dyZWdhdGVbXSkge1xuICAvLyBXcmFwIHNpbmdsZSBvYmplY3QgaW4gYW4gYXJyYXkgZm9yIHNpbXBsaWZpZWQgcHJvY2Vzc2luZ1xuICBjb25zdCBhZ2dyZWdhdGVBcnJheSA9IEFycmF5LmlzQXJyYXkoYWdncmVnYXRlKSA/IGFnZ3JlZ2F0ZSA6IFthZ2dyZWdhdGVdO1xuXG4gIHJldHVybiBhZ2dyZWdhdGVBcnJheVxuICAgIC5tYXAoKGFnZ3JlZ2F0ZUl0ZW0pID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgYWdncmVnYXRlSXRlbSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBhZ2dyZWdhdGVJdGVtXG4gICAgICAgIDogT2JqZWN0LmtleXMoYWdncmVnYXRlSXRlbSkubWFwKChhZ2dyZWdhdGVLZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZVZhbHVlID0gYWdncmVnYXRlSXRlbVthZ2dyZWdhdGVLZXldO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBBcmUgdGhlc2UgYWx3YXlzIHJlcXVpcmVkPyAgQ2FuL3Nob3VsZCB3ZSBkZWZhdWx0IHRoZW0gaWYgc28/XG4gICAgICAgICAgICBpZiAoIWFnZ3JlZ2F0ZVZhbHVlLndpdGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnd2l0aCcgcHJvcGVydHkgcmVxdWlyZWQgZm9yICcke2FnZ3JlZ2F0ZUtleX0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFnZ3JlZ2F0ZVZhbHVlLmFzKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJ2FzJyBwcm9wZXJ0eSByZXF1aXJlZCBmb3IgJyR7YWdncmVnYXRlS2V5fSdgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGAke2FnZ3JlZ2F0ZUtleX0gd2l0aCAke2FnZ3JlZ2F0ZVZhbHVlLndpdGh9IGFzICR7YWdncmVnYXRlVmFsdWUuYXN9YDtcbiAgICAgICAgICB9KTtcbiAgICB9KVxuICAgIC5qb2luKCcsJyk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkR3JvdXBCeTxUPihcbiAgZ3JvdXBCeTogR3JvdXBCeTxUPixcbiAgeyBhbGlhc2VzLCBlc2NhcGUgPSBmYWxzZSB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9XG4pIHtcbiAgaWYgKCFncm91cEJ5LnByb3BlcnRpZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCdwcm9wZXJ0aWVzJyBwcm9wZXJ0eSByZXF1aXJlZCBmb3IgZ3JvdXBCeWApO1xuICB9XG5cbiAgbGV0IHJlc3VsdCA9IGAoJHtncm91cEJ5LnByb3BlcnRpZXMuam9pbignLCcpfSlgO1xuXG4gIGlmIChncm91cEJ5LnRyYW5zZm9ybSkge1xuICAgIHJlc3VsdCArPSBgLCR7YnVpbGRUcmFuc2Zvcm1zKGdyb3VwQnkudHJhbnNmb3JtLCB7IGFsaWFzZXMsIGVzY2FwZSB9KX1gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYnVpbGRPcmRlckJ5PFQ+KG9yZGVyQnk6IE9yZGVyQnk8VD4sIHByZWZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICBpZiAoQXJyYXkuaXNBcnJheShvcmRlckJ5KSkge1xuICAgIHJldHVybiAob3JkZXJCeSBhcyBPcmRlckJ5T2JqZWN0PFQ+W10pXG4gICAgICAubWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgdmFsdWUubGVuZ3RoID09PSAyICYmXG4gICAgICAgIFsnYXNjJywgJ2Rlc2MnXS5pbmRleE9mKHZhbHVlWzFdKSAhPT0gLTFcbiAgICAgICAgICA/IHZhbHVlLmpvaW4oJyAnKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgIClcbiAgICAgIC5tYXAoKHYpID0+IGAke3ByZWZpeH0ke3Z9YClcbiAgICAgIC5qb2luKCcsJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9yZGVyQnkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9yZGVyQnkpXG4gICAgICAubWFwKChbaywgdl0pID0+IGJ1aWxkT3JkZXJCeSh2IGFzIE9yZGVyQnk8YW55PiwgYCR7a30vYCkpXG4gICAgICAubWFwKCh2KSA9PiBgJHtwcmVmaXh9JHt2fWApXG4gICAgICAuam9pbignLCcpO1xuICB9XG4gIHJldHVybiBgJHtwcmVmaXh9JHtvcmRlckJ5fWA7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSk6IHN0cmluZyB7XG4gIC8vIFRoaXMgY2FuIGJlIHJlZmFjdG9yZWQgdXNpbmcgVVJMIEFQSS4gQnV0IElFIGRvZXMgbm90IHN1cHBvcnQgaXQuXG4gIGNvbnN0IHF1ZXJpZXM6IHN0cmluZ1tdID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5tYXAoXG4gICAgKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWBcbiAgKTtcbiAgcmV0dXJuIHF1ZXJpZXMubGVuZ3RoID8gYCR7cGF0aH0/JHtxdWVyaWVzLmpvaW4oJyYnKX1gIDogcGF0aDtcbn1cblxuZnVuY3Rpb24gcGFyc2VOb3QoYnVpbHRGaWx0ZXJzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgbm90KCR7YnVpbHRGaWx0ZXJzLmpvaW4oJyBhbmQgJyl9KWA7XG59XG4iXX0=
588
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsS0FBSztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtDQUNULENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUM7QUFRN0MsTUFBTSxDQUFOLElBQVksd0JBTVg7QUFORCxXQUFZLHdCQUF3QjtJQUNsQyx1Q0FBVyxDQUFBO0lBQ1gsdUNBQVcsQ0FBQTtJQUNYLHVDQUFXLENBQUE7SUFDWCwrQ0FBbUIsQ0FBQTtJQUNuQiwyREFBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBTlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQU1uQztBQTZDRCxNQUFNLENBQU4sSUFBWSxnQkFLWDtBQUxELFdBQVksZ0JBQWdCO0lBQzFCLHFEQUFHLENBQUE7SUFDSCx5REFBSyxDQUFBO0lBQ0wsK0RBQVEsQ0FBQTtJQUNSLDJEQUFNLENBQUE7QUFDUixDQUFDLEVBTFcsZ0JBQWdC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Q0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgQ09NUEFSSVNPTl9PUEVSQVRPUlMgPSBbJ2VxJywgJ25lJywgJ2d0JywgJ2dlJywgJ2x0JywgJ2xlJ107XG5jb25zdCBMT0dJQ0FMX09QRVJBVE9SUyA9IFsnYW5kJywgJ29yJywgJ25vdCddO1xuY29uc3QgQ09MTEVDVElPTl9PUEVSQVRPUlMgPSBbJ2FueScsICdhbGwnXTtcbmNvbnN0IEJPT0xFQU5fRlVOQ1RJT05TID0gWydzdGFydHN3aXRoJywgJ2VuZHN3aXRoJywgJ2NvbnRhaW5zJ107XG5jb25zdCBTVVBQT1JURURfRVhQQU5EX1BST1BFUlRJRVMgPSBbXG4gICdleHBhbmQnLFxuICAnbGV2ZWxzJyxcbiAgJ3NlbGVjdCcsXG4gICd0b3AnLFxuICAnY291bnQnLFxuICAnb3JkZXJieScsXG4gICdmaWx0ZXInLFxuXTtcblxuY29uc3QgRlVOQ1RJT05fUkVHRVggPSAvXFwoKC4qKVxcKS87XG5jb25zdCBJTkRFWE9GX1JFR0VYID0gLyg/IWluZGV4b2YpXFwoKFxcdyspXFwpLztcblxuZXhwb3J0IHR5cGUgVW5wYWNrZWQ8VD4gPSBUIGV4dGVuZHMgKGluZmVyIFUpW10gPyBVIDogVDtcbmV4cG9ydCB0eXBlIFNlbGVjdDxUPiA9IFNlbGVjdFR5cGU8VD4gfCBTZWxlY3RUeXBlPFQ+W107XG5leHBvcnQgdHlwZSBTZWxlY3RUeXBlPFQ+ID0gc3RyaW5nIHwga2V5b2YgVDtcbmV4cG9ydCB0eXBlIEZpbHRlcjxUPiA9IEZpbHRlclR5cGUgfCBGaWx0ZXJUeXBlW107XG5leHBvcnQgdHlwZSBGaWx0ZXJUeXBlID0gc3RyaW5nIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG5cbmV4cG9ydCBlbnVtIFN0YW5kYXJkQWdncmVnYXRlTWV0aG9kcyB7XG4gIHN1bSA9ICdzdW0nLFxuICBtaW4gPSAnbWluJyxcbiAgbWF4ID0gJ21heCcsXG4gIGF2ZXJhZ2UgPSAnYXZlcmFnZScsXG4gIGNvdW50ZGlzdGluY3QgPSAnY291bnRkaXN0aW5jdCcsXG59XG5leHBvcnQgdHlwZSBBZ2dyZWdhdGUgPVxuICB8IHN0cmluZ1xuICB8IHsgW3Byb3BlcnR5TmFtZTogc3RyaW5nXTogeyB3aXRoOiBTdGFuZGFyZEFnZ3JlZ2F0ZU1ldGhvZHM7IGFzOiBzdHJpbmcgfSB9O1xuXG4vLyBPcmRlckJ5XG5cbmV4cG9ydCB0eXBlIE9yZGVyQnk8VD4gPSBPcmRlckJ5VHlwZTxUPiB8IE9yZGVyQnlUeXBlPFQ+W107XG5leHBvcnQgdHlwZSBPcmRlckJ5VHlwZTxUPiA9IHN0cmluZyB8IE9yZGVyQnlPYmplY3Q8VD47XG5leHBvcnQgdHlwZSBPcmRlckJ5T2JqZWN0PFQ+ID0ga2V5b2YgVCB8IFtrZXlvZiBUIHwgc3RyaW5nLCAnYXNjJyB8ICdkZXNjJ107XG4vL1RPRE86IHN1cHBvcnQgYW5ndWxhciAxMiByZWN1cnNpdmUgdHlwZTpcbi8qXG5leHBvcnQgdHlwZSBPcmRlckJ5T3B0aW9uczxUPiA9IGtleW9mIFQgfCBbIGtleW9mIFQgfCBzdHJpbmcsICdhc2MnIHwgJ2Rlc2MnIF07XG5leHBvcnQgdHlwZSBOZXN0ZWRPcmRlckJ5PFQ+ID0geyBbUCBpbiBrZXlvZiBUXT86IFRbUF0gZXh0ZW5kcyBBcnJheTxpbmZlciBFPiA/IE9yZGVyQnk8RT4gOiBPcmRlckJ5PFRbUF0+IH1cbmV4cG9ydCB0eXBlIE9yZGVyQnk8VD4gPSBzdHJpbmcgfCBPcmRlckJ5T3B0aW9uczxUPiB8IEFycmF5PE9yZGVyQnlPcHRpb25zPFQ+PiB8IE5lc3RlZE9yZGVyQnk8VD47XG4qL1xuXG4vLyBFeHBhbmRcbmV4cG9ydCB0eXBlIEV4cGFuZDxUPiA9IEV4cGFuZFR5cGU8VD4gfCBFeHBhbmRUeXBlPFQ+W107XG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlPFQ+ID0gc3RyaW5nIHwgRXhwYW5kT2JqZWN0PFQ+O1xuZXhwb3J0IHR5cGUgRXhwYW5kT2JqZWN0PFQ+ID0ga2V5b2YgVCB8IE5lc3RlZEV4cGFuZE9wdGlvbnM8VD47XG5leHBvcnQgdHlwZSBOZXN0ZWRFeHBhbmRPcHRpb25zPFQ+ID0ge1xuICBbUCBpbiBrZXlvZiBUXT86IEV4cGFuZE9wdGlvbnM8VW5wYWNrZWQ8VFtQXT4+O1xufTtcbmV4cG9ydCB0eXBlIEV4cGFuZE9wdGlvbnM8VD4gPSB7XG4gIHNlbGVjdD86IFNlbGVjdDxUPjtcbiAgZmlsdGVyPzogRmlsdGVyPFQ+O1xuICBvcmRlckJ5PzogT3JkZXJCeTxUPjtcbiAgdG9wPzogbnVtYmVyO1xuICBza2lwPzogbnVtYmVyO1xuICBsZXZlbHM/OiBudW1iZXIgfCAnbWF4JztcbiAgY291bnQ/OiBib29sZWFuIHwgRmlsdGVyPFQ+O1xuICBleHBhbmQ/OiBFeHBhbmQ8VD47XG59O1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm08VD4gPSB7XG4gIGFnZ3JlZ2F0ZT86IEFnZ3JlZ2F0ZSB8IEFycmF5PEFnZ3JlZ2F0ZT47XG4gIGZpbHRlcj86IEZpbHRlcjxUPjtcbiAgZ3JvdXBCeT86IEdyb3VwQnk8VD47XG59O1xuZXhwb3J0IHR5cGUgR3JvdXBCeTxUPiA9IHtcbiAgcHJvcGVydGllczogQXJyYXk8a2V5b2YgVD47XG4gIHRyYW5zZm9ybT86IFRyYW5zZm9ybTxUPjtcbn07XG5cbmV4cG9ydCBlbnVtIFF1ZXJ5Q3VzdG9tVHlwZXMge1xuICBSYXcsXG4gIEFsaWFzLFxuICBEdXJhdGlvbixcbiAgQmluYXJ5LFxufVxuXG5leHBvcnQgdHlwZSBRdWVyeUN1c3RvbVR5cGUgPSB7XG4gIHR5cGU6IFF1ZXJ5Q3VzdG9tVHlwZXM7XG4gIHZhbHVlOiBhbnk7XG4gIG5hbWU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVmFsdWUgPSBzdHJpbmcgfCBEYXRlIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFF1ZXJ5Q3VzdG9tVHlwZTtcblxuLy9odHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1F1ZXJ5T3B0aW9uc1xuZXhwb3J0IGNvbnN0IHJhdyA9ICh2YWx1ZTogc3RyaW5nKTogUXVlcnlDdXN0b21UeXBlID0+ICh7XG4gIHR5cGU6IFF1ZXJ5Q3VzdG9tVHlwZXMuUmF3LFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGFsaWFzID0gKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpOiBRdWVyeUN1c3RvbVR5cGUgPT4gKHtcbiAgdHlwZTogUXVlcnlDdXN0b21UeXBlcy5BbGlhcyxcbiAgdmFsdWUsXG4gIG5hbWUsXG59KTtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9ICh2YWx1ZTogc3RyaW5nKTogUXVlcnlDdXN0b21UeXBlID0+ICh7XG4gIHR5cGU6IFF1ZXJ5Q3VzdG9tVHlwZXMuRHVyYXRpb24sXG4gIHZhbHVlLFxufSk7XG5leHBvcnQgY29uc3QgYmluYXJ5ID0gKHZhbHVlOiBzdHJpbmcpOiBRdWVyeUN1c3RvbVR5cGUgPT4gKHtcbiAgdHlwZTogUXVlcnlDdXN0b21UeXBlcy5CaW5hcnksXG4gIHZhbHVlLFxufSk7XG5leHBvcnQgY29uc3QgaXNRdWVyeUN1c3RvbVR5cGUgPSAodmFsdWU6IGFueSkgPT5cbiAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAndHlwZScgaW4gdmFsdWUgJiZcbiAgdmFsdWUudHlwZSBpbiBRdWVyeUN1c3RvbVR5cGVzO1xuZXhwb3J0IHR5cGUgUXVlcnlPcHRpb25zPFQ+ID0gRXhwYW5kT3B0aW9uczxUPiAmIHtcbiAgc2VhcmNoOiBzdHJpbmc7XG4gIHRyYW5zZm9ybTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdO1xuICBza2lwOiBudW1iZXI7XG4gIHNraXB0b2tlbjogc3RyaW5nO1xuICBrZXk6IHN0cmluZyB8IG51bWJlciB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICBjb3VudDogYm9vbGVhbiB8IEZpbHRlcjxUPjtcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIGZ1bmM6IHN0cmluZyB8IHsgW2Z1bmN0aW9uTmFtZTogc3RyaW5nXTogeyBbcGFyYW1ldGVyTmFtZTogc3RyaW5nXTogYW55IH0gfTtcbiAgZm9ybWF0OiBzdHJpbmc7XG4gIGFsaWFzZXM6IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICBlc2NhcGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgSVRFTV9ST09UID0gJyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIDxUPih7XG4gIHNlbGVjdCxcbiAgc2VhcmNoLFxuICBza2lwdG9rZW4sXG4gIGZvcm1hdCxcbiAgdG9wLFxuICBza2lwLFxuICBmaWx0ZXIsXG4gIHRyYW5zZm9ybSxcbiAgb3JkZXJCeSxcbiAga2V5LFxuICBjb3VudCxcbiAgZXhwYW5kLFxuICBhY3Rpb24sXG4gIGZ1bmMsXG4gIGFsaWFzZXMsXG4gIGVzY2FwZSxcbn06IFBhcnRpYWw8UXVlcnlPcHRpb25zPFQ+PiA9IHt9KSB7XG4gIGNvbnN0IFtwYXRoLCBwYXJhbXNdID0gYnVpbGRQYXRoQW5kUXVlcnkoe1xuICAgIHNlbGVjdCxcbiAgICBzZWFyY2gsXG4gICAgc2tpcHRva2VuLFxuICAgIGZvcm1hdCxcbiAgICB0b3AsXG4gICAgc2tpcCxcbiAgICBmaWx0ZXIsXG4gICAgdHJhbnNmb3JtLFxuICAgIG9yZGVyQnksXG4gICAga2V5LFxuICAgIGNvdW50LFxuICAgIGV4cGFuZCxcbiAgICBhY3Rpb24sXG4gICAgZnVuYyxcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgfSk7XG5cbiAgcmV0dXJuIGJ1aWxkVXJsKHBhdGgsIHBhcmFtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBhdGhBbmRRdWVyeTxUPih7XG4gIHNlbGVjdCxcbiAgc2VhcmNoLFxuICBza2lwdG9rZW4sXG4gIGZvcm1hdCxcbiAgdG9wLFxuICBza2lwLFxuICBmaWx0ZXIsXG4gIHRyYW5zZm9ybSxcbiAgb3JkZXJCeSxcbiAga2V5LFxuICBjb3VudCxcbiAgZXhwYW5kLFxuICBhY3Rpb24sXG4gIGZ1bmMsXG4gIGFsaWFzZXMsXG4gIGVzY2FwZSxcbn06IFBhcnRpYWw8UXVlcnlPcHRpb25zPFQ+PiA9IHt9KTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dIHtcbiAgbGV0IHBhdGg6IHN0cmluZyA9ICcnO1xuICBhbGlhc2VzID0gYWxpYXNlcyB8fCBbXTtcblxuICBjb25zdCBxdWVyeTogYW55ID0ge307XG5cbiAgLy8ga2V5IGlzIG5vdCAobnVsbCwgdW5kZWZpbmVkKVxuICBpZiAoa2V5ICE9IHVuZGVmaW5lZCkge1xuICAgIHBhdGggKz0gYCgke25vcm1hbGl6ZVZhbHVlKGtleSBhcyBWYWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9KWA7XG4gIH1cblxuICBpZiAoc2VsZWN0KSB7XG4gICAgcXVlcnkuJHNlbGVjdCA9IEFycmF5LmlzQXJyYXkoc2VsZWN0KSA/IHNlbGVjdC5qb2luKCcsJykgOiBzZWxlY3Q7XG4gIH1cblxuICBpZiAoc2VhcmNoKSB7XG4gICAgcXVlcnkuJHNlYXJjaCA9IHNlYXJjaDtcbiAgfVxuXG4gIGlmIChza2lwdG9rZW4pIHtcbiAgICBxdWVyeS4kc2tpcHRva2VuID0gc2tpcHRva2VuO1xuICB9XG5cbiAgaWYgKGZvcm1hdCkge1xuICAgIHF1ZXJ5LiRmb3JtYXQgPSBmb3JtYXQ7XG4gIH1cblxuICBpZiAoZmlsdGVyIHx8IHR5cGVvZiBjb3VudCA9PT0gJ29iamVjdCcpIHtcbiAgICBxdWVyeS4kZmlsdGVyID0gYnVpbGRGaWx0ZXIodHlwZW9mIGNvdW50ID09PSAnb2JqZWN0JyA/IGNvdW50IDogZmlsdGVyLCB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgZXNjYXBlLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHRyYW5zZm9ybSkge1xuICAgIHF1ZXJ5LiRhcHBseSA9IGJ1aWxkVHJhbnNmb3Jtcyh0cmFuc2Zvcm0sIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICB9XG5cbiAgaWYgKGV4cGFuZCkge1xuICAgIHF1ZXJ5LiRleHBhbmQgPSBidWlsZEV4cGFuZChleHBhbmQsIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICB9XG5cbiAgaWYgKG9yZGVyQnkpIHtcbiAgICBxdWVyeS4kb3JkZXJieSA9IGJ1aWxkT3JkZXJCeShvcmRlckJ5KTtcbiAgfVxuXG4gIGlmIChjb3VudCkge1xuICAgIGlmICh0eXBlb2YgY291bnQgPT09ICdib29sZWFuJykge1xuICAgICAgcXVlcnkuJGNvdW50ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCArPSAnLyRjb3VudCc7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0b3AgPT09ICdudW1iZXInKSB7XG4gICAgcXVlcnkuJHRvcCA9IHRvcDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2tpcCA9PT0gJ251bWJlcicpIHtcbiAgICBxdWVyeS4kc2tpcCA9IHNraXA7XG4gIH1cblxuICBpZiAoYWN0aW9uKSB7XG4gICAgcGF0aCArPSBgLyR7YWN0aW9ufWA7XG4gIH1cblxuICBpZiAoZnVuYykge1xuICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHBhdGggKz0gYC8ke2Z1bmN9KClgO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBbZnVuY05hbWVdID0gT2JqZWN0LmtleXMoZnVuYyk7XG4gICAgICBjb25zdCBmdW5jQXJncyA9IG5vcm1hbGl6ZVZhbHVlKGZ1bmNbZnVuY05hbWVdIGFzIFZhbHVlLCB7XG4gICAgICAgIGFsaWFzZXMsXG4gICAgICAgIGVzY2FwZSxcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoICs9IGAvJHtmdW5jTmFtZX0oJHtmdW5jQXJnc30pYDtcbiAgICB9XG4gIH1cblxuICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgT2JqZWN0LmFzc2lnbihcbiAgICAgIHF1ZXJ5LFxuICAgICAgYWxpYXNlcy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGFsaWFzKSA9PlxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWNjLCB7XG4gICAgICAgICAgICBbYEAke2FsaWFzLm5hbWV9YF06IG5vcm1hbGl6ZVZhbHVlKGFsaWFzLnZhbHVlLCB7XG4gICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvLyBGaWx0ZXIgZW1wdHkgdmFsdWVzXG4gIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJycpXG4gICAgLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrZXldOiB2YWx1ZSB9KSwge30pO1xuXG4gIHJldHVybiBbcGF0aCwgcGFyYW1zXTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUHJpbWl0aXZlVmFsdWUoXG4gIGtleTogc3RyaW5nLFxuICB2YWw6IGFueSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gIH1cbikge1xuICByZXR1cm4gYCR7a2V5fSBlcSAke25vcm1hbGl6ZVZhbHVlKHZhbCwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9YDtcbn1cblxuZnVuY3Rpb24gYnVpbGRGaWx0ZXIoXG4gIGZpbHRlcnM6IEZpbHRlcjxhbnk+ID0ge30sXG4gIHtcbiAgICBhbGlhc2VzLFxuICAgIHByb3BQcmVmaXgsXG4gICAgZXNjYXBlLFxuICB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgcHJvcFByZWZpeD86IHN0cmluZzsgZXNjYXBlPzogYm9vbGVhbiB9XG4pOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIChBcnJheS5pc0FycmF5KGZpbHRlcnMpID8gZmlsdGVycyA6IFtmaWx0ZXJzXSkucmVkdWNlKFxuICAgICAgKGFjYzogc3RyaW5nW10sIGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgY29uc3QgYnVpbHRGaWx0ZXIgPSBidWlsZEZpbHRlckNvcmUoZmlsdGVyLCB7XG4gICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgcHJvcFByZWZpeCxcbiAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXIpIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKGJ1aWx0RmlsdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICBbXVxuICAgICkgYXMgc3RyaW5nW11cbiAgKS5qb2luKCcgYW5kICcpO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkRmlsdGVyQ29yZShcbiAgICBmaWx0ZXI6IEZpbHRlcjxhbnk+ID0ge30sXG4gICAge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIHByb3BQcmVmaXgsXG4gICAgICBlc2NhcGUsXG4gICAgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IHByb3BQcmVmaXg/OiBzdHJpbmc7IGVzY2FwZT86IGJvb2xlYW4gfVxuICApIHtcbiAgICBsZXQgZmlsdGVyRXhwciA9ICcnO1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVXNlIHJhdyBmaWx0ZXIgc3RyaW5nXG4gICAgICBmaWx0ZXJFeHByID0gZmlsdGVyO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyICYmIHR5cGVvZiBmaWx0ZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzQXJyYXkgPSBPYmplY3Qua2V5cyhmaWx0ZXIpLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdDogYW55W10sIGZpbHRlcktleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKGZpbHRlciBhcyBhbnkpW2ZpbHRlcktleV07XG4gICAgICAgICAgbGV0IHByb3BOYW1lID0gJyc7XG4gICAgICAgICAgaWYgKHByb3BQcmVmaXgpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkgPT09IElURU1fUk9PVCkge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IHByb3BQcmVmaXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKElOREVYT0ZfUkVHRVgudGVzdChmaWx0ZXJLZXkpKSB7XG4gICAgICAgICAgICAgIHByb3BOYW1lID0gZmlsdGVyS2V5LnJlcGxhY2UoSU5ERVhPRl9SRUdFWCwgKF8sICQxKSA9PlxuICAgICAgICAgICAgICAgICQxLnRyaW0oKSA9PT0gSVRFTV9ST09UXG4gICAgICAgICAgICAgICAgICA/IGAoJHtwcm9wUHJlZml4fSlgXG4gICAgICAgICAgICAgICAgICA6IGAoJHtwcm9wUHJlZml4fS8keyQxLnRyaW0oKX0pYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChGVU5DVElPTl9SRUdFWC50ZXN0KGZpbHRlcktleSkpIHtcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPSBmaWx0ZXJLZXkucmVwbGFjZShGVU5DVElPTl9SRUdFWCwgKF8sICQxKSA9PlxuICAgICAgICAgICAgICAgICQxLnRyaW0oKSA9PT0gSVRFTV9ST09UXG4gICAgICAgICAgICAgICAgICA/IGAoJHtwcm9wUHJlZml4fSlgXG4gICAgICAgICAgICAgICAgICA6IGAoJHtwcm9wUHJlZml4fS8keyQxLnRyaW0oKX0pYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPSBgJHtwcm9wUHJlZml4fS8ke2ZpbHRlcktleX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9wTmFtZSA9IGZpbHRlcktleTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmlsdGVyS2V5ID09PSBJVEVNX1JPT1QgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuY29uY2F0KFxuICAgICAgICAgICAgICB2YWx1ZS5tYXAoKGFycmF5VmFsdWU6IGFueSkgPT5cbiAgICAgICAgICAgICAgICByZW5kZXJQcmltaXRpdmVWYWx1ZShwcm9wTmFtZSwgYXJyYXlWYWx1ZSwgeyBlc2NhcGUsIGFsaWFzZXMgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBbJ251bWJlcicsICdzdHJpbmcnLCAnYm9vbGVhbiddLmluZGV4T2YodHlwZW9mIHZhbHVlKSAhPT0gLTEgfHxcbiAgICAgICAgICAgIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFNpbXBsZSBrZXkvdmFsdWUgaGFuZGxlZCBhcyBlcXVhbHMgb3BlcmF0b3JcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICByZW5kZXJQcmltaXRpdmVWYWx1ZShwcm9wTmFtZSwgdmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wID0gZmlsdGVyS2V5O1xuICAgICAgICAgICAgY29uc3QgYnVpbHRGaWx0ZXJzID0gdmFsdWVcbiAgICAgICAgICAgICAgLm1hcCgodikgPT4gYnVpbGRGaWx0ZXIodiwgeyBhbGlhc2VzLCBwcm9wUHJlZml4LCBlc2NhcGUgfSkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYpXG4gICAgICAgICAgICAgIC5tYXAoKGYpID0+XG4gICAgICAgICAgICAgICAgTE9HSUNBTF9PUEVSQVRPUlMuaW5kZXhPZihvcCkgIT09IC0xID8gYCgke2Z9KWAgOiBmXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAoTE9HSUNBTF9PUEVSQVRPUlMuaW5kZXhPZihvcCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJ1aWx0RmlsdGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChvcCA9PT0gJ25vdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VOb3QoYnVpbHRGaWx0ZXJzIGFzIHN0cmluZ1tdKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgKCR7YnVpbHRGaWx0ZXJzLmpvaW4oYCAke29wfSBgKX0pYCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJ1aWx0RmlsdGVycy5qb2luKGAgJHtvcH0gYCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKHByb3BOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wID0gcHJvcE5hbWU7XG4gICAgICAgICAgICBjb25zdCBidWlsdEZpbHRlcnMgPSBPYmplY3Qua2V5cyh2YWx1ZSkubWFwKCh2YWx1ZUtleSkgPT5cbiAgICAgICAgICAgICAgYnVpbGRGaWx0ZXJDb3JlKFxuICAgICAgICAgICAgICAgIHsgW3ZhbHVlS2V5XTogdmFsdWVbdmFsdWVLZXldIH0sXG4gICAgICAgICAgICAgICAgeyBhbGlhc2VzLCBlc2NhcGUgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGJ1aWx0RmlsdGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgaWYgKG9wID09PSAnbm90Jykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlTm90KGJ1aWx0RmlsdGVycyBhcyBzdHJpbmdbXSkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2J1aWx0RmlsdGVycy5qb2luKGAgJHtvcH0gYCl9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICgndHlwZScgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgcmVuZGVyUHJpbWl0aXZlVmFsdWUocHJvcE5hbWUsIHZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICAgICAgICBvcGVyYXRvcnMuZm9yRWFjaCgob3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQ09NUEFSSVNPTl9PUEVSQVRPUlMuaW5kZXhPZihvcCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgYCR7cHJvcE5hbWV9ICR7b3B9ICR7bm9ybWFsaXplVmFsdWUodmFsdWVbb3BdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlW29wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbb3BdXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAodjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRGaWx0ZXJDb3JlKHYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wUHJlZml4OiBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyknXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihgICR7b3B9IGApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAnKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRGaWx0ZXJDb3JlKHZhbHVlW29wXSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wUHJlZml4OiBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyknXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChDT0xMRUNUSU9OX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25DbGF1c2UgPSBidWlsZENvbGxlY3Rpb25DbGF1c2UoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcktleS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtvcF0sXG4gICAgICAgICAgICAgICAgICAgIG9wLFxuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uQ2xhdXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25DbGF1c2UpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09ICdoYXMnKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgYCR7cHJvcE5hbWV9ICR7b3B9ICR7bm9ybWFsaXplVmFsdWUodmFsdWVbb3BdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2luJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0aW5nVmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtvcF0pXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWVbb3BdXG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWVbb3BdLnZhbHVlLm1hcCgodHlwZWRWYWx1ZTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdmFsdWVbb3BdLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHlwZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgJyBpbiAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKCh2OiBhbnkpID0+IG5vcm1hbGl6ZVZhbHVlKHYsIHsgYWxpYXNlcywgZXNjYXBlIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywnKSArXG4gICAgICAgICAgICAgICAgICAgICAgJyknXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQk9PTEVBTl9GVU5DVElPTlMuaW5kZXhPZihvcCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTaW1wbGUgYm9vbGVhbiBmdW5jdGlvbnMgKHN0YXJ0c3dpdGgsIGVuZHN3aXRoLCBjb250YWlucylcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBgJHtvcH0oJHtwcm9wTmFtZX0sJHtub3JtYWxpemVWYWx1ZSh2YWx1ZVtvcF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9KWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIE5lc3RlZCBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gYnVpbGRGaWx0ZXJDb3JlKHZhbHVlLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BQcmVmaXg6IHByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gSWdub3JlL29taXQgZmlsdGVyIGlmIHZhbHVlIGlzIGB1bmRlZmluZWRgXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSB0eXBlOiAke3ZhbHVlfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXJFeHByID0gZmlsdGVyc0FycmF5LmpvaW4oJyBhbmQgJyk7XG4gICAgfSAvKiBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGZpbHRlcnMgdHlwZTogJHtmaWx0ZXJ9YCk7XG4gICAgICB9ICovXG4gICAgcmV0dXJuIGZpbHRlckV4cHI7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZENvbGxlY3Rpb25DbGF1c2UoXG4gICAgbGFtYmRhUGFyYW1ldGVyOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgICBvcDogc3RyaW5nLFxuICAgIHByb3BOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IGNsYXVzZSA9ICcnO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgIGNsYXVzZSA9IGdldFN0cmluZ0NvbGxlY3Rpb25DbGF1c2UobGFtYmRhUGFyYW1ldGVyLCB2YWx1ZSwgb3AsIHByb3BOYW1lKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAvLyBub3JtYWxpemUge2FueTpbe3Byb3AxOiAxfSwge3Byb3AyOiAxfV19IC0tPiB7YW55Ontwcm9wMTogMSwgcHJvcDI6IDF9fTsgc2FtZSBmb3IgJ2FsbCcsXG4gICAgICAvLyBzaW1wbGUgdmFsdWVzIGNvbGxlY3Rpb246IHthbnk6W3snJzogJ3NpbXBsZVZhbDEnfSwgeycnOiAnc2ltcGxlVmFsMid9XX0gLS0+IHthbnk6eycnOiBbJ3NpbXBsZVZhbDEnLCAnc2ltcGxlVmFsMiddfX07IHNhbWUgZm9yICdhbGwnLFxuICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eShJVEVNX1JPT1QpKSB7XG4gICAgICAgICAgICAgIGlmICghYWNjLmhhc093blByb3BlcnR5KElURU1fUk9PVCkpIHtcbiAgICAgICAgICAgICAgICBhY2NbSVRFTV9ST09UXSA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFjY1tJVEVNX1JPT1RdLnB1c2goaXRlbVtJVEVNX1JPT1RdKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgLi4uaXRlbSB9O1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IHZhbHVlO1xuXG4gICAgICBjb25zdCBmaWx0ZXIgPSBidWlsZEZpbHRlckNvcmUoZmlsdGVyVmFsdWUsIHtcbiAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgcHJvcFByZWZpeDogbGFtYmRhUGFyYW1ldGVyLFxuICAgICAgICBlc2NhcGUsXG4gICAgICB9KTtcbiAgICAgIGNsYXVzZSA9IGAke3Byb3BOYW1lfS8ke29wfSgke1xuICAgICAgICBmaWx0ZXIgPyBgJHtsYW1iZGFQYXJhbWV0ZXJ9OiR7ZmlsdGVyfWAgOiAnJ1xuICAgICAgfSlgO1xuICAgIH1cbiAgICByZXR1cm4gY2xhdXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0cmluZ0NvbGxlY3Rpb25DbGF1c2UoXG4gIGxhbWJkYVBhcmFtZXRlcjogc3RyaW5nLFxuICB2YWx1ZTogYW55LFxuICBjb2xsZWN0aW9uT3BlcmF0b3I6IHN0cmluZyxcbiAgcHJvcE5hbWU6IHN0cmluZ1xuKSB7XG4gIGxldCBjbGF1c2UgPSAnJztcbiAgY29uc3QgY29uZGl0aW9uT3BlcmF0b3IgPSBjb2xsZWN0aW9uT3BlcmF0b3IgPT0gJ2FsbCcgPyAnbmUnIDogJ2VxJztcbiAgY2xhdXNlID0gYCR7cHJvcE5hbWV9LyR7Y29sbGVjdGlvbk9wZXJhdG9yfSgke2xhbWJkYVBhcmFtZXRlcn06ICR7bGFtYmRhUGFyYW1ldGVyfSAke2NvbmRpdGlvbk9wZXJhdG9yfSAnJHt2YWx1ZX0nKWA7XG5cbiAgcmV0dXJuIGNsYXVzZTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlSWxsZWdhbENoYXJzKHN0cmluZzogc3RyaW5nKSB7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC8lL2csICclMjUnKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcKy9nLCAnJTJCJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXC8vZywgJyUyRicpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFw/L2csICclM0YnKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyMvZywgJyUyMycpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvJi9nLCAnJTI2Jyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC8nL2csIFwiJydcIik7XG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZShcbiAgdmFsdWU6IFZhbHVlLFxuICB7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUgPSBmYWxzZSxcbiAgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfSA9IHt9XG4pOiBhbnkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlc2NhcGUgPyBgJyR7ZXNjYXBlSWxsZWdhbENoYXJzKHZhbHVlKX0nYCA6IGAnJHt2YWx1ZX0nYDtcbiAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGBbJHt2YWx1ZVxuICAgICAgLm1hcCgoZCkgPT4gbm9ybWFsaXplVmFsdWUoZCwgeyBhbGlhc2VzLCBlc2NhcGUgfSkpXG4gICAgICAuam9pbignLCcpfV1gO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5SYXc6XG4gICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5EdXJhdGlvbjpcbiAgICAgICAgcmV0dXJuIGBkdXJhdGlvbicke3ZhbHVlLnZhbHVlfSdgO1xuICAgICAgY2FzZSBRdWVyeUN1c3RvbVR5cGVzLkJpbmFyeTpcbiAgICAgICAgcmV0dXJuIGBiaW5hcnknJHt2YWx1ZS52YWx1ZX0nYDtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5BbGlhczpcbiAgICAgICAgLy8gU3RvcmVcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWxpYXNlcykpIHtcbiAgICAgICAgICBpZiAodmFsdWUubmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZS5uYW1lID0gYGEke2FsaWFzZXMubGVuZ3RoICsgMX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhbGlhc2VzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgQCR7dmFsdWUubmFtZX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKVxuICAgICAgICAgIC5maWx0ZXIoKFssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChbaywgdl0pID0+XG4gICAgICAgICAgICAgIGAke2t9PSR7bm9ybWFsaXplVmFsdWUodiBhcyBWYWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9YFxuICAgICAgICAgIClcbiAgICAgICAgICAuam9pbignLCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRXhwYW5kPFQ+KFxuICBleHBhbmRzOiBFeHBhbmQ8VD4sXG4gIHsgYWxpYXNlcywgZXNjYXBlID0gZmFsc2UgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfVxuKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBleHBhbmRzID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBleHBhbmRzIGFzIGFueTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwYW5kcyA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoZXhwYW5kcy5pbmRleE9mKCcvJykgPT09IC0xKSB7XG4gICAgICByZXR1cm4gZXhwYW5kcztcbiAgICB9XG5cbiAgICAvLyBDaGFuZ2UgYEZvby9CYXIvQmF6YCB0byBgRm9vKCRleHBhbmQ9QmFyKCRleHBhbmQ9QmF6KSlgXG4gICAgcmV0dXJuIGV4cGFuZHNcbiAgICAgIC5zcGxpdCgnLycpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAucmVkdWNlKChyZXN1bHRzLCBpdGVtLCBpbmRleCwgYXJyKSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIC8vIElubmVyLW1vc3QgaXRlbVxuICAgICAgICAgIHJldHVybiBgJGV4cGFuZD0ke2l0ZW19YDtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gYXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBPdXRlci1tb3N0IGl0ZW0sIGRvbid0IGFkZCBgJGV4cGFuZD1gIHByZWZpeCAoYWRkZWQgYWJvdmUpXG4gICAgICAgICAgcmV0dXJuIGAke2l0ZW19KCR7cmVzdWx0c30pYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlciBpdGVtc1xuICAgICAgICAgIHJldHVybiBgJGV4cGFuZD0ke2l0ZW19KCR7cmVzdWx0c30pYDtcbiAgICAgICAgfVxuICAgICAgfSwgJycpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhwYW5kcykpIHtcbiAgICByZXR1cm4gYCR7KGV4cGFuZHMgYXMgQXJyYXk8TmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+PilcbiAgICAgIC5tYXAoKGUpID0+IGJ1aWxkRXhwYW5kKGUsIHsgYWxpYXNlcywgZXNjYXBlIH0pKVxuICAgICAgLmpvaW4oJywnKX1gO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBhbmRzID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGV4cGFuZEtleXMgPSBPYmplY3Qua2V5cyhleHBhbmRzKTtcblxuICAgIGlmIChcbiAgICAgIGV4cGFuZEtleXMuc29tZShcbiAgICAgICAgKGtleSkgPT4gU1VQUE9SVEVEX0VYUEFORF9QUk9QRVJUSUVTLmluZGV4T2Yoa2V5LnRvTG93ZXJDYXNlKCkpICE9PSAtMVxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIGV4cGFuZEtleXNcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdmaWx0ZXInOlxuICAgICAgICAgICAgICB2YWx1ZSA9IGJ1aWxkRmlsdGVyKChleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pilba2V5XSwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlckJ5JzpcbiAgICAgICAgICAgICAgdmFsdWUgPSBidWlsZE9yZGVyQnkoXG4gICAgICAgICAgICAgICAgKGV4cGFuZHMgYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+KVtrZXldIGFzIE9yZGVyQnk8VD5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZXZlbHMnOlxuICAgICAgICAgICAgY2FzZSAnY291bnQnOlxuICAgICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIGNhc2UgJ3NraXAnOlxuICAgICAgICAgICAgICB2YWx1ZSA9IGAkeyhleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pilba2V5XX1gO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHZhbHVlID0gYnVpbGRFeHBhbmQoXG4gICAgICAgICAgICAgICAgKGV4cGFuZHMgYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+KVtrZXldIGFzIEV4cGFuZDxUPixcbiAgICAgICAgICAgICAgICB7IGFsaWFzZXMsIGVzY2FwZSB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgJCR7a2V5LnRvTG93ZXJDYXNlKCl9PSR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJzsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGV4cGFuZEtleXNcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbHRFeHBhbmQgPSBidWlsZEV4cGFuZChcbiAgICAgICAgICAgIChleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55PilbXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgXSBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4sXG4gICAgICAgICAgICB7IGFsaWFzZXMsIGVzY2FwZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gYnVpbHRFeHBhbmQgPyBgJHtrZXl9KCR7YnVpbHRFeHBhbmR9KWAgOiBrZXk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcsJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gYnVpbGRUcmFuc2Zvcm1zPFQ+KFxuICB0cmFuc2Zvcm1zOiBUcmFuc2Zvcm08VD4gfCBUcmFuc2Zvcm08VD5bXSxcbiAgeyBhbGlhc2VzLCBlc2NhcGUgPSBmYWxzZSB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9XG4pIHtcbiAgLy8gV3JhcCBzaW5nbGUgb2JqZWN0IGFuIGFycmF5IGZvciBzaW1wbGlmaWVkIHByb2Nlc3NpbmdcbiAgY29uc3QgdHJhbnNmb3Jtc0FycmF5ID0gQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1zKSA/IHRyYW5zZm9ybXMgOiBbdHJhbnNmb3Jtc107XG5cbiAgY29uc3QgdHJhbnNmb3Jtc1Jlc3VsdCA9IHRyYW5zZm9ybXNBcnJheS5yZWR1Y2UoXG4gICAgKHJlc3VsdDogc3RyaW5nW10sIHRyYW5zZm9ybSkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2dyZWdhdGUsIGZpbHRlciwgZ3JvdXBCeSwgLi4ucmVzdCB9ID0gdHJhbnNmb3JtO1xuXG4gICAgICAvLyBUT0RPOiBzdXBwb3J0IGFzIG1hbnkgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgIC8vICAgdG9wY291bnQsIHRvcHN1bSwgdG9wcGVyY2VudCxcbiAgICAgIC8vICAgYm90dG9tc3VtLCBib3R0b21jb3VudCwgYm90dG9tcGVyY2VudCxcbiAgICAgIC8vICAgaWRlbnRpdHksIGNvbmNhdCwgZXhwYW5kLCBzZWFyY2gsIGNvbXB1dGUsIGlzZGVmaW5lZFxuICAgICAgY29uc3QgdW5zdXBwb3J0ZWRLZXlzID0gT2JqZWN0LmtleXMocmVzdCk7XG4gICAgICBpZiAodW5zdXBwb3J0ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHRyYW5zZm9ybShzKTogJHt1bnN1cHBvcnRlZEtleXN9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhZ2dyZWdhdGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYGFnZ3JlZ2F0ZSgke2J1aWxkQWdncmVnYXRlKGFnZ3JlZ2F0ZSl9KWApO1xuICAgICAgfVxuICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICBjb25zdCBidWlsdEZpbHRlciA9IGJ1aWxkRmlsdGVyKGZpbHRlciwgeyBhbGlhc2VzLCBlc2NhcGUgfSk7XG4gICAgICAgIGlmIChidWlsdEZpbHRlcikge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgYGZpbHRlcigke2J1aWxkRmlsdGVyKGJ1aWx0RmlsdGVyLCB7IGFsaWFzZXMsIGVzY2FwZSB9KX0pYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGBncm91cGJ5KCR7YnVpbGRHcm91cEJ5KGdyb3VwQnksIHsgYWxpYXNlcywgZXNjYXBlIH0pfSlgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybXNSZXN1bHQuam9pbignLycpIHx8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRBZ2dyZWdhdGUoYWdncmVnYXRlOiBBZ2dyZWdhdGUgfCBBZ2dyZWdhdGVbXSkge1xuICAvLyBXcmFwIHNpbmdsZSBvYmplY3QgaW4gYW4gYXJyYXkgZm9yIHNpbXBsaWZpZWQgcHJvY2Vzc2luZ1xuICBjb25zdCBhZ2dyZWdhdGVBcnJheSA9IEFycmF5LmlzQXJyYXkoYWdncmVnYXRlKSA/IGFnZ3JlZ2F0ZSA6IFthZ2dyZWdhdGVdO1xuXG4gIHJldHVybiBhZ2dyZWdhdGVBcnJheVxuICAgIC5tYXAoKGFnZ3JlZ2F0ZUl0ZW0pID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgYWdncmVnYXRlSXRlbSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBhZ2dyZWdhdGVJdGVtXG4gICAgICAgIDogT2JqZWN0LmtleXMoYWdncmVnYXRlSXRlbSkubWFwKChhZ2dyZWdhdGVLZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZVZhbHVlID0gYWdncmVnYXRlSXRlbVthZ2dyZWdhdGVLZXldO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBBcmUgdGhlc2UgYWx3YXlzIHJlcXVpcmVkPyAgQ2FuL3Nob3VsZCB3ZSBkZWZhdWx0IHRoZW0gaWYgc28/XG4gICAgICAgICAgICBpZiAoIWFnZ3JlZ2F0ZVZhbHVlLndpdGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnd2l0aCcgcHJvcGVydHkgcmVxdWlyZWQgZm9yICcke2FnZ3JlZ2F0ZUtleX0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFnZ3JlZ2F0ZVZhbHVlLmFzKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJ2FzJyBwcm9wZXJ0eSByZXF1aXJlZCBmb3IgJyR7YWdncmVnYXRlS2V5fSdgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGAke2FnZ3JlZ2F0ZUtleX0gd2l0aCAke2FnZ3JlZ2F0ZVZhbHVlLndpdGh9IGFzICR7YWdncmVnYXRlVmFsdWUuYXN9YDtcbiAgICAgICAgICB9KTtcbiAgICB9KVxuICAgIC5qb2luKCcsJyk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkR3JvdXBCeTxUPihcbiAgZ3JvdXBCeTogR3JvdXBCeTxUPixcbiAgeyBhbGlhc2VzLCBlc2NhcGUgPSBmYWxzZSB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9XG4pIHtcbiAgaWYgKCFncm91cEJ5LnByb3BlcnRpZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCdwcm9wZXJ0aWVzJyBwcm9wZXJ0eSByZXF1aXJlZCBmb3IgZ3JvdXBCeWApO1xuICB9XG5cbiAgbGV0IHJlc3VsdCA9IGAoJHtncm91cEJ5LnByb3BlcnRpZXMuam9pbignLCcpfSlgO1xuXG4gIGlmIChncm91cEJ5LnRyYW5zZm9ybSkge1xuICAgIHJlc3VsdCArPSBgLCR7YnVpbGRUcmFuc2Zvcm1zKGdyb3VwQnkudHJhbnNmb3JtLCB7IGFsaWFzZXMsIGVzY2FwZSB9KX1gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYnVpbGRPcmRlckJ5PFQ+KG9yZGVyQnk6IE9yZGVyQnk8VD4sIHByZWZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICBpZiAoQXJyYXkuaXNBcnJheShvcmRlckJ5KSkge1xuICAgIHJldHVybiAob3JkZXJCeSBhcyBPcmRlckJ5T2JqZWN0PFQ+W10pXG4gICAgICAubWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgdmFsdWUubGVuZ3RoID09PSAyICYmXG4gICAgICAgIFsnYXNjJywgJ2Rlc2MnXS5pbmRleE9mKHZhbHVlWzFdKSAhPT0gLTFcbiAgICAgICAgICA/IHZhbHVlLmpvaW4oJyAnKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgIClcbiAgICAgIC5tYXAoKHYpID0+IGAke3ByZWZpeH0ke3Z9YClcbiAgICAgIC5qb2luKCcsJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9yZGVyQnkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9yZGVyQnkpXG4gICAgICAubWFwKChbaywgdl0pID0+IGJ1aWxkT3JkZXJCeSh2IGFzIE9yZGVyQnk8YW55PiwgYCR7a30vYCkpXG4gICAgICAubWFwKCh2KSA9PiBgJHtwcmVmaXh9JHt2fWApXG4gICAgICAuam9pbignLCcpO1xuICB9XG4gIHJldHVybiBgJHtwcmVmaXh9JHtvcmRlckJ5fWA7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSk6IHN0cmluZyB7XG4gIC8vIFRoaXMgY2FuIGJlIHJlZmFjdG9yZWQgdXNpbmcgVVJMIEFQSS4gQnV0IElFIGRvZXMgbm90IHN1cHBvcnQgaXQuXG4gIGNvbnN0IHF1ZXJpZXM6IHN0cmluZ1tdID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5tYXAoXG4gICAgKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWBcbiAgKTtcbiAgcmV0dXJuIHF1ZXJpZXMubGVuZ3RoID8gYCR7cGF0aH0/JHtxdWVyaWVzLmpvaW4oJyYnKX1gIDogcGF0aDtcbn1cblxuZnVuY3Rpb24gcGFyc2VOb3QoYnVpbHRGaWx0ZXJzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgbm90KCR7YnVpbHRGaWx0ZXJzLmpvaW4oJyBhbmQgJyl9KWA7XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { QueryOptionNames } from '../../types';
2
2
  import { Objects, Types } from '../../utils';
3
- import { alias } from './builder';
3
+ import { alias, normalizeValue, } from './builder';
4
4
  import { ComputeExpression, FilterExpression, OrderByExpression, SearchExpression, } from './expressions';
5
5
  import { ExpandExpression } from './expressions/expand';
6
6
  import { SelectExpression } from './expressions/select';
@@ -13,30 +13,32 @@ export class ODataQueryOptionHandler {
13
13
  return this.n;
14
14
  }
15
15
  toJSON() {
16
- return this.o[this.n];
16
+ return this.o.get(this.n);
17
17
  }
18
18
  empty() {
19
- return Types.isEmpty(this.o[this.n]);
19
+ return Types.isEmpty(this.o.get(this.n));
20
20
  }
21
21
  //#region Primitive Value
22
22
  value(v) {
23
- return (v !== undefined && (this.o[this.n] = v)) || this.o[this.n];
23
+ if (v !== undefined)
24
+ this.o.set(this.n, v);
25
+ return this.o.get(this.n);
24
26
  }
25
27
  //#endregion
26
28
  //#region Array Value
27
29
  assertArray() {
28
- if (!Types.isArray(this.o[this.n]))
29
- this.o[this.n] = this.o[this.n] !== undefined ? [this.o[this.n]] : [];
30
- return this.o[this.n];
30
+ if (!Types.isArray(this.o.get(this.n)))
31
+ this.o.set(this.n, this.o.has(this.n) ? [this.o.get(this.n)] : []);
32
+ return this.o.get(this.n);
31
33
  }
32
34
  push(value) {
33
35
  this.assertArray().push(value);
34
36
  }
35
37
  remove(value) {
36
- this.o[this.n] = this.assertArray().filter((v) => v !== value);
38
+ this.o.set(this.n, this.assertArray().filter((v) => v !== value));
37
39
  // If only one... down to value
38
- if (this.o[this.n].length === 1)
39
- this.o[this.n] = this.o[this.n][0];
40
+ if (this.o.get(this.n).length === 1)
41
+ this.o.set(this.n, this.o.get(this.n)[0]);
40
42
  }
41
43
  at(index) {
42
44
  return this.assertArray()[index];
@@ -44,8 +46,9 @@ export class ODataQueryOptionHandler {
44
46
  //#endregion
45
47
  //#region HashMap Value
46
48
  assertObject(create) {
47
- if (!Types.isArray(this.o[this.n]) && Types.isPlainObject(this.o[this.n])) {
48
- return this.o[this.n];
49
+ if (!Types.isArray(this.o.get(this.n)) &&
50
+ Types.isPlainObject(this.o.get(this.n))) {
51
+ return this.o.get(this.n);
49
52
  }
50
53
  let arr = this.assertArray();
51
54
  let obj = arr.find((v) => Types.isPlainObject(v));
@@ -66,10 +69,10 @@ export class ODataQueryOptionHandler {
66
69
  unset(path) {
67
70
  let obj = this.assertObject(true);
68
71
  Objects.unset(obj, path);
69
- if (Types.isArray(this.o[this.n])) {
70
- this.o[this.n] = this.o[this.n].filter((v) => !Types.isEmpty(v));
71
- if (this.o[this.n].length === 1)
72
- this.o[this.n] = this.o[this.n][0];
72
+ if (Types.isArray(this.o.get(this.n))) {
73
+ this.o.set(this.n, this.o.get(this.n).filter((v) => !Types.isEmpty(v)));
74
+ if (this.o.get(this.n).length === 1)
75
+ this.o.set(this.n, this.o.get(this.n)[0]);
73
76
  }
74
77
  }
75
78
  has(path) {
@@ -82,7 +85,7 @@ export class ODataQueryOptionHandler {
82
85
  }
83
86
  //#endregion
84
87
  clear() {
85
- delete this.o[this.n];
88
+ this.o.delete(this.n);
86
89
  }
87
90
  }
88
91
  export class ODataQueryOptionsHandler {
@@ -99,6 +102,14 @@ export class ODataQueryOptionsHandler {
99
102
  alias(value, name) {
100
103
  return alias(value, name);
101
104
  }
105
+ /**
106
+ * Normalize the given value to a valid odata value
107
+ * @param value The value to normalize
108
+ * @returns The normalized value
109
+ */
110
+ normalize(value) {
111
+ return normalizeValue(value);
112
+ }
102
113
  select(opts) {
103
114
  if (Types.isFunction(opts)) {
104
115
  return this.options.expression(QueryOptionNames.select, SelectExpression.select(opts, this.options.expression(QueryOptionNames.select)));
@@ -185,4 +196,4 @@ export class ODataQueryOptionsHandler {
185
196
  this.paging(query);
186
197
  }
187
198
  }
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUE4QyxNQUFNLFdBQVcsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFakIsZ0JBQWdCLEdBR2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3hELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFDVSxDQUEwQixFQUMxQixDQUFtQjtRQURuQixNQUFDLEdBQUQsQ0FBQyxDQUF5QjtRQUMxQixNQUFDLEdBQUQsQ0FBQyxDQUFrQjtJQUMxQixDQUFDO0lBRUosSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsS0FBSyxDQUFDLENBQU87UUFDWCxPQUFPLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELFlBQVk7SUFFWixxQkFBcUI7SUFDYixXQUFXO1FBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQVU7UUFDYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVTtRQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUMvRCwrQkFBK0I7UUFDL0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxFQUFFLENBQUMsS0FBYTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxZQUFZO0lBRVosdUJBQXVCO0lBQ2YsWUFBWSxDQUFDLE1BQWU7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjtRQUNELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLEVBQUU7WUFDbEIsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNULEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDZjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBVTtRQUMxQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxHQUFTO1FBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWTtRQUNoQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXpCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7SUFFRCxHQUFHLENBQUMsSUFBWTtRQUNkLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUErQjtRQUNwQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFlBQVk7SUFFWixLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQXNCLE9BQTZCO1FBQTdCLFlBQU8sR0FBUCxPQUFPLENBQXNCO0lBQUcsQ0FBQztJQUV2RDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsS0FBVSxFQUFFLElBQWE7UUFDN0IsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFVRCxNQUFNLENBQUMsSUFBVTtRQUNmLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3ZCLGdCQUFnQixDQUFDLE1BQU0sQ0FDckIsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUNqRCxDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFVRCxNQUFNLENBQUMsSUFBVTtRQUNmLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3ZCLGdCQUFnQixDQUFDLE1BQU0sQ0FDckIsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUNqRCxDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFrQkQsT0FBTyxDQUFDLElBQVU7UUFDaEIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQzVCLGdCQUFnQixDQUFDLE9BQU8sRUFDeEIsaUJBQWlCLENBQUMsT0FBTyxDQUN2QixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQ2xELENBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQU9ELE1BQU0sQ0FBQyxJQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFJRCxTQUFTLENBQUMsSUFBbUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBZSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQVlELE1BQU0sQ0FBQyxJQUFVO1FBQ2YsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQzVCLGdCQUFnQixDQUFDLE1BQU0sRUFDdkIsZ0JBQWdCLENBQUMsTUFBTSxDQUNyQixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQ2pELENBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQWVELE1BQU0sQ0FBQyxJQUFVO1FBQ2YsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQzVCLGdCQUFnQixDQUFDLE1BQU0sRUFDdkIsZ0JBQWdCLENBQUMsTUFBTSxDQUNyQixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQ2pELENBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBWSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQVVELE9BQU8sQ0FBQyxJQUFVO1FBQ2hCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUN4QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQ3hCLGlCQUFpQixDQUFDLE9BQU8sQ0FDdkIsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUNsRCxDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQWEsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFJRCxHQUFHLENBQUMsSUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFJRCxJQUFJLENBQUMsSUFBYTtRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBSUQsU0FBUyxDQUFDLElBQWE7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBUyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxNQUNvRCxFQUFFO1FBQ3pELElBQUksU0FBUyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2xELElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksR0FBRyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUE2QjtRQUNqQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEU7UUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJ5T3B0aW9uTmFtZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBPYmplY3RzLCBUeXBlcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGFsaWFzLCBFeHBhbmQsIEZpbHRlciwgT3JkZXJCeSwgU2VsZWN0LCBUcmFuc2Zvcm0gfSBmcm9tICcuL2J1aWxkZXInO1xuaW1wb3J0IHtcbiAgQ29tcHV0ZUV4cHJlc3Npb24sXG4gIEZpbHRlckNvbm5lY3RvcixcbiAgRmlsdGVyRXhwcmVzc2lvbixcbiAgT3JkZXJCeUV4cHJlc3Npb24sXG4gIFNlYXJjaENvbm5lY3RvcixcbiAgU2VhcmNoRXhwcmVzc2lvbixcbiAgT0RhdGFGdW5jdGlvbnMsXG4gIE9EYXRhT3BlcmF0b3JzLFxufSBmcm9tICcuL2V4cHJlc3Npb25zJztcbmltcG9ydCB7IEV4cGFuZEV4cHJlc3Npb24gfSBmcm9tICcuL2V4cHJlc3Npb25zL2V4cGFuZCc7XG5pbXBvcnQgeyBTZWxlY3RFeHByZXNzaW9uIH0gZnJvbSAnLi9leHByZXNzaW9ucy9zZWxlY3QnO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVF1ZXJ5QXJndW1lbnRzLCBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbzogeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAgcHJpdmF0ZSBuOiBRdWVyeU9wdGlvbk5hbWVzXG4gICkge31cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLm9bdGhpcy5uXTtcbiAgfVxuXG4gIGVtcHR5KCkge1xuICAgIHJldHVybiBUeXBlcy5pc0VtcHR5KHRoaXMub1t0aGlzLm5dKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBQcmltaXRpdmUgVmFsdWVcbiAgdmFsdWUodj86IGFueSkge1xuICAgIHJldHVybiAodiAhPT0gdW5kZWZpbmVkICYmICh0aGlzLm9bdGhpcy5uXSA9IHYpKSB8fCB0aGlzLm9bdGhpcy5uXTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gQXJyYXkgVmFsdWVcbiAgcHJpdmF0ZSBhc3NlcnRBcnJheSgpOiBhbnlbXSB7XG4gICAgaWYgKCFUeXBlcy5pc0FycmF5KHRoaXMub1t0aGlzLm5dKSlcbiAgICAgIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl0gIT09IHVuZGVmaW5lZCA/IFt0aGlzLm9bdGhpcy5uXV0gOiBbXTtcbiAgICByZXR1cm4gdGhpcy5vW3RoaXMubl07XG4gIH1cblxuICBwdXNoKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmFzc2VydEFycmF5KCkucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZW1vdmUodmFsdWU6IGFueSkge1xuICAgIHRoaXMub1t0aGlzLm5dID0gdGhpcy5hc3NlcnRBcnJheSgpLmZpbHRlcigodikgPT4gdiAhPT0gdmFsdWUpO1xuICAgIC8vIElmIG9ubHkgb25lLi4uIGRvd24gdG8gdmFsdWVcbiAgICBpZiAodGhpcy5vW3RoaXMubl0ubGVuZ3RoID09PSAxKSB0aGlzLm9bdGhpcy5uXSA9IHRoaXMub1t0aGlzLm5dWzBdO1xuICB9XG5cbiAgYXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmFzc2VydEFycmF5KClbaW5kZXhdO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBIYXNoTWFwIFZhbHVlXG4gIHByaXZhdGUgYXNzZXJ0T2JqZWN0KGNyZWF0ZTogYm9vbGVhbik6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIVR5cGVzLmlzQXJyYXkodGhpcy5vW3RoaXMubl0pICYmIFR5cGVzLmlzUGxhaW5PYmplY3QodGhpcy5vW3RoaXMubl0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5vW3RoaXMubl07XG4gICAgfVxuICAgIGxldCBhcnIgPSB0aGlzLmFzc2VydEFycmF5KCk7XG4gICAgbGV0IG9iaiA9IGFyci5maW5kKCh2KSA9PiBUeXBlcy5pc1BsYWluT2JqZWN0KHYpKTtcbiAgICBpZiAoIW9iaiAmJiBjcmVhdGUpIHtcbiAgICAgIG9iaiA9IHt9O1xuICAgICAgYXJyLnB1c2gob2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHNldChwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgT2JqZWN0cy5zZXQob2JqLCBwYXRoLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQocGF0aDogc3RyaW5nLCBkZWY/OiBhbnkpOiBhbnkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuZ2V0KG9iaiwgcGF0aCwgZGVmKTtcbiAgfVxuXG4gIHVuc2V0KHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICBPYmplY3RzLnVuc2V0KG9iaiwgcGF0aCk7XG5cbiAgICBpZiAoVHlwZXMuaXNBcnJheSh0aGlzLm9bdGhpcy5uXSkpIHtcbiAgICAgIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl0uZmlsdGVyKCh2OiBhbnkpID0+ICFUeXBlcy5pc0VtcHR5KHYpKTtcbiAgICAgIGlmICh0aGlzLm9bdGhpcy5uXS5sZW5ndGggPT09IDEpIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl1bMF07XG4gICAgfVxuICB9XG5cbiAgaGFzKHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuaGFzKG9iaiwgcGF0aCk7XG4gIH1cblxuICBhc3NpZ24odmFsdWVzOiB7IFthdHRyOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICByZXR1cm4gT2JqZWN0cy5tZXJnZShvYmosIHZhbHVlcyk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgY2xlYXIoKSB7XG4gICAgZGVsZXRlIHRoaXMub1t0aGlzLm5dO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3B0aW9uczogT0RhdGFRdWVyeU9wdGlvbnM8VD4pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvZGF0YSBhbGlhcyBwYXJhbWV0ZXJcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19QYXJhbWV0ZXJBbGlhc2VzXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGFsaWFzXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhbGlhc1xuICAgKiBAcmV0dXJucyBUaGUgYWxpYXNcbiAgICovXG4gIGFsaWFzKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYWxpYXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgc2VsZWN0KFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHsgczogVDsgZTogKCkgPT4gU2VsZWN0RXhwcmVzc2lvbjxUPiB9LFxuICAgICAgY3VycmVudD86IFNlbGVjdEV4cHJlc3Npb248VD5cbiAgICApID0+IFNlbGVjdEV4cHJlc3Npb248VD5cbiAgKTogU2VsZWN0RXhwcmVzc2lvbjxUPjtcbiAgc2VsZWN0KG9wdHM6IFNlbGVjdDxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWxlY3QoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlbGVjdChvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbk5hbWVzLnNlbGVjdCxcbiAgICAgICAgU2VsZWN0RXhwcmVzc2lvbi5zZWxlY3QoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbk5hbWVzLnNlbGVjdClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248U2VsZWN0PFQ+PihRdWVyeU9wdGlvbk5hbWVzLnNlbGVjdCwgb3B0cyk7XG4gIH1cblxuICBleHBhbmQoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogeyBzOiBUOyBlOiAoKSA9PiBFeHBhbmRFeHByZXNzaW9uPFQ+IH0sXG4gICAgICBjdXJyZW50PzogRXhwYW5kRXhwcmVzc2lvbjxUPlxuICAgICkgPT4gRXhwYW5kRXhwcmVzc2lvbjxUPlxuICApOiBFeHBhbmRFeHByZXNzaW9uPFQ+O1xuICBleHBhbmQob3B0czogRXhwYW5kPFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGV4cGFuZCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZXhwYW5kKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuZXhwYW5kLFxuICAgICAgICBFeHBhbmRFeHByZXNzaW9uLmV4cGFuZChcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMuZXhwYW5kKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxFeHBhbmQ8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuZXhwYW5kLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbGluayBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1N5c3RlbVF1ZXJ5T3B0aW9uY29tcHV0ZVxuICAgKi9cbiAgY29tcHV0ZShcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7XG4gICAgICAgIHM6IFQ7XG4gICAgICAgIGU6ICgpID0+IENvbXB1dGVFeHByZXNzaW9uPFQ+O1xuICAgICAgICBvOiBPRGF0YU9wZXJhdG9yczxUPjtcbiAgICAgICAgZjogT0RhdGFGdW5jdGlvbnM8VD47XG4gICAgICB9LFxuICAgICAgY3VycmVudD86IENvbXB1dGVFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBDb21wdXRlRXhwcmVzc2lvbjxUPlxuICApOiBDb21wdXRlRXhwcmVzc2lvbjxUPjtcbiAgY29tcHV0ZShvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgY29tcHV0ZSgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgY29tcHV0ZShvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbk5hbWVzLmNvbXB1dGUsXG4gICAgICAgIENvbXB1dGVFeHByZXNzaW9uLmNvbXB1dGUoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbk5hbWVzLmNvbXB1dGUpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5jb21wdXRlLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbGluayBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1N5c3RlbVF1ZXJ5T3B0aW9uZm9ybWF0XG4gICAqL1xuICBmb3JtYXQob3B0czogc3RyaW5nKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGZvcm1hdCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZm9ybWF0KG9wdHM/OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5mb3JtYXQsIG9wdHMpO1xuICB9XG5cbiAgdHJhbnNmb3JtKG9wdHM6IFRyYW5zZm9ybTxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0cmFuc2Zvcm0oKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHRyYW5zZm9ybShvcHRzPzogVHJhbnNmb3JtPFQ+KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxUcmFuc2Zvcm08VD4+KFF1ZXJ5T3B0aW9uTmFtZXMudHJhbnNmb3JtLCBvcHRzKTtcbiAgfVxuXG4gIHNlYXJjaChcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7XG4gICAgICAgIGU6IChjb25uZWN0b3I6IFNlYXJjaENvbm5lY3RvcikgPT4gU2VhcmNoRXhwcmVzc2lvbjxUPjtcbiAgICAgIH0sXG4gICAgICBjdXJyZW50PzogU2VhcmNoRXhwcmVzc2lvbjxUPlxuICAgICkgPT4gU2VhcmNoRXhwcmVzc2lvbjxUPlxuICApOiBTZWFyY2hFeHByZXNzaW9uPFQ+O1xuICBzZWFyY2gob3B0czogc3RyaW5nKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlYXJjaCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VhcmNoKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2VhcmNoLFxuICAgICAgICBTZWFyY2hFeHByZXNzaW9uLnNlYXJjaChcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMuc2VhcmNoKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uTmFtZXMuc2VhcmNoLCBvcHRzKTtcbiAgfVxuXG4gIGZpbHRlcihcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7XG4gICAgICAgIHM6IFQ7XG4gICAgICAgIGU6IChjb25uZWN0b3I/OiBGaWx0ZXJDb25uZWN0b3IpID0+IEZpbHRlckV4cHJlc3Npb248VD47XG4gICAgICAgIG86IE9EYXRhT3BlcmF0b3JzPFQ+O1xuICAgICAgICBmOiBPRGF0YUZ1bmN0aW9uczxUPjtcbiAgICAgIH0sXG4gICAgICBjdXJyZW50PzogRmlsdGVyRXhwcmVzc2lvbjxUPlxuICAgICkgPT4gRmlsdGVyRXhwcmVzc2lvbjxUPlxuICApOiBGaWx0ZXJFeHByZXNzaW9uPFQ+O1xuICBmaWx0ZXIob3B0czogRmlsdGVyPFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGZpbHRlcigpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZmlsdGVyKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyLFxuICAgICAgICBGaWx0ZXJFeHByZXNzaW9uLmZpbHRlcihcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxGaWx0ZXI8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyLCBvcHRzKTtcbiAgfVxuXG4gIG9yZGVyQnkoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogeyBzOiBUOyBlOiAoKSA9PiBPcmRlckJ5RXhwcmVzc2lvbjxUPiB9LFxuICAgICAgY3VycmVudD86IE9yZGVyQnlFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBPcmRlckJ5RXhwcmVzc2lvbjxUPlxuICApOiBPcmRlckJ5RXhwcmVzc2lvbjxUPjtcbiAgb3JkZXJCeShvcHRzOiBPcmRlckJ5PFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIG9yZGVyQnkoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIG9yZGVyQnkob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uKFxuICAgICAgICBRdWVyeU9wdGlvbk5hbWVzLm9yZGVyQnksXG4gICAgICAgIE9yZGVyQnlFeHByZXNzaW9uLm9yZGVyQnkoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbk5hbWVzLm9yZGVyQnkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPE9yZGVyQnk8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMub3JkZXJCeSwgb3B0cyk7XG4gIH1cblxuICB0b3Aob3B0czogbnVtYmVyKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHRvcCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdG9wKG9wdHM/OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPG51bWJlcj4oUXVlcnlPcHRpb25OYW1lcy50b3AsIG9wdHMpO1xuICB9XG5cbiAgc2tpcChvcHRzOiBudW1iZXIpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2tpcCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2tpcChvcHRzPzogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxudW1iZXI+KFF1ZXJ5T3B0aW9uTmFtZXMuc2tpcCwgb3B0cyk7XG4gIH1cblxuICBza2lwdG9rZW4ob3B0czogc3RyaW5nKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXB0b2tlbigpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2tpcHRva2VuKG9wdHM/OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5za2lwdG9rZW4sIG9wdHMpO1xuICB9XG5cbiAgcGFnaW5nKHtcbiAgICBza2lwLFxuICAgIHNraXB0b2tlbixcbiAgICB0b3AsXG4gIH06IHsgc2tpcD86IG51bWJlcjsgc2tpcHRva2VuPzogc3RyaW5nOyB0b3A/OiBudW1iZXIgfSA9IHt9KSB7XG4gICAgaWYgKHNraXB0b2tlbiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNraXB0b2tlbihza2lwdG9rZW4pO1xuICAgIGVsc2UgaWYgKHNraXAgIT09IHVuZGVmaW5lZCkgdGhpcy5za2lwKHNraXApO1xuICAgIGlmICh0b3AgIT09IHVuZGVmaW5lZCkgdGhpcy50b3AodG9wKTtcbiAgfVxuXG4gIGNsZWFyUGFnaW5nKCkge1xuICAgIHRoaXMuc2tpcCgpLmNsZWFyKCk7XG4gICAgdGhpcy50b3AoKS5jbGVhcigpO1xuICAgIHRoaXMuc2tpcHRva2VuKCkuY2xlYXIoKTtcbiAgfVxuXG4gIGFwcGx5KHF1ZXJ5OiBPRGF0YVF1ZXJ5QXJndW1lbnRzPFQ+KSB7XG4gICAgaWYgKHF1ZXJ5LnNlbGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LCBxdWVyeS5zZWxlY3QpO1xuICAgIH1cbiAgICBpZiAocXVlcnkuZXhwYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb25OYW1lcy5leHBhbmQsIHF1ZXJ5LmV4cGFuZCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS50cmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLnRyYW5zZm9ybSwgcXVlcnkudHJhbnNmb3JtKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uTmFtZXMuc2VhcmNoLCBxdWVyeS5zZWFyY2gpO1xuICAgIH1cbiAgICBpZiAocXVlcnkuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsIHF1ZXJ5LmZpbHRlcik7XG4gICAgfVxuICAgIGlmIChxdWVyeS5vcmRlckJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5LCBxdWVyeS5vcmRlckJ5KTtcbiAgICB9XG4gICAgdGhpcy5wYWdpbmcocXVlcnkpO1xuICB9XG59XG4iXX0=
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsS0FBSyxFQU1MLGNBQWMsR0FDZixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFakIsZ0JBQWdCLEdBR2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3hELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFDVSxDQUE2QixFQUM3QixDQUFtQjtRQURuQixNQUFDLEdBQUQsQ0FBQyxDQUE0QjtRQUM3QixNQUFDLEdBQUQsQ0FBQyxDQUFrQjtJQUMxQixDQUFDO0lBRUosSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHlCQUF5QjtJQUN6QixLQUFLLENBQUMsQ0FBTztRQUNYLElBQUksQ0FBQyxL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TSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JqZWN0cywgVHlwZXMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1xuICBhbGlhcyxcbiAgRXhwYW5kLFxuICBGaWx0ZXIsXG4gIE9yZGVyQnksXG4gIFNlbGVjdCxcbiAgVHJhbnNmb3JtLFxuICBub3JtYWxpemVWYWx1ZSxcbn0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7XG4gIENvbXB1dGVFeHByZXNzaW9uLFxuICBGaWx0ZXJDb25uZWN0b3IsXG4gIEZpbHRlckV4cHJlc3Npb24sXG4gIE9yZGVyQnlFeHByZXNzaW9uLFxuICBTZWFyY2hDb25uZWN0b3IsXG4gIFNlYXJjaEV4cHJlc3Npb24sXG4gIE9EYXRhRnVuY3Rpb25zLFxuICBPRGF0YU9wZXJhdG9ycyxcbn0gZnJvbSAnLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBFeHBhbmRFeHByZXNzaW9uIH0gZnJvbSAnLi9leHByZXNzaW9ucy9leHBhbmQnO1xuaW1wb3J0IHsgU2VsZWN0RXhwcmVzc2lvbiB9IGZyb20gJy4vZXhwcmVzc2lvbnMvc2VsZWN0JztcbmltcG9ydCB0eXBlIHsgT0RhdGFRdWVyeUFyZ3VtZW50cywgT0RhdGFRdWVyeU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG86IE1hcDxRdWVyeU9wdGlvbk5hbWVzLCBhbnk+LFxuICAgIHByaXZhdGUgbjogUXVlcnlPcHRpb25OYW1lc1xuICApIHt9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubjtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG5cbiAgZW1wdHkoKSB7XG4gICAgcmV0dXJuIFR5cGVzLmlzRW1wdHkodGhpcy5vLmdldCh0aGlzLm4pKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBQcmltaXRpdmUgVmFsdWVcbiAgdmFsdWUodj86IGFueSkge1xuICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHRoaXMuby5zZXQodGhpcy5uLCB2KTtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBBcnJheSBWYWx1ZVxuICBwcml2YXRlIGFzc2VydEFycmF5KCk6IGFueVtdIHtcbiAgICBpZiAoIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSlcbiAgICAgIHRoaXMuby5zZXQodGhpcy5uLCB0aGlzLm8uaGFzKHRoaXMubikgPyBbdGhpcy5vLmdldCh0aGlzLm4pXSA6IFtdKTtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG5cbiAgcHVzaCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5hc3NlcnRBcnJheSgpLnB1c2godmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm8uc2V0KFxuICAgICAgdGhpcy5uLFxuICAgICAgdGhpcy5hc3NlcnRBcnJheSgpLmZpbHRlcigodikgPT4gdiAhPT0gdmFsdWUpXG4gICAgKTtcbiAgICAvLyBJZiBvbmx5IG9uZS4uLiBkb3duIHRvIHZhbHVlXG4gICAgaWYgKHRoaXMuby5nZXQodGhpcy5uKS5sZW5ndGggPT09IDEpXG4gICAgICB0aGlzLm8uc2V0KHRoaXMubiwgdGhpcy5vLmdldCh0aGlzLm4pWzBdKTtcbiAgfVxuXG4gIGF0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRBcnJheSgpW2luZGV4XTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSGFzaE1hcCBWYWx1ZVxuICBwcml2YXRlIGFzc2VydE9iamVjdChjcmVhdGU6IGJvb2xlYW4pOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKFxuICAgICAgIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSAmJlxuICAgICAgVHlwZXMuaXNQbGFpbk9iamVjdCh0aGlzLm8uZ2V0KHRoaXMubikpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICAgIH1cbiAgICBsZXQgYXJyID0gdGhpcy5hc3NlcnRBcnJheSgpO1xuICAgIGxldCBvYmogPSBhcnIuZmluZCgodikgPT4gVHlwZXMuaXNQbGFpbk9iamVjdCh2KSk7XG4gICAgaWYgKCFvYmogJiYgY3JlYXRlKSB7XG4gICAgICBvYmogPSB7fTtcbiAgICAgIGFyci5wdXNoKG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBzZXQocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KHRydWUpO1xuICAgIE9iamVjdHMuc2V0KG9iaiwgcGF0aCwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0KHBhdGg6IHN0cmluZywgZGVmPzogYW55KTogYW55IHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QoZmFsc2UpIHx8IHt9O1xuICAgIHJldHVybiBPYmplY3RzLmdldChvYmosIHBhdGgsIGRlZik7XG4gIH1cblxuICB1bnNldChwYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgT2JqZWN0cy51bnNldChvYmosIHBhdGgpO1xuXG4gICAgaWYgKFR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSkge1xuICAgICAgdGhpcy5vLnNldChcbiAgICAgICAgdGhpcy5uLFxuICAgICAgICB0aGlzLm8uZ2V0KHRoaXMubikuZmlsdGVyKCh2OiBhbnkpID0+ICFUeXBlcy5pc0VtcHR5KHYpKVxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLm8uZ2V0KHRoaXMubikubGVuZ3RoID09PSAxKVxuICAgICAgICB0aGlzLm8uc2V0KHRoaXMubiwgdGhpcy5vLmdldCh0aGlzLm4pWzBdKTtcbiAgICB9XG4gIH1cblxuICBoYXMocGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KGZhbHNlKSB8fCB7fTtcbiAgICByZXR1cm4gT2JqZWN0cy5oYXMob2JqLCBwYXRoKTtcbiAgfVxuXG4gIGFzc2lnbih2YWx1ZXM6IHsgW2F0dHI6IHN0cmluZ106IGFueSB9KSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KHRydWUpO1xuICAgIHJldHVybiBPYmplY3RzLm1lcmdlKG9iaiwgdmFsdWVzKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLm8uZGVsZXRlKHRoaXMubik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBvcHRpb25zOiBPRGF0YVF1ZXJ5T3B0aW9uczxUPikge31cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9kYXRhIGFsaWFzIHBhcmFtZXRlclxuICAgKiBAbGluayBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1BhcmFtZXRlckFsaWFzZXNcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgYWxpYXNcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGFsaWFzXG4gICAqIEByZXR1cm5zIFRoZSBhbGlhc1xuICAgKi9cbiAgYWxpYXModmFsdWU6IGFueSwgbmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBhbGlhcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIHRoZSBnaXZlbiB2YWx1ZSB0byBhIHZhbGlkIG9kYXRhIHZhbHVlXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gbm9ybWFsaXplXG4gICAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHZhbHVlXG4gICAqL1xuICBub3JtYWxpemUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBzZWxlY3QoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogeyBzOiBUOyBlOiAoKSA9PiBTZWxlY3RFeHByZXNzaW9uPFQ+IH0sXG4gICAgICBjdXJyZW50PzogU2VsZWN0RXhwcmVzc2lvbjxUPlxuICAgICkgPT4gU2VsZWN0RXhwcmVzc2lvbjxUPlxuICApOiBTZWxlY3RFeHByZXNzaW9uPFQ+O1xuICBzZWxlY3Qob3B0czogU2VsZWN0PFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlbGVjdCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VsZWN0KG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LFxuICAgICAgICBTZWxlY3RFeHByZXNzaW9uLnNlbGVjdChcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxTZWxlY3Q8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LCBvcHRzKTtcbiAgfVxuXG4gIGV4cGFuZChcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7IHM6IFQ7IGU6ICgpID0+IEV4cGFuZEV4cHJlc3Npb248VD4gfSxcbiAgICAgIGN1cnJlbnQ/OiBFeHBhbmRFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBFeHBhbmRFeHByZXNzaW9uPFQ+XG4gICk6IEV4cGFuZEV4cHJlc3Npb248VD47XG4gIGV4cGFuZChvcHRzOiBFeHBhbmQ8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZXhwYW5kKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBleHBhbmQob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5leHBhbmQsXG4gICAgICAgIEV4cGFuZEV4cHJlc3Npb24uZXhwYW5kKFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb25OYW1lcy5leHBhbmQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPEV4cGFuZDxUPj4oUXVlcnlPcHRpb25OYW1lcy5leHBhbmQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfU3lzdGVtUXVlcnlPcHRpb25jb21wdXRlXG4gICAqL1xuICBjb21wdXRlKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHtcbiAgICAgICAgczogVDtcbiAgICAgICAgZTogKCkgPT4gQ29tcHV0ZUV4cHJlc3Npb248VD47XG4gICAgICAgIG86IE9EYXRhT3BlcmF0b3JzPFQ+O1xuICAgICAgICBmOiBPRGF0YUZ1bmN0aW9uczxUPjtcbiAgICAgIH0sXG4gICAgICBjdXJyZW50PzogQ29tcHV0ZUV4cHJlc3Npb248VD5cbiAgICApID0+IENvbXB1dGVFeHByZXNzaW9uPFQ+XG4gICk6IENvbXB1dGVFeHByZXNzaW9uPFQ+O1xuICBjb21wdXRlKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZSxcbiAgICAgICAgQ29tcHV0ZUV4cHJlc3Npb24uY29tcHV0ZShcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLmNvbXB1dGUsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfU3lzdGVtUXVlcnlPcHRpb25mb3JtYXRcbiAgICovXG4gIGZvcm1hdChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZm9ybWF0KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmb3JtYXQob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLmZvcm1hdCwgb3B0cyk7XG4gIH1cblxuICB0cmFuc2Zvcm0ob3B0czogVHJhbnNmb3JtPFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHRyYW5zZm9ybSgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdHJhbnNmb3JtKG9wdHM/OiBUcmFuc2Zvcm08VD4pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPFRyYW5zZm9ybTxUPj4oUXVlcnlPcHRpb25OYW1lcy50cmFuc2Zvcm0sIG9wdHMpO1xuICB9XG5cbiAgc2VhcmNoKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHtcbiAgICAgICAgZTogKGNvbm5lY3RvcjogU2VhcmNoQ29ubmVjdG9yKSA9PiBTZWFyY2hFeHByZXNzaW9uPFQ+O1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnQ/OiBTZWFyY2hFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBTZWFyY2hFeHByZXNzaW9uPFQ+XG4gICk6IFNlYXJjaEV4cHJlc3Npb248VD47XG4gIHNlYXJjaChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VhcmNoKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWFyY2gob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsXG4gICAgICAgIFNlYXJjaEV4cHJlc3Npb24uc2VhcmNoKFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsIG9wdHMpO1xuICB9XG5cbiAgZmlsdGVyKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHtcbiAgICAgICAgczogVDtcbiAgICAgICAgZTogKGNvbm5lY3Rvcj86IEZpbHRlckNvbm5lY3RvcikgPT4gRmlsdGVyRXhwcmVzc2lvbjxUPjtcbiAgICAgICAgbzogT0RhdGFPcGVyYXRvcnM8VD47XG4gICAgICAgIGY6IE9EYXRhRnVuY3Rpb25zPFQ+O1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnQ/OiBGaWx0ZXJFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBGaWx0ZXJFeHByZXNzaW9uPFQ+XG4gICk6IEZpbHRlckV4cHJlc3Npb248VD47XG4gIGZpbHRlcihvcHRzOiBGaWx0ZXI8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZmlsdGVyKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmaWx0ZXIob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsXG4gICAgICAgIEZpbHRlckV4cHJlc3Npb24uZmlsdGVyKFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPEZpbHRlcjxUPj4oUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsIG9wdHMpO1xuICB9XG5cbiAgb3JkZXJCeShcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7IHM6IFQ7IGU6ICgpID0+IE9yZGVyQnlFeHByZXNzaW9uPFQ+IH0sXG4gICAgICBjdXJyZW50PzogT3JkZXJCeUV4cHJlc3Npb248VD5cbiAgICApID0+IE9yZGVyQnlFeHByZXNzaW9uPFQ+XG4gICk6IE9yZGVyQnlFeHByZXNzaW9uPFQ+O1xuICBvcmRlckJ5KG9wdHM6IE9yZGVyQnk8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgb3JkZXJCeSgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgb3JkZXJCeShvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMub3JkZXJCeSxcbiAgICAgICAgT3JkZXJCeUV4cHJlc3Npb24ub3JkZXJCeShcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMub3JkZXJCeSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248T3JkZXJCeTxUPj4oUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5LCBvcHRzKTtcbiAgfVxuXG4gIHRvcChvcHRzOiBudW1iZXIpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdG9wKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0b3Aob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbk5hbWVzLnRvcCwgb3B0cyk7XG4gIH1cblxuICBza2lwKG9wdHM6IG51bWJlcik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwKG9wdHM/OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPG51bWJlcj4oUXVlcnlPcHRpb25OYW1lcy5za2lwLCBvcHRzKTtcbiAgfVxuXG4gIHNraXB0b2tlbihvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2tpcHRva2VuKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwdG9rZW4ob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLnNraXB0b2tlbiwgb3B0cyk7XG4gIH1cblxuICBwYWdpbmcoe1xuICAgIHNraXAsXG4gICAgc2tpcHRva2VuLFxuICAgIHRvcCxcbiAgfTogeyBza2lwPzogbnVtYmVyOyBza2lwdG9rZW4/OiBzdHJpbmc7IHRvcD86IG51bWJlciB9ID0ge30pIHtcbiAgICBpZiAoc2tpcHRva2VuICE9PSB1bmRlZmluZWQpIHRoaXMuc2tpcHRva2VuKHNraXB0b2tlbik7XG4gICAgZWxzZSBpZiAoc2tpcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNraXAoc2tpcCk7XG4gICAgaWYgKHRvcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnRvcCh0b3ApO1xuICB9XG5cbiAgY2xlYXJQYWdpbmcoKSB7XG4gICAgdGhpcy5za2lwKCkuY2xlYXIoKTtcbiAgICB0aGlzLnRvcCgpLmNsZWFyKCk7XG4gICAgdGhpcy5za2lwdG9rZW4oKS5jbGVhcigpO1xuICB9XG5cbiAgYXBwbHkocXVlcnk6IE9EYXRhUXVlcnlBcmd1bWVudHM8VD4pIHtcbiAgICBpZiAocXVlcnkuc2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb25OYW1lcy5zZWxlY3QsIHF1ZXJ5LnNlbGVjdCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5leHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCwgcXVlcnkuZXhwYW5kKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uTmFtZXMudHJhbnNmb3JtLCBxdWVyeS50cmFuc2Zvcm0pO1xuICAgIH1cbiAgICBpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsIHF1ZXJ5LnNlYXJjaCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5maWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLmZpbHRlciwgcXVlcnkuZmlsdGVyKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5Lm9yZGVyQnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLm9yZGVyQnksIHF1ZXJ5Lm9yZGVyQnkpO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luZyhxdWVyeSk7XG4gIH1cbn1cbiJdfQ==