@colijnit/transaction 256.1.67 → 256.1.69

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.
Files changed (22) hide show
  1. package/bundles/colijnit-transaction.umd.js +156 -59
  2. package/bundles/colijnit-transaction.umd.js.map +1 -1
  3. package/colijnit-transaction.metadata.json +1 -1
  4. package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-order-purchase/transaction-quick-access-order-purchase.component.js +69 -38
  5. package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-order-purchase/transaction-quick-access-order-purchase.module.js +4 -2
  6. package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-overview/transaction-quick-access-overview.component.js +11 -2
  7. package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-send-method-base.component.js +1 -13
  8. package/esm2015/lib/component/transaction-search/transaction-shipping-method-dialog/transaction-shipping-method-dialog.component.js +125 -105
  9. package/esm2015/lib/service/transaction-connector-adapter.service.js +13 -1
  10. package/esm2015/lib/service/transaction-connector.service.js +6 -1
  11. package/esm2015/lib/service/transaction.service.js +6 -1
  12. package/esm2015/lib/transaction-version.js +3 -3
  13. package/fesm2015/colijnit-transaction.js +225 -155
  14. package/fesm2015/colijnit-transaction.js.map +1 -1
  15. package/lib/component/transaction-quick-access/transaction-quick-access-order-purchase/transaction-quick-access-order-purchase.component.d.ts +6 -0
  16. package/lib/component/transaction-quick-access/transaction-quick-access-overview/transaction-quick-access-overview.component.d.ts +1 -0
  17. package/lib/component/transaction-quick-access/transaction-quick-access-send-method-base.component.d.ts +0 -2
  18. package/lib/component/transaction-search/transaction-shipping-method-dialog/transaction-shipping-method-dialog.component.d.ts +12 -10
  19. package/lib/service/transaction-connector-adapter.service.d.ts +1 -0
  20. package/lib/service/transaction-connector.service.d.ts +1 -0
  21. package/lib/service/transaction.service.d.ts +1 -0
  22. package/package.json +2 -2
@@ -1653,6 +1653,11 @@ export class TransactionService extends PendingReasonService {
1653
1653
  return yield this.connector.getPurchaseOrderDefaultSendMethod(relationId);
1654
1654
  });
1655
1655
  }
1656
+ isPrintIsDefaultSendMethodForPurchaseOrder(transactionId) {
1657
+ return __awaiter(this, void 0, void 0, function* () {
1658
+ return yield this.connector.isPrintIsDefaultSendMethodForPurchaseOrder(transactionId);
1659
+ });
1660
+ }
1656
1661
  generateAndSendPurchaseOrdersForSalesOrder(request, version) {
1657
1662
  return __awaiter(this, void 0, void 0, function* () {
1658
1663
  const lockSuccess = yield this.tryToLockTransaction(request.transId, version);
@@ -2483,4 +2488,4 @@ TransactionService.decorators = [
2483
2488
  providedIn: "root"
2484
2489
  },] }
2485
2490
  ];
2486
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RyYW5zYWN0aW9uL3NyYy9saWIvc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQXFCcEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsbUNBQW1DLEVBQ3BDLE1BQU0sa0ZBQWtGLENBQUM7QUFlMUYsT0FBTyxFQUNMLGlDQUFpQyxFQUNsQyxNQUFNLDZFQUE2RSxDQUFDO0FBV3JGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUMxRixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUN6RyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0RBQW9ELENBQUM7QUFPaEYsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFLL0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDckYsT0FBTyxFQUNMLCtCQUErQixFQUNoQyxNQUFNLDZFQUE2RSxDQUFDO0FBQ3JGLE9BQU8sRUFDTCwrQkFBK0IsRUFDaEMsTUFBTSwwRUFBMEUsQ0FBQztBQVdsRixPQUFPLEVBQ0wsOEJBQThCLEVBQy9CLE1BQU0sMkVBQTJFLENBQUM7QUFDbkYsT0FBTyxFQUNMLGtDQUFrQyxFQUNuQyxNQUFNLGdGQUFnRixDQUFDO0FBMEJ4RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDckUsT0FBTyxFQUFD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LENBQUMsa0JBQWtCLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUU7Z0JBQ2xJLE1BQU0sWUFBWSxHQUF3QixJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNqSSxJQUFJLFlBQVksRUFBRTtvQkFDaEIsTUFBTSxPQUFPLEdBQTZCLElBQUksd0JBQXdCLEVBQUUsQ0FBQztvQkFDekUsT0FBTyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUM7eUJBQy9CLElBQUksQ0FBQyxHQUFHLEVBQUU7d0JBQ1QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQyxDQUFDO3lCQUNELEtBQUssQ0FBQyxHQUFHLEVBQUU7d0JBQ1YsT0FBTyxLQUFLLENBQUM7b0JBQ2YsQ0FBQyxDQUFDLENBQUE7aUJBQ0w7cUJBQU07b0JBQ0wsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUM7aUJBQzVDO2FBQ0Y7aUJBQU07Z0JBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQztLQUFBOzs7O1lBbnVFRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEaXNjb3VudFR5cGV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL2Rpc2NvdW50LXR5cGUuZW51bSc7XG5pbXBvcnQge1NlcXVlbmNlTmFtZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vc2VxdWVuY2UtbmFtZS5lbnVtJztcbmltcG9ydCB7QXJ0aWNsZUZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0JztcbmltcG9ydCB7Q2FzaFJlZ2lzdGVyfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2FzaC1yZWdpc3Rlcic7XG5pbXBvcnQge0Nhc2hPbkRlbGl2ZXJ5RGF0YX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Nhc2gtb24tZGVsaXZlcnktZGF0YSc7XG5pbXBvcnQge1xuICBDaGFuZ2VIZWFkZXJDYXNoT25EZWxpdmVyeUFtb3VudFJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NoYW5nZS1oZWFkZXItY2FzaC1vbi1kZWxpdmVyeS1hbW91bnQtcmVxdWVzdCc7XG5pbXBvcnQge0NvZGVEZXNjcmlwdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NvZGUtZGVzY3JpcHRpb24nO1xuaW1wb3J0IHtDb3VudHJ5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY291bnRyeS5ibyc7XG5pbXBvcnQge0N1c3RvbWVyR3JvdXB9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jdXN0b21lci1ncm91cC5ibyc7XG5pbXBvcnQge0RlbGl2ZXJ5TWV0aG9kfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktbWV0aG9kLmJvJztcbmltcG9ydCB7RGVsaXZlcnlPcHRpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxpdmVyeS1vcHRpb24uYm8nO1xuaW1wb3J0IHtNYXJrZXRpbmd9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9tYXJrZXRpbmcuYm8nO1xuaW1wb3J0IHtPbkhvbGRDb2RlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvb24taG9sZC1jb2RlLmJvJztcbmltcG9ydCB7UHJpY2VMaXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpY2UtbGlzdCc7XG5pbXBvcnQge1RyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWFydGljbGUtd2FyZWhvdXNlLmJvJztcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2V9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLXJlc3BvbnNlLmJvJztcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lSW5mb30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxpbmUtaW5mby5ibyc7XG5pbXBvcnQge1ZhbGlkYXRpb25SZXN1bHR9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL3ZhbGlkYXRpb24tcmVzdWx0JztcbmltcG9ydCB7VmF0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdmF0JztcbmltcG9ydCB7V2FyZWhvdXNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvd2FyZWhvdXNlLmJvJztcbmltcG9ydCB7dGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1N0YW5kYXJkVGV4dH0gZnJvbSAnLi4vbW9kZWwvc3RhbmRhcmQtdGV4dCc7XG5pbXBvcnQge1BlbmRpbmdSZWFzb25TZXJ2aWNlfSBmcm9tICcuL3BlbmRpbmctcmVhc29uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlclJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlY2VpdmUtZ29vZHMtZm9yLXB1cmNoYXNlLW9yZGVyLXJlcXVlc3QuYm8nO1xuaW1wb3J0IHtcbiAgUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb25SZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWNlaXZlLWdvb2RzLWZvci1wdXJjaGFzZS1vcmRlci1jb3JyZWN0aW9uLXJlcXVlc3QuYm8nO1xuaW1wb3J0IHtBcnRpY2xlRXh0ZW5kZWRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWV4dGVuZGVkLXJlcXVlc3QnO1xuaW1wb3J0IHtBcnRpY2xlTGlnaHR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtbGlnaHQuYm8nO1xuaW1wb3J0IHtUdXJub3Zlckdyb3VwSW1hZ2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL3R1cm5vdmVyLWdyb3VwLWltYWdlLmJvJztcbmltcG9ydCB7TWFpbkFydGljbGV9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL21haW4tYXJ0aWNsZS5ibyc7XG5pbXBvcnQge1B1cmNoYXNlUG9ydGFsTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLXBvcnRhbC1saW5lLmJvJztcbmltcG9ydCB7R2V0UHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dldC1wdXJjaGFzZS1vcmRlci1jb25maXJtYXRpb24nO1xuaW1wb3J0IHtUYWd9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3RhZyc7XG5pbXBvcnQge0NvRG9tYWluVmFsdWV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2NvLWRvbWFpbi12YWx1ZS5ibyc7XG5pbXBvcnQge1JlbGF0aW9uUHJpdmFjeVNldHRpbmd9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1wcml2YWN5LXNldHRpbmcuYm8nO1xuaW1wb3J0IHtTYWxlc1BlcnNvbn0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3NhbGVzLXBlcnNvbi5ibyc7XG5pbXBvcnQge0F2YWlsYWJsZVN0b2NrfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYXZhaWxhYmxlLXN0b2NrLmJvJztcbmltcG9ydCB7XG4gIEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYWxsb2NhdGUtZ29vZHMtZm9yLXNhbGVzLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgQWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJDb3JyZWN0aW9uUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYWxsb2NhdGUtZ29vZHMtZm9yLXNhbGVzLW9yZGVyLWNvcnJlY3Rpb24tcmVxdWVzdCc7XG5pbXBvcnQge1JlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9yZXBvcnQtbGF5b3V0LXNlbGVjdGlvbi1lbWFpbC5ibyc7XG5pbXBvcnQge1JlcG9ydExheW91dFNlbGVjdGlvblByaW50fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9yZXBvcnQtbGF5b3V0LXNlbGVjdGlvbi1wcmludC5ibyc7XG5pbXBvcnQge0NyZWF0ZVNhbGVzT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXNhbGVzLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtDcmVhdGVDYXNoUmVnaXN0ZXJPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtY2FzaC1yZWdpc3Rlci1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7Q3JlYXRlUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtcHVyY2hhc2Utb3JkZXItcmVxdWVzdCc7XG5pbXBvcnQge0NyZWF0ZVNlcnZpY2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtc2VydmljZS1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7Q3JlYXRlU2FsZXNRdW90YXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXNhbGVzLXF1b3RhdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7VHJhbnNhY3Rpb25LaW5kfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1raW5kLmVudW0nO1xuaW1wb3J0IHtDcmVhdGVUcmFuc2FjdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtdHJhbnNhY3Rpb24tcmVxdWVzdCc7XG5pbXBvcnQge1JlbGF0aW9uS2luZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWxhdGlvbi1raW5kLmVudW0nO1xuaW1wb3J0IHtQdXJjaGFzZUFkdmljZUxpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wdXJjaGFzZS1hZHZpY2UtbGluZS5ibyc7XG5pbXBvcnQge1B1cmNoYXNlQWR2aWNlRmlsdGVyc30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLWFkdmljZS1maWx0ZXJzJztcbmltcG9ydCB7RW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcbmltcG9ydCB7UGRmRGVsaXZlcnlOb3RlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1kZWxpdmVyeS1ub3RlLXJlcXVlc3QnO1xuaW1wb3J0IHtQcmludERlbGl2ZXJ5Tm90ZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1kZWxpdmVyeS1ub3RlLXJlcXVlc3QnO1xuaW1wb3J0IHtQcmludERlbGl2ZXJ5Tm90ZXNSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtZGVsaXZlcnktbm90ZXMtcmVxdWVzdCc7XG5pbXBvcnQge1RyYW5zYWN0aW9uVHlwZUNhdGVnb3J5fSBmcm9tICcuLi9lbnVtL3RyYW5zYWN0aW9uLXR5cGUtY2F0ZWdvcnkuZW51bSc7XG5pbXBvcnQge0VtYWlsSW52b2ljZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1pbnZvaWNlLXJlcXVlc3QnO1xuaW1wb3J0IHtQZGZJbnZvaWNlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1pbnZvaWNlLXJlcXVlc3QnO1xuaW1wb3J0IHtQcmludEludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaW52b2ljZS1yZXF1ZXN0JztcbmltcG9ydCB7RGlhbG9nUmVzcG9uc2VJbnRlcmZhY2V9IGZyb20gJy4uL2ludGVyZmFjZS9kaWFsb2ctcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7QXBwUG9wdXBCdXR0b25UeXBlfSBmcm9tICcuLi9jb21wb25lbnQvY29yZS9lbnVtL2FwcC1wb3B1cC1idXR0b24tdHlwZS5lbnVtJztcbmltcG9ydCB7XG4gIFB1cmNoYXNlT3JkZXJMaW5lUmVjZWlwdERldGFpbHNcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLW9yZGVyLWxpbmUtcmVjZWlwdC1kZXRhaWxzLmJvJztcbmltcG9ydCB7XG4gIFNhbGVzT3JkZXJMaW5lQWxsb2NhdGlvbkRldGFpbHNcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3NhbGVzLW9yZGVyLWxpbmUtYWxsb2NhdGlvbi1kZXRhaWxzJztcbmltcG9ydCB7VGFnVHJlZUl0ZW19IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3RhZy10cmVlLWl0ZW0uYm8nO1xuaW1wb3J0IHtJbnRlcm5hbFBhcmFtfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL2ludGVybmFsLXBhcmFtLmVudW0nO1xuaW1wb3J0IHtHb29kc1JlY2VpcHRIaXN0b3J5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtcmVjZWlwdC1oaXN0b3J5LmJvJztcbmltcG9ydCB7R29vZHNBbGxvY2F0aW9uSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLWFsbG9jYXRpb24taGlzdG9yeS5ibyc7XG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb0hpc3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLWhpc3RvcnkuYm8nO1xuaW1wb3J0IHtMYXlvdXRDb2RlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9sYXlvdXQtY29kZS5lbnVtJztcbmltcG9ydCB7SGlzdG9yaWNSZXBvcnR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9oaXN0b3JpYy1yZXBvcnQuYm8nO1xuaW1wb3J0IHtQcmludGVyfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9wcmludGVyLmJvJztcbmltcG9ydCB7Q3VycmVuY3l9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2N1cnJlbmN5LmJvJztcbmltcG9ydCB7UGF5bWVudENvbmRpdGlvbn0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcGF5bWVudC1jb25kaXRpb24uYm8nO1xuaW1wb3J0IHtcbiAgR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy10by1iZS1waWNrZWQtZm9yLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0TGluZVxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtdG8tYmUtcGlja2VkLWZvci1vcmRlci1yZXF1ZXN0LWxpbmUnO1xuaW1wb3J0IHtXYXJlaG91c2VTdG9ja0luZm99IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC93YXJlaG91c2Utc3RvY2staW5mby5ibyc7XG5pbXBvcnQge0dvb2RzVG9CZVBpY2tlZEhpc3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy10by1iZS1waWNrZWQtaGlzdG9yeSc7XG5pbXBvcnQge0dvb2RzUGlja2VkSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLXBpY2tlZC1oaXN0b3J5JztcbmltcG9ydCB7UGRmSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLWhpc3RvcmljLWRlbGl2ZXJ5LW5vdGUtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBFbWFpbEhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtaGlzdG9yaWMtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIFByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1oaXN0b3JpYy1kZWxpdmVyeS1ub3RlLXJlcXVlc3QnO1xuaW1wb3J0IHtCYXRjaFRyYW5zYWN0aW9uU2VuZGluZ1JlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9iYXRjaC10cmFuc2FjdGlvbi1zZW5kaW5nLXJlcXVlc3QnO1xuaW1wb3J0IHtCYXRjaEpvYlByb2dyZXNzfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYmF0Y2gtam9iLXByb2dyZXNzLmJvJztcbmltcG9ydCB7XG4gIEVtYWlsSGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvblJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLWhpc3RvcmljLW9yZGVyLWNvbmZpcm1hdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7UGRmSGlzdG9yaWNJbnZvaWNlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1oaXN0b3JpYy1pbnZvaWNlLXJlcXVlc3QnO1xuaW1wb3J0IHtQcmludEhpc3RvcmljSW52b2ljZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1oaXN0b3JpYy1pbnZvaWNlLXJlcXVlc3QnO1xuaW1wb3J0IHtFbWFpbEhpc3RvcmljSW52b2ljZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1oaXN0b3JpYy1pbnZvaWNlLXJlcXVlc3QnO1xuaW1wb3J0IHtQcmludE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LW9yZGVyLWNvbmZpcm1hdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7UHJpbnRQdXJjaGFzZU9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LXB1cmNoYXNlLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtQZGZQdXJjaGFzZU9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7UGRmT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLW9yZGVyLWNvbmZpcm1hdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7RW1haWxPcmRlckNvbmZpcm1hdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1vcmRlci1jb25maXJtYXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge0VtYWlsUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7T2JqZWN0Q29uZmlndXJhdGlvbn0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvb2JqZWN0LWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtDb0RvY3VtZW50fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudCc7XG5pbXBvcnQge0dvb2RzUGlja2VkUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLXBpY2tlZC1yZXF1ZXN0JztcbmltcG9ydCB7R29vZHNQaWNrZWRSZXF1ZXN0TGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLXBpY2tlZC1yZXF1ZXN0LWxpbmUnO1xuaW1wb3J0IHtcbiAgRGVsZXRlR29vZHNQaWNrZWRGb3JPcmRlclJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGV0ZS1nb29kcy1waWNrZWQtZm9yLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgRGVsZXRlR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxldGUtZ29vZHMtdG8tYmUtcGlja2VkLWZvci1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7Q2FzaERyYXdlcnNSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2FzaC1kcmF3ZXJzLXJlcXVlc3QnO1xuaW1wb3J0IHtDYXNoRHJhd2VyfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2FzaC1kcmF3ZXIuYm8nO1xuaW1wb3J0IHtQcmludFBvc1JlY2VpcHRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtcG9zLXJlY2VpcHQtcmVxdWVzdCc7XG5pbXBvcnQge1ByaW50SGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LWhpc3RvcmljLXBvcy1yZWNlaXB0LXJlcXVlc3QnO1xuaW1wb3J0IHtFbWFpbFBvc1JlY2VpcHRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtcG9zLXJlY2VpcHQtcmVxdWVzdCc7XG5pbXBvcnQge0VtYWlsSGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLWhpc3RvcmljLXBvcy1yZWNlaXB0LXJlcXVlc3QnO1xuaW1wb3J0IHtUYWdDYXRlZ29yeX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS90YWItY2F0ZWdvcnkuZW51bSc7XG5pbXBvcnQge0VtYWlsUXVvdGF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLXF1b3RhdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7RW1haWxIaXN0b3JpY1F1b3RhdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1oaXN0b3JpYy1xdW90YXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge1BkZlF1b3RhdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtcXVvdGF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtQZGZIaXN0b3JpY1F1b3RhdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtaGlzdG9yaWMtcXVvdGF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtQcmludFF1b3RhdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1xdW90YXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge1ByaW50SGlzdG9yaWNRdW90YXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaGlzdG9yaWMtcXVvdGF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlSGVhZGVyU2NvcmluZ0NoYW5jZVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NoYW5nZS1oZWFkZXItc2NvcmluZy1jaGFuY2UtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBDaGFuZ2VIZWFkZXJFeHBlY3RlZFNjb3JpbmdEYXRlUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2hhbmdlLWhlYWRlci1leHBlY3RlZC1zY29yaW5nLWRhdGUtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBDaGFuZ2VIZWFkZXJSZXRhaWxTdGFkaXVtUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2hhbmdlLWhlYWRlci1yZXRhaWwtc3RhZGl1bS1yZXF1ZXN0JztcbmltcG9ydCB7UmV0YWlsU3RhZGl1bX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JldGFpbC1zdGFkaXVtLmJvJztcbmltcG9ydCB7V29ya0Zsb3dTdGF0dXN9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC93b3JrZmxvdy1zdGF0dXMuYm8nO1xuaW1wb3J0IHtBcnRpY2xlRmxhdFRyZWVEVE99IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZmxhdC10cmVlLmJvJztcbmltcG9ydCB7QnVzaW5lc3NPYmplY3RGYWN0b3J5fSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9zZXJ2aWNlL2J1c2luZXNzLW9iamVjdC1mYWN0b3J5JztcbmltcG9ydCB7XG4gIENoYW5nZUxpbmVRdWFudGl0eVNlbGVjdGVkTGluZVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NoYW5nZS1saW5lLXF1YW50aXR5LXNlbGVjdGVkLWxpbmUtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBFeHRlcm5hbENhdGFsb2dBZGRBcnRpY2xlUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZXh0ZXJuYWwtY2F0YWxvZy1hZGQtYXJ0aWNsZS1yZXF1ZXN0JztcbmltcG9ydCB7T3JkZXJMaW5lU2V0Q2F0ZWdvcnl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL29yZGVyLWxpbmUtc2V0LWNhdGVnb3J5LmJvJztcbmltcG9ydCB7T3JkZXJMaW5lU2V0RFRPfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvb3JkZXItbGluZS1zZXQtZHRvJztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uQWRkT3JkZXJMaW5lU2V0VGV4dExpbmVSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1hZGQtb3JkZXItbGluZS1zZXQtdGV4dC1saW5lLXJlcXVlc3QnO1xuaW1wb3J0IHtUcmFuc2FjdGlvblNlYXJjaFZpZXdSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tc2VhcmNoLXZpZXctcmVxdWVzdCc7XG5pbXBvcnQge0FydGljbGVFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ibyc7XG5pbXBvcnQge0NhdXNlQ29kZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NhdXNlLWNvZGUuYm8nO1xuaW1wb3J0IHtQZGZQb3NSZWNlaXB0UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1wb3MtcmVjZWlwdC1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIE9yZGVyQ29uZmlybWF0aW9uVHJhbnNhY3Rpb25MaW5rXG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9vcmRlci1jb25maXJtYXRpb24tdHJhbnNhY3Rpb24tbGluay5ibyc7XG5pbXBvcnQge1BkZlBvc1JlY2VpcHRSZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1wb3MtcmVjZWlwdC1yZXNwb25zZS5ibyc7XG5pbXBvcnQge1Byb2plY3RDb2RlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJvamVjdC1jb2RlLmJvJztcbmltcG9ydCB7Q2FzaFR5cGV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jYXNoLXR5cGUuYm8nO1xuaW1wb3J0IHtQb3NHcm91cH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3Bvcy1ncm91cC5ibyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbkFkZFBheW1lbnRMaW5lUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tYWRkLXBheW1lbnQtbGluZS1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIFBkZlRyYW5zYWN0aW9uU2VhcmNoT3ZlcnZpZXdSZXNwb25zZVxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLXRyYW5zYWN0aW9uLXNlYXJjaC1vdmVydmlldy1yZXNwb25zZSc7XG5pbXBvcnQge1xuICBQcmludFB1cmNoYXNlT3JkZXJGb3JTYWxlc09yZGVyUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtcHVyY2hhc2Utb3JkZXItZm9yLXNhbGVzLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtBY3Rpdml0eX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvYWN0aXZpdHkuYm8nO1xuaW1wb3J0IHtUcmFuc2FjdGlvbk1hcmdpbkluZm99IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1tYXJnaW4taW5mby5ibyc7XG4vLyBpbXBvcnQge1xuLy8gICBUcmFuc2FjdGlvbkxzcEluZm9ybWF0aW9uUmVxdWVzdFxuLy8gfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxzcC1pbmZvcm1hdGlvbi5yZXF1ZXN0XCI7XG4vLyBpbXBvcnQge1BhY2thZ2VMU1B9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGFja2FnZS1sc3AuYm9cIjtcbmltcG9ydCB7RGF0YVNlcnZpY2VSZXNwb25zZURhdGF9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhJztcbmltcG9ydCB7T3JkZXJMaW5lc1BsYW5uZWRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvb3JkZXItbGluZXMtcGxhbm5lZC1yZXF1ZXN0LmJvJztcbmltcG9ydCB7UGxhbk9yZGVyTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BsYW4tb3JkZXItbGluZS5ibyc7XG5pbXBvcnQge1BsYW5PcmRlcn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BsYW4tb3JkZXIuYm8nO1xuaW1wb3J0IHtTdXBwbGllckFydGljbGVTdG9ja0ZvcmVjYXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvc3VwcGxpZXItYXJ0aWNsZS1zdG9jay1mb3JlY2FzdCc7XG5pbXBvcnQge1NlcnZpY2VXaXphcmR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9zZXJ2aWNlLXdpemFyZCc7XG5pbXBvcnQge1xuICBDaGFuZ2VTZXJ2aWNlSGVhZGVyUmVwb3J0TWVzc2FnZVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NoYW5nZS1zZXJ2aWNlLWhlYWRlci1yZXBvcnQtbWVzc2FnZS1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIENyZWF0ZVNlcnZpY2VPcmRlcldpdGhTb3VyY2VUcmFuc2FjdGlvbkxpbmVSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtc2VydmljZS1vcmRlci13aXRoLXNvdXJjZS10cmFuc2FjdGlvbi1saW5lLXJlcXVlc3QnO1xuaW1wb3J0IHtTZXJ2aWNlVHlwZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3NlcnZpY2UtdHlwZSc7XG5pbXBvcnQge1xuICBPcmRlclJlc2VydmF0aW9uU2FsZXNPcmRlckxpbmVzUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvb3JkZXItcmVzZXJ2YXRpb24tc2FsZXMtb3JkZXItbGluZXMtcmVxdWVzdC5ibyc7XG5pbXBvcnQge1B1cmNoYXNlUmVzZXJ2YXRpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wdXJjaGFzZS1yZXNlcnZhdGlvbi5ibyc7XG5pbXBvcnQge1xuICBQcm9jZXNzT3JkZXJSZXNlcnZhdGlvblJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3Byb2Nlc3Mtb3JkZXItcmVzZXJ2YXRpb24tcmVxdWVzdC5ibyc7XG5pbXBvcnQge1JlbGF0aW9uU21hbGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXNtYWxsLW9iamVjdC5ibyc7XG5pbXBvcnQge0FkZEhlYWRlckltYWdlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FkZC1oZWFkZXItaW1hZ2UtcmVxdWVzdCc7XG5pbXBvcnQge0RlbGV0ZUhlYWRlckltYWdlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGV0ZS1oZWFkZXItaW1hZ2UtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBDaGFuZ2VTZXJ2aWNlSGVhZGVyQ2F1c2VDb2RlUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2hhbmdlLXNlcnZpY2UtaGVhZGVyY2F1c2UtY29kZS1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIENoYW5nZVNlcnZpY2VIZWFkZXJQcmlvcml0eVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NoYW5nZS1zZXJ2aWNlLWhlYWRlci1wcmlvcml0eS1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIENoYW5nZVNlcnZpY2VIZWFkZXJFbnRyeVR5cGVSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jaGFuZ2Utc2VydmljZS1oZWFkZXItZW50cnktdHlwZS1yZXF1ZXN0JztcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lU2VhcmNoSW5kZXh9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1saW5lLXNlYXJjaC1pbmRleC5ibyc7XG5pbXBvcnQge1xuICBDaGFuZ2VTZXJ2aWNlSGVhZGVyU2VydmljZVR5cGVSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jaGFuZ2Utc2VydmljZS1oZWFkZXItc2VydmljZS10eXBlLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlU2VydmljZUhlYWRlcldpemFyZERhdGFSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jaGFuZ2Utc2VydmljZS1oZWFkZXItd2l6YXJkLWRhdGEtcmVxdWVzdCc7XG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8uYm8nO1xuaW1wb3J0IHtTTEFQcm9kdWN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvU0xBLXByb2R1Y3QnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25EZWxpdmVyeUNvc3RMaW5lSW5mb1xufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tZGVsaXZlcnktY29zdC1saW5lLWluZm8uYm8nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25MaW5lQ29weVJlcXVlc3QgfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbGluZS1jb3B5LXJlcXVlc3QuYm8nO1xuaW1wb3J0IHtQbGFuVGltZXN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGxhbi10aW1lcy5ib1wiO1xuaW1wb3J0IHtQYWNrYWdlTFNQfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGFja2FnZS1sc3AuYm8nO1xuaW1wb3J0IHtTdXBwbGllclByb2R1Y3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvc3VwcGxpZXItcHJvZHVjdC5ib1wiO1xuXG50eXBlIENyZWF0ZVRyYW5zYWN0aW9uRm4gPSAocmVxdWVzdDogQ3JlYXRlVHJhbnNhY3Rpb25SZXF1ZXN0KSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uU2VydmljZSBleHRlbmRzIFBlbmRpbmdSZWFzb25TZXJ2aWNlIHtcblxuICBwdWJsaWMgcmVtYWluaW5nQW1vdW50OiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NyZWF0ZVRyYW5zYWN0aW9uTWV0aG9kczogTWFwPFRyYW5zYWN0aW9uS2luZCwgQ3JlYXRlVHJhbnNhY3Rpb25Gbj4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgQ3JlYXRlVHJhbnNhY3Rpb25Gbj4oW1xuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgKHJlcXVlc3Q6IENyZWF0ZVNhbGVzT3JkZXJSZXF1ZXN0KSA9PiB0aGlzLmNyZWF0ZVNhbGVzT3JkZXIocmVxdWVzdCldLFxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgKHJlcXVlc3Q6IENyZWF0ZVB1cmNoYXNlT3JkZXJSZXF1ZXN0KSA9PiB0aGlzLmNyZWF0ZVB1cmNoYXNlT3JkZXIocmVxdWVzdCldLFxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIChyZXF1ZXN0OiBDcmVhdGVTYWxlc1F1b3RhdGlvblJlcXVlc3QpID0+IHRoaXMuY3JlYXRlU2FsZXNRdW90YXRpb24ocmVxdWVzdCldLFxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2VydmljZU9yZGVyLCAocmVxdWVzdDogQ3JlYXRlU2FsZXNRdW90YXRpb25SZXF1ZXN0KSA9PiB0aGlzLmNyZWF0ZVNlcnZpY2VPcmRlcihyZXF1ZXN0KV1cbiAgXSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVsYXRpb25LaW5kRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgUmVsYXRpb25LaW5kPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCBSZWxhdGlvbktpbmQ+KFtcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFJlbGF0aW9uS2luZC5DdXN0b21lcl0sXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBSZWxhdGlvbktpbmQuU3VwcGxpZXJdLFxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIFJlbGF0aW9uS2luZC5DdXN0b21lcl0sXG4gICAgW1RyYW5zYWN0aW9uS2luZC5DYXNoRGVzaywgUmVsYXRpb25LaW5kLkN1c3RvbWVyXSxcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNlcnZpY2VPcmRlciwgUmVsYXRpb25LaW5kLkN1c3RvbWVyXVxuICBdKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mb2N1c1N0YXR1c0luZGV4OiBNYXA8VHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnksIG51bWJlcj4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LCBudW1iZXI+KFtcbiAgICBbVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlclB1cmNoYXNlLCAwXSxcbiAgICBbVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlckFsbG9jYXRpb24sIDFdLFxuICAgIFtUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyRGVsaXZlcnlOb3RlLCA3XSxcbiAgICBbVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlckludm9pY2UsIDhdLFxuICAgIFtUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5QdXJjaGFzZU9yZGVyT3JkZXJDb25maXJtYXRpb24sIDBdLFxuICAgIFtUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5QdXJjaGFzZU9yZGVyUmVjZWl2ZWRHb29kcywgMl1cbiAgXSk7XG5cbiAgcHVibGljIHNldCB0cmFuc0ZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUodmFsdWU6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSB7XG4gICAgdGhpcy5fdHJhbnNGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRyYW5zRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZSgpOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbG9nZ2VkSW5Vc2VyKHZhbHVlOiBSZWxhdGlvblNtYWxsT2JqZWN0KSB7XG4gICAgdGhpcy5fbG9nZ2VkSW5Vc2VyID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvZ2dlZEluVXNlcigpOiBSZWxhdGlvblNtYWxsT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5fbG9nZ2VkSW5Vc2VyO1xuICB9XG5cbiAgcHVibGljIHNldCBsaW5lTnJGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9saW5lTnJGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmVOckZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGluZU5yRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZTtcbiAgfVxuXG4gIHByaXZhdGUgX2JvRmFjdG9yeTogQnVzaW5lc3NPYmplY3RGYWN0b3J5ID0gbmV3IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSgpO1xuICBwcml2YXRlIF90cmFuc0ZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmU6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlO1xuICBwcml2YXRlIF9saW5lTnJGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lOiBudW1iZXI7XG4gIHByaXZhdGUgX2xvZ2dlZEluVXNlcjogUmVsYXRpb25TbWFsbE9iamVjdDtcblxuICBwdWJsaWMgYXN5bmMgbG9nT3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29ubmVjdG9yLmxvZ091dCgpO1xuICAgIHRoaXMucmVzZXRDdXJyZW50VHJhbnNhY3Rpb24oKTtcbiAgICB0aGlzLmxvZ291dC5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9jdXNTdGF0dXNJbmRleChjYXRlZ29yeTogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9mb2N1c1N0YXR1c0luZGV4LmdldChjYXRlZ29yeSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVsYXRpb25LaW5kRnJvbVRyYW5zYWN0aW9uS2luZCgpOiBSZWxhdGlvbktpbmQge1xuICAgIGlmICh0aGlzLl9yZWxhdGlvbktpbmRGcm9tVHJhbnNhY3Rpb25LaW5kLmhhcyh0aGlzLnRyYW5zYWN0aW9uS2luZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWxhdGlvbktpbmRGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBSZWxhdGlvbktpbmQuQ3VzdG9tZXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNob3dXYXJlaG91c2VMb2NhdGlvblBvcHVwKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMpIHtcbiAgICAgIGNvbnN0IGxpbmVzVGhhdFNob3VsZEhhdmVMb2NhdGlvbjogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID1cbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIobCA9PiBsLmlzTG9jYXRpb25SZXF1aXJlZCAmJiBsLmFydGljbGVMaW5lU3RhdHVzLnF1YW50aXR5VG9SZWNlaXZlID4gMCk7XG4gICAgICBpZiAobGluZXNUaGF0U2hvdWxkSGF2ZUxvY2F0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERpYWxvZ1Jlc3BvbnNlSW50ZXJmYWNlID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dXYXJlaG91c2VMb2NhdGlvbigwLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICBpZiAocmVzcG9uc2UuYnV0dG9uID09PSBBcHBQb3B1cEJ1dHRvblR5cGUuT2spIHtcbiAgICAgICAgICBsaW5lc1RoYXRTaG91bGRIYXZlTG9jYXRpb24uZm9yRWFjaChsID0+IHtcbiAgICAgICAgICAgIGwubG9jYXRpb25OciA9IHJlc3BvbnNlLm91dHB1dDtcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudHJhbnNhY3Rpb25MaW5lQ2hhbmdlZC5uZXh0KGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZS5vdXRwdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q2FzaE9uRGVsaXZlcnlEYXRhKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Q2FzaE9uRGVsaXZlcnlEYXRhPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldENhc2hPbkRlbGl2ZXJ5RGF0YSh1dWlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJDYXNoT25EZWxpdmVyeUFtb3VudChyZXF1ZXN0OiBDaGFuZ2VIZWFkZXJDYXNoT25EZWxpdmVyeUFtb3VudFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyQ2FzaE9uRGVsaXZlcnlBbW91bnQocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mbyAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpIHtcbiAgICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgICBjb25zdCByZXNwb25zZTogRGlhbG9nUmVzcG9uc2VJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1llc05vKCdERUxFVEUnLCAnREVMRVRFX1RSQU5TQUNUSU9OX1FVRVNUSU9OJyk7XG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZTogYm9vbGVhbiA9IHJlc3BvbnNlLmJ1dHRvbiA9PT0gQXBwUG9wdXBCdXR0b25UeXBlLlllcztcbiAgICAgICAgaWYgKHNob3VsZERlbGV0ZSkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZVRyYW5zYWN0aW9uQnlVdUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkKTtcbiAgICAgICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uRGVsZXRlZC5uZXh0KCk7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYW5jZWxDYXNoUmVnaXN0ZXJPcmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24pIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBEaWFsb2dSZXNwb25zZUludGVyZmFjZSA9IGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5zaG93WWVzTm8oJ0NBTkNFTCcsICdDQU5DRUxfVFJBTlNBQ1RJT05fUVVFU1RJT04nKTtcbiAgICAgIGNvbnN0IHNob3VsZERlbGV0ZTogYm9vbGVhbiA9IHJlc3BvbnNlLmJ1dHRvbiA9PT0gQXBwUG9wdXBCdXR0b25UeXBlLlllcztcbiAgICAgIGlmIChzaG91bGREZWxldGUpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2FuY2VsVHJhbnNhY3Rpb25CeVV1SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQpO1xuICAgICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvbkRlbGV0ZWQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVmaW5pdGl2ZSh1dWlkOiBzdHJpbmcsIGRlZmluaXRpdmU6IGJvb2xlYW4sIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRlZmluaXRpdmUodXVpZCwgZGVmaW5pdGl2ZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJEZWxpdmVyeUFkZHJlc3ModXVpZDogc3RyaW5nLCBuZXdOYXdOcjogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckRlbGl2ZXJ5QWRkcmVzcyh1dWlkLCBuZXdOYXdOcik7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJJbnZvaWNlQWRkcmVzcyh1dWlkOiBzdHJpbmcsIG5ld05hd05yOiBudW1iZXIsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVySW52b2ljZUFkZHJlc3ModXVpZCwgbmV3TmF3TnIpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeURhdGUodXVpZDogc3RyaW5nLCBkYXRlOiBEYXRlLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeURhdGUodXVpZCwgZGF0ZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5RGF0ZURlZmluaXRpdmUodXVpZDogc3RyaW5nLCBkZWZpbml0aXZlOiBib29sZWFuLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeURhdGVEZWZpbml0aXZlKHV1aWQsIGRlZmluaXRpdmUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25SZW1hcmsodXVpZDogc3RyaW5nLCByZW1hcms6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUmVtYXJrKHV1aWQsIHJlbWFyayk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblJlZmVyZW5jZSh1dWlkOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25SZWZlcmVuY2UodXVpZCwgcmVmZXJlbmNlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUmVsYXRpb25SZWZlcmVuY2UodXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUmVsYXRpb25SZWZlcmVuY2UodXVpZCwgcmVmZXJlbmNlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVwb3NpdEFtb3VudCh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVwb3NpdEFtb3VudCh1dWlkLCBhbW91bnQpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZXBvc2l0UGVyY2VudGFnZSh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJEZXBvc2l0UGVyY2VudGFnZSh1dWlkLCBhbW91bnQpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUHJlZmVycmVkRGVsaXZlcnlEYXRlKHV1aWQ6IHN0cmluZywgZGF0ZTogRGF0ZSwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuLCBvcHRpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblByZWZlcnJlZERlbGl2ZXJ5RGF0ZSh1dWlkLCBkYXRlLCBvcHRpb24pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeVRpbWUodXVpZDogc3RyaW5nLCB0aW1lOiBEYXRlLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeVRpbWUodXVpZCwgdGltZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5TWV0aG9kKHV1aWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5TWV0aG9kKHV1aWQsIG1ldGhvZCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucyh1dWlkOiBzdHJpbmcsIG9wdGlvbnM6IHN0cmluZ1tdLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnModXVpZCwgb3B0aW9ucyk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblBhcnRpYWxEZWxpdmVyeSh1dWlkOiBzdHJpbmcsIGFsbG93UGFydGlhbDogYm9vbGVhbiwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUGFydGlhbERlbGl2ZXJ5KHV1aWQsIGFsbG93UGFydGlhbCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkJyYW5jaCh1dWlkOiBzdHJpbmcsIGJyYW5jaDogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25CcmFuY2godXVpZCwgYnJhbmNoKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uT25Ib2xkQ29kZXModXVpZDogc3RyaW5nLCBjb2Rlczogc3RyaW5nW10sIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbk9uSG9sZENvZGVzKHV1aWQsIGNvZGVzKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGl2aWRlRXZlbmx5KHV1aWQ6IHN0cmluZywgZGl2aWRlRXZlbmx5OiBib29sZWFuLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EaXZpZGVFdmVubHkodXVpZCwgZGl2aWRlRXZlbmx5KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uQXV0b1JlY2FsY3VsYXRlRGVwb3NpdCh1dWlkOiBzdHJpbmcsIGF1dG9SZWNhbGN1bGF0ZURlcG9zaXQ6IGJvb2xlYW4sIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJBdXRvUmVjYWxjdWxhdGVEZXBvc2l0KHV1aWQsIGF1dG9SZWNhbGN1bGF0ZURlcG9zaXQpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25Vc2VEZXBvc2l0UnVsZSh1dWlkOiBzdHJpbmcsIHVzZURlcG9zaXRSdWxlOiBib29sZWFuLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVXNlRGVwb3NpdFJ1bGUodXVpZCwgdXNlRGVwb3NpdFJ1bGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25BbW91bnRUb1NldHRsZSh1dWlkOiBzdHJpbmcsIGFtb3VudFRvU2V0dGxlOiBudW1iZXIsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkFtb3VudFRvU2V0dGxlKHV1aWQsIGFtb3VudFRvU2V0dGxlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUHJpY2VLaW5kKHV1aWQ6IHN0cmluZywgcHJpY2VLaW5kOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblByaWNlS2luZCh1dWlkLCBwcmljZUtpbmQpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25BZG1Db29yZGluYXRvcih1dWlkOiBzdHJpbmcsIHJlbGF0aW9uOiBudW1iZXIsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkFkbUNvb3JkaW5hdG9yKHV1aWQsIHJlbGF0aW9uKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uU2FsZXNQZXJzb24odXVpZDogc3RyaW5nLCByZWxhdGlvbjogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBub3QgaW4gbWlkZGxldGllciB5ZXRcbiAgICAvLyBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25TYWxlc09yZGVyKHV1aWQsIHJlbGF0aW9uKTtcbiAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25DdXJyZW5jeSh1dWlkOiBzdHJpbmcsIGN1cnJlbmN5Q29kZTogc3RyaW5nLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25DdXJyZW5jeSh1dWlkLCBjdXJyZW5jeUNvZGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblR5cGUodXVpZDogc3RyaW5nLCB0cmFuc2FjdGlvblR5cGU6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uVHlwZSh1dWlkLCB0cmFuc2FjdGlvblR5cGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblByb2plY3RDb2RlKHV1aWQ6IHN0cmluZywgcHJvamVjdENvZGU6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUHJvamVjdENvZGUodXVpZCwgcHJvamVjdENvZGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblBheW1lbnRDb25kaXRpb24odXVpZDogc3RyaW5nLCBjb25kaXRpb246IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUGF5bWVudENvbmRpdGlvbih1dWlkLCBjb25kaXRpb24pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkhhbmxkZWRCeSh1dWlkOiBzdHJpbmcsIGhhbmRsZWRCeTogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25IYW5kbGVkQnkodXVpZCwgaGFuZGxlZEJ5KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25NYXJrZXRpbmcodXVpZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbk1hcmtldGluZyh1dWlkLCBjb2RlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGlzY291bnQodXVpZDogc3RyaW5nLCB0eXBlOiBEaXNjb3VudFR5cGUsIGFtb3VudDogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EaXNjb3VudCh1dWlkLCB0eXBlLCBhbW91bnQpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uU2NvcmluZ0NoYW5jZShyZXF1ZXN0OiBDaGFuZ2VIZWFkZXJTY29yaW5nQ2hhbmNlUmVxdWVzdCwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclNjb3JpbmdDaGFuY2UocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25FeHBlY3RlZFNjb3JpbmdEYXRlKHJlcXVlc3Q6IENoYW5nZUhlYWRlckV4cGVjdGVkU2NvcmluZ0RhdGVSZXF1ZXN0LCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRXhwZWN0ZWRTY29yaW5nRGF0ZShyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblJldGFpbFN0YWRpdW0ocmVxdWVzdDogQ2hhbmdlSGVhZGVyUmV0YWlsU3RhZGl1bVJlcXVlc3QsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJSZXRhaWxTdGFkaXVtKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVNlcnZpY2VIZWFkZXJSZXBvcnRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGxldCByZXF1ZXN0OiBDaGFuZ2VTZXJ2aWNlSGVhZGVyUmVwb3J0TWVzc2FnZVJlcXVlc3QgPSBuZXcgQ2hhbmdlU2VydmljZUhlYWRlclJlcG9ydE1lc3NhZ2VSZXF1ZXN0KClcbiAgICAgIHJlcXVlc3QudHJhbnNhY3Rpb25VdWlkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQ7XG4gICAgICByZXF1ZXN0Lm5ld1JlcG9ydE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlU2VydmljZUhlYWRlclJlcG9ydE1lc3NhZ2UocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlU2VydmljZUhlYWRlckNhdXNlQ29kZShjb2RlOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBsZXQgcmVxdWVzdDogQ2hhbmdlU2VydmljZUhlYWRlckNhdXNlQ29kZVJlcXVlc3QgPSBuZXcgQ2hhbmdlU2VydmljZUhlYWRlckNhdXNlQ29kZVJlcXVlc3QoKVxuICAgICAgcmVxdWVzdC50cmFuc2FjdGlvblV1aWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZDtcbiAgICAgIHJlcXVlc3QubmV3Q2F1c2VDb2RlID0gY29kZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVNlcnZpY2VIZWFkZXJDYXVzZUNvZGUocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlU2VydmljZUhlYWRlclNlcnZpY2VUeXBlKHR5cGU6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGxldCByZXF1ZXN0OiBDaGFuZ2VTZXJ2aWNlSGVhZGVyU2VydmljZVR5cGVSZXF1ZXN0ID0gbmV3IENoYW5nZVNlcnZpY2VIZWFkZXJTZXJ2aWNlVHlwZVJlcXVlc3QoKVxuICAgICAgcmVxdWVzdC50cmFuc2FjdGlvblV1aWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZDtcbiAgICAgIHJlcXVlc3QubmV3U2VydmljZVR5cGUgPSB0eXBlO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlU2VydmljZUhlYWRlclNlcnZpY2VUeXBlKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVNlcnZpY2VIZWFkZXJXaXphcmREYXRhKGNvZGU6IHN0cmluZywgdHlwZTogc3RyaW5nLCBxYTogc3RyaW5nLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgbGV0IHJlcXVlc3Q6IENoYW5nZVNlcnZpY2VIZWFkZXJXaXphcmREYXRhUmVxdWVzdCA9IG5ldyBDaGFuZ2VTZXJ2aWNlSGVhZGVyV2l6YXJkRGF0YVJlcXVlc3QoKVxuICAgICAgcmVxdWVzdC50cmFuc2FjdGlvblV1aWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZDtcbiAgICAgIHJlcXVlc3QubmV3Q2F1c2VDb2RlID0gY29kZTtcbiAgICAgIHJlcXVlc3QubmV3U2VydmljZVR5cGUgPSB0eXBlO1xuICAgICAgcmVxdWVzdC5uZXdXaXphcmRRdWVzdGlvbnNBbmRBbnN3ZXJzID0gcWE7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VTZXJ2aWNlSGVhZGVyV2l6YXJkRGF0YShyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVTZXJ2aWNlSGVhZGVyUHJpb3JpdHkocHJpb3JpdHk6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGxldCByZXF1ZXN0OiBDaGFuZ2VTZXJ2aWNlSGVhZGVyUHJpb3JpdHlSZXF1ZXN0ID0gbmV3IENoYW5nZVNlcnZpY2VIZWFkZXJQcmlvcml0eVJlcXVlc3QoKVxuICAgICAgcmVxdWVzdC50cmFuc2FjdGlvblV1aWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZDtcbiAgICAgIHJlcXVlc3QubmV3UHJpb3JpdHkgPSBwcmlvcml0eTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVNlcnZpY2VIZWFkZXJQcmlvcml0eShyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVTZXJ2aWNlSGVhZGVyRW50cnlUeXBlKGVudHJ5VHlwZTogc3RyaW5nLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgbGV0IHJlcXVlc3Q6IENoYW5nZVNlcnZpY2VIZWFkZXJFbnRyeVR5cGVSZXF1ZXN0ID0gbmV3IENoYW5nZVNlcnZpY2VIZWFkZXJFbnRyeVR5cGVSZXF1ZXN0KClcbiAgICAgIHJlcXVlc3QudHJhbnNhY3Rpb25VdWlkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQ7XG4gICAgICByZXF1ZXN0Lm5ld0VudHJ5VHlwZSA9IGVudHJ5VHlwZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVNlcnZpY2VIZWFkZXJFbnRyeVR5cGUocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkSGVhZGVySW1hZ2UoaW1hZ2U6IENvRG9jdW1lbnQsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBsZXQgcmVxdWVzdDogQWRkSGVhZGVySW1hZ2VSZXF1ZXN0ID0gbmV3IEFkZEhlYWRlckltYWdlUmVxdWVzdCgpXG4gICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uVXVpZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkO1xuICAgICAgcmVxdWVzdC5uZXdIZWFkZXJJbWFnZSA9IGltYWdlO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkSGVhZGVySW1hZ2UocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlSGVhZGVySW1hZ2UoaW1hZ2U6IENvRG9jdW1lbnQsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBsZXQgcmVxdWVzdDogRGVsZXRlSGVhZGVySW1hZ2VSZXF1ZXN0ID0gbmV3IERlbGV0ZUhlYWRlckltYWdlUmVxdWVzdCgpXG4gICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uVXVpZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkO1xuICAgICAgcmVxdWVzdC5maWxlTmFtZSA9IGltYWdlLmZpbGVOYW1lO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZGVsZXRlSGVhZGVySW1hZ2UocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUHJpY2VUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZTogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVByaWNlKHV1aWQsIGxpbmVVdWlkLCBwcmljZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVB1cmNoYXNlUHJpY2VUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZTogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVB1cmNoYXNlUHJpY2UodXVpZCwgbGluZVV1aWQsIHByaWNlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUHVyY2hhc2VEZXNjcmlwdGlvblRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUHVyY2hhc2VEZXNjcmlwdGlvbih1dWlkLCBsaW5lVXVpZCwgZGVzY3JpcHRpb24pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVSZWZlcmVuY2VUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVSZWZlcmVuY2UodXVpZCwgbGluZVV1aWQsIHJlZmVyZW5jZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUdvb2REZXNjcmlwdGlvblRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGdvb2REZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYXV0b1NhdmUpIHsgLy8gVE9ETzogZml4IHRoaXMgbmFzdHkgdGhpbmdcbiAgICAgIGF3YWl0IHRoaXMuX2NoZWNrQW5kQWRkUmVsYXRpb25UcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lR29vZERlc2NyaXB0aW9uKHV1aWQsIGxpbmVVdWlkLCBnb29kRGVzY3JpcHRpb24pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVRdWFudGl0eVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHF1YW50aXR5OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHkodXVpZCwgbGluZVV1aWQsIHF1YW50aXR5KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUXVhbnRpdHlTZWxlY3RlZEZvckFsbExpbmVzKHRyYW5zYWN0aW9uSW5mbzogVHJhbnNhY3Rpb25JbmZvLFxuICAgIHRyYW5zYWN0aW9uTGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSwgZGVsaXZlcnlDb3N0TGluZXM6IFRyYW5zYWN0aW9uRGVsaXZlcnlDb3N0TGluZUluZm9bXSwgc2VsZWN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodHJhbnNhY3Rpb25JbmZvICYmIHRyYW5zYWN0aW9uSW5mby51dWlkICYmIHRyYW5zYWN0aW9uTGluZXMpIHtcbiAgICAgIGNvbnN0IGxpbmVzUmVxdWVzdDogQ2hhbmdlTGluZVF1YW50aXR5U2VsZWN0ZWRMaW5lUmVxdWVzdFtdID0gW107XG4gICAgICBsZXQgc2VsZWN0ZWRMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gdHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIobCA9PiBzZWxlY3RlZCA/IGwuc2VsZWN0ZWQgOiB0cnVlKTtcbiAgICAgIGlmIChkZWxpdmVyeUNvc3RMaW5lcykge1xuICAgICAgICBzZWxlY3RlZExpbmVzID0gc2VsZWN0ZWRMaW5lcy5jb25jYXQoZGVsaXZlcnlDb3N0TGluZXMpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZExpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGluZTogVHJhbnNhY3Rpb25MaW5lSW5mbyA9IHNlbGVjdGVkTGluZXNbaV07XG4gICAgICAgIGNvbnN0IHJlcXVlc3Q6IENoYW5nZUxpbmVRdWFudGl0eVNlbGVjdGVkTGluZVJlcXVlc3QgPSBuZXcgQ2hhbmdlTGluZVF1YW50aXR5U2VsZWN0ZWRMaW5lUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0LmxpbmVVdWlkID0gc2VsZWN0ZWRMaW5lLnV1aWQ7XG4gICAgICAgIHJlcXVlc3QubmV3UXVhbnRpdHlTZWxlY3RlZCA9IHNlbGVjdGVkID8gc2VsZWN0ZWRMaW5lLmFtb3VudFNlbGVjdGVkIDogMDtcbiAgICAgICAgbGluZXNSZXF1ZXN0LnB1c2gocmVxdWVzdCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHlTZWxlY3RlZCh0cmFuc2FjdGlvbkluZm8udXVpZCwgbGluZXNSZXF1ZXN0KTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5xdWFudGl0eVNlbGVjdGVkTGluZUNoYW5nZWQubmV4dCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUXVhbnRpdHlTZWxlY3RlZFRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVzOiBDaGFuZ2VMaW5lUXVhbnRpdHlTZWxlY3RlZExpbmVSZXF1ZXN0W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUsIHJlbWVtYmVyVHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5U2VsZWN0ZWQodXVpZCwgbGluZXMpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24sIHJlbWVtYmVyVHJhbnNhY3Rpb24pO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5xdWFudGl0eVNlbGVjdGVkTGluZUNoYW5nZWQubmV4dCh0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUXVhbnRpdHlTZWxlY3ROb25lKHV1aWQ6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuID0gdHJ1ZSwgcmVtZW1iZXJUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHlTZWxlY3ROb25lKHV1aWQpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24sIHJlbWVtYmVyVHJhbnNhY3Rpb24pO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5xdWFudGl0eVNlbGVjdGVkTGluZUNoYW5nZWQubmV4dCh0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRGVsaXZlcnlEYXRlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVEZWxpdmVyeURhdGUodXVpZCwgbGluZVV1aWQsIGRhdGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVQcmljZUxpc3RUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZUxpc3Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVQcmljZUxpc3QodXVpZCwgbGluZVV1aWQsIHByaWNlTGlzdCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVZhdFRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lVmF0KHV1aWQsIGxpbmVVdWlkLCBpZCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUNvbW1pc3Npb25Db2RlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUNvbW1pc3Npb25Db2RlKHV1aWQsIGxpbmVVdWlkLCBjb2RlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRGlyZWN0U2VsbFRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgbmV3RGlyZWN0U2VsbDogYm9vbGVhbixcbiAgICAgIG5ld1N1cHBsaWVySWQ6IG51bWJlciwgbmV3UHVyY2hhc2VPcmRlck51bWJlcjogc3RyaW5nLCBuZXdTdG9ja0ZvcmVjYXN0RGVsaXZlcnlEYXRlOiBEYXRlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGlyZWN0U2VsbCh0cmFuc2FjdGlvblV1aWQsIGxpbmVVdWlkLCBuZXdEaXJlY3RTZWxsLFxuICAgICAgbmV3U3VwcGxpZXJJZCwgbmV3UHVyY2hhc2VPcmRlck51bWJlciwgbmV3U3RvY2tGb3JlY2FzdERlbGl2ZXJ5RGF0ZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVN1cHBsaWVyVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgaWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVTdXBwbGllcih1dWlkLCBsaW5lVXVpZCwgaWQpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVXYXJlaG91c2VUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB3YXJlaG91c2VOdW1iZXI6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVXYXJlaG91c2UodXVpZCwgbGluZVV1aWQsIHdhcmVob3VzZU51bWJlcik7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVRyYW5zYWN0aW9uTGluZUludGVyQnJhbmNoU291cmNlV2FyZWhvdXNlKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgaW50ZXJCcmFuY2hTb3VyY2VXYXJlaG91c2VOcjogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUludGVyQnJhbmNoU291cmNlV2FyZWhvdXNlKHV1aWQsIGxpbmVVdWlkLCBpbnRlckJyYW5jaFNvdXJjZVdhcmVob3VzZU5yKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRGVsaXZlcnlNZXRob2RUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVEZWxpdmVyeU1ldGhvZCh1dWlkLCBsaW5lVXVpZCwgbWV0aG9kKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRGlzY291bnRUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB0eXBlOiBEaXNjb3VudFR5cGUsIGRpc2NvdW50OiBudW1iZXIsIHJlYXNvbjogc3RyaW5nID0gXCJcIiwgY29kZTogc3RyaW5nID0gXCJcIik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVMaW5lRGlzY291bnQodXVpZCwgbGluZVV1aWQsIHR5cGUsIGRpc2NvdW50LCByZWFzb24sIGNvZGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVEcm9wU2hpcG1lbnRUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBuZXdEcm9wU2hpcG1lbnQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRHJvcFNoaXBtZW50KHV1aWQsIGxpbmVVdWlkLCBuZXdEcm9wU2hpcG1lbnQpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZUNvbW1pc3Npb25PcmRlcnModHJhbnNJZDogbnVtYmVyLCBvbmx5R2VuZXJhdGVGb3JEaXJlY3RTZWxsU3VwcGxpZXJzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHZW5lcmF0ZVB1cmNoYXNlT3JkZXJzLm5leHQodHJ1ZSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZUNvbW1pc3Npb25PcmRlcnModHJhbnNJZCwgb25seUdlbmVyYXRlRm9yRGlyZWN0U2VsbFN1cHBsaWVycyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHZW5lcmF0ZVB1cmNoYXNlT3JkZXJzLm5leHQoZmFsc2UpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlUmVsYXRpb24oY29tbWl0VHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlLCBhbHNvSW5pdGlhbGlzZVRyYW5zQW5kQWRkOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIHRoaXMuX2NsZWFuUmVsYXRpb25CZWZvcmVTYXZlKCk7XG4gICAgaWYgKGFsc29Jbml0aWFsaXNlVHJhbnNBbmRBZGQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVJlbGF0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlbGF0aW9uLnJlbGF0aW9uSWQpIHtcbiAgICAgIHRoaXMucmVsYXRpb24gPSBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlLmluc2VydFJlbGF0aW9uKHRoaXMuX3JlbGF0aW9uS2luZEZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKSwgdGhpcy5yZWxhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxvY2tlZDogVmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMudHJhbnNhY3Rpb25SZWxhdGlvblNlcnZpY2UubG9ja1JlbGF0aW9uKHRoaXMucmVsYXRpb24ucmVsYXRpb25UeXBlLCBwYXJzZUludCh0aGlzLnJlbGF0aW9uLnJlbGF0aW9uTnVtYmVyKSk7XG4gICAgICBpZiAobG9ja2VkICYmIGxvY2tlZC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVsYXRpb24gPSBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlLnVwZGF0ZVJlbGF0aW9uKHRoaXMuX3JlbGF0aW9uS2luZEZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKSwgdGhpcy5yZWxhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0luZm9ybWF0aW9uKCdSRUxBVElPTl9BTFJFQURZX0xPQ0tFRCcsIHRydWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGF3YWl0IHRoaXMucmVsYXRpb25TZXJ2aWNlLmNvbW1pdCgpO1xuICAgIGlmIChhbHNvSW5pdGlhbGlzZVRyYW5zQW5kQWRkICYmICF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih0aGlzLnJlbGF0aW9uLnJlbGF0aW9uSWQpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZXF1ZW5jZVZhbHVlKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFNlcXVlbmNlVmFsdWUoU2VxdWVuY2VOYW1lLlJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk6IFByb21pc2U8UmVsYXRpb25Qcml2YWN5U2V0dGluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJ0aWNsZUJvdW5kVGV4dExpbmVzT2ZBcnRpY2xlTGluZShhcnRpY2xlTGluZVV1aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25MaW5lSW5mb1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVCb3VuZFRleHRMaW5lc09mQXJ0aWNsZUxpbmUoYXJ0aWNsZUxpbmVVdWlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVTYWxlc09yZGVyKHJlcXVlc3Q6IENyZWF0ZVNhbGVzT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5jaGVja0JyYW5jaCgpO1xuICAgIGlmICghdGhpcy5jdXJyZW50QnJhbmNoKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICB9XG4gICAgcmVxdWVzdC5icmFuY2hOciA9IHRoaXMuY3VycmVudEJyYW5jaDtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jcmVhdGVTYWxlc09yZGVyKHJlcXVlc3QpO1xuICAgIGF3YWl0IHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyKHJlcXVlc3Q6IENyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyUmVxdWVzdCwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLmNyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyKHJlcXVlc3QpLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZShhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24sIHNhdmVUcmFuc2FjdGlvbikpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlUHVyY2hhc2VPcmRlcihyZXF1ZXN0OiBDcmVhdGVQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMuY2hlY2tCcmFuY2goKTtcbiAgICBpZiAoIXRoaXMuY3VycmVudEJyYW5jaCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgfVxuICAgIHJlcXVlc3QuYnJhbmNoTnIgPSB0aGlzLmN1cnJlbnRCcmFuY2g7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY3JlYXRlUHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcbiAgICBhd2FpdCB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVTZXJ2aWNlT3JkZXIocmVxdWVzdDogQ3JlYXRlU2VydmljZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihhc3luYyAocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tCcmFuY2goKTtcbiAgICAgIGlmICghdGhpcy5jdXJyZW50QnJhbmNoKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl90cmFuc0ZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUgJiYgIWlzTmFOKHRoaXMuX2xpbmVOckZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUpKSB7XG4gICAgICAgIHJlc29sdmUoYXdhaXQgdGhpcy5jcmVhdGVTZXJ2aWNlT3JkZXJXaXRoU291cmNlVHJhbnNhY3Rpb25MaW5lUmVxdWVzdCgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoYXdhaXQgdGhpcy5jcmVhdGVSZWd1bGFyU2VydmljZU9yZGVyKHJlcXVlc3QpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVSZWd1bGFyU2VydmljZU9yZGVyKHJlcXVlc3Q6IENyZWF0ZVNlcnZpY2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oYXN5bmMgKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXF1ZXN0LmJyYW5jaE5yID0gdGhpcy5jdXJyZW50QnJhbmNoO1xuICAgICAgdGhpcy5jb25uZWN0b3IuY3JlYXRlU2VydmljZU9yZGVyKHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNvcHlUcmFuc2FjdGlvbkxpbmUocmVxdWVzdDogVHJhbnNhY3Rpb25MaW5lQ29weVJlcXVlc3QpIHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcblxuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jcmVhdGVDb3B5VHJhbnNhY3Rpb25MaW5lKHJlcXVlc3QpO1xuXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlU2VydmljZU9yZGVyV2l0aFNvdXJjZVRyYW5zYWN0aW9uTGluZVJlcXVlc3QoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KGFzeW5jIChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgbGV0IHJlcXVlc3Q6IENyZWF0ZVNlcnZpY2VPcmRlcldpdGhTb3VyY2VUcmFuc2FjdGlvbkxpbmVSZXF1ZXN0ID0gbmV3IENyZWF0ZVNlcnZpY2VPcmRlcldpdGhTb3VyY2VUcmFuc2FjdGlvbkxpbmVSZXF1ZXN0KCk7XG4gICAgICByZXF1ZXN0LmJyYW5jaE5yID0gdGhpcy5jdXJyZW50QnJhbmNoO1xuICAgICAgcmVxdWVzdC5jdXN0b21lclJlbGF0aW9uSWQgPSB0aGlzLl90cmFuc0ZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUudHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uLnJlbGF0aW9uSWQ7XG4gICAgICByZXF1ZXN0LnNvdXJjZVRyYW5zSWQgPSB0aGlzLl90cmFuc0ZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUudHJhbnNhY3Rpb25JbmZvLmlkO1xuICAgICAgcmVxdWVzdC5zb3VyY2VMaW5lTnIgPSB0aGlzLl9saW5lTnJGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lO1xuXG4gICAgICB0aGlzLmNvbm5lY3Rvci5jcmVhdGVTZXJ2aWNlT3JkZXJXaXRoU291cmNlVHJhbnNhY3Rpb25MaW5lKHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZVNhbGVzUXVvdGF0aW9uKHJlcXVlc3Q6IENyZWF0ZVNhbGVzUXVvdGF0aW9uUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMuY2hlY2tCcmFuY2goKTtcbiAgICBpZiAoIXRoaXMuY3VycmVudEJyYW5jaCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgfVxuICAgIHJlcXVlc3QuYnJhbmNoTnIgPSB0aGlzLmN1cnJlbnRCcmFuY2g7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY3JlYXRlU2FsZXNRdW90YXRpb24ocmVxdWVzdCk7XG4gICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNyZWF0ZWQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCFjcmVhdGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl90cmFuc0ZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgcmVsYXRpb25JZCk7XG5cbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldERhdGFGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRZZXNObyhsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q29Eb21haW5WYWx1ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFllc05vQ29sbGVjdGlvbihsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldFByaWNlS2luZChsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q29Eb21haW5WYWx1ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFByaWNlS2luZENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmlvcml0eShsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q29Eb21haW5WYWx1ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFByaW9yaXR5Q29sbGVjdGlvbihsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldEVudHJ5VHlwZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRFbnRyeVR5cGVzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RG9tYWluVHlwZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXREb21haW5UeXBlcyhsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldENhdXNlQ29kZXMoKTogUHJvbWlzZTxDYXVzZUNvZGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRDYXVzZUNvZGVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SW5PdXRDb2xsZWN0aW9uKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0SW5PdXRDb2xsZWN0aW9uKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U0xBVHlwZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTTEFUeXBlcyhsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldFR1cm5vdmVyR3JvdXBzKCk6IFByb21pc2U8VHVybm92ZXJHcm91cEltYWdlW10+IHtcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldFR1cm5vdmVyR3JvdXBzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQpO1xuICB9XG5cbiAgcHVibGljIGdldE1hcmtldGluZ0NvZGVzKCk6IFByb21pc2U8TWFya2V0aW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0TWFya2V0aW5nQ29kZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBcnRpY2xlcyhyZXF1ZXN0OiBBcnRpY2xlRXh0ZW5kZWRSZXF1ZXN0KTogUHJvbWlzZTxBcnRpY2xlTGlnaHRbXT4ge1xuICAgIHJldHVybiB0aGlzLmFydGljbGVDb25uZWN0b3Iuc2VhcmNoQXJ0aWNsZXMocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJ0aWNsZUxpc3RXaXRoQmFyY29kZUFydGljbGVOckVhbkNvZGUoc2VhcmNoOiBzdHJpbmcpOiBQcm9taXNlPEFydGljbGVMaWdodFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRBcnRpY2xlTGlzdFdpdGhCYXJjb2RlQXJ0aWNsZU5yRWFuQ29kZShzZWFyY2gpO1xuICB9XG5cbiAgcHVibGljIGdldE1haW5BcnRpY2xlcygpOiBQcm9taXNlPE1haW5BcnRpY2xlW10+IHtcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldE1haW5BcnRpY2xlcygpO1xuICB9XG5cbiAgcHVibGljIGdldERlbGl2ZXJ5TWV0aG9kcygpOiBQcm9taXNlPERlbGl2ZXJ5TWV0aG9kW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlNZXRob2RzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVsaXZlcnlPcHRpb25zKCk6IFByb21pc2U8RGVsaXZlcnlPcHRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU9wdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTYWxlc1BlcnNvbnMoZGF0ZT86IERhdGUpOiBQcm9taXNlPFNhbGVzUGVyc29uW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U2FsZXNQZXJzb25zKGRhdGUpO1xuICB9XG5cbiAgcHVibGljIGdldFJldGFpbFN0YWRpdW1zKCk6IFByb21pc2U8UmV0YWlsU3RhZGl1bVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFJldGFpbFN0YWRpdW1zKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkV2ViU2Vzc2lvblRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQ6IHN0cmluZywgYXJ0aWNsZU51bWJlcjogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkV2ViU2Vzc2lvblRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQsIGFydGljbGVOdW1iZXIsIHF1YW50aXR5KTtcbiAgICB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUV4dGVuZGVkKGFydGljbGVOcjogc3RyaW5nKTogUHJvbWlzZTxBcnRpY2xlRXh0ZW5kZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0QXJ0aWNsZUV4dGVuZGVkKGFydGljbGVOcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQXJ0aWNsZShhcnRpY2xlTm86IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciA9IDEsIGFib3ZlTGluZU5yOiBudW1iZXIgPSAwLCBiZWxvd0xpbmVOcjogbnVtYmVyID0gMCwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuID0gdHJ1ZSwgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5hZGRUcmFuc2FjdGlvbkxpbmUoYXJ0aWNsZU5vLCBxdWFudGl0eSwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yLCBzaG93TG9hZGVyKTtcbiAgICBpZiAocmVzcG9uc2UgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVHJhbnNhY3Rpb25MaW5lKGFydGljbGVObzogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyID0gMSwgYWJvdmVMaW5lTnI6IG51bWJlciA9IDAsIGJlbG93TGluZU5yOiBudW1iZXIgPSAwLCBzaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgY3JlYXRlZDogYm9vbGVhbiA9IGF3YWl0IHRoaXMuX2NoZWNrQW5kQ3JlYXRlVHJhbnNhY3Rpb24oKTtcbiAgICBpZiAoIWNyZWF0ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkxpbmVBZGRlZCA9IHRydWU7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5hZGRUcmFuc2FjdGlvbkxpbmUoXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBhcnRpY2xlTm8sIHF1YW50aXR5LCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIsIHNob3dMb2FkZXIpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRDYXRGYXJtQXJ0aWNsZShjYXRhbG9nSWQ6IG51bWJlciwganNvbkFydGljbGVTdHJpbmc6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGpzb25BcnRpY2xlT2JqZWN0OiBhbnkgPSBKU09OLnBhcnNlKGpzb25BcnRpY2xlU3RyaW5nKTtcbiAgICBjb25zdCBhcnRpY2xlVHJlZTogQXJ0aWNsZUZsYXRUcmVlRFRPID0gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQXJ0aWNsZUZsYXRUcmVlRFRPLCBqc29uQXJ0aWNsZU9iamVjdC5hcnRpY2xlVHJlZSkgYXMgQXJ0aWNsZUZsYXRUcmVlRFRPO1xuICAgIGxldCBhcnROcjogc3RyaW5nID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLnN0b3JlQ2F0RmFybUNvbXBvc2l0aW9uQXJ0aWNsZShjYXRhbG9nSWQsIGFydGljbGVUcmVlKTtcbiAgICBhd2FpdCB0aGlzLmFkZEFydGljbGUoYXJ0TnIsIGpzb25BcnRpY2xlT2JqZWN0LnF1YW50aXR5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRFeHRlcm5hbENhdGFsb2dBcnRpY2xlKHJlcXVlc3Q6IEV4dGVybmFsQ2F0YWxvZ0FkZEFydGljbGVSZXF1ZXN0LCBzaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmFkZEV4dGVybmFsQ2F0YWxvZ0FydGljbGVXaXRoUmF3RGF0YShyZXF1ZXN0LmNhdGFsb2dJZCwgcmVxdWVzdC5hcnRpY2xlSnNvbiwgc2hvd0xvYWRlcik7XG4gIH1cblxuXG4gIHB1YmxpYyBhc3luYyBhZGRFeHRlcm5hbENhdGFsb2dBcnRpY2xlRnJvbUdvb2RJZChqc29uQXJ0aWNsZVN0cmluZzogc3RyaW5nLCBzaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBqc29uQXJ0aWNsZU9iamVjdDogYW55ID0gSlNPTi5wYXJzZShqc29uQXJ0aWNsZVN0cmluZyk7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5hZGRUcmFuc2FjdGlvbkxpbmUoanNvbkFydGljbGVPYmplY3Quc2t1LCBqc29uQXJ0aWNsZU9iamVjdC5xdWFudGl0eSwgMCwgMCwgc2hvd0xvYWRlcik7XG4gICAgY29uc3QgaGFuZGxlZDogYm9vbGVhbiA9IGF3YWl0IHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCB0cnVlKTtcbiAgICBpZiAoaGFuZGxlZCAmJiBqc29uQXJ0aWNsZU9iamVjdC5wcmljZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVByaWNlVHJhbnNhY3Rpb25MaW5lKHJlc3BvbnNlLnRyYW5zYWN0aW9uSW5mby51dWlkLCByZXNwb25zZS5saW5lT3BlcmF0aW9uU3RhdHVzZXNbMF0udXVpZCwganNvbkFydGljbGVPYmplY3QucHJpY2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRFeHRlcm5hbENhdGFsb2dBcnRpY2xlV2l0aFJhd0RhdGEoY2F0YWxvZ0lkOiBudW1iZXIsIGpzb25BcnRpY2xlU3RyaW5nOiBzdHJpbmcsIHNob3dMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNyZWF0ZWQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCFjcmVhdGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25MaW5lQWRkZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkRXh0ZXJuYWxDYXRhbG9nQXJ0aWNsZXNUb1RyYW5zYWN0aW9uKFxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgY2F0YWxvZ0lkLCBqc29uQXJ0aWNsZVN0cmluZywgc2hvd0xvYWRlcik7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFBheW1lbnRMaW5lVG9UcmFuc2FjdGlvbihyZXF1ZXN0OiBUcmFuc2FjdGlvbkFkZFBheW1lbnRMaW5lUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNyZWF0ZWQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCFjcmVhdGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25MaW5lQWRkZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkUGF5bWVudExpbmVUb1RyYW5zYWN0aW9uKHJlcXVlc3QpO1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUZXh0TGluZShzaG93T25Eb2N1bWVudHM6IG51bWJlciwgdGV4dDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgYXJ0aWNsZUJvdW5kOiBib29sZWFuLCByZWZBcnRpY2xlTGluZU5yOiBudW1iZXIsIGFib3ZlTGluZU5yPzogbnVtYmVyLCBiZWxvd0xpbmVOcj86IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNyZWF0ZWQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCFjcmVhdGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5hZGRUZXh0TGluZVRvVHJhbnNhY3Rpb24oXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBzaG93T25Eb2N1bWVudHMsIHRleHQsIGFtb3VudCwgYXJ0aWNsZUJvdW5kLCByZWZBcnRpY2xlTGluZU5yLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlVGV4dExpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBzaG93T25Eb2N1bWVudHM6IG51bWJlciwgdGV4dDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnVwZGF0ZVRleHRMaW5lKHV1aWQsIGxpbmVVdWlkLCBzaG93T25Eb2N1bWVudHMsIHRleHQpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlTGluZVNlcXVlbmNlKGxpbmVVdWlkOiBzdHJpbmcsIGFib3ZlTGluZU5yPzogbnVtYmVyLCBiZWxvd0xpbmVOcj86IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VMaW5lU2VxdWVuY2UodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIGxpbmVVdWlkLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uTGluZVV1aWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmF1dG9TYXZlKSB7IC8vIFRPRE86IGZpeCB0aGlzIG5hc3R5IHRoaW5nXG4gICAgICBhd2FpdCB0aGlzLl9jaGVja0FuZEFkZFJlbGF0aW9uVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZVRyYW5zYWN0aW9uTGluZSh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgdHJhbnNhY3Rpb25MaW5lVXVpZCk7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5tYW51YWxTYXZlUGFyYW0pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFjaygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHkodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIG5ld1F1YW50aXR5OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5hdXRvU2F2ZSkgeyAvLyBUT0RPOiBmaXggdGhpcyBuYXN0eSB0aGluZ1xuICAgICAgYXdhaXQgdGhpcy5fY2hlY2tBbmRBZGRSZWxhdGlvblRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHRyYW5zYWN0aW9uVXVpZCwgbGluZVV1aWQsIG5ld1F1YW50aXR5KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubWFudWFsU2F2ZVBhcmFtKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvbGxiYWNrKCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kc1JlY2VpcHRIaXN0b3J5KHRyYW5zSWQ6IG51bWJlciwgbGluZU5yOiBudW1iZXIpOiBQcm9taXNlPEdvb2RzUmVjZWlwdEhpc3Rvcnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0R29vZHNSZWNlaXB0SGlzdG9yeSh0cmFuc0lkLCBsaW5lTnIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXIodHJhbnNhY3Rpb25JZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHJlcXVlc3Q6IFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJSZWNlaXZlR29vZHMubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXIocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlclJlY2VpdmVHb29kcy5uZXh0KGZhbHNlKTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb24odHJhbnNhY3Rpb25JZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHJlcXVlc3Q6IFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyUmVjZWl2ZUdvb2RzLm5leHQodHJ1ZSk7XG4gICAgICBsZXQgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb24ocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlclJlY2VpdmVHb29kcy5uZXh0KGZhbHNlKTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXIodHJhbnNhY3Rpb25JZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHJlcXVlc3Q6IEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyQWxsb2NhdGVHb29kcy5uZXh0KHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXIocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckFsbG9jYXRlR29vZHMubmV4dChmYWxzZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IHRydWU7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvbih0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcmVxdWVzdDogQWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJDb3JyZWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyQWxsb2NhdGVHb29kcy5uZXh0KHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJDb3JyZWN0aW9uKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJBbGxvY2F0ZUdvb2RzLm5leHQoZmFsc2UpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRHb29kc1RvQmVQaWNrZWRGb3JTYWxlc09yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBHb29kc1RvQmVQaWNrZWRGb3JPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckdvb2RzVG9CZVBpY2tlZC5uZXh0KHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2V0R29vZHNUb0JlUGlja2VkRm9yU2FsZXNPcmRlcihyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyR29vZHNUb0JlUGlja2VkLm5leHQoZmFsc2UpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRHb29kc1BpY2tlZEZvck9yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBHb29kc1BpY2tlZFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckdvb2RzUGlja2VkLm5leHQodHJ1ZSk7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zZXRHb29kc1BpY2tlZEZvck9yZGVyKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHb29kc1BpY2tlZC5uZXh0KGZhbHNlKTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlR29vZHNQaWNrZWQodHJhbnNhY3Rpb25JZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIGRlbGV0ZUdvb2RzUGlja2VkRm9yT3JkZXJSZXF1ZXN0OiBEZWxldGVHb29kc1BpY2tlZEZvck9yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZUdvb2RzUGlja2VkKGRlbGV0ZUdvb2RzUGlja2VkRm9yT3JkZXJSZXF1ZXN0KTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlR29vZHNUb0JlUGlja2VkKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBkZWxldGVHb29kc1RvQmVQaWNrZWRGb3JPcmRlclJlcXVlc3Q6IERlbGV0ZUdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZUdvb2RzVG9CZVBpY2tlZChkZWxldGVHb29kc1RvQmVQaWNrZWRGb3JPcmRlclJlcXVlc3QpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uKFxuICAgIHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBwdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uOiBHZXRQdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uLCBhbmFseXNpc0lkOiBudW1iZXIsIHNlbGVjdGVkTGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uLm5leHQodHJ1ZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnB1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ocHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbik7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5fY2hlY2tBbmRTYXZlTGluZXNGb3JBSUNvbmZpcm1hdGlvbih0cmFuc2FjdGlvbklkLCBhbmFseXNpc0lkLCBzZWxlY3RlZExpbmVzKTtcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uub3JkZXJDb25maXJtYXRpb25Ecm9wcGVkLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5vcmRlckNvbmZpcm1hdGlvblJlc2V0Lm5leHQoKTtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUHVyY2hhc2VQb3J0YWxMaW5lcyh0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcHVyY2hhc2VQb3J0YWxMaW5lOiBQdXJjaGFzZVBvcnRhbExpbmUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbi5uZXh0KHRydWUpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci51cGRhdGVQdXJjaGFzZVBvcnRhbExpbmVzKHB1cmNoYXNlUG9ydGFsTGluZSk7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodHJhbnNhY3Rpb25JZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbi5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRUZXh0VHlwZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRUZXh0VHlwZXMobGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGFuZGFyZFRleHRzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxTdGFuZGFyZFRleHRbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTdGFuZGFyZFRleHRzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPEFydGljbGVGdWxsT2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0R29vZElkRnJvbUFydGljbGVOcihza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb3VudHJ5KGNvdW50cnlDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvdW50cnk+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0Q291bnRyeShjb3VudHJ5Q29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzaFJlZ2lzdGVycyhicmFuY2g/OiBzdHJpbmcsIGdyb3VwPzogbnVtYmVyKTogUHJvbWlzZTxDYXNoUmVnaXN0ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRDYXNoUmVnaXN0ZXJzKGJyYW5jaCwgZ3JvdXAsIHRoaXMuY2FzaFJlZ2lzdGVyc0RpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXNoRHJhd2VycyhjYXNoRHJhd2Vyc1JlcXVlc3Q6IENhc2hEcmF3ZXJzUmVxdWVzdCk6IFByb21pc2U8Q2FzaERyYXdlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldENhc2hEcmF3ZXJzKGNhc2hEcmF3ZXJzUmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJpY2VMaXN0cygpOiBQcm9taXNlPFByaWNlTGlzdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFByaWNlTGlzdHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYXRMaXN0cygpOiBQcm9taXNlPFZhdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFZhdExpc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc1ZhdENvZGVzKHR5cGU6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8VmF0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNWYXRDb2Rlcyh0eXBlLCBkYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUYWdzKGNhdGVnb3J5OiBudW1iZXIpOiBQcm9taXNlPFRhZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFRhZ3MoY2F0ZWdvcnkpO1xuICB9XG5cbiAgcHVibGljIGdldE9uSG9sZENvZGVzKCk6IFByb21pc2U8T25Ib2xkQ29kZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldE9uSG9sZENvZGVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0V2FyZWhvdXNlcygpOiBQcm9taXNlPFdhcmVob3VzZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFdhcmVob3VzZXModGhpcy5jdXJyZW50QnJhbmNoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRXYXJlaG91c2VTdG9ja0luZm9CeUdvb2RBbmRCcmFuY2goZ29vZElkOiBudW1iZXIsIHRyYW5zYWN0aW9uSW5mbz86IFRyYW5zYWN0aW9uSW5mbyk6IFByb21pc2U8V2FyZWhvdXNlU3RvY2tJbmZvW10+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb25CcmFuY2g6IHN0cmluZztcblxuICAgIGlmICh0cmFuc2FjdGlvbkluZm8gJiYgdHJhbnNhY3Rpb25JbmZvLmJyYW5jaCkge1xuICAgICAgdHJhbnNhY3Rpb25CcmFuY2ggPSB0cmFuc2FjdGlvbkluZm8uYnJhbmNoLnJlbGF0aW9uTnI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmJyYW5jaClcbiAgICAgIHRyYW5zYWN0aW9uQnJhbmNoID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmJyYW5jaC5yZWxhdGlvbk5yO1xuICAgIGVsc2Uge1xuICAgICAgdHJhbnNhY3Rpb25CcmFuY2ggPSB0aGlzLmN1cnJlbnRCcmFuY2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFdhcmVob3VzZVN0b2NrSW5mb0J5R29vZEFuZEJyYW5jaChnb29kSWQsIHRyYW5zYWN0aW9uQnJhbmNoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXhDb25maXJtZWREZWxpdmVyeURhdGVGb3JQdXJjaGFzZU9yZGVyKHRyYW5zSWQ6IG51bWJlcik6IFByb21pc2U8RGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRNYXhDb25maXJtZWREZWxpdmVyeURhdGVGb3JQdXJjaGFzZU9yZGVyKHRyYW5zSWQpO1xuICB9XG5cbiAgcHVibGljIGdldEhpc3RvcmljU3RhdGVWYWx1ZXMoKTogUHJvbWlzZTxDb2RlRGVzY3JpcHRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRIaXN0b3JpY1N0YXRlVmFsdWVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tZXJHcm91cHMoKTogUHJvbWlzZTxDdXN0b21lckdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0Q3VzdG9tZXJHcm91cHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRXb3JrRmxvd1N0YXR1c2VzKHRyYW5zYWN0aW9uS2luZDogVHJhbnNhY3Rpb25LaW5kKTogUHJvbWlzZTxXb3JrRmxvd1N0YXR1c1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFdvcmtGbG93U3RhdHVzZXModHJhbnNhY3Rpb25LaW5kKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2NrUHVyY2hhc2VQb3J0YWxMaW5lcyh0cmFuc0lkUHVyY2hhc2U6IG51bWJlciwgbGluZUlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IubG9ja1B1cmNoYXNlUG9ydGFsTGluZXModHJhbnNJZFB1cmNoYXNlLCBsaW5lSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEF2YWlsYWJsZVN0b2NrR3JvdXBlZEJ5V0xCU0J5VHJhbnNJZExpbmVOcih0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxBdmFpbGFibGVTdG9ja1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEF2YWlsYWJsZVN0b2NrR3JvdXBlZEJ5V0xCU0J5VHJhbnNJZExpbmVOcih0cmFuc0lkLCBsaW5lTnIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEF2YWlsYWJsZVN0b2NrRm9yU3VwcGxpZXIoZ29vZElkOiBudW1iZXIsIHN1cHBsaWVyUmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxTdXBwbGllckFydGljbGVTdG9ja0ZvcmVjYXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEF2YWlsYWJsZVN0b2NrRm9yU3VwcGxpZXIoZ29vZElkLCBzdXBwbGllclJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEdvb2RzQWxsb2NhdGlvbkhpc3RvcnkodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8R29vZHNBbGxvY2F0aW9uSGlzdG9yeT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRHb29kc0FsbG9jYXRpb25IaXN0b3J5KHRyYW5zSWQsIGxpbmVOcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZHNUb0JlUGlja2VkSGlzdG9yeSh0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxHb29kc1RvQmVQaWNrZWRIaXN0b3J5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RzVG9CZVBpY2tlZEhpc3RvcnkodHJhbnNJZCwgbGluZU5yKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kc1BpY2tlZEhpc3RvcnkodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8R29vZHNQaWNrZWRIaXN0b3J5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RzUGlja2VkSGlzdG9yeSh0cmFuc0lkLCBsaW5lTnIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE9yZGVyQ29uZmlybWF0aW9uRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9yZGVyQ29uZmlybWF0aW9uRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25QcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0T3JkZXJDb25maXJtYXRpb25QcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPcmRlckNvbmZpcm1hdGlvbkRlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9yZGVyQ29uZmlybWF0aW9uRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JPcmRlckNvbmZpcm1hdGlvbih0cmFuc2FjdGlvblVVSUQpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yT3JkZXJDb25maXJtYXRpb24odHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludE9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IFByaW50T3JkZXJDb25maXJtYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyQ29uZmlybWF0aW9uLm5leHQodHJ1ZSk7XG4gICAgY29uc3QgcmVzdWx0OiBDb0RvY3VtZW50IHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50T3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XG4gICAgaWYgKHJlc3VsdCAmJiAhKHJlc3VsdCBpbnN0YW5jZW9mIENvRG9jdW1lbnQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbW1pdEFuZFJlZnJlc2hUcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckNvbmZpcm1hdGlvbi5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50SGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBQcmludEhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludEhpc3RvcmljT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RhcnRPcmRlckNvbmZpcm1hdGlvbkJhdGNoKHJlcXVlc3Q6IEJhdGNoVHJhbnNhY3Rpb25TZW5kaW5nUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zdGFydE9yZGVyQ29uZmlybWF0aW9uQmF0Y2gocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RhcnREZWxpdmVyeU5vdGVzQmF0Y2gocmVxdWVzdDogQmF0Y2hUcmFuc2FjdGlvblNlbmRpbmdSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnN0YXJ0RGVsaXZlcnlOb3Rlc0JhdGNoKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0SW52b2ljZUJhdGNoKHJlcXVlc3Q6IEJhdGNoVHJhbnNhY3Rpb25TZW5kaW5nUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zdGFydEludm9pY2VCYXRjaChyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRCYXRjaEpvYlByb2dyZXNzZXNGb3JUaGVVc2VyKCk6IFByb21pc2U8QmF0Y2hKb2JQcm9ncmVzc1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEJhdGNoSm9iUHJvZ3Jlc3Nlc0ZvclRoZVVzZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbE9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IEVtYWlsT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyQ29uZmlybWF0aW9uLm5leHQodHJ1ZSk7XG4gICAgY29uc3QgcmVzdWx0OiBDb0RvY3VtZW50IHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XG4gICAgaWYgKHJlc3VsdCAmJiAhKHJlc3VsdCBpbnN0YW5jZW9mIENvRG9jdW1lbnQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbW1pdEFuZFJlZnJlc2hUcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckNvbmZpcm1hdGlvbi5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVtYWlsSGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBFbWFpbEhpc3RvcmljT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBQZGZPcmRlckNvbmZpcm1hdGlvblJlcXVlc3QpOiBQcm9taXNlPENvRG9jdW1lbnQgfCBib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJDb25maXJtYXRpb24ubmV4dCh0cnVlKTtcbiAgICBjb25zdCByZXN1bHQ6IENvRG9jdW1lbnQgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XG4gICAgaWYgKHJlc3VsdCAmJiAhKHJlc3VsdCBpbnN0YW5jZW9mIENvRG9jdW1lbnQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbW1pdEFuZFJlZnJlc2hUcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckNvbmZpcm1hdGlvbi5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBkZkhpc3RvcmljT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdDogUGRmSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnBkZkhpc3RvcmljT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnRQdXJjaGFzZU9yZGVyKHJlcXVlc3Q6IFByaW50UHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRQdXJjaGFzZU9yZGVyKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVtYWlsUHVyY2hhc2VPcmRlcihyZXF1ZXN0OiBFbWFpbFB1cmNoYXNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsUHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZQdXJjaGFzZU9yZGVyKHJlcXVlc3Q6IFBkZlB1cmNoYXNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnBkZlB1cmNoYXNlT3JkZXIocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVXZWJTZXJ2aWNlT3JkZXIodHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdlbmVyYXRlV2ViU2VydmljZU9yZGVyKHRyYW5zYWN0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNhblB1cmNoYXNlT3JkZXJCZVNlbmRCeVdlYnNlcnZpY2UodHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmNhblB1cmNoYXNlT3JkZXJCZVNlbmRCeVdlYnNlcnZpY2UodHJhbnNhY3Rpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VPcmRlckVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQdXJjaGFzZU9yZGVyRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VPcmRlclByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQdXJjaGFzZU9yZGVyUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VPcmRlckRlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlT3JkZXJEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZUFuZFNlbmRQdXJjaGFzZU9yZGVyc0ZvclNhbGVzT3JkZXIocmVxdWVzdDogUHJpbnRQdXJjaGFzZU9yZGVyRm9yU2FsZXNPcmRlclJlcXVlc3QsIHZlcnNpb246IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbihyZXF1ZXN0LnRyYW5zSWQsIHZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHZW5lcmF0ZVB1cmNoYXNlT3JkZXJzLm5leHQodHJ1ZSk7XG4gICAgICAvLyBnZXQgbGluZU51bWJlcnNcbiAgICAgIGNvbnN0IGxpbmVOdW1iZXJzOiBudW1iZXJbXSA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKGwgPT4gbC5zZWxlY3RlZCkubWFwKGwgPT4gbC5saW5lTnIpO1xuICAgICAgcmVxdWVzdC5saW5lTnVtYmVycyA9IGxpbmVOdW1iZXJzO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZUFuZFNlbmRQdXJjaGFzZU9yZGVyc0ZvclNhbGVzT3JkZXIocmVxdWVzdCk7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZChyZXF1ZXN0LnRyYW5zSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckdlbmVyYXRlUHVyY2hhc2VPcmRlcnMubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VBZHZpY2VMaW5lcyhmaWx0ZXJzOiBQdXJjaGFzZUFkdmljZUZpbHRlcnMsIGdvb2RJZD86IG51bWJlciwgc2hvd0xvYWRlcj86IGJvb2xlYW4pOiBQcm9taXNlPFB1cmNoYXNlQWR2aWNlTGluZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlQWR2aWNlTGluZXMoZmlsdGVycywgZ29vZElkLCBzaG93TG9hZGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZUFuZFNlbmRQdXJjaGFzZU9yZGVycyhwdXJjaGFzZUFkdmljZUxpbmVzOiBQdXJjaGFzZUFkdmljZUxpbmVbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZUFuZFNlbmRQdXJjaGFzZU9yZGVycyhwdXJjaGFzZUFkdmljZUxpbmVzKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbERlbGl2ZXJ5Tm90ZShlbWFpbERlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IEVtYWlsRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQodHJ1ZSk7XG4gICAgbGV0IHJlc3VsdDogQ29Eb2N1bWVudCB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbERlbGl2ZXJ5Tm90ZShlbWFpbERlbGl2ZXJ5Tm90ZVJlcXVlc3QpO1xuICAgIGlmIChyZXN1bHQgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBDb0RvY3VtZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJEZWxpdmVyeS5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGUoZW1haWxIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IEVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbEhpc3RvcmljRGVsaXZlcnlOb3RlKGVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZEZWxpdmVyeU5vdGUocGRmRGVsaXZlcnlOb3RlUmVxdWVzdDogUGRmRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyRGVsaXZlcnkubmV4dCh0cnVlKTtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnBkZkRlbGl2ZXJ5Tm90ZShwZGZEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQoZmFsc2UpO1xuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBkZkhpc3RvcmljRGVsaXZlcnlOb3RlKHBkZkhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdDogUGRmSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZIaXN0b3JpY0RlbGl2ZXJ5Tm90ZShwZGZIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50RGVsaXZlcnlOb3RlKHByaW50RGVsaXZlcnlOb3RlUmVxdWVzdDogUHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyRGVsaXZlcnkubmV4dCh0cnVlKTtcbiAgICBsZXQgcmVzdWx0OiBDb0RvY3VtZW50IHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50RGVsaXZlcnlOb3RlKHByaW50RGVsaXZlcnlOb3RlUmVxdWVzdCk7XG4gICAgaWYgKHJlc3VsdCAmJiAhKHJlc3VsdCBpbnN0YW5jZW9mIENvRG9jdW1lbnQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbW1pdEFuZFJlZnJlc2hUcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQoZmFsc2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnREZWxpdmVyeU5vdGVzKHByaW50RGVsaXZlcnlOb3Rlc1JlcXVlc3Q6IFByaW50RGVsaXZlcnlOb3Rlc1JlcXVlc3QpOiBQcm9taXNlPENvRG9jdW1lbnQgfCBib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJEZWxpdmVyeS5uZXh0KHRydWUpO1xuICAgIGxldCByZXN1bHQ6IENvRG9jdW1lbnQgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnREZWxpdmVyeU5vdGVzKHByaW50RGVsaXZlcnlOb3Rlc1JlcXVlc3QpO1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyRGVsaXZlcnkubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludEhpc3RvcmljRGVsaXZlcnlOb3RlKHByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0OiBQcmludEhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRIaXN0b3JpY0RlbGl2ZXJ5Tm90ZShwcmludEhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdCk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlOb3RlRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlOb3RlRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlOb3RlRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5Tm90ZUVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5Tm90ZVByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvckludm9pY2UodHJhbnNhY3Rpb25VVUlEKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvckludm9pY2UodHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbEludm9pY2UoZW1haWxJbnZvaWNlUmVxdWVzdDogRW1haWxJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nSW52b2ljZS5uZXh0KHRydWUpO1xuICAgIGxldCByZXN1bHQ6IENvRG9jdW1lbnQgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxJbnZvaWNlKGVtYWlsSW52b2ljZVJlcXVlc3QpO1xuICAgIGlmIChyZXN1bHQgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBDb0RvY3VtZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ0ludm9pY2UubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbEhpc3RvcmljSW52b2ljZShlbWFpbEhpc3RvcmljSW52b2ljZVJlcXVlc3Q6IEVtYWlsSGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxIaXN0b3JpY0ludm9pY2UoZW1haWxIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZJbnZvaWNlKHBkZkludm9pY2VSZXF1ZXN0OiBQZGZJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdJbnZvaWNlLm5leHQodHJ1ZSk7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZJbnZvaWNlKHBkZkludm9pY2VSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nSW52b2ljZS5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZIaXN0b3JpY0ludm9pY2UocGRmSGlzdG9yaWNJbnZvaWNlUmVxdWVzdDogUGRmSGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmSGlzdG9yaWNJbnZvaWNlKHBkZkhpc3RvcmljSW52b2ljZVJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50SW52b2ljZShwcmludEludm9pY2VSZXF1ZXN0OiBQcmludEludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdJbnZvaWNlLm5leHQodHJ1ZSk7XG4gICAgbGV0IHJlc3VsdDogQ29Eb2N1bWVudCB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludEludm9pY2UocHJpbnRJbnZvaWNlUmVxdWVzdCk7XG4gICAgaWYgKHJlc3VsdCAmJiAhKHJlc3VsdCBpbnN0YW5jZW9mIENvRG9jdW1lbnQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbW1pdEFuZFJlZnJlc2hUcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nSW52b2ljZS5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50SGlzdG9yaWNJbnZvaWNlKHByaW50SGlzdG9yaWNJbnZvaWNlUmVxdWVzdDogUHJpbnRIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludEhpc3RvcmljSW52b2ljZShwcmludEhpc3RvcmljSW52b2ljZVJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEludm9pY2VEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRJbnZvaWNlRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmUG9zUmVjZWlwdChwZGZQb3NSZWNlaXB0UmVxdWVzdDogUGRmUG9zUmVjZWlwdFJlcXVlc3QpOiBQcm9taXNlPFBkZlBvc1JlY2VpcHRSZXNwb25zZT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZQb3NSZWNlaXB0KHBkZlBvc1JlY2VpcHRSZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludFBvc1JlY2VpcHQocHJpbnRQb3NSZWNlaXB0UmVxdWVzdDogUHJpbnRQb3NSZWNlaXB0UmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludFBvc1JlY2VpcHQocHJpbnRQb3NSZWNlaXB0UmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnRIaXN0b3JpY1Bvc1JlY2VpcHQocHJpbnRIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0OiBQcmludEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRIaXN0b3JpY1Bvc1JlY2VpcHQocHJpbnRIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbFBvc1JlY2VpcHQoZW1haWxQb3NSZWNlaXB0UmVxdWVzdDogRW1haWxQb3NSZWNlaXB0UmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbFBvc1JlY2VpcHQoZW1haWxQb3NSZWNlaXB0UmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxIaXN0b3JpY1Bvc1JlY2VpcHQoZW1haWxIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0OiBFbWFpbEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxIaXN0b3JpY1Bvc1JlY2VpcHQoZW1haWxIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQb3NSZWNlaXB0RW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFBvc1JlY2VpcHRFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQb3NSZWNlaXB0UHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFBvc1JlY2VpcHRQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvclBvc1JlY2VpcHQodHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yUG9zUmVjZWlwdCh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEludm9pY2VFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW52b2ljZUVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEludm9pY2VQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW52b2ljZVByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFF1b3RhdGlvbkRlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFF1b3RhdGlvbkRlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVtYWlsUXVvdGF0aW9uKGVtYWlsUXVvdGF0aW9uUmVxdWVzdDogRW1haWxRdW90YXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyUXVvdGF0aW9uLm5leHQodHJ1ZSk7XG4gICAgbGV0IHJlc3VsdDogQ29Eb2N1bWVudCB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbFF1b3RhdGlvbihlbWFpbFF1b3RhdGlvblJlcXVlc3QpO1xuICAgIGlmIChyZXN1bHQgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBDb0RvY3VtZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJRdW90YXRpb24ubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbEhpc3RvcmljUXVvdGF0aW9uKGVtYWlsSGlzdG9yaWNRdW90YXRpb25SZXF1ZXN0OiBFbWFpbEhpc3RvcmljUXVvdGF0aW9uUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxIaXN0b3JpY1F1b3RhdGlvbihlbWFpbEhpc3RvcmljUXVvdGF0aW9uUmVxdWVzdCk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmUXVvdGF0aW9uKHBkZlF1b3RhdGlvblJlcXVlc3Q6IFBkZlF1b3RhdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlclF1b3RhdGlvbi5uZXh0KHRydWUpO1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmUXVvdGF0aW9uKHBkZlF1b3RhdGlvblJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyUXVvdGF0aW9uLm5leHQoZmFsc2UpO1xuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBkZkhpc3RvcmljUXVvdGF0aW9uKHBkZkhpc3RvcmljUXVvdGF0aW9uUmVxdWVzdDogUGRmSGlzdG9yaWNRdW90YXRpb25SZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZIaXN0b3JpY1F1b3RhdGlvbihwZGZIaXN0b3JpY1F1b3RhdGlvblJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50UXVvdGF0aW9uKHByaW50UXVvdGF0aW9uUmVxdWVzdDogUHJpbnRRdW90YXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyUXVvdGF0aW9uLm5leHQodHJ1ZSk7XG4gICAgbGV0IHJlc3VsdDogQ29Eb2N1bWVudCB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludFF1b3RhdGlvbihwcmludFF1b3RhdGlvblJlcXVlc3QpO1xuICAgIGlmIChyZXN1bHQgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBDb0RvY3VtZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJRdW90YXRpb24ubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludEhpc3RvcmljUXVvdGF0aW9uKHByaW50SGlzdG9yaWNRdW90YXRpb25SZXF1ZXN0OiBQcmludEhpc3RvcmljUXVvdGF0aW9uUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRIaXN0b3JpY1F1b3RhdGlvbihwcmludEhpc3RvcmljUXVvdGF0aW9uUmVxdWVzdCk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UXVvdGF0aW9uRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFF1b3RhdGlvbkVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFF1b3RhdGlvblByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRRdW90YXRpb25QcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvclF1b3RhdGlvbih0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JRdW90YXRpb24odHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQYWNrYWdlU3RpY2tlclByaW50TGF5b3V0cygpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UGFja2FnZVN0aWNrZXJQcmludExheW91dHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcmludGVycygpOiBQcm9taXNlPFByaW50ZXJbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQcmludGVycygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlZmF1bHRQcmludGVyKHJlcG9ydElkOiBudW1iZXIsIHR5cGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRQcmludGVyKHJlcG9ydElkLCB0eXBlKTtcbiAgfVxuXG5cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q2FzaFR5cGVzKHR5cGU6IHN0cmluZyk6IFByb21pc2U8Q2FzaFR5cGVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDYXNoVHlwZXModHlwZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UG9zR3JvdXBzKCk6IFByb21pc2U8UG9zR3JvdXBbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQb3NHcm91cHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDdXJyZW5jaWVzKGFjdGl2ZTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPEN1cnJlbmN5W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q3VycmVuY2llcyhhY3RpdmUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFByb2plY3RDb2RlcyhkYXRlOiBEYXRlKTogUHJvbWlzZTxQcm9qZWN0Q29kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFByb2plY3RDb2RlcyhkYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbGxQcm9qZWN0Q29kZXMoKTogUHJvbWlzZTxQcm9qZWN0Q29kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEFsbFByb2plY3RDb2RlcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFByb2plY3RDb2RlKHByb2plY3RDb2RlOiBQcm9qZWN0Q29kZSk6IFByb21pc2U8UHJvamVjdENvZGU+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkUHJvamVjdENvZGUocHJvamVjdENvZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFBheW1lbnRDb25kaXRpb25zKG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPFBheW1lbnRDb25kaXRpb25bXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQYXltZW50Q29uZGl0aW9ucyhuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPcmRlckxpbmVTZXRDYXRlZ29yaWVzKCk6IFByb21pc2U8T3JkZXJMaW5lU2V0Q2F0ZWdvcnlbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRPcmRlckxpbmVTZXRDYXRlZ29yaWVzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVdpemFyZCgpOiBQcm9taXNlPFNlcnZpY2VXaXphcmQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0U2VydmljZVdpemFyZCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwc2VydFNlcnZpY2VXaXphcmQocmVxdWVzdDogU2VydmljZVdpemFyZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci51cHNlcnRTZXJ2aWNlV2l6YXJkKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VUeXBlcygpOiBQcm9taXNlPFNlcnZpY2VUeXBlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0U2VydmljZVR5cGVzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkT3JkZXJMaW5lU2V0KHJlcXVlc3Q6IFRyYW5zYWN0aW9uQWRkT3JkZXJMaW5lU2V0VGV4dExpbmVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFkZE9yZGVyTGluZVNldChyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZU9yZGVyTGluZVNldChyZXF1ZXN0OiBPcmRlckxpbmVTZXREVE8pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgYXdhaXQgdGhpcy5jb25uZWN0b3IudXBkYXRlT3JkZXJMaW5lU2V0KHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lT3JkZXJMaW5lU2V0KHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVPcmRlckxpbmVTZXQodXVpZCwgbGluZVV1aWQsIGNvZGUpO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEpvaW5lZFRhZ3ModGFibGU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBQcm9taXNlPFRhZ1RyZWVJdGVtW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Sm9pbmVkVGFncyh0YWJsZSwga2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtZXJnZUpvaW5lZFRhZ3ModGFibGU6IHN0cmluZywga2V5OiBzdHJpbmcsIHRhZ3M6IFRhZ1RyZWVJdGVtW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IubWVyZ2VKb2luZWRUYWdzKHRhYmxlLCBrZXksIHRhZ3MpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRhZ3NGdWxsVHJlZShjYXRlZ29yeTogVGFnQ2F0ZWdvcnksIGluY2x1ZGVUYWdzOiBib29sZWFuKTogUHJvbWlzZTxUYWdUcmVlSXRlbVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRhZ3NGdWxsVHJlZShjYXRlZ29yeSwgaW5jbHVkZVRhZ3MpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEludGVybmFsUGFyYW1ldGVyKHBhcmFtOiBJbnRlcm5hbFBhcmFtKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IHN0cmluZyA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEludGVybmFsUGFyYW1ldGVyVmFsdWUocGFyYW0pO1xuICAgIHJldHVybiByZXNwb25zZSAmJiByZXNwb25zZSA9PT0gJ0onO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE9iamVjdENvbmZpZ3VyYXRpb24oc2NyZWVuQ2ZnTW9kdWxlOiBzdHJpbmcsIHBhcmFtcz86IHN0cmluZyB8IHN0cmluZ1tdLCBpbnNlcnRNb2RlPzogYm9vbGVhbik6IFByb21pc2U8T2JqZWN0Q29uZmlndXJhdGlvbltdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9iamVjdENvbmZpZ3VyYXRpb24oc2NyZWVuQ2ZnTW9kdWxlLCBwYXJhbXMsIGluc2VydE1vZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEhpc3RvcmljRG9jdW1lbnRzKHRyYW5zSWQ6IG51bWJlciwgZG9jdW1lbnRDb2RlOiBMYXlvdXRDb2RlKTogUHJvbWlzZTxIaXN0b3JpY1JlcG9ydFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEhpc3RvcmljRG9jdW1lbnRzKHRyYW5zSWQsIGRvY3VtZW50Q29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVwb3J0SGVhZGVyc0J5VHJhbnNJZEFuZExheW91dENvZGUodHJhbnNJZDogbnVtYmVyLCBkb2N1bWVudENvZGU6IExheW91dENvZGUpOiBQcm9taXNlPEhpc3RvcmljUmVwb3J0W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UmVwb3J0SGVhZGVyc0J5VHJhbnNJZEFuZExheW91dENvZGUodHJhbnNJZCwgZG9jdW1lbnRDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1bmRvRGVsaXZlcnlCeVJlcG9ydElkKHJlcG9ydElkOiBudW1iZXIpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnVuZG9EZWxpdmVyeUJ5UmVwb3J0SWQocmVwb3J0SWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yUHVyY2hhc2VPcmRlcih1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yUHVyY2hhc2VPcmRlcih1dWlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVSZWNlaXZlU2VsZWN0ZWRQdXJjaGFzZU9yZGVycyhkYXRlOiBEYXRlLCBwYWNraW5nU2xpcE5yOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzZWxlY3RlZExpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZS5zZWxlY3RlZCk7XG4gICAgaWYgKHNlbGVjdGVkTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZWRHb29kc1JlcXVlc3Q6IFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJSZXF1ZXN0ID0gbmV3IFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJSZXF1ZXN0KCk7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC50cmFuc0lkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucmVjZWl2ZWREYXRlID0gZGF0ZTtcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnBhY2tpbmdTbGlwTnIgPSBwYWNraW5nU2xpcE5yO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucHJpbnRlck5hbWUgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucHJpbnRlck5hbWU7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC5yZXBvcnRJZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZXBvcnRJZDtcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnNhdmVEZWZhdWx0UHJpbnRlckZvckFsbFVzZXJzID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnNhdmVEZWZhdWx0UHJpbnRlckZvckFsbFVzZXJzO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3Quc2F2ZURlZmF1bHRQcmludGVyRm9yVXNlciA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5zYXZlRGVmYXVsdFByaW50ZXJGb3JVc2VyO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucHVyY2hhc2VPcmRlckxpbmVSZWNlaXB0RGV0YWlsc0RUT1MgPSBbXTtcbiAgICAgIHNlbGVjdGVkTGluZXMuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICBjb25zdCBkZXRhaWw6IFB1cmNoYXNlT3JkZXJMaW5lUmVjZWlwdERldGFpbHMgPSBuZXcgUHVyY2hhc2VPcmRlckxpbmVSZWNlaXB0RGV0YWlscygpO1xuICAgICAgICBkZXRhaWwubGluZU5yID0gbGluZS5saW5lTnI7XG4gICAgICAgIGRldGFpbC5xdWFudGl0eVRvUmVjZWl2ZSA9IGxpbmUuYXJ0aWNsZUxpbmVTdGF0dXMucXVhbnRpdHlUb1JlY2VpdmU7XG4gICAgICAgIGRldGFpbC53YXJlaG91c2VOciA9IGxpbmUud2FyZWhvdXNlTnVtYmVyO1xuICAgICAgICBkZXRhaWwubG9jYXRpb25OciA9IGxpbmUubG9jYXRpb25OcjtcbiAgICAgICAgZGV0YWlsLmJhdGNoTnIgPSBsaW5lLmJhdGNoTnI7XG4gICAgICAgIGRldGFpbC5udW1iZXJPZlN0aWNrZXJzID0gbGluZS5zdGlja2VyQW1vdW50O1xuICAgICAgICBkZXRhaWwucHJpbnRlck5hbWUgPSBsaW5lLnByaW50ZXJOYW1lO1xuICAgICAgICBkZXRhaWwucmVwb3J0SWQgPSBsaW5lLnJlcG9ydElkO1xuICAgICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC5wdXJjaGFzZU9yZGVyTGluZVJlY2VpcHREZXRhaWxzRFRPUy5wdXNoKGRldGFpbCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLnJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXIoXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24sIHJlY2VpdmVkR29vZHNSZXF1ZXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZUFsbG9jYXRlU2VsZWN0ZWRQdXJjaGFzZU9yZGVycygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzZWxlY3RlZExpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZS5zZWxlY3RlZCk7XG4gICAgaWYgKHNlbGVjdGVkTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWxsb2NhdGVHb29kc1JlcXVlc3Q6IEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyUmVxdWVzdCA9IG5ldyBBbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlclJlcXVlc3QoKTtcbiAgICAgIGFsbG9jYXRlR29vZHNSZXF1ZXN0LnRyYW5zSWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQ7XG4gICAgICBhbGxvY2F0ZUdvb2RzUmVxdWVzdC5zYWxlc09yZGVyTGluZUFsbG9jYXRpb25EZXRhaWxzRFRPUyA9IFtdO1xuICAgICAgc2VsZWN0ZWRMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGFpbDogU2FsZXNPcmRlckxpbmVBbGxvY2F0aW9uRGV0YWlscyA9IG5ldyBTYWxlc09yZGVyTGluZUFsbG9jYXRpb25EZXRhaWxzKCk7XG4gICAgICAgIGRldGFpbC5saW5lTnIgPSBsaW5lLmxpbmVOcjtcbiAgICAgICAgZGV0YWlsLnF1YW50aXR5VG9BbGxvY2F0ZSA9IGxpbmUucXVhbnRpdHlUb0FsbG9jYXRlO1xuICAgICAgICBkZXRhaWwud2FyZWhvdXNlTnIgPSBsaW5lLndhcmVob3VzZU51bWJlcjtcbiAgICAgICAgZGV0YWlsLmxvY2F0aW9uTnIgPSBsaW5lLmxvY2F0aW9uTnI7XG4gICAgICAgIGFsbG9jYXRlR29vZHNSZXF1ZXN0LnNhbGVzT3JkZXJMaW5lQWxsb2NhdGlvbkRldGFpbHNEVE9TLnB1c2goZGV0YWlsKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuYWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXIoXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24sIGFsbG9jYXRlR29vZHNSZXF1ZXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZVNldFNlbGVjdGVkTGluZXNUb0JlUGlja2VkKHBpY2tpbmdEYXRlOiBEYXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUuc2VsZWN0ZWQgJiYgbGluZS5xdWFudGl0eVRvQmVQaWNrZWQgPiAwKTtcbiAgICBpZiAoc2VsZWN0ZWRMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBnb29kc1RvQmVQaWNrZWRSZXF1ZXN0OiBHb29kc1RvQmVQaWNrZWRGb3JPcmRlclJlcXVlc3QgPSBuZXcgR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0KCk7XG4gICAgICBnb29kc1RvQmVQaWNrZWRSZXF1ZXN0LnRyYW5zSWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQ7XG4gICAgICBnb29kc1RvQmVQaWNrZWRSZXF1ZXN0LnRvQmVQaWNrZWREYXRlID0gcGlja2luZ0RhdGU7XG4gICAgICBnb29kc1RvQmVQaWNrZWRSZXF1ZXN0LmxpbmVzID0gW107XG4gICAgICBzZWxlY3RlZExpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgY29uc3QgZGV0YWlsOiBHb29kc1RvQmVQaWNrZWRGb3JPcmRlclJlcXVlc3RMaW5lID0gbmV3IEdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdExpbmUoKTtcbiAgICAgICAgZGV0YWlsLmxpbmVOciA9IGxpbmUubGluZU5yO1xuICAgICAgICBkZXRhaWwucXVhbnRpdHkgPSBsaW5lLnF1YW50aXR5VG9CZVBpY2tlZDtcbiAgICAgICAgZ29vZHNUb0JlUGlja2VkUmVxdWVzdC5saW5lcy5wdXNoKGRldGFpbCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0R29vZHNUb0JlUGlja2VkRm9yU2FsZXNPcmRlcihcbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbiwgZ29vZHNUb0JlUGlja2VkUmVxdWVzdCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZVNldFNlbGVjdGVkTGluZXNUb1BpY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUuc2VsZWN0ZWQgJiYgbGluZS5xdWFudGl0eVBpY2tlZCA+IDApO1xuICAgIGlmIChzZWxlY3RlZExpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGdvb2RzUGlja2VkUmVxdWVzdDogR29vZHNQaWNrZWRSZXF1ZXN0ID0gbmV3IEdvb2RzUGlja2VkUmVxdWVzdCgpO1xuICAgICAgZ29vZHNQaWNrZWRSZXF1ZXN0LnRyYW5zSWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQ7XG4gICAgICBnb29kc1BpY2tlZFJlcXVlc3QubGluZXMgPSBbXTtcbiAgICAgIHNlbGVjdGVkTGluZXMuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICBjb25zdCBkZXRhaWw6IEdvb2RzUGlja2VkUmVxdWVzdExpbmUgPSBuZXcgR29vZHNQaWNrZWRSZXF1ZXN0TGluZSgpO1xuICAgICAgICBkZXRhaWwubGluZU5yID0gbGluZS5saW5lTnI7XG4gICAgICAgIGRldGFpbC5xdWFudGl0eSA9IGxpbmUucXVhbnRpdHlQaWNrZWQ7XG4gICAgICAgIGdvb2RzUGlja2VkUmVxdWVzdC5saW5lcy5wdXNoKGRldGFpbCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0R29vZHNQaWNrZWRGb3JPcmRlcihcbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbiwgZ29vZHNQaWNrZWRSZXF1ZXN0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UHVyY2hhc2VPcmRlckZvclRyYW5zYWN0aW9uTGluZSh0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9IaXN0b3J5W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvbkluZm8odHJhbnNJZCwgbGluZU5yKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrQnJhbmNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50QnJhbmNoKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogRGlhbG9nUmVzcG9uc2VJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0JyYW5jaCgpO1xuICAgICAgaWYgKHJlc3BvbnNlLmJ1dHRvbiAhPT0gQXBwUG9wdXBCdXR0b25UeXBlLkNhbmNlbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRCcmFuY2ggPSByZXNwb25zZS5vdXRwdXQgPyByZXNwb25zZS5vdXRwdXQudG9TdHJpbmcoKSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25NYXJnaW5JbmZvKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbk1hcmdpbkluZm8+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25NYXJnaW5JbmZvKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnRTYWxlc09yZGVyc092ZXJ2aWV3KHJlcXVlc3Q6IFRyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3QpOiBQcm9taXNlPFBkZlRyYW5zYWN0aW9uU2VhcmNoT3ZlcnZpZXdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5wcmludFNhbGVzT3JkZXJzT3ZlcnZpZXcocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZERvY3VtZW50c09mVHJhbnNhY3Rpb24oa2V5OiBzdHJpbmcpOiBQcm9taXNlPENvRG9jdW1lbnRbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5sb2FkRG9jdW1lbnRzT2ZUcmFuc2FjdGlvbihrZXkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWREb2N1bWVudENvbnRlbnQoZG9jSWQ6IG51bWJlciwgdGh1bWJuYWlsOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmxvYWREb2N1bWVudENvbnRlbnQoZG9jSWQsIHRodW1ibmFpbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbWVyZ2VEb2N1bWVudE9uVHJhbnNhY3Rpb24oa2V5OiBzdHJpbmcsIGRvY3VtZW50OiBDb0RvY3VtZW50KTogUHJvbWlzZTxDb0RvY3VtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLm1lcmdlRG9jdW1lbnRPblRyYW5zYWN0aW9uKGtleSwgZG9jdW1lbnQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZURvY3VtZW50KGRvY3VtZW50SWQ6IG51bWJlcik6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5kZWxldGVEb2N1bWVudChkb2N1bWVudElkKTtcbiAgfVxuXG4gIC8qICBwdWJsaWMgbG9ja0RvY3VtZW50KGRvY3VtZW50SWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmxvY2tEb2N1bWVudChDb0RvY3VtZW50LCBkb2N1bWVudElkKTtcbiAgICB9Ki9cblxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJMaW5lc1BsYW5uZWQocmVxdWVzdDogT3JkZXJMaW5lc1BsYW5uZWRSZXF1ZXN0KTogUHJvbWlzZTxQbGFuT3JkZXJMaW5lW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0T3JkZXJMaW5lc1BsYW5uZWQocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UGxhbk9yZGVyKHRyYW5zSWQ6IG51bWJlcik6IFByb21pc2U8UGxhbk9yZGVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFBsYW5PcmRlcih0cmFuc0lkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQYWNrYWdlSW5mb3JtYXRpb24odHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcsIGxpbmVVVUlEOiBzdHJpbmcpOiBQcm9taXNlPFBhY2thZ2VMU1BbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRQYWNrYWdlSW5mb3JtYXRpb24odHJhbnNhY3Rpb25VVUlELCBsaW5lVVVJRCk7XG4gIH1cbiAgcHVibGljIGFzeW5jIGluc2VydEFjdGl2aXR5KGFjdGl2aXR5OiBBY3Rpdml0eSk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5pbnNlcnRBY3Rpdml0eShhY3Rpdml0eSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlQWN0aXZpdHkoYWN0aXZpdHk6IEFjdGl2aXR5KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnVwZGF0ZUFjdGl2aXR5KGFjdGl2aXR5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZGVsZXRlQWN0aXZpdHkoYWN0aXZpdHkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFjdGl2aXRpZXNGb3JUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPEFjdGl2aXR5W10+IHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpdml0aWVzOiBBY3Rpdml0eVtdID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q29tcG9uZW50QWN0aXZpdGllc1dpdGhvdXRSZWxhdGlvbkZpbHRlcmluZyh0cmFuc2FjdGlvbklkKTtcbiAgICBjb25zdCBoaXN0b3JpY0FjdGl2aXRpZXM6IEFjdGl2aXR5W10gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRIaXN0b3JpY0FjdGl2aXRpZXModHJhbnNhY3Rpb25JZCk7XG4gICAgaWYgKGFjdGl2ZUFjdGl2aXRpZXMgJiYgYWN0aXZlQWN0aXZpdGllcy5sZW5ndGggIT09IDAgJiYgaGlzdG9yaWNBY3Rpdml0aWVzICYmIGhpc3RvcmljQWN0aXZpdGllcy5sZW5ndGggIT09IDApIHtcbiAgICAgIHJldHVybiBhY3RpdmVBY3Rpdml0aWVzLmNvbmNhdChoaXN0b3JpY0FjdGl2aXRpZXMpO1xuICAgIH0gZWxzZSBpZiAoYWN0aXZlQWN0aXZpdGllcyAmJiBhY3RpdmVBY3Rpdml0aWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGFjdGl2ZUFjdGl2aXRpZXM7XG4gICAgfSBlbHNlIGlmIChoaXN0b3JpY0FjdGl2aXRpZXMgJiYgaGlzdG9yaWNBY3Rpdml0aWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGhpc3RvcmljQWN0aXZpdGllcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEhpc3RvcmljQWN0aXZpdGllcyh0cmFuc2FjdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPEFjdGl2aXR5W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SGlzdG9yaWNBY3Rpdml0aWVzKHRyYW5zYWN0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENvbXBvbmVudEFjdGl2aXRpZXNXaXRob3V0UmVsYXRpb25GaWx0ZXJpbmcodHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTxBY3Rpdml0eVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldENvbXBvbmVudEFjdGl2aXRpZXNXaXRob3V0UmVsYXRpb25GaWx0ZXJpbmcodHJhbnNhY3Rpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmlyZVRyaWdnZXIod29ya0Zsb3dQcm9jZXNzSWQ6IG51bWJlciwgc2VxdWVuY2U6IG51bWJlciwgdHJpZ2dlcklkOiBudW1iZXIpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZmlyZVRyaWdnZXIod29ya0Zsb3dQcm9jZXNzSWQsIHNlcXVlbmNlLCB0cmlnZ2VySWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpcmVHZW5lcmljVHJpZ2dlcih3b3JrRmxvd1Byb2Nlc3NJZDogbnVtYmVyLCBnZW5lcmljVHJhbnNpdGlvbklkOiBudW1iZXIsIHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5maXJlR2VuZXJpY1RyaWdnZXIod29ya0Zsb3dQcm9jZXNzSWQsIGdlbmVyaWNUcmFuc2l0aW9uSWQsIHJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvY2tUYXNrKGlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IubG9ja1Rhc2soaWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldExpbmVJbmRpY2VzQnlUcmFuc0lkKHRyYW5zSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25MaW5lU2VhcmNoSW5kZXhbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRMaW5lSW5kaWNlc0J5VHJhbnNJZCh0cmFuc0lkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb252ZXJ0Q2FzaFJlZ2lzdGVyT3JkZXJUb1NhbGVzT3JkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogRGlhbG9nUmVzcG9uc2VJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1llc05vKFxuICAgICAgICAnQ09OVkVSVF9DQVNIX1JFR0lTVEVSX09SREVSX1RPX1NBTEVTT1JERVJfSEVBRCcsXG4gICAgICAgICdDT05WRVJUX0NBU0hfUkVHSVNURVJfT1JERVJfVE9fU0FMRVNPUkRFUl9RVUVTVElPTicpO1xuICAgICAgY29uc3Qgc2hvdWxkQ29udmVydDogYm9vbGVhbiA9IHJlc3BvbnNlLmJ1dHRvbiA9PT0gQXBwUG9wdXBCdXR0b25UeXBlLlllcztcbiAgICAgIGlmIChzaG91bGRDb252ZXJ0KSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNvbnZlcnRDYXNoUmVnaXN0ZXJPcmRlclRvU2FsZXNPcmRlcih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCk7XG4gICAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgZmFsc2UpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIC8vIHJldHVybiByZXNwb25zZS50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25OcjtcbiAgICAgICAgICB0aGlzLnNhdmVUcmFuc2FjdGlvbkFuZENvbW1pdCgpLnRoZW4oc2F2ZWQgPT4ge1xuICAgICAgICAgICAgaWYgKHNhdmVkKSB7XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UuY3JlYXRlZFNhbGVzT3JkZXJGcm9tQ2FzaFJlZ2lzdGVyT3JkZXIubmV4dChyZXNwb25zZS50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25Ocik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVwcmludENhc2hSZWdpc3RlclJlY2VpcHQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dSZXByaW50Q2FzaFJlZ2lzdGVyUmVjZWlwdFBvcHVwKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldERhdGFGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lKCkge1xuICAgIHRoaXMuX3RyYW5zRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZSA9IG51bGw7XG4gICAgdGhpcy5fbGluZU5yRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZSA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2FsZXNPcmRlckxpbmVzKHJlcXVlc3Q6IE9yZGVyUmVzZXJ2YXRpb25TYWxlc09yZGVyTGluZXNSZXF1ZXN0KTogUHJvbWlzZTxQdXJjaGFzZVJlc2VydmF0aW9uW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0U2FsZXNPcmRlckxpbmVzKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByb2Nlc3NSZXNlcnZhdGlvbihyZXF1ZXN0OiBQcm9jZXNzT3JkZXJSZXNlcnZhdGlvblJlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnByb2Nlc3NSZXNlcnZhdGlvbihyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1bmRvUmVzZXJ2YXRpb24odHJhbnNJZDogbnVtYmVyLCBsaW5lSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci51bmRvUmVzZXJ2YXRpb24odHJhbnNJZCwgbGluZUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTTEFDYXRlZ29yaWVzKCk6IFByb21pc2U8U0xBUHJvZHVjdFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNMQUNhdGVnb3JpZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTTEFQcm9kdWN0cygpOiBQcm9taXNlPFNMQVByb2R1Y3RbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTTEFQcm9kdWN0cygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRlcm1zQW5kQ29uZGl0aW9uc0Zvcm0odHJhbnNJZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRlcm1zQW5kQ29uZGl0aW9uc0Zvcm0odHJhbnNJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25QbGFuUGVyaW9kcyh0cmFuc0lkOiBudW1iZXIpOiBQcm9taXNlPFBsYW5UaW1lc1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uUGxhblBlcmlvZHModHJhbnNJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U3VwcGxpZXJQcm9kdWN0cyh0cmFuc0lkOiBudW1iZXIpOiBQcm9taXNlPFN1cHBsaWVyUHJvZHVjdFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFN1cHBsaWVyUHJvZHVjdHModHJhbnNJZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgX2hhbmRsZUJlZm9yZVJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJlcGFyZU1hbnVhbFNhdmVJbnRlcm5hbFBhcmFtKCk7XG4gICAgdGhpcy5wcmVwYXJlTUxvY2F0SW50ZXJuYWxQYXJhbSgpO1xuICAgIHRoaXMucHJlcGFyZVBha0Jpbm5lbkludGVybmFsUGFyYW0oKTtcbiAgICB0aGlzLnByZXBhcmVEcm9wU2hpcG1lbnRJbnRlcm5hbFBhcmFtKCk7XG4gICAgdGhpcy5wcmVwYXJlUmVjZWl2ZUdvb2RzV2l0aERhdGFUZXJtaW5hbEludGVybmFsUGFyYW0oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBfaGFuZGxlQWZ0ZXJSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJlbWFpbmluZ0Ftb3VudCA9IDA7XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0FuZFNhdmVMaW5lc0ZvckFJQ29uZmlybWF0aW9uKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgYW5hbHlzaXNJZDogbnVtYmVyLCBsaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRyYW5zYWN0aW9uSWQgJiYgYW5hbHlzaXNJZCAmJiBsaW5lcyAmJiBsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZExpbmVzRm9yQUk6IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9IGxpbmVzLmZpbHRlcihsID0+IGwubGlua2VkQW5hbHlzaXNSZXN1bHRJZCAhPT0gbnVsbCAmJiBsLmxpbmtlZEFuYWx5c2lzUmVzdWx0SWQgIT09IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBvcmRlckNvbmZpcm1hdGlvblRyYW5zYWN0aW9uTGlua3M6IE9yZGVyQ29uZmlybWF0aW9uVHJhbnNhY3Rpb25MaW5rW10gPSBbXTtcbiAgICAgIHNlbGVjdGVkTGluZXNGb3JBSS5mb3JFYWNoKGwgPT4ge1xuICAgICAgICBjb25zdCBvcmRlckNvbmZpcm1hdGlvblRyYW5zYWN0aW9uTGluazogT3JkZXJDb25maXJtYXRpb25UcmFuc2FjdGlvbkxpbmsgPSBuZXcgT3JkZXJDb25maXJtYXRpb25UcmFuc2FjdGlvbkxpbmsoKTtcbiAgICAgICAgb3JkZXJDb25maXJtYXRpb25UcmFuc2FjdGlvbkxpbmsudHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSWQ7XG4gICAgICAgIG9yZGVyQ29uZmlybWF0aW9uVHJhbnNhY3Rpb25MaW5rLnRyYW5zYWN0aW9uTGluZU51bWJlciA9IGwubGluZU5yO1xuICAgICAgICBvcmRlckNvbmZpcm1hdGlvblRyYW5zYWN0aW9uTGluay5vcmRlckNvbmZpcm1hdGlvbkFuYWx5c2lzUmVzdWx0SWQgPSBsLmxpbmtlZEFuYWx5c2lzUmVzdWx0SWQ7XG4gICAgICAgIG9yZGVyQ29uZmlybWF0aW9uVHJhbnNhY3Rpb25MaW5rcy5wdXNoKG9yZGVyQ29uZmlybWF0aW9uVHJhbnNhY3Rpb25MaW5rKTtcbiAgICAgIH0pXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubGlua1RyYW5zYWN0aW9uVG9PcmRlckNvbmZpcm1hdGlvbihhbmFseXNpc0lkLCBvcmRlckNvbmZpcm1hdGlvblRyYW5zYWN0aW9uTGlua3MpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY2hlY2tBbmRBZGRSZWxhdGlvblRyYW5zYWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5yZWxhdGlvbiAmJiAhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYXZlUmVsYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gfHwgIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mbyB8fCAhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uTnIpIHtcbiAgICAgIGNvbnN0IGNyZWF0ZU1ldGhvZDogQ3JlYXRlVHJhbnNhY3Rpb25GbiA9IHRoaXMuX2NyZWF0ZVRyYW5zYWN0aW9uTWV0aG9kcy5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQgfHwgVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIpO1xuICAgICAgaWYgKGNyZWF0ZU1ldGhvZCkge1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBDcmVhdGVUcmFuc2FjdGlvblJlcXVlc3QgPSBuZXcgQ3JlYXRlVHJhbnNhY3Rpb25SZXF1ZXN0KCk7XG4gICAgICAgIHJldHVybiBhd2FpdCBjcmVhdGVNZXRob2QocmVxdWVzdClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIHRyYW5zYWN0aW9uXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
2491
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RyYW5zYWN0aW9uL3NyYy9saWIvc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQXFCcEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsbUNBQW1DLEVBQ3BDLE1BQU0sa0ZBQWtGLENBQUM7QUFlMUYsT0FBTyxFQUNMLGlDQUFpQyxFQUNsQyxNQUFNLDZFQUE2RSxDQUFDO0FBV3JGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUMxRixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUN6RyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0RBQW9ELENBQUM7QUFPaEYsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFLL0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDckYsT0FBTyxFQUNMLCtCQUErQixFQUNoQyxNQUFNLDZFQUE2RSxDQUFDO0FBQ3JGLE9BQU8sRUFDTCwrQkFBK0IsRUFDaEMsTUFBTSwwRUFBMEUsQ0FBQztBQVdsRixPQUFPLEVBQ0wsOEJBQThCLEVBQy9CLE1BQU0sMkVBQTJFLENBQUM7QUFDbkYsT0FBTyxFQUNMLGtDQUFrQyxFQUNuQyxNQUFNLGdGQUFnRixDQUFDO0FBMEJ4RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDckUsT0FBTyxFQUFD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SSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQzVCO1FBQ0gsQ0FBQztLQUFBO0lBRWEsMEJBQTBCOztZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFO2dCQUNsSSxNQUFNLFlBQVksR0FBd0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDakksSUFBSSxZQUFZLEVBQUU7b0JBQ2hCLE1BQU0sT0FBTyxHQUE2QixJQUFJLHdCQUF3QixFQUFFLENBQUM7b0JBQ3pFLE9BQU8sTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDO3lCQUMvQixJQUFJLENBQUMsR0FBRyxFQUFFO3dCQUNULE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUMsQ0FBQzt5QkFDRCxLQUFLLENBQUMsR0FBRyxFQUFFO3dCQUNWLE9BQU8sS0FBSyxDQUFDO29CQUNmLENBQUMsQ0FBQyxDQUFBO2lCQUNMO3FCQUFNO29CQUNMLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2lCQUM1QzthQUNGO2lCQUFNO2dCQUNMLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5QjtRQUNILENBQUM7S0FBQTs7OztZQXZ1RUYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlzY291bnRUeXBlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9kaXNjb3VudC10eXBlLmVudW0nO1xuaW1wb3J0IHtTZXF1ZW5jZU5hbWV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3NlcXVlbmNlLW5hbWUuZW51bSc7XG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1mdWxsLW9iamVjdCc7XG5pbXBvcnQge0Nhc2hSZWdpc3Rlcn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Nhc2gtcmVnaXN0ZXInO1xuaW1wb3J0IHtDYXNoT25EZWxpdmVyeURhdGF9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jYXNoLW9uLWRlbGl2ZXJ5LWRhdGEnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlSGVhZGVyQ2FzaE9uRGVsaXZlcnlBbW91bnRSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jaGFuZ2UtaGVhZGVyLWNhc2gtb24tZGVsaXZlcnktYW1vdW50LXJlcXVlc3QnO1xuaW1wb3J0IHtDb2RlRGVzY3JpcHRpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb2RlLWRlc2NyaXB0aW9uJztcbmltcG9ydCB7Q291bnRyeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NvdW50cnkuYm8nO1xuaW1wb3J0IHtDdXN0b21lckdyb3VwfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3VzdG9tZXItZ3JvdXAuYm8nO1xuaW1wb3J0IHtEZWxpdmVyeU1ldGhvZH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGl2ZXJ5LW1ldGhvZC5ibyc7XG5pbXBvcnQge0RlbGl2ZXJ5T3B0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktb3B0aW9uLmJvJztcbmltcG9ydCB7TWFya2V0aW5nfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbWFya2V0aW5nLmJvJztcbmltcG9ydCB7T25Ib2xkQ29kZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL29uLWhvbGQtY29kZS5ibyc7XG5pbXBvcnQge1ByaWNlTGlzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaWNlLWxpc3QnO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2V9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1hcnRpY2xlLXdhcmVob3VzZS5ibyc7XG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ibyc7XG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZUluZm99IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1saW5lLWluZm8uYm8nO1xuaW1wb3J0IHtWYWxpZGF0aW9uUmVzdWx0fSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC92YWxpZGF0aW9uLXJlc3VsdCc7XG5pbXBvcnQge1ZhdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ZhdCc7XG5pbXBvcnQge1dhcmVob3VzZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3dhcmVob3VzZS5ibyc7XG5pbXBvcnQge3Rocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtTdGFuZGFyZFRleHR9IGZyb20gJy4uL21vZGVsL3N0YW5kYXJkLXRleHQnO1xuaW1wb3J0IHtQZW5kaW5nUmVhc29uU2VydmljZX0gZnJvbSAnLi9wZW5kaW5nLXJlYXNvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWNlaXZlLWdvb2RzLWZvci1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0LmJvJztcbmltcG9ydCB7XG4gIFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVjZWl2ZS1nb29kcy1mb3ItcHVyY2hhc2Utb3JkZXItY29ycmVjdGlvbi1yZXF1ZXN0LmJvJztcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC1yZXF1ZXN0JztcbmltcG9ydCB7QXJ0aWNsZUxpZ2h0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWxpZ2h0LmJvJztcbmltcG9ydCB7VHVybm92ZXJHcm91cEltYWdlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC90dXJub3Zlci1ncm91cC1pbWFnZS5ibyc7XG5pbXBvcnQge01haW5BcnRpY2xlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9tYWluLWFydGljbGUuYm8nO1xuaW1wb3J0IHtQdXJjaGFzZVBvcnRhbExpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wdXJjaGFzZS1wb3J0YWwtbGluZS5ibyc7XG5pbXBvcnQge0dldFB1cmNoYXNlT3JkZXJDb25maXJtYXRpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nZXQtcHVyY2hhc2Utb3JkZXItY29uZmlybWF0aW9uJztcbmltcG9ydCB7VGFnfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC90YWcnO1xuaW1wb3J0IHtDb0RvbWFpblZhbHVlfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm8nO1xuaW1wb3J0IHtSZWxhdGlvblByaXZhY3lTZXR0aW5nfSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcHJpdmFjeS1zZXR0aW5nLmJvJztcbmltcG9ydCB7U2FsZXNQZXJzb259IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9zYWxlcy1wZXJzb24uYm8nO1xuaW1wb3J0IHtBdmFpbGFibGVTdG9ja30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2F2YWlsYWJsZS1zdG9jay5ibyc7XG5pbXBvcnQge1xuICBBbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlclJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FsbG9jYXRlLWdvb2RzLWZvci1zYWxlcy1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvblJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FsbG9jYXRlLWdvb2RzLWZvci1zYWxlcy1vcmRlci1jb3JyZWN0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcmVwb3J0LWxheW91dC1zZWxlY3Rpb24tZW1haWwuYm8nO1xuaW1wb3J0IHtSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcmVwb3J0LWxheW91dC1zZWxlY3Rpb24tcHJpbnQuYm8nO1xuaW1wb3J0IHtDcmVhdGVTYWxlc09yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1zYWxlcy1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7Q3JlYXRlQ2FzaFJlZ2lzdGVyT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLWNhc2gtcmVnaXN0ZXItb3JkZXItcmVxdWVzdCc7XG5pbXBvcnQge0NyZWF0ZVB1cmNoYXNlT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXB1cmNoYXNlLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtDcmVhdGVTZXJ2aWNlT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXNlcnZpY2Utb3JkZXItcmVxdWVzdCc7XG5pbXBvcnQge0NyZWF0ZVNhbGVzUXVvdGF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1zYWxlcy1xdW90YXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge1RyYW5zYWN0aW9uS2luZH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24ta2luZC5lbnVtJztcbmltcG9ydCB7Q3JlYXRlVHJhbnNhY3Rpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXRyYW5zYWN0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtSZWxhdGlvbktpbmR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2VudW0vcmVsYXRpb24ta2luZC5lbnVtJztcbmltcG9ydCB7UHVyY2hhc2VBZHZpY2VMaW5lfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHVyY2hhc2UtYWR2aWNlLWxpbmUuYm8nO1xuaW1wb3J0IHtQdXJjaGFzZUFkdmljZUZpbHRlcnN9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wdXJjaGFzZS1hZHZpY2UtZmlsdGVycyc7XG5pbXBvcnQge0VtYWlsRGVsaXZlcnlOb3RlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLWRlbGl2ZXJ5LW5vdGUtcmVxdWVzdCc7XG5pbXBvcnQge1BkZkRlbGl2ZXJ5Tm90ZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcbmltcG9ydCB7UHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcbmltcG9ydCB7UHJpbnREZWxpdmVyeU5vdGVzUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LWRlbGl2ZXJ5LW5vdGVzLXJlcXVlc3QnO1xuaW1wb3J0IHtUcmFuc2FjdGlvblR5cGVDYXRlZ29yeX0gZnJvbSAnLi4vZW51bS90cmFuc2FjdGlvbi10eXBlLWNhdGVnb3J5LmVudW0nO1xuaW1wb3J0IHtFbWFpbEludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtaW52b2ljZS1yZXF1ZXN0JztcbmltcG9ydCB7UGRmSW52b2ljZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtaW52b2ljZS1yZXF1ZXN0JztcbmltcG9ydCB7UHJpbnRJbnZvaWNlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LWludm9pY2UtcmVxdWVzdCc7XG5pbXBvcnQge0RpYWxvZ1Jlc3BvbnNlSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2UvZGlhbG9nLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQge0FwcFBvcHVwQnV0dG9uVHlwZX0gZnJvbSAnLi4vY29tcG9uZW50L2NvcmUvZW51bS9hcHAtcG9wdXAtYnV0dG9uLXR5cGUuZW51bSc7XG5pbXBvcnQge1xuICBQdXJjaGFzZU9yZGVyTGluZVJlY2VpcHREZXRhaWxzXG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wdXJjaGFzZS1vcmRlci1saW5lLXJlY2VpcHQtZGV0YWlscy5ibyc7XG5pbXBvcnQge1xuICBTYWxlc09yZGVyTGluZUFsbG9jYXRpb25EZXRhaWxzXG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9zYWxlcy1vcmRlci1saW5lLWFsbG9jYXRpb24tZGV0YWlscyc7XG5pbXBvcnQge1RhZ1RyZWVJdGVtfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC90YWctdHJlZS1pdGVtLmJvJztcbmltcG9ydCB7SW50ZXJuYWxQYXJhbX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS9pbnRlcm5hbC1wYXJhbS5lbnVtJztcbmltcG9ydCB7R29vZHNSZWNlaXB0SGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLXJlY2VpcHQtaGlzdG9yeS5ibyc7XG5pbXBvcnQge0dvb2RzQWxsb2NhdGlvbkhpc3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy1hbGxvY2F0aW9uLWhpc3RvcnkuYm8nO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9IaXN0b3J5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1oaXN0b3J5LmJvJztcbmltcG9ydCB7TGF5b3V0Q29kZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vbGF5b3V0LWNvZGUuZW51bSc7XG5pbXBvcnQge0hpc3RvcmljUmVwb3J0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvaGlzdG9yaWMtcmVwb3J0LmJvJztcbmltcG9ydCB7UHJpbnRlcn0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcHJpbnRlci5ibyc7XG5pbXBvcnQge0N1cnJlbmN5fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jdXJyZW5jeS5ibyc7XG5pbXBvcnQge1BheW1lbnRDb25kaXRpb259IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3BheW1lbnQtY29uZGl0aW9uLmJvJztcbmltcG9ydCB7XG4gIEdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtdG8tYmUtcGlja2VkLWZvci1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIEdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdExpbmVcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLXRvLWJlLXBpY2tlZC1mb3Itb3JkZXItcmVxdWVzdC1saW5lJztcbmltcG9ydCB7V2FyZWhvdXNlU3RvY2tJbmZvfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvd2FyZWhvdXNlLXN0b2NrLWluZm8uYm8nO1xuaW1wb3J0IHtHb29kc1RvQmVQaWNrZWRIaXN0b3J5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtdG8tYmUtcGlja2VkLWhpc3RvcnknO1xuaW1wb3J0IHtHb29kc1BpY2tlZEhpc3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy1waWNrZWQtaGlzdG9yeSc7XG5pbXBvcnQge1BkZkhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1oaXN0b3JpYy1kZWxpdmVyeS1ub3RlLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgRW1haWxIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLWhpc3RvcmljLWRlbGl2ZXJ5LW5vdGUtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBQcmludEhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaGlzdG9yaWMtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcbmltcG9ydCB7QmF0Y2hUcmFuc2FjdGlvblNlbmRpbmdSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYmF0Y2gtdHJhbnNhY3Rpb24tc2VuZGluZy1yZXF1ZXN0JztcbmltcG9ydCB7QmF0Y2hKb2JQcm9ncmVzc30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2JhdGNoLWpvYi1wcm9ncmVzcy5ibyc7XG5pbXBvcnQge1xuICBFbWFpbEhpc3RvcmljT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1oaXN0b3JpYy1vcmRlci1jb25maXJtYXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge1BkZkhpc3RvcmljSW52b2ljZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtaGlzdG9yaWMtaW52b2ljZS1yZXF1ZXN0JztcbmltcG9ydCB7UHJpbnRIaXN0b3JpY0ludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaGlzdG9yaWMtaW52b2ljZS1yZXF1ZXN0JztcbmltcG9ydCB7RW1haWxIaXN0b3JpY0ludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtaGlzdG9yaWMtaW52b2ljZS1yZXF1ZXN0JztcbmltcG9ydCB7UHJpbnRPcmRlckNvbmZpcm1hdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1vcmRlci1jb25maXJtYXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge1ByaW50UHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7UGRmUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtcHVyY2hhc2Utb3JkZXItcmVxdWVzdCc7XG5pbXBvcnQge1BkZk9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1vcmRlci1jb25maXJtYXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge0VtYWlsT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtb3JkZXItY29uZmlybWF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtFbWFpbFB1cmNoYXNlT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtcHVyY2hhc2Utb3JkZXItcmVxdWVzdCc7XG5pbXBvcnQge09iamVjdENvbmZpZ3VyYXRpb259IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL29iamVjdC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7Q29Eb2N1bWVudH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvY28tZG9jdW1lbnQnO1xuaW1wb3J0IHtHb29kc1BpY2tlZFJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy1waWNrZWQtcmVxdWVzdCc7XG5pbXBvcnQge0dvb2RzUGlja2VkUmVxdWVzdExpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy1waWNrZWQtcmVxdWVzdC1saW5lJztcbmltcG9ydCB7XG4gIERlbGV0ZUdvb2RzUGlja2VkRm9yT3JkZXJSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxldGUtZ29vZHMtcGlja2VkLWZvci1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIERlbGV0ZUdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsZXRlLWdvb2RzLXRvLWJlLXBpY2tlZC1mb3Itb3JkZXItcmVxdWVzdCc7XG5pbXBvcnQge0Nhc2hEcmF3ZXJzUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Nhc2gtZHJhd2Vycy1yZXF1ZXN0JztcbmltcG9ydCB7Q2FzaERyYXdlcn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Nhc2gtZHJhd2VyLmJvJztcbmltcG9ydCB7UHJpbnRQb3NSZWNlaXB0UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LXBvcy1yZWNlaXB0LXJlcXVlc3QnO1xuaW1wb3J0IHtQcmludEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1oaXN0b3JpYy1wb3MtcmVjZWlwdC1yZXF1ZXN0JztcbmltcG9ydCB7RW1haWxQb3NSZWNlaXB0UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLXBvcy1yZWNlaXB0LXJlcXVlc3QnO1xuaW1wb3J0IHtFbWFpbEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1oaXN0b3JpYy1wb3MtcmVjZWlwdC1yZXF1ZXN0JztcbmltcG9ydCB7VGFnQ2F0ZWdvcnl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vdGFiLWNhdGVnb3J5LmVudW0nO1xuaW1wb3J0IHtFbWFpbFF1b3RhdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1xdW90YXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge0VtYWlsSGlzdG9yaWNRdW90YXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtaGlzdG9yaWMtcXVvdGF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtQZGZRdW90YXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLXF1b3RhdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7UGRmSGlzdG9yaWNRdW90YXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLWhpc3RvcmljLXF1b3RhdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7UHJpbnRRdW90YXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtcXVvdGF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtQcmludEhpc3RvcmljUXVvdGF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LWhpc3RvcmljLXF1b3RhdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIENoYW5nZUhlYWRlclNjb3JpbmdDaGFuY2VSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jaGFuZ2UtaGVhZGVyLXNjb3JpbmctY2hhbmNlLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlSGVhZGVyRXhwZWN0ZWRTY29yaW5nRGF0ZVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NoYW5nZS1oZWFkZXItZXhwZWN0ZWQtc2NvcmluZy1kYXRlLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlSGVhZGVyUmV0YWlsU3RhZGl1bVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NoYW5nZS1oZWFkZXItcmV0YWlsLXN0YWRpdW0tcmVxdWVzdCc7XG5pbXBvcnQge1JldGFpbFN0YWRpdW19IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZXRhaWwtc3RhZGl1bS5ibyc7XG5pbXBvcnQge1dvcmtGbG93U3RhdHVzfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvd29ya2Zsb3ctc3RhdHVzLmJvJztcbmltcG9ydCB7QXJ0aWNsZUZsYXRUcmVlRFRPfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZsYXQtdHJlZS5ibyc7XG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvc2VydmljZS9idXNpbmVzcy1vYmplY3QtZmFjdG9yeSc7XG5pbXBvcnQge1xuICBDaGFuZ2VMaW5lUXVhbnRpdHlTZWxlY3RlZExpbmVSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jaGFuZ2UtbGluZS1xdWFudGl0eS1zZWxlY3RlZC1saW5lLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgRXh0ZXJuYWxDYXRhbG9nQWRkQXJ0aWNsZVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLWNhdGFsb2ctYWRkLWFydGljbGUtcmVxdWVzdCc7XG5pbXBvcnQge09yZGVyTGluZVNldENhdGVnb3J5fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9vcmRlci1saW5lLXNldC1jYXRlZ29yeS5ibyc7XG5pbXBvcnQge09yZGVyTGluZVNldERUT30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL29yZGVyLWxpbmUtc2V0LWR0byc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbkFkZE9yZGVyTGluZVNldFRleHRMaW5lUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tYWRkLW9yZGVyLWxpbmUtc2V0LXRleHQtbGluZS1yZXF1ZXN0JztcbmltcG9ydCB7VHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXNlYXJjaC12aWV3LXJlcXVlc3QnO1xuaW1wb3J0IHtBcnRpY2xlRXh0ZW5kZWR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZXh0ZW5kZWQuYm8nO1xuaW1wb3J0IHtDYXVzZUNvZGV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jYXVzZS1jb2RlLmJvJztcbmltcG9ydCB7UGRmUG9zUmVjZWlwdFJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtcG9zLXJlY2VpcHQtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBPcmRlckNvbmZpcm1hdGlvblRyYW5zYWN0aW9uTGlua1xufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvb3JkZXItY29uZmlybWF0aW9uLXRyYW5zYWN0aW9uLWxpbmsuYm8nO1xuaW1wb3J0IHtQZGZQb3NSZWNlaXB0UmVzcG9uc2V9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtcG9zLXJlY2VpcHQtcmVzcG9uc2UuYm8nO1xuaW1wb3J0IHtQcm9qZWN0Q29kZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3Byb2plY3QtY29kZS5ibyc7XG5pbXBvcnQge0Nhc2hUeXBlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2FzaC10eXBlLmJvJztcbmltcG9ydCB7UG9zR3JvdXB9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wb3MtZ3JvdXAuYm8nO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25BZGRQYXltZW50TGluZVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWFkZC1wYXltZW50LWxpbmUtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBQZGZUcmFuc2FjdGlvblNlYXJjaE92ZXJ2aWV3UmVzcG9uc2Vcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi10cmFuc2FjdGlvbi1zZWFyY2gtb3ZlcnZpZXctcmVzcG9uc2UnO1xuaW1wb3J0IHtcbiAgUHJpbnRQdXJjaGFzZU9yZGVyRm9yU2FsZXNPcmRlclJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LXB1cmNoYXNlLW9yZGVyLWZvci1zYWxlcy1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7QWN0aXZpdHl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2FjdGl2aXR5LmJvJztcbmltcG9ydCB7VHJhbnNhY3Rpb25NYXJnaW5JbmZvfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbWFyZ2luLWluZm8uYm8nO1xuLy8gaW1wb3J0IHtcbi8vICAgVHJhbnNhY3Rpb25Mc3BJbmZvcm1hdGlvblJlcXVlc3Rcbi8vIH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1sc3AtaW5mb3JtYXRpb24ucmVxdWVzdFwiO1xuLy8gaW1wb3J0IHtQYWNrYWdlTFNQfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BhY2thZ2UtbHNwLmJvXCI7XG5pbXBvcnQge0RhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9kYXRhLXNlcnZpY2UtcmVzcG9uc2UtZGF0YSc7XG5pbXBvcnQge09yZGVyTGluZXNQbGFubmVkUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL29yZGVyLWxpbmVzLXBsYW5uZWQtcmVxdWVzdC5ibyc7XG5pbXBvcnQge1BsYW5PcmRlckxpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wbGFuLW9yZGVyLWxpbmUuYm8nO1xuaW1wb3J0IHtQbGFuT3JkZXJ9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wbGFuLW9yZGVyLmJvJztcbmltcG9ydCB7U3VwcGxpZXJBcnRpY2xlU3RvY2tGb3JlY2FzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3N1cHBsaWVyLWFydGljbGUtc3RvY2stZm9yZWNhc3QnO1xuaW1wb3J0IHtTZXJ2aWNlV2l6YXJkfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvc2VydmljZS13aXphcmQnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlU2VydmljZUhlYWRlclJlcG9ydE1lc3NhZ2VSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jaGFuZ2Utc2VydmljZS1oZWFkZXItcmVwb3J0LW1lc3NhZ2UtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBDcmVhdGVTZXJ2aWNlT3JkZXJXaXRoU291cmNlVHJhbnNhY3Rpb25MaW5lUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXNlcnZpY2Utb3JkZXItd2l0aC1zb3VyY2UtdHJhbnNhY3Rpb24tbGluZS1yZXF1ZXN0JztcbmltcG9ydCB7U2VydmljZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9zZXJ2aWNlLXR5cGUnO1xuaW1wb3J0IHtcbiAgT3JkZXJSZXNlcnZhdGlvblNhbGVzT3JkZXJMaW5lc1JlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL29yZGVyLXJlc2VydmF0aW9uLXNhbGVzLW9yZGVyLWxpbmVzLXJlcXVlc3QuYm8nO1xuaW1wb3J0IHtQdXJjaGFzZVJlc2VydmF0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHVyY2hhc2UtcmVzZXJ2YXRpb24uYm8nO1xuaW1wb3J0IHtcbiAgUHJvY2Vzc09yZGVyUmVzZXJ2YXRpb25SZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcm9jZXNzLW9yZGVyLXJlc2VydmF0aW9uLXJlcXVlc3QuYm8nO1xuaW1wb3J0IHtSZWxhdGlvblNtYWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1zbWFsbC1vYmplY3QuYm8nO1xuaW1wb3J0IHtBZGRIZWFkZXJJbWFnZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9hZGQtaGVhZGVyLWltYWdlLXJlcXVlc3QnO1xuaW1wb3J0IHtEZWxldGVIZWFkZXJJbWFnZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxldGUtaGVhZGVyLWltYWdlLXJlcXVlc3QnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlU2VydmljZUhlYWRlckNhdXNlQ29kZVJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NoYW5nZS1zZXJ2aWNlLWhlYWRlcmNhdXNlLWNvZGUtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBDaGFuZ2VTZXJ2aWNlSGVhZGVyUHJpb3JpdHlSZXF1ZXN0XG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jaGFuZ2Utc2VydmljZS1oZWFkZXItcHJpb3JpdHktcmVxdWVzdCc7XG5pbXBvcnQge1xuICBDaGFuZ2VTZXJ2aWNlSGVhZGVyRW50cnlUeXBlUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2hhbmdlLXNlcnZpY2UtaGVhZGVyLWVudHJ5LXR5cGUtcmVxdWVzdCc7XG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZVNlYXJjaEluZGV4fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbGluZS1zZWFyY2gtaW5kZXguYm8nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlU2VydmljZUhlYWRlclNlcnZpY2VUeXBlUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2hhbmdlLXNlcnZpY2UtaGVhZGVyLXNlcnZpY2UtdHlwZS1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIENoYW5nZVNlcnZpY2VIZWFkZXJXaXphcmREYXRhUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2hhbmdlLXNlcnZpY2UtaGVhZGVyLXdpemFyZC1kYXRhLXJlcXVlc3QnO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm99IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLmJvJztcbmltcG9ydCB7U0xBUHJvZHVjdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL1NMQS1wcm9kdWN0JztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uRGVsaXZlcnlDb3N0TGluZUluZm9cbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWRlbGl2ZXJ5LWNvc3QtbGluZS1pbmZvLmJvJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uTGluZUNvcHlSZXF1ZXN0IH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxpbmUtY29weS1yZXF1ZXN0LmJvJztcbmltcG9ydCB7UGxhblRpbWVzfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BsYW4tdGltZXMuYm9cIjtcbmltcG9ydCB7UGFja2FnZUxTUH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BhY2thZ2UtbHNwLmJvJztcbmltcG9ydCB7U3VwcGxpZXJQcm9kdWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3N1cHBsaWVyLXByb2R1Y3QuYm9cIjtcblxudHlwZSBDcmVhdGVUcmFuc2FjdGlvbkZuID0gKHJlcXVlc3Q6IENyZWF0ZVRyYW5zYWN0aW9uUmVxdWVzdCkgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIlxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvblNlcnZpY2UgZXh0ZW5kcyBQZW5kaW5nUmVhc29uU2VydmljZSB7XG5cbiAgcHVibGljIHJlbWFpbmluZ0Ftb3VudDogbnVtYmVyID0gMDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jcmVhdGVUcmFuc2FjdGlvbk1ldGhvZHM6IE1hcDxUcmFuc2FjdGlvbktpbmQsIENyZWF0ZVRyYW5zYWN0aW9uRm4+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIENyZWF0ZVRyYW5zYWN0aW9uRm4+KFtcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIChyZXF1ZXN0OiBDcmVhdGVTYWxlc09yZGVyUmVxdWVzdCkgPT4gdGhpcy5jcmVhdGVTYWxlc09yZGVyKHJlcXVlc3QpXSxcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIChyZXF1ZXN0OiBDcmVhdGVQdXJjaGFzZU9yZGVyUmVxdWVzdCkgPT4gdGhpcy5jcmVhdGVQdXJjaGFzZU9yZGVyKHJlcXVlc3QpXSxcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCAocmVxdWVzdDogQ3JlYXRlU2FsZXNRdW90YXRpb25SZXF1ZXN0KSA9PiB0aGlzLmNyZWF0ZVNhbGVzUXVvdGF0aW9uKHJlcXVlc3QpXSxcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNlcnZpY2VPcmRlciwgKHJlcXVlc3Q6IENyZWF0ZVNhbGVzUXVvdGF0aW9uUmVxdWVzdCkgPT4gdGhpcy5jcmVhdGVTZXJ2aWNlT3JkZXIocmVxdWVzdCldXG4gIF0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbGF0aW9uS2luZEZyb21UcmFuc2FjdGlvbktpbmQ6IE1hcDxUcmFuc2FjdGlvbktpbmQsIFJlbGF0aW9uS2luZD4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgUmVsYXRpb25LaW5kPihbXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBSZWxhdGlvbktpbmQuQ3VzdG9tZXJdLFxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgUmVsYXRpb25LaW5kLlN1cHBsaWVyXSxcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCBSZWxhdGlvbktpbmQuQ3VzdG9tZXJdLFxuICAgIFtUcmFuc2FjdGlvbktpbmQuQ2FzaERlc2ssIFJlbGF0aW9uS2luZC5DdXN0b21lcl0sXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TZXJ2aWNlT3JkZXIsIFJlbGF0aW9uS2luZC5DdXN0b21lcl1cbiAgXSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNTdGF0dXNJbmRleDogTWFwPFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LCBudW1iZXI+ID0gbmV3IE1hcDxUcmFuc2FjdGlvblR5cGVDYXRlZ29yeSwgbnVtYmVyPihbXG4gICAgW1RyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJQdXJjaGFzZSwgMF0sXG4gICAgW1RyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJBbGxvY2F0aW9uLCAxXSxcbiAgICBbVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlckRlbGl2ZXJ5Tm90ZSwgN10sXG4gICAgW1RyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJJbnZvaWNlLCA4XSxcbiAgICBbVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuUHVyY2hhc2VPcmRlck9yZGVyQ29uZmlybWF0aW9uLCAwXSxcbiAgICBbVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuUHVyY2hhc2VPcmRlclJlY2VpdmVkR29vZHMsIDJdXG4gIF0pO1xuXG4gIHB1YmxpYyBzZXQgdHJhbnNGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lKHZhbHVlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkge1xuICAgIHRoaXMuX3RyYW5zRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCB0cmFuc0ZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUoKTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2Uge1xuICAgIHJldHVybiB0aGlzLl90cmFuc0ZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGxvZ2dlZEluVXNlcih2YWx1ZTogUmVsYXRpb25TbWFsbE9iamVjdCkge1xuICAgIHRoaXMuX2xvZ2dlZEluVXNlciA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBsb2dnZWRJblVzZXIoKTogUmVsYXRpb25TbWFsbE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ2dlZEluVXNlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbGluZU5yRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGluZU5yRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBsaW5lTnJGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xpbmVOckZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmU7XG4gIH1cblxuICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBfdHJhbnNGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZTtcbiAgcHJpdmF0ZSBfbGluZU5yRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZTogbnVtYmVyO1xuICBwcml2YXRlIF9sb2dnZWRJblVzZXI6IFJlbGF0aW9uU21hbGxPYmplY3Q7XG5cbiAgcHVibGljIGFzeW5jIGxvZ091dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rvci5sb2dPdXQoKTtcbiAgICB0aGlzLnJlc2V0Q3VycmVudFRyYW5zYWN0aW9uKCk7XG4gICAgdGhpcy5sb2dvdXQubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIGdldEZvY3VzU3RhdHVzSW5kZXgoY2F0ZWdvcnk6IFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZm9jdXNTdGF0dXNJbmRleC5nZXQoY2F0ZWdvcnkpO1xuICB9XG5cbiAgcHVibGljIGdldFJlbGF0aW9uS2luZEZyb21UcmFuc2FjdGlvbktpbmQoKTogUmVsYXRpb25LaW5kIHtcbiAgICBpZiAodGhpcy5fcmVsYXRpb25LaW5kRnJvbVRyYW5zYWN0aW9uS2luZC5oYXModGhpcy50cmFuc2FjdGlvbktpbmQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVsYXRpb25LaW5kRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUmVsYXRpb25LaW5kLkN1c3RvbWVyO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaG93V2FyZWhvdXNlTG9jYXRpb25Qb3B1cCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzKSB7XG4gICAgICBjb25zdCBsaW5lc1RoYXRTaG91bGRIYXZlTG9jYXRpb246IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9XG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKGwgPT4gbC5pc0xvY2F0aW9uUmVxdWlyZWQgJiYgbC5hcnRpY2xlTGluZVN0YXR1cy5xdWFudGl0eVRvUmVjZWl2ZSA+IDApO1xuICAgICAgaWYgKGxpbmVzVGhhdFNob3VsZEhhdmVMb2NhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEaWFsb2dSZXNwb25zZUludGVyZmFjZSA9IGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5zaG93V2FyZWhvdXNlTG9jYXRpb24oMCwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmJ1dHRvbiA9PT0gQXBwUG9wdXBCdXR0b25UeXBlLk9rKSB7XG4gICAgICAgICAgbGluZXNUaGF0U2hvdWxkSGF2ZUxvY2F0aW9uLmZvckVhY2gobCA9PiB7XG4gICAgICAgICAgICBsLmxvY2F0aW9uTnIgPSByZXNwb25zZS5vdXRwdXQ7XG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uTGluZUNoYW5nZWQubmV4dChsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2Uub3V0cHV0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENhc2hPbkRlbGl2ZXJ5RGF0YSh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPENhc2hPbkRlbGl2ZXJ5RGF0YT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDYXNoT25EZWxpdmVyeURhdGEodXVpZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyQ2FzaE9uRGVsaXZlcnlBbW91bnQocmVxdWVzdDogQ2hhbmdlSGVhZGVyQ2FzaE9uRGVsaXZlcnlBbW91bnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckNhc2hPbkRlbGl2ZXJ5QW1vdW50KHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKSB7XG4gICAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERpYWxvZ1Jlc3BvbnNlSW50ZXJmYWNlID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dZZXNObygnREVMRVRFJywgJ0RFTEVURV9UUkFOU0FDVElPTl9RVUVTVElPTicpO1xuICAgICAgICBjb25zdCBzaG91bGREZWxldGU6IGJvb2xlYW4gPSByZXNwb25zZS5idXR0b24gPT09IEFwcFBvcHVwQnV0dG9uVHlwZS5ZZXM7XG4gICAgICAgIGlmIChzaG91bGREZWxldGUpIHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kZWxldGVUcmFuc2FjdGlvbkJ5VXVJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCk7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBmYWxzZSk7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvbkRlbGV0ZWQubmV4dCgpO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2FuY2VsQ2FzaFJlZ2lzdGVyT3JkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogRGlhbG9nUmVzcG9uc2VJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1llc05vKCdDQU5DRUwnLCAnQ0FOQ0VMX1RSQU5TQUNUSU9OX1FVRVNUSU9OJyk7XG4gICAgICBjb25zdCBzaG91bGREZWxldGU6IGJvb2xlYW4gPSByZXNwb25zZS5idXR0b24gPT09IEFwcFBvcHVwQnV0dG9uVHlwZS5ZZXM7XG4gICAgICBpZiAoc2hvdWxkRGVsZXRlKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNhbmNlbFRyYW5zYWN0aW9uQnlVdUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkKTtcbiAgICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBmYWxzZSk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudHJhbnNhY3Rpb25EZWxldGVkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlZmluaXRpdmUodXVpZDogc3RyaW5nLCBkZWZpbml0aXZlOiBib29sZWFuLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWZpbml0aXZlKHV1aWQsIGRlZmluaXRpdmUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyRGVsaXZlcnlBZGRyZXNzKHV1aWQ6IHN0cmluZywgbmV3TmF3TnI6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJEZWxpdmVyeUFkZHJlc3ModXVpZCwgbmV3TmF3TnIpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVySW52b2ljZUFkZHJlc3ModXVpZDogc3RyaW5nLCBuZXdOYXdOcjogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckludm9pY2VBZGRyZXNzKHV1aWQsIG5ld05hd05yKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlEYXRlKHV1aWQ6IHN0cmluZywgZGF0ZTogRGF0ZSwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlEYXRlKHV1aWQsIGRhdGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeURhdGVEZWZpbml0aXZlKHV1aWQ6IHN0cmluZywgZGVmaW5pdGl2ZTogYm9vbGVhbiwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlEYXRlRGVmaW5pdGl2ZSh1dWlkLCBkZWZpbml0aXZlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUmVtYXJrKHV1aWQ6IHN0cmluZywgcmVtYXJrOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblJlbWFyayh1dWlkLCByZW1hcmspO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25SZWZlcmVuY2UodXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUmVmZXJlbmNlKHV1aWQsIHJlZmVyZW5jZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblJlbGF0aW9uUmVmZXJlbmNlKHV1aWQ6IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblJlbGF0aW9uUmVmZXJlbmNlKHV1aWQsIHJlZmVyZW5jZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlcG9zaXRBbW91bnQodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckRlcG9zaXRBbW91bnQodXVpZCwgYW1vdW50KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVwb3NpdFBlcmNlbnRhZ2UodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVwb3NpdFBlcmNlbnRhZ2UodXVpZCwgYW1vdW50KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblByZWZlcnJlZERlbGl2ZXJ5RGF0ZSh1dWlkOiBzdHJpbmcsIGRhdGU6IERhdGUsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbiwgb3B0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25QcmVmZXJyZWREZWxpdmVyeURhdGUodXVpZCwgZGF0ZSwgb3B0aW9uKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlUaW1lKHV1aWQ6IHN0cmluZywgdGltZTogRGF0ZSwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlUaW1lKHV1aWQsIHRpbWUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeU1ldGhvZCh1dWlkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeU1ldGhvZCh1dWlkLCBtZXRob2QpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnModXVpZDogc3RyaW5nLCBvcHRpb25zOiBzdHJpbmdbXSwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKHV1aWQsIG9wdGlvbnMpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25QYXJ0aWFsRGVsaXZlcnkodXVpZDogc3RyaW5nLCBhbGxvd1BhcnRpYWw6IGJvb2xlYW4sIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblBhcnRpYWxEZWxpdmVyeSh1dWlkLCBhbGxvd1BhcnRpYWwpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25CcmFuY2godXVpZDogc3RyaW5nLCBicmFuY2g6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uQnJhbmNoKHV1aWQsIGJyYW5jaCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbk9uSG9sZENvZGVzKHV1aWQ6IHN0cmluZywgY29kZXM6IHN0cmluZ1tdLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25PbkhvbGRDb2Rlcyh1dWlkLCBjb2Rlcyk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRpdmlkZUV2ZW5seSh1dWlkOiBzdHJpbmcsIGRpdmlkZUV2ZW5seTogYm9vbGVhbiwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGl2aWRlRXZlbmx5KHV1aWQsIGRpdmlkZUV2ZW5seSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkF1dG9SZWNhbGN1bGF0ZURlcG9zaXQodXVpZDogc3RyaW5nLCBhdXRvUmVjYWxjdWxhdGVEZXBvc2l0OiBib29sZWFuLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyQXV0b1JlY2FsY3VsYXRlRGVwb3NpdCh1dWlkLCBhdXRvUmVjYWxjdWxhdGVEZXBvc2l0KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uVXNlRGVwb3NpdFJ1bGUodXVpZDogc3RyaW5nLCB1c2VEZXBvc2l0UnVsZTogYm9vbGVhbiwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclVzZURlcG9zaXRSdWxlKHV1aWQsIHVzZURlcG9zaXRSdWxlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uQW1vdW50VG9TZXR0bGUodXVpZDogc3RyaW5nLCBhbW91bnRUb1NldHRsZTogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25BbW91bnRUb1NldHRsZSh1dWlkLCBhbW91bnRUb1NldHRsZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblByaWNlS2luZCh1dWlkOiBzdHJpbmcsIHByaWNlS2luZDogc3RyaW5nLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25QcmljZUtpbmQodXVpZCwgcHJpY2VLaW5kKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uQWRtQ29vcmRpbmF0b3IodXVpZDogc3RyaW5nLCByZWxhdGlvbjogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25BZG1Db29yZGluYXRvcih1dWlkLCByZWxhdGlvbik7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblNhbGVzUGVyc29uKHV1aWQ6IHN0cmluZywgcmVsYXRpb246IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gbm90IGluIG1pZGRsZXRpZXIgeWV0XG4gICAgLy8gY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uU2FsZXNPcmRlcih1dWlkLCByZWxhdGlvbik7XG4gICAgLy8gaWYgKHJlc3BvbnNlKSB7XG4gICAgLy8gICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgLy8gfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uQ3VycmVuY3kodXVpZDogc3RyaW5nLCBjdXJyZW5jeUNvZGU6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uQ3VycmVuY3kodXVpZCwgY3VycmVuY3lDb2RlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25UeXBlKHV1aWQ6IHN0cmluZywgdHJhbnNhY3Rpb25UeXBlOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblR5cGUodXVpZCwgdHJhbnNhY3Rpb25UeXBlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25Qcm9qZWN0Q29kZSh1dWlkOiBzdHJpbmcsIHByb2plY3RDb2RlOiBudW1iZXIsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblByb2plY3RDb2RlKHV1aWQsIHByb2plY3RDb2RlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25QYXltZW50Q29uZGl0aW9uKHV1aWQ6IHN0cmluZywgY29uZGl0aW9uOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblBheW1lbnRDb25kaXRpb24odXVpZCwgY29uZGl0aW9uKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25IYW5sZGVkQnkodXVpZDogc3RyaW5nLCBoYW5kbGVkQnk6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uSGFuZGxlZEJ5KHV1aWQsIGhhbmRsZWRCeSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uTWFya2V0aW5nKHV1aWQ6IHN0cmluZywgY29kZTogc3RyaW5nLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25NYXJrZXRpbmcodXVpZCwgY29kZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRpc2NvdW50KHV1aWQ6IHN0cmluZywgdHlwZTogRGlzY291bnRUeXBlLCBhbW91bnQ6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGlzY291bnQodXVpZCwgdHlwZSwgYW1vdW50KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblNjb3JpbmdDaGFuY2UocmVxdWVzdDogQ2hhbmdlSGVhZGVyU2NvcmluZ0NoYW5jZVJlcXVlc3QsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJTY29yaW5nQ2hhbmNlKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRXhwZWN0ZWRTY29yaW5nRGF0ZShyZXF1ZXN0OiBDaGFuZ2VIZWFkZXJFeHBlY3RlZFNjb3JpbmdEYXRlUmVxdWVzdCwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckV4cGVjdGVkU2NvcmluZ0RhdGUocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25SZXRhaWxTdGFkaXVtKHJlcXVlc3Q6IENoYW5nZUhlYWRlclJldGFpbFN0YWRpdW1SZXF1ZXN0LCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyUmV0YWlsU3RhZGl1bShyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVTZXJ2aWNlSGVhZGVyUmVwb3J0TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBsZXQgcmVxdWVzdDogQ2hhbmdlU2VydmljZUhlYWRlclJlcG9ydE1lc3NhZ2VSZXF1ZXN0ID0gbmV3IENoYW5nZVNlcnZpY2VIZWFkZXJSZXBvcnRNZXNzYWdlUmVxdWVzdCgpXG4gICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uVXVpZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkO1xuICAgICAgcmVxdWVzdC5uZXdSZXBvcnRNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVNlcnZpY2VIZWFkZXJSZXBvcnRNZXNzYWdlKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVNlcnZpY2VIZWFkZXJDYXVzZUNvZGUoY29kZTogc3RyaW5nLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgbGV0IHJlcXVlc3Q6IENoYW5nZVNlcnZpY2VIZWFkZXJDYXVzZUNvZGVSZXF1ZXN0ID0gbmV3IENoYW5nZVNlcnZpY2VIZWFkZXJDYXVzZUNvZGVSZXF1ZXN0KClcbiAgICAgIHJlcXVlc3QudHJhbnNhY3Rpb25VdWlkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQ7XG4gICAgICByZXF1ZXN0Lm5ld0NhdXNlQ29kZSA9IGNvZGU7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VTZXJ2aWNlSGVhZGVyQ2F1c2VDb2RlKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVNlcnZpY2VIZWFkZXJTZXJ2aWNlVHlwZSh0eXBlOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBsZXQgcmVxdWVzdDogQ2hhbmdlU2VydmljZUhlYWRlclNlcnZpY2VUeXBlUmVxdWVzdCA9IG5ldyBDaGFuZ2VTZXJ2aWNlSGVhZGVyU2VydmljZVR5cGVSZXF1ZXN0KClcbiAgICAgIHJlcXVlc3QudHJhbnNhY3Rpb25VdWlkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQ7XG4gICAgICByZXF1ZXN0Lm5ld1NlcnZpY2VUeXBlID0gdHlwZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVNlcnZpY2VIZWFkZXJTZXJ2aWNlVHlwZShyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVTZXJ2aWNlSGVhZGVyV2l6YXJkRGF0YShjb2RlOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgcWE6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGxldCByZXF1ZXN0OiBDaGFuZ2VTZXJ2aWNlSGVhZGVyV2l6YXJkRGF0YVJlcXVlc3QgPSBuZXcgQ2hhbmdlU2VydmljZUhlYWRlcldpemFyZERhdGFSZXF1ZXN0KClcbiAgICAgIHJlcXVlc3QudHJhbnNhY3Rpb25VdWlkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQ7XG4gICAgICByZXF1ZXN0Lm5ld0NhdXNlQ29kZSA9IGNvZGU7XG4gICAgICByZXF1ZXN0Lm5ld1NlcnZpY2VUeXBlID0gdHlwZTtcbiAgICAgIHJlcXVlc3QubmV3V2l6YXJkUXVlc3Rpb25zQW5kQW5zd2VycyA9IHFhO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlU2VydmljZUhlYWRlcldpemFyZERhdGEocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlU2VydmljZUhlYWRlclByaW9yaXR5KHByaW9yaXR5OiBudW1iZXIsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBsZXQgcmVxdWVzdDogQ2hhbmdlU2VydmljZUhlYWRlclByaW9yaXR5UmVxdWVzdCA9IG5ldyBDaGFuZ2VTZXJ2aWNlSGVhZGVyUHJpb3JpdHlSZXF1ZXN0KClcbiAgICAgIHJlcXVlc3QudHJhbnNhY3Rpb25VdWlkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQ7XG4gICAgICByZXF1ZXN0Lm5ld1ByaW9yaXR5ID0gcHJpb3JpdHk7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VTZXJ2aWNlSGVhZGVyUHJpb3JpdHkocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHNhdmVUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlU2VydmljZUhlYWRlckVudHJ5VHlwZShlbnRyeVR5cGU6IHN0cmluZywgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGxldCByZXF1ZXN0OiBDaGFuZ2VTZXJ2aWNlSGVhZGVyRW50cnlUeXBlUmVxdWVzdCA9IG5ldyBDaGFuZ2VTZXJ2aWNlSGVhZGVyRW50cnlUeXBlUmVxdWVzdCgpXG4gICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uVXVpZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkO1xuICAgICAgcmVxdWVzdC5uZXdFbnRyeVR5cGUgPSBlbnRyeVR5cGU7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VTZXJ2aWNlSGVhZGVyRW50cnlUeXBlKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZEhlYWRlckltYWdlKGltYWdlOiBDb0RvY3VtZW50LCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgbGV0IHJlcXVlc3Q6IEFkZEhlYWRlckltYWdlUmVxdWVzdCA9IG5ldyBBZGRIZWFkZXJJbWFnZVJlcXVlc3QoKVxuICAgICAgcmVxdWVzdC50cmFuc2FjdGlvblV1aWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZDtcbiAgICAgIHJlcXVlc3QubmV3SGVhZGVySW1hZ2UgPSBpbWFnZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFkZEhlYWRlckltYWdlKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUhlYWRlckltYWdlKGltYWdlOiBDb0RvY3VtZW50LCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgbGV0IHJlcXVlc3Q6IERlbGV0ZUhlYWRlckltYWdlUmVxdWVzdCA9IG5ldyBEZWxldGVIZWFkZXJJbWFnZVJlcXVlc3QoKVxuICAgICAgcmVxdWVzdC50cmFuc2FjdGlvblV1aWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZDtcbiAgICAgIHJlcXVlc3QuZmlsZU5hbWUgPSBpbWFnZS5maWxlTmFtZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZUhlYWRlckltYWdlKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVByaWNlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgcHJpY2U6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVQcmljZSh1dWlkLCBsaW5lVXVpZCwgcHJpY2UpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVQdXJjaGFzZVByaWNlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgcHJpY2U6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVQdXJjaGFzZVByaWNlKHV1aWQsIGxpbmVVdWlkLCBwcmljZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVB1cmNoYXNlRGVzY3JpcHRpb25UcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVB1cmNoYXNlRGVzY3JpcHRpb24odXVpZCwgbGluZVV1aWQsIGRlc2NyaXB0aW9uKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUmVmZXJlbmNlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUmVmZXJlbmNlKHV1aWQsIGxpbmVVdWlkLCByZWZlcmVuY2UpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVHb29kRGVzY3JpcHRpb25UcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBnb29kRGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmF1dG9TYXZlKSB7IC8vIFRPRE86IGZpeCB0aGlzIG5hc3R5IHRoaW5nXG4gICAgICBhd2FpdCB0aGlzLl9jaGVja0FuZEFkZFJlbGF0aW9uVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUdvb2REZXNjcmlwdGlvbih1dWlkLCBsaW5lVXVpZCwgZ29vZERlc2NyaXB0aW9uKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUXVhbnRpdHlUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHV1aWQsIGxpbmVVdWlkLCBxdWFudGl0eSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVF1YW50aXR5U2VsZWN0ZWRGb3JBbGxMaW5lcyh0cmFuc2FjdGlvbkluZm86IFRyYW5zYWN0aW9uSW5mbyxcbiAgICB0cmFuc2FjdGlvbkxpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10sIGRlbGl2ZXJ5Q29zdExpbmVzOiBUcmFuc2FjdGlvbkRlbGl2ZXJ5Q29zdExpbmVJbmZvW10sIHNlbGVjdGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRyYW5zYWN0aW9uSW5mbyAmJiB0cmFuc2FjdGlvbkluZm8udXVpZCAmJiB0cmFuc2FjdGlvbkxpbmVzKSB7XG4gICAgICBjb25zdCBsaW5lc1JlcXVlc3Q6IENoYW5nZUxpbmVRdWFudGl0eVNlbGVjdGVkTGluZVJlcXVlc3RbXSA9IFtdO1xuICAgICAgbGV0IHNlbGVjdGVkTGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9IHRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKGwgPT4gc2VsZWN0ZWQgPyBsLnNlbGVjdGVkIDogdHJ1ZSk7XG4gICAgICBpZiAoZGVsaXZlcnlDb3N0TGluZXMpIHtcbiAgICAgICAgc2VsZWN0ZWRMaW5lcyA9IHNlbGVjdGVkTGluZXMuY29uY2F0KGRlbGl2ZXJ5Q29zdExpbmVzKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRMaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZExpbmU6IFRyYW5zYWN0aW9uTGluZUluZm8gPSBzZWxlY3RlZExpbmVzW2ldO1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBDaGFuZ2VMaW5lUXVhbnRpdHlTZWxlY3RlZExpbmVSZXF1ZXN0ID0gbmV3IENoYW5nZUxpbmVRdWFudGl0eVNlbGVjdGVkTGluZVJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5saW5lVXVpZCA9IHNlbGVjdGVkTGluZS51dWlkO1xuICAgICAgICByZXF1ZXN0Lm5ld1F1YW50aXR5U2VsZWN0ZWQgPSBzZWxlY3RlZCA/IHNlbGVjdGVkTGluZS5hbW91bnRTZWxlY3RlZCA6IDA7XG4gICAgICAgIGxpbmVzUmVxdWVzdC5wdXNoKHJlcXVlc3QpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5U2VsZWN0ZWQodHJhbnNhY3Rpb25JbmZvLnV1aWQsIGxpbmVzUmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UucXVhbnRpdHlTZWxlY3RlZExpbmVDaGFuZ2VkLm5leHQodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVF1YW50aXR5U2VsZWN0ZWRUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lczogQ2hhbmdlTGluZVF1YW50aXR5U2VsZWN0ZWRMaW5lUmVxdWVzdFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlLCByZW1lbWJlclRyYW5zYWN0aW9uOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eVNlbGVjdGVkKHV1aWQsIGxpbmVzKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uLCByZW1lbWJlclRyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UucXVhbnRpdHlTZWxlY3RlZExpbmVDaGFuZ2VkLm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVF1YW50aXR5U2VsZWN0Tm9uZSh1dWlkOiBzdHJpbmcsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUsIHJlbWVtYmVyVHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5U2VsZWN0Tm9uZSh1dWlkKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uLCByZW1lbWJlclRyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UucXVhbnRpdHlTZWxlY3RlZExpbmVDaGFuZ2VkLm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZURlbGl2ZXJ5RGF0ZVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGRhdGU6IERhdGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlEYXRlKHV1aWQsIGxpbmVVdWlkLCBkYXRlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUHJpY2VMaXN0VHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgcHJpY2VMaXN0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUHJpY2VMaXN0KHV1aWQsIGxpbmVVdWlkLCBwcmljZUxpc3QpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVWYXRUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVZhdCh1dWlkLCBsaW5lVXVpZCwgaWQpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDb21taXNzaW9uQ29kZVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVDb21taXNzaW9uQ29kZSh1dWlkLCBsaW5lVXVpZCwgY29kZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZURpcmVjdFNlbGxUcmFuc2FjdGlvbkxpbmUodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIG5ld0RpcmVjdFNlbGw6IGJvb2xlYW4sXG4gICAgICBuZXdTdXBwbGllcklkOiBudW1iZXIsIG5ld1B1cmNoYXNlT3JkZXJOdW1iZXI6IHN0cmluZywgbmV3U3RvY2tGb3JlY2FzdERlbGl2ZXJ5RGF0ZTogRGF0ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZURpcmVjdFNlbGwodHJhbnNhY3Rpb25VdWlkLCBsaW5lVXVpZCwgbmV3RGlyZWN0U2VsbCxcbiAgICAgIG5ld1N1cHBsaWVySWQsIG5ld1B1cmNoYXNlT3JkZXJOdW1iZXIsIG5ld1N0b2NrRm9yZWNhc3REZWxpdmVyeURhdGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVTdXBwbGllclRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lU3VwcGxpZXIodXVpZCwgbGluZVV1aWQsIGlkKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlV2FyZWhvdXNlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgd2FyZWhvdXNlTnVtYmVyOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lV2FyZWhvdXNlKHV1aWQsIGxpbmVVdWlkLCB3YXJlaG91c2VOdW1iZXIpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVUcmFuc2FjdGlvbkxpbmVJbnRlckJyYW5jaFNvdXJjZVdhcmVob3VzZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGludGVyQnJhbmNoU291cmNlV2FyZWhvdXNlTnI6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVJbnRlckJyYW5jaFNvdXJjZVdhcmVob3VzZSh1dWlkLCBsaW5lVXVpZCwgaW50ZXJCcmFuY2hTb3VyY2VXYXJlaG91c2VOcik7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZURlbGl2ZXJ5TWV0aG9kVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlNZXRob2QodXVpZCwgbGluZVV1aWQsIG1ldGhvZCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZURpc2NvdW50VHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgdHlwZTogRGlzY291bnRUeXBlLCBkaXNjb3VudDogbnVtYmVyLCByZWFzb246IHN0cmluZyA9IFwiXCIsIGNvZGU6IHN0cmluZyA9IFwiXCIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lTGluZURpc2NvdW50KHV1aWQsIGxpbmVVdWlkLCB0eXBlLCBkaXNjb3VudCwgcmVhc29uLCBjb2RlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRHJvcFNoaXBtZW50VHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgbmV3RHJvcFNoaXBtZW50OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZURyb3BTaGlwbWVudCh1dWlkLCBsaW5lVXVpZCwgbmV3RHJvcFNoaXBtZW50KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVDb21taXNzaW9uT3JkZXJzKHRyYW5zSWQ6IG51bWJlciwgb25seUdlbmVyYXRlRm9yRGlyZWN0U2VsbFN1cHBsaWVyczogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVycy5uZXh0KHRydWUpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2VuZXJhdGVDb21taXNzaW9uT3JkZXJzKHRyYW5zSWQsIG9ubHlHZW5lcmF0ZUZvckRpcmVjdFNlbGxTdXBwbGllcnMpO1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVycy5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZVJlbGF0aW9uKGNvbW1pdFRyYW5zYWN0aW9uOiBib29sZWFuID0gdHJ1ZSwgYWxzb0luaXRpYWxpc2VUcmFuc0FuZEFkZDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyB0aGlzLl9jbGVhblJlbGF0aW9uQmVmb3JlU2F2ZSgpO1xuICAgIGlmIChhbHNvSW5pdGlhbGlzZVRyYW5zQW5kQWRkKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSZWxhdGlvbigpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XG4gICAgICB0aGlzLnJlbGF0aW9uID0gYXdhaXQgdGhpcy50cmFuc2FjdGlvblJlbGF0aW9uU2VydmljZS5pbnNlcnRSZWxhdGlvbih0aGlzLl9yZWxhdGlvbktpbmRGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCksIHRoaXMucmVsYXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsb2NrZWQ6IFZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlLmxvY2tSZWxhdGlvbih0aGlzLnJlbGF0aW9uLnJlbGF0aW9uVHlwZSwgcGFyc2VJbnQodGhpcy5yZWxhdGlvbi5yZWxhdGlvbk51bWJlcikpO1xuICAgICAgaWYgKGxvY2tlZCAmJiBsb2NrZWQuc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlbGF0aW9uID0gYXdhaXQgdGhpcy50cmFuc2FjdGlvblJlbGF0aW9uU2VydmljZS51cGRhdGVSZWxhdGlvbih0aGlzLl9yZWxhdGlvbktpbmRGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCksIHRoaXMucmVsYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dJbmZvcm1hdGlvbignUkVMQVRJT05fQUxSRUFEWV9MT0NLRUQnLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhd2FpdCB0aGlzLnJlbGF0aW9uU2VydmljZS5jb21taXQoKTtcbiAgICBpZiAoYWxzb0luaXRpYWxpc2VUcmFuc0FuZEFkZCAmJiAhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24odGhpcy5yZWxhdGlvbi5yZWxhdGlvbklkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VxdWVuY2VWYWx1ZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTZXF1ZW5jZVZhbHVlKFNlcXVlbmNlTmFtZS5SZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpOiBQcm9taXNlPFJlbGF0aW9uUHJpdmFjeVNldHRpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpO1xuICB9XG5cbiAgcHVibGljIGdldEFydGljbGVCb3VuZFRleHRMaW5lc09mQXJ0aWNsZUxpbmUoYXJ0aWNsZUxpbmVVdWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uTGluZUluZm9bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlQm91bmRUZXh0TGluZXNPZkFydGljbGVMaW5lKGFydGljbGVMaW5lVXVpZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlU2FsZXNPcmRlcihyZXF1ZXN0OiBDcmVhdGVTYWxlc09yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMuY2hlY2tCcmFuY2goKTtcbiAgICBpZiAoIXRoaXMuY3VycmVudEJyYW5jaCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgfVxuICAgIHJlcXVlc3QuYnJhbmNoTnIgPSB0aGlzLmN1cnJlbnRCcmFuY2g7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY3JlYXRlU2FsZXNPcmRlcihyZXF1ZXN0KTtcbiAgICBhd2FpdCB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXNoUmVnaXN0ZXJPcmRlcihyZXF1ZXN0OiBDcmVhdGVDYXNoUmVnaXN0ZXJPcmRlclJlcXVlc3QsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5jcmVhdGVDYXNoUmVnaXN0ZXJPcmRlcihyZXF1ZXN0KS50aGVuKGFzeW5jIChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgIHJlc29sdmUoYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgc2F2ZVRyYW5zYWN0aW9uLCBzYXZlVHJhbnNhY3Rpb24pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZVB1cmNoYXNlT3JkZXIocmVxdWVzdDogQ3JlYXRlUHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLmNoZWNrQnJhbmNoKCk7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRCcmFuY2gpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgIH1cbiAgICByZXF1ZXN0LmJyYW5jaE5yID0gdGhpcy5jdXJyZW50QnJhbmNoO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNyZWF0ZVB1cmNoYXNlT3JkZXIocmVxdWVzdCk7XG4gICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlU2VydmljZU9yZGVyKHJlcXVlc3Q6IENyZWF0ZVNlcnZpY2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oYXN5bmMgKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrQnJhbmNoKCk7XG4gICAgICBpZiAoIXRoaXMuY3VycmVudEJyYW5jaCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdHJhbnNGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lICYmICFpc05hTih0aGlzLl9saW5lTnJGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lKSkge1xuICAgICAgICByZXNvbHZlKGF3YWl0IHRoaXMuY3JlYXRlU2VydmljZU9yZGVyV2l0aFNvdXJjZVRyYW5zYWN0aW9uTGluZVJlcXVlc3QoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKGF3YWl0IHRoaXMuY3JlYXRlUmVndWxhclNlcnZpY2VPcmRlcihyZXF1ZXN0KSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlUmVndWxhclNlcnZpY2VPcmRlcihyZXF1ZXN0OiBDcmVhdGVTZXJ2aWNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KGFzeW5jIChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmVxdWVzdC5icmFuY2hOciA9IHRoaXMuY3VycmVudEJyYW5jaDtcbiAgICAgIHRoaXMuY29ubmVjdG9yLmNyZWF0ZVNlcnZpY2VPcmRlcihyZXF1ZXN0KS50aGVuKChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb3B5VHJhbnNhY3Rpb25MaW5lKHJlcXVlc3Q6IFRyYW5zYWN0aW9uTGluZUNvcHlSZXF1ZXN0KSB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG5cbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY3JlYXRlQ29weVRyYW5zYWN0aW9uTGluZShyZXF1ZXN0KTtcblxuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZVNlcnZpY2VPcmRlcldpdGhTb3VyY2VUcmFuc2FjdGlvbkxpbmVSZXF1ZXN0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihhc3luYyAocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIGxldCByZXF1ZXN0OiBDcmVhdGVTZXJ2aWNlT3JkZXJXaXRoU291cmNlVHJhbnNhY3Rpb25MaW5lUmVxdWVzdCA9IG5ldyBDcmVhdGVTZXJ2aWNlT3JkZXJXaXRoU291cmNlVHJhbnNhY3Rpb25MaW5lUmVxdWVzdCgpO1xuICAgICAgcmVxdWVzdC5icmFuY2hOciA9IHRoaXMuY3VycmVudEJyYW5jaDtcbiAgICAgIHJlcXVlc3QuY3VzdG9tZXJSZWxhdGlvbklkID0gdGhpcy5fdHJhbnNGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbi5yZWxhdGlvbklkO1xuICAgICAgcmVxdWVzdC5zb3VyY2VUcmFuc0lkID0gdGhpcy5fdHJhbnNGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lLnRyYW5zYWN0aW9uSW5mby5pZDtcbiAgICAgIHJlcXVlc3Quc291cmNlTGluZU5yID0gdGhpcy5fbGluZU5yRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZTtcblxuICAgICAgdGhpcy5jb25uZWN0b3IuY3JlYXRlU2VydmljZU9yZGVyV2l0aFNvdXJjZVRyYW5zYWN0aW9uTGluZShyZXF1ZXN0KS50aGVuKChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVTYWxlc1F1b3RhdGlvbihyZXF1ZXN0OiBDcmVhdGVTYWxlc1F1b3RhdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLmNoZWNrQnJhbmNoKCk7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRCcmFuY2gpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgIH1cbiAgICByZXF1ZXN0LmJyYW5jaE5yID0gdGhpcy5jdXJyZW50QnJhbmNoO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNyZWF0ZVNhbGVzUXVvdGF0aW9uKHJlcXVlc3QpO1xuICAgIGF3YWl0IHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbihyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjcmVhdGVkOiBib29sZWFuID0gYXdhaXQgdGhpcy5fY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIGlmICghY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fdHJhbnNGb3JTZXJ2aWNlRnJvbVNhbGVzVHJhbnNhY3Rpb25MaW5lKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5hZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIHJlbGF0aW9uSWQpO1xuXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXREYXRhRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tbWlzc2lvbkNvZGVzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0Q29tbWlzc2lvbkNvZGVzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0WWVzTm8obGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRZZXNOb0NvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmljZUtpbmQobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRQcmljZUtpbmRDb2xsZWN0aW9uKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJpb3JpdHkobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRQcmlvcml0eUNvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFbnRyeVR5cGVzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0RW50cnlUeXBlcyhsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldERvbWFpblR5cGVzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0RG9tYWluVHlwZXMobGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXVzZUNvZGVzKCk6IFByb21pc2U8Q2F1c2VDb2RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0Q2F1c2VDb2RlcygpO1xuICB9XG5cbiAgcHVibGljIGdldEluT3V0Q29sbGVjdGlvbihsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q29Eb21haW5WYWx1ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEluT3V0Q29sbGVjdGlvbihsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldFNMQVR5cGVzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U0xBVHlwZXMobGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUdXJub3Zlckdyb3VwcygpOiBQcm9taXNlPFR1cm5vdmVyR3JvdXBJbWFnZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRUdXJub3Zlckdyb3VwcygpO1xuICB9XG5cbiAgcHVibGljIGdldFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZXMoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZXMoZ29vZElkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXJrZXRpbmdDb2RlcygpOiBQcm9taXNlPE1hcmtldGluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldE1hcmtldGluZ0NvZGVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJ0aWNsZXMocmVxdWVzdDogQXJ0aWNsZUV4dGVuZGVkUmVxdWVzdCk6IFByb21pc2U8QXJ0aWNsZUxpZ2h0W10+IHtcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLnNlYXJjaEFydGljbGVzKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGdldEFydGljbGVMaXN0V2l0aEJhcmNvZGVBcnRpY2xlTnJFYW5Db2RlKHNlYXJjaDogc3RyaW5nKTogUHJvbWlzZTxBcnRpY2xlTGlnaHRbXT4ge1xuICAgIHJldHVybiB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0QXJ0aWNsZUxpc3RXaXRoQmFyY29kZUFydGljbGVOckVhbkNvZGUoc2VhcmNoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYWluQXJ0aWNsZXMoKTogUHJvbWlzZTxNYWluQXJ0aWNsZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRNYWluQXJ0aWNsZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWxpdmVyeU1ldGhvZHMoKTogUHJvbWlzZTxEZWxpdmVyeU1ldGhvZFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5TWV0aG9kcygpO1xuICB9XG5cbiAgcHVibGljIGdldERlbGl2ZXJ5T3B0aW9ucygpOiBQcm9taXNlPERlbGl2ZXJ5T3B0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlPcHRpb25zKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2FsZXNQZXJzb25zKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxTYWxlc1BlcnNvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFNhbGVzUGVyc29ucyhkYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXRhaWxTdGFkaXVtcygpOiBQcm9taXNlPFJldGFpbFN0YWRpdW1bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRSZXRhaWxTdGFkaXVtcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFdlYlNlc3Npb25UcmFuc2FjdGlvbkxpbmUodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIGFydGljbGVOdW1iZXI6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFkZFdlYlNlc3Npb25UcmFuc2FjdGlvbkxpbmUodHJhbnNhY3Rpb25VdWlkLCBhcnRpY2xlTnVtYmVyLCBxdWFudGl0eSk7XG4gICAgdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVFeHRlbmRlZChhcnRpY2xlTnI6IHN0cmluZyk6IFByb21pc2U8QXJ0aWNsZUV4dGVuZGVkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVFeHRlbmRlZChhcnRpY2xlTnIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZEFydGljbGUoYXJ0aWNsZU5vOiBzdHJpbmcsIHF1YW50aXR5OiBudW1iZXIgPSAxLCBhYm92ZUxpbmVOcjogbnVtYmVyID0gMCwgYmVsb3dMaW5lTnI6IG51bWJlciA9IDAsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUsIHNob3dMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuYWRkVHJhbnNhY3Rpb25MaW5lKGFydGljbGVObywgcXVhbnRpdHksIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOciwgc2hvd0xvYWRlcik7XG4gICAgaWYgKHJlc3BvbnNlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBzYXZlVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFRyYW5zYWN0aW9uTGluZShhcnRpY2xlTm86IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciA9IDEsIGFib3ZlTGluZU5yOiBudW1iZXIgPSAwLCBiZWxvd0xpbmVOcjogbnVtYmVyID0gMCwgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNyZWF0ZWQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCFjcmVhdGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25MaW5lQWRkZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkVHJhbnNhY3Rpb25MaW5lKFxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgYXJ0aWNsZU5vLCBxdWFudGl0eSwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yLCBzaG93TG9hZGVyKTtcbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQ2F0RmFybUFydGljbGUoY2F0YWxvZ0lkOiBudW1iZXIsIGpzb25BcnRpY2xlU3RyaW5nOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBqc29uQXJ0aWNsZU9iamVjdDogYW55ID0gSlNPTi5wYXJzZShqc29uQXJ0aWNsZVN0cmluZyk7XG4gICAgY29uc3QgYXJ0aWNsZVRyZWU6IEFydGljbGVGbGF0VHJlZURUTyA9IHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVGbGF0VHJlZURUTywganNvbkFydGljbGVPYmplY3QuYXJ0aWNsZVRyZWUpIGFzIEFydGljbGVGbGF0VHJlZURUTztcbiAgICBsZXQgYXJ0TnI6IHN0cmluZyA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5zdG9yZUNhdEZhcm1Db21wb3NpdGlvbkFydGljbGUoY2F0YWxvZ0lkLCBhcnRpY2xlVHJlZSk7XG4gICAgYXdhaXQgdGhpcy5hZGRBcnRpY2xlKGFydE5yLCBqc29uQXJ0aWNsZU9iamVjdC5xdWFudGl0eSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkRXh0ZXJuYWxDYXRhbG9nQXJ0aWNsZShyZXF1ZXN0OiBFeHRlcm5hbENhdGFsb2dBZGRBcnRpY2xlUmVxdWVzdCwgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5hZGRFeHRlcm5hbENhdGFsb2dBcnRpY2xlV2l0aFJhd0RhdGEocmVxdWVzdC5jYXRhbG9nSWQsIHJlcXVlc3QuYXJ0aWNsZUpzb24sIHNob3dMb2FkZXIpO1xuICB9XG5cblxuICBwdWJsaWMgYXN5bmMgYWRkRXh0ZXJuYWxDYXRhbG9nQXJ0aWNsZUZyb21Hb29kSWQoanNvbkFydGljbGVTdHJpbmc6IHN0cmluZywgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QganNvbkFydGljbGVPYmplY3Q6IGFueSA9IEpTT04ucGFyc2UoanNvbkFydGljbGVTdHJpbmcpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuYWRkVHJhbnNhY3Rpb25MaW5lKGpzb25BcnRpY2xlT2JqZWN0LnNrdSwganNvbkFydGljbGVPYmplY3QucXVhbnRpdHksIDAsIDAsIHNob3dMb2FkZXIpO1xuICAgIGNvbnN0IGhhbmRsZWQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSwgdHJ1ZSk7XG4gICAgaWYgKGhhbmRsZWQgJiYganNvbkFydGljbGVPYmplY3QucHJpY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVQcmljZVRyYW5zYWN0aW9uTGluZShyZXNwb25zZS50cmFuc2FjdGlvbkluZm8udXVpZCwgcmVzcG9uc2UubGluZU9wZXJhdGlvblN0YXR1c2VzWzBdLnV1aWQsIGpzb25BcnRpY2xlT2JqZWN0LnByaWNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkRXh0ZXJuYWxDYXRhbG9nQXJ0aWNsZVdpdGhSYXdEYXRhKGNhdGFsb2dJZDogbnVtYmVyLCBqc29uQXJ0aWNsZVN0cmluZzogc3RyaW5nLCBzaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjcmVhdGVkOiBib29sZWFuID0gYXdhaXQgdGhpcy5fY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIGlmICghY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uTGluZUFkZGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFkZEV4dGVybmFsQ2F0YWxvZ0FydGljbGVzVG9UcmFuc2FjdGlvbihcbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIGNhdGFsb2dJZCwganNvbkFydGljbGVTdHJpbmcsIHNob3dMb2FkZXIpO1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYXltZW50TGluZVRvVHJhbnNhY3Rpb24ocmVxdWVzdDogVHJhbnNhY3Rpb25BZGRQYXltZW50TGluZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjcmVhdGVkOiBib29sZWFuID0gYXdhaXQgdGhpcy5fY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIGlmICghY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uTGluZUFkZGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFkZFBheW1lbnRMaW5lVG9UcmFuc2FjdGlvbihyZXF1ZXN0KTtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVGV4dExpbmUoc2hvd09uRG9jdW1lbnRzOiBudW1iZXIsIHRleHQ6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIGFydGljbGVCb3VuZDogYm9vbGVhbiwgcmVmQXJ0aWNsZUxpbmVOcjogbnVtYmVyLCBhYm92ZUxpbmVOcj86IG51bWJlciwgYmVsb3dMaW5lTnI/OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjcmVhdGVkOiBib29sZWFuID0gYXdhaXQgdGhpcy5fY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIGlmICghY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkVGV4dExpbmVUb1RyYW5zYWN0aW9uKFxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgc2hvd09uRG9jdW1lbnRzLCB0ZXh0LCBhbW91bnQsIGFydGljbGVCb3VuZCwgcmVmQXJ0aWNsZUxpbmVOciwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVRleHRMaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgc2hvd09uRG9jdW1lbnRzOiBudW1iZXIsIHRleHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci51cGRhdGVUZXh0TGluZSh1dWlkLCBsaW5lVXVpZCwgc2hvd09uRG9jdW1lbnRzLCB0ZXh0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZUxpbmVTZXF1ZW5jZShsaW5lVXVpZDogc3RyaW5nLCBhYm92ZUxpbmVOcj86IG51bWJlciwgYmVsb3dMaW5lTnI/OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlTGluZVNlcXVlbmNlKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBsaW5lVXVpZCwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvbkxpbmVVdWlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5hdXRvU2F2ZSkgeyAvLyBUT0RPOiBmaXggdGhpcyBuYXN0eSB0aGluZ1xuICAgICAgYXdhaXQgdGhpcy5fY2hlY2tBbmRBZGRSZWxhdGlvblRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kZWxldGVUcmFuc2FjdGlvbkxpbmUodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIHRyYW5zYWN0aW9uTGluZVV1aWQpO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMubWFudWFsU2F2ZVBhcmFtKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHRyYW5zYWN0aW9uVXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBuZXdRdWFudGl0eTogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYXV0b1NhdmUpIHsgLy8gVE9ETzogZml4IHRoaXMgbmFzdHkgdGhpbmdcbiAgICAgIGF3YWl0IHRoaXMuX2NoZWNrQW5kQWRkUmVsYXRpb25UcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eSh0cmFuc2FjdGlvblV1aWQsIGxpbmVVdWlkLCBuZXdRdWFudGl0eSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm1hbnVhbFNhdmVQYXJhbSkge1xuICAgICAgYXdhaXQgdGhpcy5yb2xsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZHNSZWNlaXB0SGlzdG9yeSh0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxHb29kc1JlY2VpcHRIaXN0b3J5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RzUmVjZWlwdEhpc3RvcnkodHJhbnNJZCwgbGluZU5yKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyUmVjZWl2ZUdvb2RzLm5leHQodHJ1ZSk7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5yZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJSZWNlaXZlR29vZHMubmV4dChmYWxzZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IHRydWU7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyQ29ycmVjdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlclJlY2VpdmVHb29kcy5uZXh0KHRydWUpO1xuICAgICAgbGV0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJSZWNlaXZlR29vZHMubmV4dChmYWxzZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IHRydWU7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBBbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckFsbG9jYXRlR29vZHMubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJBbGxvY2F0ZUdvb2RzLm5leHQoZmFsc2UpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlckNvcnJlY3Rpb24odHJhbnNhY3Rpb25JZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHJlcXVlc3Q6IEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckFsbG9jYXRlR29vZHMubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvbihyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyQWxsb2NhdGVHb29kcy5uZXh0KGZhbHNlKTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0R29vZHNUb0JlUGlja2VkRm9yU2FsZXNPcmRlcih0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcmVxdWVzdDogR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHb29kc1RvQmVQaWNrZWQubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnNldEdvb2RzVG9CZVBpY2tlZEZvclNhbGVzT3JkZXIocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckdvb2RzVG9CZVBpY2tlZC5uZXh0KGZhbHNlKTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0R29vZHNQaWNrZWRGb3JPcmRlcih0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcmVxdWVzdDogR29vZHNQaWNrZWRSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHb29kc1BpY2tlZC5uZXh0KHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2V0R29vZHNQaWNrZWRGb3JPcmRlcihyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyR29vZHNQaWNrZWQubmV4dChmYWxzZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IHRydWU7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUdvb2RzUGlja2VkKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBkZWxldGVHb29kc1BpY2tlZEZvck9yZGVyUmVxdWVzdDogRGVsZXRlR29vZHNQaWNrZWRGb3JPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kZWxldGVHb29kc1BpY2tlZChkZWxldGVHb29kc1BpY2tlZEZvck9yZGVyUmVxdWVzdCk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IHRydWU7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUdvb2RzVG9CZVBpY2tlZCh0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgZGVsZXRlR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0OiBEZWxldGVHb29kc1RvQmVQaWNrZWRGb3JPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kZWxldGVHb29kc1RvQmVQaWNrZWQoZGVsZXRlR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0KTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbihcbiAgICB0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbjogR2V0UHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbiwgYW5hbHlzaXNJZDogbnVtYmVyLCBzZWxlY3RlZExpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbi5uZXh0KHRydWUpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uKHB1cmNoYXNlT3JkZXJDb25maXJtYXRpb24pO1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuX2NoZWNrQW5kU2F2ZUxpbmVzRm9yQUlDb25maXJtYXRpb24odHJhbnNhY3Rpb25JZCwgYW5hbHlzaXNJZCwgc2VsZWN0ZWRMaW5lcyk7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLm9yZGVyQ29uZmlybWF0aW9uRHJvcHBlZC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uub3JkZXJDb25maXJtYXRpb25SZXNldC5uZXh0KCk7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uLm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVB1cmNoYXNlUG9ydGFsTGluZXModHJhbnNhY3Rpb25JZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHB1cmNoYXNlUG9ydGFsTGluZTogUHVyY2hhc2VQb3J0YWxMaW5lKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ubmV4dCh0cnVlKTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IudXBkYXRlUHVyY2hhc2VQb3J0YWxMaW5lcyhwdXJjaGFzZVBvcnRhbExpbmUpO1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VGV4dFR5cGVzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VGV4dFR5cGVzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8U3RhbmRhcmRUZXh0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xuICB9XG5cbiAgcHVibGljIGdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1OiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q291bnRyeShjb3VudHJ5Q29kZTogc3RyaW5nKTogUHJvbWlzZTxDb3VudHJ5PiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldENvdW50cnkoY291bnRyeUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldENhc2hSZWdpc3RlcnMoYnJhbmNoPzogc3RyaW5nLCBncm91cD86IG51bWJlcik6IFByb21pc2U8Q2FzaFJlZ2lzdGVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0Q2FzaFJlZ2lzdGVycyhicmFuY2gsIGdyb3VwLCB0aGlzLmNhc2hSZWdpc3RlcnNEaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzaERyYXdlcnMoY2FzaERyYXdlcnNSZXF1ZXN0OiBDYXNoRHJhd2Vyc1JlcXVlc3QpOiBQcm9taXNlPENhc2hEcmF3ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRDYXNoRHJhd2VycyhjYXNoRHJhd2Vyc1JlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGdldFByaWNlTGlzdHMoKTogUHJvbWlzZTxQcmljZUxpc3RbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRQcmljZUxpc3RzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmF0TGlzdHMoKTogUHJvbWlzZTxWYXRbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRWYXRMaXN0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNWYXRDb2Rlcyh0eXBlOiBzdHJpbmcsIGRhdGU6IERhdGUpOiBQcm9taXNlPFZhdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFRyYW5zVmF0Q29kZXModHlwZSwgZGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGFncyhjYXRlZ29yeTogbnVtYmVyKTogUHJvbWlzZTxUYWdbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRUYWdzKGNhdGVnb3J5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPbkhvbGRDb2RlcygpOiBQcm9taXNlPE9uSG9sZENvZGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRPbkhvbGRDb2RlcygpO1xuICB9XG5cbiAgcHVibGljIGdldFdhcmVob3VzZXMoKTogUHJvbWlzZTxXYXJlaG91c2VbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRXYXJlaG91c2VzKHRoaXMuY3VycmVudEJyYW5jaCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0V2FyZWhvdXNlU3RvY2tJbmZvQnlHb29kQW5kQnJhbmNoKGdvb2RJZDogbnVtYmVyLCB0cmFuc2FjdGlvbkluZm8/OiBUcmFuc2FjdGlvbkluZm8pOiBQcm9taXNlPFdhcmVob3VzZVN0b2NrSW5mb1tdPiB7XG4gICAgbGV0IHRyYW5zYWN0aW9uQnJhbmNoOiBzdHJpbmc7XG5cbiAgICBpZiAodHJhbnNhY3Rpb25JbmZvICYmIHRyYW5zYWN0aW9uSW5mby5icmFuY2gpIHtcbiAgICAgIHRyYW5zYWN0aW9uQnJhbmNoID0gdHJhbnNhY3Rpb25JbmZvLmJyYW5jaC5yZWxhdGlvbk5yO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5icmFuY2gpXG4gICAgICB0cmFuc2FjdGlvbkJyYW5jaCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5icmFuY2gucmVsYXRpb25OcjtcbiAgICBlbHNlIHtcbiAgICAgIHRyYW5zYWN0aW9uQnJhbmNoID0gdGhpcy5jdXJyZW50QnJhbmNoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRXYXJlaG91c2VTdG9ja0luZm9CeUdvb2RBbmRCcmFuY2goZ29vZElkLCB0cmFuc2FjdGlvbkJyYW5jaCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWF4Q29uZmlybWVkRGVsaXZlcnlEYXRlRm9yUHVyY2hhc2VPcmRlcih0cmFuc0lkOiBudW1iZXIpOiBQcm9taXNlPERhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0TWF4Q29uZmlybWVkRGVsaXZlcnlEYXRlRm9yUHVyY2hhc2VPcmRlcih0cmFuc0lkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIaXN0b3JpY1N0YXRlVmFsdWVzKCk6IFByb21pc2U8Q29kZURlc2NyaXB0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0SGlzdG9yaWNTdGF0ZVZhbHVlcygpO1xuICB9XG5cbiAgcHVibGljIGdldEN1c3RvbWVyR3JvdXBzKCk6IFByb21pc2U8Q3VzdG9tZXJHcm91cFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEN1c3RvbWVyR3JvdXBzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0V29ya0Zsb3dTdGF0dXNlcyh0cmFuc2FjdGlvbktpbmQ6IFRyYW5zYWN0aW9uS2luZCk6IFByb21pc2U8V29ya0Zsb3dTdGF0dXNbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRXb3JrRmxvd1N0YXR1c2VzKHRyYW5zYWN0aW9uS2luZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9ja1B1cmNoYXNlUG9ydGFsTGluZXModHJhbnNJZFB1cmNoYXNlOiBudW1iZXIsIGxpbmVJZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmxvY2tQdXJjaGFzZVBvcnRhbExpbmVzKHRyYW5zSWRQdXJjaGFzZSwgbGluZUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBdmFpbGFibGVTdG9ja0dyb3VwZWRCeVdMQlNCeVRyYW5zSWRMaW5lTnIodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8QXZhaWxhYmxlU3RvY2tbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRBdmFpbGFibGVTdG9ja0dyb3VwZWRCeVdMQlNCeVRyYW5zSWRMaW5lTnIodHJhbnNJZCwgbGluZU5yKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBdmFpbGFibGVTdG9ja0ZvclN1cHBsaWVyKGdvb2RJZDogbnVtYmVyLCBzdXBwbGllclJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8U3VwcGxpZXJBcnRpY2xlU3RvY2tGb3JlY2FzdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRBdmFpbGFibGVTdG9ja0ZvclN1cHBsaWVyKGdvb2RJZCwgc3VwcGxpZXJSZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kc0FsbG9jYXRpb25IaXN0b3J5KHRyYW5zSWQ6IG51bWJlciwgbGluZU5yOiBudW1iZXIpOiBQcm9taXNlPEdvb2RzQWxsb2NhdGlvbkhpc3Rvcnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0R29vZHNBbGxvY2F0aW9uSGlzdG9yeSh0cmFuc0lkLCBsaW5lTnIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEdvb2RzVG9CZVBpY2tlZEhpc3RvcnkodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8R29vZHNUb0JlUGlja2VkSGlzdG9yeT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRHb29kc1RvQmVQaWNrZWRIaXN0b3J5KHRyYW5zSWQsIGxpbmVOcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZHNQaWNrZWRIaXN0b3J5KHRyYW5zSWQ6IG51bWJlciwgbGluZU5yOiBudW1iZXIpOiBQcm9taXNlPEdvb2RzUGlja2VkSGlzdG9yeT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRHb29kc1BpY2tlZEhpc3RvcnkodHJhbnNJZCwgbGluZU5yKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPcmRlckNvbmZpcm1hdGlvbkVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRPcmRlckNvbmZpcm1hdGlvbkVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE9yZGVyQ29uZmlybWF0aW9uUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9yZGVyQ29uZmlybWF0aW9uUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25EZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRPcmRlckNvbmZpcm1hdGlvbkRlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yT3JkZXJDb25maXJtYXRpb24odHJhbnNhY3Rpb25VVUlEKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvck9yZGVyQ29uZmlybWF0aW9uKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnRPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBQcmludE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckNvbmZpcm1hdGlvbi5uZXh0KHRydWUpO1xuICAgIGNvbnN0IHJlc3VsdDogQ29Eb2N1bWVudCB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludE9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3QpO1xuICAgIGlmIChyZXN1bHQgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBDb0RvY3VtZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJDb25maXJtYXRpb24ubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludEhpc3RvcmljT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdDogUHJpbnRIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRIaXN0b3JpY09yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0T3JkZXJDb25maXJtYXRpb25CYXRjaChyZXF1ZXN0OiBCYXRjaFRyYW5zYWN0aW9uU2VuZGluZ1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc3RhcnRPcmRlckNvbmZpcm1hdGlvbkJhdGNoKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0RGVsaXZlcnlOb3Rlc0JhdGNoKHJlcXVlc3Q6IEJhdGNoVHJhbnNhY3Rpb25TZW5kaW5nUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zdGFydERlbGl2ZXJ5Tm90ZXNCYXRjaChyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFydEludm9pY2VCYXRjaChyZXF1ZXN0OiBCYXRjaFRyYW5zYWN0aW9uU2VuZGluZ1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc3RhcnRJbnZvaWNlQmF0Y2gocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QmF0Y2hKb2JQcm9ncmVzc2VzRm9yVGhlVXNlcigpOiBQcm9taXNlPEJhdGNoSm9iUHJvZ3Jlc3NbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRCYXRjaEpvYlByb2dyZXNzZXNGb3JUaGVVc2VyKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBFbWFpbE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckNvbmZpcm1hdGlvbi5uZXh0KHRydWUpO1xuICAgIGNvbnN0IHJlc3VsdDogQ29Eb2N1bWVudCB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbE9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3QpO1xuICAgIGlmIChyZXN1bHQgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBDb0RvY3VtZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJDb25maXJtYXRpb24ubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbEhpc3RvcmljT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdDogRW1haWxIaXN0b3JpY09yZGVyQ29uZmlybWF0aW9uUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbEhpc3RvcmljT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdDogUGRmT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyQ29uZmlybWF0aW9uLm5leHQodHJ1ZSk7XG4gICAgY29uc3QgcmVzdWx0OiBDb0RvY3VtZW50IHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnBkZk9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3QpO1xuICAgIGlmIChyZXN1bHQgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBDb0RvY3VtZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJDb25maXJtYXRpb24ubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZIaXN0b3JpY09yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IFBkZkhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZIaXN0b3JpY09yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50UHVyY2hhc2VPcmRlcihyZXF1ZXN0OiBQcmludFB1cmNoYXNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50UHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbFB1cmNoYXNlT3JkZXIocmVxdWVzdDogRW1haWxQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbFB1cmNoYXNlT3JkZXIocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmUHVyY2hhc2VPcmRlcihyZXF1ZXN0OiBQZGZQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZQdXJjaGFzZU9yZGVyKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlV2ViU2VydmljZU9yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZVdlYlNlcnZpY2VPcmRlcih0cmFuc2FjdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYW5QdXJjaGFzZU9yZGVyQmVTZW5kQnlXZWJzZXJ2aWNlKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jYW5QdXJjaGFzZU9yZGVyQmVTZW5kQnlXZWJzZXJ2aWNlKHRyYW5zYWN0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlT3JkZXJFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VPcmRlckVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlT3JkZXJQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VPcmRlclByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlT3JkZXJEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQdXJjaGFzZU9yZGVyRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNQcmludElzRGVmYXVsdFNlbmRNZXRob2RGb3JQdXJjaGFzZU9yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5pc1ByaW50SXNEZWZhdWx0U2VuZE1ldGhvZEZvclB1cmNoYXNlT3JkZXIodHJhbnNhY3Rpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnNGb3JTYWxlc09yZGVyKHJlcXVlc3Q6IFByaW50UHVyY2hhc2VPcmRlckZvclNhbGVzT3JkZXJSZXF1ZXN0LCB2ZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24ocmVxdWVzdC50cmFuc0lkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVycy5uZXh0KHRydWUpO1xuICAgICAgLy8gZ2V0IGxpbmVOdW1iZXJzXG4gICAgICBjb25zdCBsaW5lTnVtYmVyczogbnVtYmVyW10gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcihsID0+IGwuc2VsZWN0ZWQpLm1hcChsID0+IGwubGluZU5yKTtcbiAgICAgIHJlcXVlc3QubGluZU51bWJlcnMgPSBsaW5lTnVtYmVycztcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnNGb3JTYWxlc09yZGVyKHJlcXVlc3QpO1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQocmVxdWVzdC50cmFuc0lkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHZW5lcmF0ZVB1cmNoYXNlT3JkZXJzLm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlQWR2aWNlTGluZXMoZmlsdGVyczogUHVyY2hhc2VBZHZpY2VGaWx0ZXJzLCBnb29kSWQ/OiBudW1iZXIsIHNob3dMb2FkZXI/OiBib29sZWFuKTogUHJvbWlzZTxQdXJjaGFzZUFkdmljZUxpbmVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQdXJjaGFzZUFkdmljZUxpbmVzKGZpbHRlcnMsIGdvb2RJZCwgc2hvd0xvYWRlcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnMocHVyY2hhc2VBZHZpY2VMaW5lczogUHVyY2hhc2VBZHZpY2VMaW5lW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnMocHVyY2hhc2VBZHZpY2VMaW5lcyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxEZWxpdmVyeU5vdGUoZW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0OiBFbWFpbERlbGl2ZXJ5Tm90ZVJlcXVlc3QpOiBQcm9taXNlPENvRG9jdW1lbnQgfCBib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJEZWxpdmVyeS5uZXh0KHRydWUpO1xuICAgIGxldCByZXN1bHQ6IENvRG9jdW1lbnQgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxEZWxpdmVyeU5vdGUoZW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcbiAgICBpZiAocmVzdWx0ICYmICEocmVzdWx0IGluc3RhbmNlb2YgQ29Eb2N1bWVudCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29tbWl0QW5kUmVmcmVzaFRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyRGVsaXZlcnkubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbEhpc3RvcmljRGVsaXZlcnlOb3RlKGVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0OiBFbWFpbEhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxIaXN0b3JpY0RlbGl2ZXJ5Tm90ZShlbWFpbEhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdCk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmRGVsaXZlcnlOb3RlKHBkZkRlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IFBkZkRlbGl2ZXJ5Tm90ZVJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQodHJ1ZSk7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZEZWxpdmVyeU5vdGUocGRmRGVsaXZlcnlOb3RlUmVxdWVzdCk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJEZWxpdmVyeS5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZIaXN0b3JpY0RlbGl2ZXJ5Tm90ZShwZGZIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IFBkZkhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmSGlzdG9yaWNEZWxpdmVyeU5vdGUocGRmSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludERlbGl2ZXJ5Tm90ZShwcmludERlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IFByaW50RGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQodHJ1ZSk7XG4gICAgbGV0IHJlc3VsdDogQ29Eb2N1bWVudCB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludERlbGl2ZXJ5Tm90ZShwcmludERlbGl2ZXJ5Tm90ZVJlcXVlc3QpO1xuICAgIGlmIChyZXN1bHQgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBDb0RvY3VtZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJEZWxpdmVyeS5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50RGVsaXZlcnlOb3RlcyhwcmludERlbGl2ZXJ5Tm90ZXNSZXF1ZXN0OiBQcmludERlbGl2ZXJ5Tm90ZXNSZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyRGVsaXZlcnkubmV4dCh0cnVlKTtcbiAgICBsZXQgcmVzdWx0OiBDb0RvY3VtZW50IHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50RGVsaXZlcnlOb3RlcyhwcmludERlbGl2ZXJ5Tm90ZXNSZXF1ZXN0KTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQoZmFsc2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnRIaXN0b3JpY0RlbGl2ZXJ5Tm90ZShwcmludEhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdDogUHJpbnRIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGUocHJpbnRIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5Tm90ZURlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5Tm90ZURlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5Tm90ZUVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeU5vdGVQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlOb3RlUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JJbnZvaWNlKHRyYW5zYWN0aW9uVVVJRCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JJbnZvaWNlKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxJbnZvaWNlKGVtYWlsSW52b2ljZVJlcXVlc3Q6IEVtYWlsSW52b2ljZVJlcXVlc3QpOiBQcm9taXNlPENvRG9jdW1lbnQgfCBib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ0ludm9pY2UubmV4dCh0cnVlKTtcbiAgICBsZXQgcmVzdWx0OiBDb0RvY3VtZW50IHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSW52b2ljZShlbWFpbEludm9pY2VSZXF1ZXN0KTtcbiAgICBpZiAocmVzdWx0ICYmICEocmVzdWx0IGluc3RhbmNlb2YgQ29Eb2N1bWVudCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29tbWl0QW5kUmVmcmVzaFRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdJbnZvaWNlLm5leHQoZmFsc2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxIaXN0b3JpY0ludm9pY2UoZW1haWxIaXN0b3JpY0ludm9pY2VSZXF1ZXN0OiBFbWFpbEhpc3RvcmljSW52b2ljZVJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSGlzdG9yaWNJbnZvaWNlKGVtYWlsSGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmSW52b2ljZShwZGZJbnZvaWNlUmVxdWVzdDogUGRmSW52b2ljZVJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nSW52b2ljZS5uZXh0KHRydWUpO1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmSW52b2ljZShwZGZJbnZvaWNlUmVxdWVzdCk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ0ludm9pY2UubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmSGlzdG9yaWNJbnZvaWNlKHBkZkhpc3RvcmljSW52b2ljZVJlcXVlc3Q6IFBkZkhpc3RvcmljSW52b2ljZVJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnBkZkhpc3RvcmljSW52b2ljZShwZGZIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludEludm9pY2UocHJpbnRJbnZvaWNlUmVxdWVzdDogUHJpbnRJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nSW52b2ljZS5uZXh0KHRydWUpO1xuICAgIGxldCByZXN1bHQ6IENvRG9jdW1lbnQgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRJbnZvaWNlKHByaW50SW52b2ljZVJlcXVlc3QpO1xuICAgIGlmIChyZXN1bHQgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBDb0RvY3VtZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jb21taXRBbmRSZWZyZXNoVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ0ludm9pY2UubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludEhpc3RvcmljSW52b2ljZShwcmludEhpc3RvcmljSW52b2ljZVJlcXVlc3Q6IFByaW50SGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRIaXN0b3JpY0ludm9pY2UocHJpbnRIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbnZvaWNlRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW52b2ljZURlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBkZlBvc1JlY2VpcHQocGRmUG9zUmVjZWlwdFJlcXVlc3Q6IFBkZlBvc1JlY2VpcHRSZXF1ZXN0KTogUHJvbWlzZTxQZGZQb3NSZWNlaXB0UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmUG9zUmVjZWlwdChwZGZQb3NSZWNlaXB0UmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnRQb3NSZWNlaXB0KHByaW50UG9zUmVjZWlwdFJlcXVlc3Q6IFByaW50UG9zUmVjZWlwdFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRQb3NSZWNlaXB0KHByaW50UG9zUmVjZWlwdFJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50SGlzdG9yaWNQb3NSZWNlaXB0KHByaW50SGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdDogUHJpbnRIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SGlzdG9yaWNQb3NSZWNlaXB0KHByaW50SGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxQb3NSZWNlaXB0KGVtYWlsUG9zUmVjZWlwdFJlcXVlc3Q6IEVtYWlsUG9zUmVjZWlwdFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxQb3NSZWNlaXB0KGVtYWlsUG9zUmVjZWlwdFJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVtYWlsSGlzdG9yaWNQb3NSZWNlaXB0KGVtYWlsSGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdDogRW1haWxIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSGlzdG9yaWNQb3NSZWNlaXB0KGVtYWlsSGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UG9zUmVjZWlwdEVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQb3NSZWNlaXB0RW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UG9zUmVjZWlwdFByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQb3NSZWNlaXB0UHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JQb3NSZWNlaXB0KHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvclBvc1JlY2VpcHQodHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbnZvaWNlRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEludm9pY2VFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbnZvaWNlUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEludm9pY2VQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRRdW90YXRpb25EZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRRdW90YXRpb25EZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbFF1b3RhdGlvbihlbWFpbFF1b3RhdGlvblJlcXVlc3Q6IEVtYWlsUXVvdGF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlclF1b3RhdGlvbi5uZXh0KHRydWUpO1xuICAgIGxldCByZXN1bHQ6IENvRG9jdW1lbnQgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxRdW90YXRpb24oZW1haWxRdW90YXRpb25SZXF1ZXN0KTtcbiAgICBpZiAocmVzdWx0ICYmICEocmVzdWx0IGluc3RhbmNlb2YgQ29Eb2N1bWVudCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29tbWl0QW5kUmVmcmVzaFRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyUXVvdGF0aW9uLm5leHQoZmFsc2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxIaXN0b3JpY1F1b3RhdGlvbihlbWFpbEhpc3RvcmljUXVvdGF0aW9uUmVxdWVzdDogRW1haWxIaXN0b3JpY1F1b3RhdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSGlzdG9yaWNRdW90YXRpb24oZW1haWxIaXN0b3JpY1F1b3RhdGlvblJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBkZlF1b3RhdGlvbihwZGZRdW90YXRpb25SZXF1ZXN0OiBQZGZRdW90YXRpb25SZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJRdW90YXRpb24ubmV4dCh0cnVlKTtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnBkZlF1b3RhdGlvbihwZGZRdW90YXRpb25SZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlclF1b3RhdGlvbi5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZIaXN0b3JpY1F1b3RhdGlvbihwZGZIaXN0b3JpY1F1b3RhdGlvblJlcXVlc3Q6IFBkZkhpc3RvcmljUXVvdGF0aW9uUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmSGlzdG9yaWNRdW90YXRpb24ocGRmSGlzdG9yaWNRdW90YXRpb25SZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludFF1b3RhdGlvbihwcmludFF1b3RhdGlvblJlcXVlc3Q6IFByaW50UXVvdGF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlclF1b3RhdGlvbi5uZXh0KHRydWUpO1xuICAgIGxldCByZXN1bHQ6IENvRG9jdW1lbnQgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRRdW90YXRpb24ocHJpbnRRdW90YXRpb25SZXF1ZXN0KTtcbiAgICBpZiAocmVzdWx0ICYmICEocmVzdWx0IGluc3RhbmNlb2YgQ29Eb2N1bWVudCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29tbWl0QW5kUmVmcmVzaFRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyUXVvdGF0aW9uLm5leHQoZmFsc2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnRIaXN0b3JpY1F1b3RhdGlvbihwcmludEhpc3RvcmljUXVvdGF0aW9uUmVxdWVzdDogUHJpbnRIaXN0b3JpY1F1b3RhdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SGlzdG9yaWNRdW90YXRpb24ocHJpbnRIaXN0b3JpY1F1b3RhdGlvblJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFF1b3RhdGlvbkVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRRdW90YXRpb25FbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRRdW90YXRpb25QcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UXVvdGF0aW9uUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JRdW90YXRpb24odHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yUXVvdGF0aW9uKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UGFja2FnZVN0aWNrZXJQcmludExheW91dHMoKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFBhY2thZ2VTdGlja2VyUHJpbnRMYXlvdXRzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJpbnRlcnMoKTogUHJvbWlzZTxQcmludGVyW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHJpbnRlcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0UHJpbnRlcihyZXBvcnRJZDogbnVtYmVyLCB0eXBlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWZhdWx0UHJpbnRlcihyZXBvcnRJZCwgdHlwZSk7XG4gIH1cblxuXG5cbiAgcHVibGljIGFzeW5jIGdldENhc2hUeXBlcyh0eXBlOiBzdHJpbmcpOiBQcm9taXNlPENhc2hUeXBlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q2FzaFR5cGVzKHR5cGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFBvc0dyb3VwcygpOiBQcm9taXNlPFBvc0dyb3VwW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UG9zR3JvdXBzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVuY2llcyhhY3RpdmU6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxDdXJyZW5jeVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEN1cnJlbmNpZXMoYWN0aXZlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcm9qZWN0Q29kZXMoZGF0ZTogRGF0ZSk6IFByb21pc2U8UHJvamVjdENvZGVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQcm9qZWN0Q29kZXMoZGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsUHJvamVjdENvZGVzKCk6IFByb21pc2U8UHJvamVjdENvZGVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRBbGxQcm9qZWN0Q29kZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQcm9qZWN0Q29kZShwcm9qZWN0Q29kZTogUHJvamVjdENvZGUpOiBQcm9taXNlPFByb2plY3RDb2RlPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmFkZFByb2plY3RDb2RlKHByb2plY3RDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQYXltZW50Q29uZGl0aW9ucyhuYW1lPzogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50Q29uZGl0aW9uW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UGF5bWVudENvbmRpdGlvbnMobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJMaW5lU2V0Q2F0ZWdvcmllcygpOiBQcm9taXNlPE9yZGVyTGluZVNldENhdGVnb3J5W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0T3JkZXJMaW5lU2V0Q2F0ZWdvcmllcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VXaXphcmQoKTogUHJvbWlzZTxTZXJ2aWNlV2l6YXJkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNlcnZpY2VXaXphcmQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cHNlcnRTZXJ2aWNlV2l6YXJkKHJlcXVlc3Q6IFNlcnZpY2VXaXphcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IudXBzZXJ0U2VydmljZVdpemFyZChyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTZXJ2aWNlVHlwZXMoKTogUHJvbWlzZTxTZXJ2aWNlVHlwZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNlcnZpY2VUeXBlcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZE9yZGVyTGluZVNldChyZXF1ZXN0OiBUcmFuc2FjdGlvbkFkZE9yZGVyTGluZVNldFRleHRMaW5lUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCBhd2FpdCB0aGlzLmNvbm5lY3Rvci5hZGRPcmRlckxpbmVTZXQocmVxdWVzdCk7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVPcmRlckxpbmVTZXQocmVxdWVzdDogT3JkZXJMaW5lU2V0RFRPKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPVxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IGF3YWl0IHRoaXMuY29ubmVjdG9yLnVwZGF0ZU9yZGVyTGluZVNldChyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZU9yZGVyTGluZVNldCh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lT3JkZXJMaW5lU2V0KHV1aWQsIGxpbmVVdWlkLCBjb2RlKTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRKb2luZWRUYWdzKHRhYmxlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogUHJvbWlzZTxUYWdUcmVlSXRlbVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEpvaW5lZFRhZ3ModGFibGUsIGtleSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbWVyZ2VKb2luZWRUYWdzKHRhYmxlOiBzdHJpbmcsIGtleTogc3RyaW5nLCB0YWdzOiBUYWdUcmVlSXRlbVtdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLm1lcmdlSm9pbmVkVGFncyh0YWJsZSwga2V5LCB0YWdzKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUYWdzRnVsbFRyZWUoY2F0ZWdvcnk6IFRhZ0NhdGVnb3J5LCBpbmNsdWRlVGFnczogYm9vbGVhbik6IFByb21pc2U8VGFnVHJlZUl0ZW1bXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUYWdzRnVsbFRyZWUoY2F0ZWdvcnksIGluY2x1ZGVUYWdzKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbnRlcm5hbFBhcmFtZXRlcihwYXJhbTogSW50ZXJuYWxQYXJhbSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRJbnRlcm5hbFBhcmFtZXRlclZhbHVlKHBhcmFtKTtcbiAgICByZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UgPT09ICdKJztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPYmplY3RDb25maWd1cmF0aW9uKHNjcmVlbkNmZ01vZHVsZTogc3RyaW5nLCBwYXJhbXM/OiBzdHJpbmcgfCBzdHJpbmdbXSwgaW5zZXJ0TW9kZT86IGJvb2xlYW4pOiBQcm9taXNlPE9iamVjdENvbmZpZ3VyYXRpb25bXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRPYmplY3RDb25maWd1cmF0aW9uKHNjcmVlbkNmZ01vZHVsZSwgcGFyYW1zLCBpbnNlcnRNb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRIaXN0b3JpY0RvY3VtZW50cyh0cmFuc0lkOiBudW1iZXIsIGRvY3VtZW50Q29kZTogTGF5b3V0Q29kZSk6IFByb21pc2U8SGlzdG9yaWNSZXBvcnRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRIaXN0b3JpY0RvY3VtZW50cyh0cmFuc0lkLCBkb2N1bWVudENvZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFJlcG9ydEhlYWRlcnNCeVRyYW5zSWRBbmRMYXlvdXRDb2RlKHRyYW5zSWQ6IG51bWJlciwgZG9jdW1lbnRDb2RlOiBMYXlvdXRDb2RlKTogUHJvbWlzZTxIaXN0b3JpY1JlcG9ydFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFJlcG9ydEhlYWRlcnNCeVRyYW5zSWRBbmRMYXlvdXRDb2RlKHRyYW5zSWQsIGRvY3VtZW50Q29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdW5kb0RlbGl2ZXJ5QnlSZXBvcnRJZChyZXBvcnRJZDogbnVtYmVyKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci51bmRvRGVsaXZlcnlCeVJlcG9ydElkKHJlcG9ydElkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvclB1cmNoYXNlT3JkZXIodXVpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvclB1cmNoYXNlT3JkZXIodXVpZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlUmVjZWl2ZVNlbGVjdGVkUHVyY2hhc2VPcmRlcnMoZGF0ZTogRGF0ZSwgcGFja2luZ1NsaXBOcjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUuc2VsZWN0ZWQpO1xuICAgIGlmIChzZWxlY3RlZExpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVkR29vZHNSZXF1ZXN0OiBSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyUmVxdWVzdCA9IG5ldyBSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyUmVxdWVzdCgpO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QudHJhbnNJZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZDtcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnJlY2VpdmVkRGF0ZSA9IGRhdGU7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC5wYWNraW5nU2xpcE5yID0gcGFja2luZ1NsaXBOcjtcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnByaW50ZXJOYW1lID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnByaW50ZXJOYW1lO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucmVwb3J0SWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVwb3J0SWQ7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC5zYXZlRGVmYXVsdFByaW50ZXJGb3JBbGxVc2VycyA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5zYXZlRGVmYXVsdFByaW50ZXJGb3JBbGxVc2VycztcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnNhdmVEZWZhdWx0UHJpbnRlckZvclVzZXIgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uc2F2ZURlZmF1bHRQcmludGVyRm9yVXNlcjtcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnB1cmNoYXNlT3JkZXJMaW5lUmVjZWlwdERldGFpbHNEVE9TID0gW107XG4gICAgICBzZWxlY3RlZExpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgY29uc3QgZGV0YWlsOiBQdXJjaGFzZU9yZGVyTGluZVJlY2VpcHREZXRhaWxzID0gbmV3IFB1cmNoYXNlT3JkZXJMaW5lUmVjZWlwdERldGFpbHMoKTtcbiAgICAgICAgZGV0YWlsLmxpbmVOciA9IGxpbmUubGluZU5yO1xuICAgICAgICBkZXRhaWwucXVhbnRpdHlUb1JlY2VpdmUgPSBsaW5lLmFydGljbGVMaW5lU3RhdHVzLnF1YW50aXR5VG9SZWNlaXZlO1xuICAgICAgICBkZXRhaWwud2FyZWhvdXNlTnIgPSBsaW5lLndhcmVob3VzZU51bWJlcjtcbiAgICAgICAgZGV0YWlsLmxvY2F0aW9uTnIgPSBsaW5lLmxvY2F0aW9uTnI7XG4gICAgICAgIGRldGFpbC5iYXRjaE5yID0gbGluZS5iYXRjaE5yO1xuICAgICAgICBkZXRhaWwubnVtYmVyT2ZTdGlja2VycyA9IGxpbmUuc3RpY2tlckFtb3VudDtcbiAgICAgICAgZGV0YWlsLnByaW50ZXJOYW1lID0gbGluZS5wcmludGVyTmFtZTtcbiAgICAgICAgZGV0YWlsLnJlcG9ydElkID0gbGluZS5yZXBvcnRJZDtcbiAgICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucHVyY2hhc2VPcmRlckxpbmVSZWNlaXB0RGV0YWlsc0RUT1MucHVzaChkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5yZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKFxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uLCByZWNlaXZlZEdvb2RzUmVxdWVzdCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVBbGxvY2F0ZVNlbGVjdGVkUHVyY2hhc2VPcmRlcnMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUuc2VsZWN0ZWQpO1xuICAgIGlmIChzZWxlY3RlZExpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGFsbG9jYXRlR29vZHNSZXF1ZXN0OiBBbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlclJlcXVlc3QgPSBuZXcgQWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJSZXF1ZXN0KCk7XG4gICAgICBhbGxvY2F0ZUdvb2RzUmVxdWVzdC50cmFuc0lkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xuICAgICAgYWxsb2NhdGVHb29kc1JlcXVlc3Quc2FsZXNPcmRlckxpbmVBbGxvY2F0aW9uRGV0YWlsc0RUT1MgPSBbXTtcbiAgICAgIHNlbGVjdGVkTGluZXMuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICBjb25zdCBkZXRhaWw6IFNhbGVzT3JkZXJMaW5lQWxsb2NhdGlvbkRldGFpbHMgPSBuZXcgU2FsZXNPcmRlckxpbmVBbGxvY2F0aW9uRGV0YWlscygpO1xuICAgICAgICBkZXRhaWwubGluZU5yID0gbGluZS5saW5lTnI7XG4gICAgICAgIGRldGFpbC5xdWFudGl0eVRvQWxsb2NhdGUgPSBsaW5lLnF1YW50aXR5VG9BbGxvY2F0ZTtcbiAgICAgICAgZGV0YWlsLndhcmVob3VzZU5yID0gbGluZS53YXJlaG91c2VOdW1iZXI7XG4gICAgICAgIGRldGFpbC5sb2NhdGlvbk5yID0gbGluZS5sb2NhdGlvbk5yO1xuICAgICAgICBhbGxvY2F0ZUdvb2RzUmVxdWVzdC5zYWxlc09yZGVyTGluZUFsbG9jYXRpb25EZXRhaWxzRFRPUy5wdXNoKGRldGFpbCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKFxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uLCBhbGxvY2F0ZUdvb2RzUmVxdWVzdCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVTZXRTZWxlY3RlZExpbmVzVG9CZVBpY2tlZChwaWNraW5nRGF0ZTogRGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNlbGVjdGVkTGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnNlbGVjdGVkICYmIGxpbmUucXVhbnRpdHlUb0JlUGlja2VkID4gMCk7XG4gICAgaWYgKHNlbGVjdGVkTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZ29vZHNUb0JlUGlja2VkUmVxdWVzdDogR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0ID0gbmV3IEdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdCgpO1xuICAgICAgZ29vZHNUb0JlUGlja2VkUmVxdWVzdC50cmFuc0lkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xuICAgICAgZ29vZHNUb0JlUGlja2VkUmVxdWVzdC50b0JlUGlja2VkRGF0ZSA9IHBpY2tpbmdEYXRlO1xuICAgICAgZ29vZHNUb0JlUGlja2VkUmVxdWVzdC5saW5lcyA9IFtdO1xuICAgICAgc2VsZWN0ZWRMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGFpbDogR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0TGluZSA9IG5ldyBHb29kc1RvQmVQaWNrZWRGb3JPcmRlclJlcXVlc3RMaW5lKCk7XG4gICAgICAgIGRldGFpbC5saW5lTnIgPSBsaW5lLmxpbmVOcjtcbiAgICAgICAgZGV0YWlsLnF1YW50aXR5ID0gbGluZS5xdWFudGl0eVRvQmVQaWNrZWQ7XG4gICAgICAgIGdvb2RzVG9CZVBpY2tlZFJlcXVlc3QubGluZXMucHVzaChkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldEdvb2RzVG9CZVBpY2tlZEZvclNhbGVzT3JkZXIoXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24sIGdvb2RzVG9CZVBpY2tlZFJlcXVlc3QpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVTZXRTZWxlY3RlZExpbmVzVG9QaWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNlbGVjdGVkTGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnNlbGVjdGVkICYmIGxpbmUucXVhbnRpdHlQaWNrZWQgPiAwKTtcbiAgICBpZiAoc2VsZWN0ZWRMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBnb29kc1BpY2tlZFJlcXVlc3Q6IEdvb2RzUGlja2VkUmVxdWVzdCA9IG5ldyBHb29kc1BpY2tlZFJlcXVlc3QoKTtcbiAgICAgIGdvb2RzUGlja2VkUmVxdWVzdC50cmFuc0lkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xuICAgICAgZ29vZHNQaWNrZWRSZXF1ZXN0LmxpbmVzID0gW107XG4gICAgICBzZWxlY3RlZExpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgY29uc3QgZGV0YWlsOiBHb29kc1BpY2tlZFJlcXVlc3RMaW5lID0gbmV3IEdvb2RzUGlja2VkUmVxdWVzdExpbmUoKTtcbiAgICAgICAgZGV0YWlsLmxpbmVOciA9IGxpbmUubGluZU5yO1xuICAgICAgICBkZXRhaWwucXVhbnRpdHkgPSBsaW5lLnF1YW50aXR5UGlja2VkO1xuICAgICAgICBnb29kc1BpY2tlZFJlcXVlc3QubGluZXMucHVzaChkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldEdvb2RzUGlja2VkRm9yT3JkZXIoXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24sIGdvb2RzUGlja2VkUmVxdWVzdCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFB1cmNoYXNlT3JkZXJGb3JUcmFuc2FjdGlvbkxpbmUodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvSGlzdG9yeVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25JbmZvKHRyYW5zSWQsIGxpbmVOcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29tbWl0QW5kUmVmcmVzaFRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGVja0JyYW5jaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY3VycmVudEJyYW5jaCkge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IERpYWxvZ1Jlc3BvbnNlSW50ZXJmYWNlID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dCcmFuY2goKTtcbiAgICAgIGlmIChyZXNwb25zZS5idXR0b24gIT09IEFwcFBvcHVwQnV0dG9uVHlwZS5DYW5jZWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50QnJhbmNoID0gcmVzcG9uc2Uub3V0cHV0ID8gcmVzcG9uc2Uub3V0cHV0LnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uTWFyZ2luSW5mbyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25NYXJnaW5JbmZvPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uTWFyZ2luSW5mbyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50U2FsZXNPcmRlcnNPdmVydmlldyhyZXF1ZXN0OiBUcmFuc2FjdGlvblNlYXJjaFZpZXdSZXF1ZXN0KTogUHJvbWlzZTxQZGZUcmFuc2FjdGlvblNlYXJjaE92ZXJ2aWV3UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IucHJpbnRTYWxlc09yZGVyc092ZXJ2aWV3KHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWREb2N1bWVudHNPZlRyYW5zYWN0aW9uKGtleTogc3RyaW5nKTogUHJvbWlzZTxDb0RvY3VtZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubG9hZERvY3VtZW50c09mVHJhbnNhY3Rpb24oa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkRG9jdW1lbnRDb250ZW50KGRvY0lkOiBudW1iZXIsIHRodW1ibmFpbDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5sb2FkRG9jdW1lbnRDb250ZW50KGRvY0lkLCB0aHVtYm5haWwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG1lcmdlRG9jdW1lbnRPblRyYW5zYWN0aW9uKGtleTogc3RyaW5nLCBkb2N1bWVudDogQ29Eb2N1bWVudCk6IFByb21pc2U8Q29Eb2N1bWVudD4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5tZXJnZURvY3VtZW50T25UcmFuc2FjdGlvbihrZXksIGRvY3VtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVEb2N1bWVudChkb2N1bWVudElkOiBudW1iZXIpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZGVsZXRlRG9jdW1lbnQoZG9jdW1lbnRJZCk7XG4gIH1cblxuICAvKiAgcHVibGljIGxvY2tEb2N1bWVudChkb2N1bWVudElkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5sb2NrRG9jdW1lbnQoQ29Eb2N1bWVudCwgZG9jdW1lbnRJZCk7XG4gICAgfSovXG5cbiAgcHVibGljIGFzeW5jIGdldE9yZGVyTGluZXNQbGFubmVkKHJlcXVlc3Q6IE9yZGVyTGluZXNQbGFubmVkUmVxdWVzdCk6IFByb21pc2U8UGxhbk9yZGVyTGluZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldE9yZGVyTGluZXNQbGFubmVkKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFBsYW5PcmRlcih0cmFuc0lkOiBudW1iZXIpOiBQcm9taXNlPFBsYW5PcmRlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQbGFuT3JkZXIodHJhbnNJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UGFja2FnZUluZm9ybWF0aW9uKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nLCBsaW5lVVVJRDogc3RyaW5nKTogUHJvbWlzZTxQYWNrYWdlTFNQW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UGFja2FnZUluZm9ybWF0aW9uKHRyYW5zYWN0aW9uVVVJRCwgbGluZVVVSUQpO1xuICB9XG4gIHB1YmxpYyBhc3luYyBpbnNlcnRBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHkpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuaW5zZXJ0QWN0aXZpdHkoYWN0aXZpdHkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUFjdGl2aXR5KGFjdGl2aXR5OiBBY3Rpdml0eSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci51cGRhdGVBY3Rpdml0eShhY3Rpdml0eSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlQWN0aXZpdHkoYWN0aXZpdHk6IEFjdGl2aXR5KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZUFjdGl2aXR5KGFjdGl2aXR5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBY3Rpdml0aWVzRm9yVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTxBY3Rpdml0eVtdPiB7XG4gICAgY29uc3QgYWN0aXZlQWN0aXZpdGllczogQWN0aXZpdHlbXSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldENvbXBvbmVudEFjdGl2aXRpZXNXaXRob3V0UmVsYXRpb25GaWx0ZXJpbmcodHJhbnNhY3Rpb25JZCk7XG4gICAgY29uc3QgaGlzdG9yaWNBY3Rpdml0aWVzOiBBY3Rpdml0eVtdID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SGlzdG9yaWNBY3Rpdml0aWVzKHRyYW5zYWN0aW9uSWQpO1xuICAgIGlmIChhY3RpdmVBY3Rpdml0aWVzICYmIGFjdGl2ZUFjdGl2aXRpZXMubGVuZ3RoICE9PSAwICYmIGhpc3RvcmljQWN0aXZpdGllcyAmJiBoaXN0b3JpY0FjdGl2aXRpZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICByZXR1cm4gYWN0aXZlQWN0aXZpdGllcy5jb25jYXQoaGlzdG9yaWNBY3Rpdml0aWVzKTtcbiAgICB9IGVsc2UgaWYgKGFjdGl2ZUFjdGl2aXRpZXMgJiYgYWN0aXZlQWN0aXZpdGllcy5sZW5ndGggIT09IDApIHtcbiAgICAgIHJldHVybiBhY3RpdmVBY3Rpdml0aWVzO1xuICAgIH0gZWxzZSBpZiAoaGlzdG9yaWNBY3Rpdml0aWVzICYmIGhpc3RvcmljQWN0aXZpdGllcy5sZW5ndGggIT09IDApIHtcbiAgICAgIHJldHVybiBoaXN0b3JpY0FjdGl2aXRpZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRIaXN0b3JpY0FjdGl2aXRpZXModHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTxBY3Rpdml0eVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEhpc3RvcmljQWN0aXZpdGllcyh0cmFuc2FjdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb21wb25lbnRBY3Rpdml0aWVzV2l0aG91dFJlbGF0aW9uRmlsdGVyaW5nKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8QWN0aXZpdHlbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDb21wb25lbnRBY3Rpdml0aWVzV2l0aG91dFJlbGF0aW9uRmlsdGVyaW5nKHRyYW5zYWN0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpcmVUcmlnZ2VyKHdvcmtGbG93UHJvY2Vzc0lkOiBudW1iZXIsIHNlcXVlbmNlOiBudW1iZXIsIHRyaWdnZXJJZDogbnVtYmVyKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmZpcmVUcmlnZ2VyKHdvcmtGbG93UHJvY2Vzc0lkLCBzZXF1ZW5jZSwgdHJpZ2dlcklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmaXJlR2VuZXJpY1RyaWdnZXIod29ya0Zsb3dQcm9jZXNzSWQ6IG51bWJlciwgZ2VuZXJpY1RyYW5zaXRpb25JZDogbnVtYmVyLCByZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZmlyZUdlbmVyaWNUcmlnZ2VyKHdvcmtGbG93UHJvY2Vzc0lkLCBnZW5lcmljVHJhbnNpdGlvbklkLCByZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2NrVGFzayhpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmxvY2tUYXNrKGlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRMaW5lSW5kaWNlc0J5VHJhbnNJZCh0cmFuc0lkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uTGluZVNlYXJjaEluZGV4W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0TGluZUluZGljZXNCeVRyYW5zSWQodHJhbnNJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29udmVydENhc2hSZWdpc3Rlck9yZGVyVG9TYWxlc09yZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCkge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IERpYWxvZ1Jlc3BvbnNlSW50ZXJmYWNlID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dZZXNObyhcbiAgICAgICAgJ0NPTlZFUlRfQ0FTSF9SRUdJU1RFUl9PUkRFUl9UT19TQUxFU09SREVSX0hFQUQnLFxuICAgICAgICAnQ09OVkVSVF9DQVNIX1JFR0lTVEVSX09SREVSX1RPX1NBTEVTT1JERVJfUVVFU1RJT04nKTtcbiAgICAgIGNvbnN0IHNob3VsZENvbnZlcnQ6IGJvb2xlYW4gPSByZXNwb25zZS5idXR0b24gPT09IEFwcFBvcHVwQnV0dG9uVHlwZS5ZZXM7XG4gICAgICBpZiAoc2hvdWxkQ29udmVydCkge1xuICAgICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jb252ZXJ0Q2FzaFJlZ2lzdGVyT3JkZXJUb1NhbGVzT3JkZXIodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQpO1xuICAgICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAvLyByZXR1cm4gcmVzcG9uc2UudHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uTnI7XG4gICAgICAgICAgdGhpcy5zYXZlVHJhbnNhY3Rpb25BbmRDb21taXQoKS50aGVuKHNhdmVkID0+IHtcbiAgICAgICAgICAgIGlmIChzYXZlZCkge1xuICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLmNyZWF0ZWRTYWxlc09yZGVyRnJvbUNhc2hSZWdpc3Rlck9yZGVyLm5leHQocmVzcG9uc2UudHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uTnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlcHJpbnRDYXNoUmVnaXN0ZXJSZWNlaXB0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93UmVwcmludENhc2hSZWdpc3RlclJlY2VpcHRQb3B1cCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbik7XG4gIH1cblxuICBwdWJsaWMgcmVzZXREYXRhRm9yU2VydmljZUZyb21TYWxlc1RyYW5zYWN0aW9uTGluZSgpIHtcbiAgICB0aGlzLl90cmFuc0ZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUgPSBudWxsO1xuICAgIHRoaXMuX2xpbmVOckZvclNlcnZpY2VGcm9tU2FsZXNUcmFuc2FjdGlvbkxpbmUgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNhbGVzT3JkZXJMaW5lcyhyZXF1ZXN0OiBPcmRlclJlc2VydmF0aW9uU2FsZXNPcmRlckxpbmVzUmVxdWVzdCk6IFByb21pc2U8UHVyY2hhc2VSZXNlcnZhdGlvbltdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNhbGVzT3JkZXJMaW5lcyhyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcm9jZXNzUmVzZXJ2YXRpb24ocmVxdWVzdDogUHJvY2Vzc09yZGVyUmVzZXJ2YXRpb25SZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcm9jZXNzUmVzZXJ2YXRpb24ocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdW5kb1Jlc2VydmF0aW9uKHRyYW5zSWQ6IG51bWJlciwgbGluZUlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IudW5kb1Jlc2VydmF0aW9uKHRyYW5zSWQsIGxpbmVJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U0xBQ2F0ZWdvcmllcygpOiBQcm9taXNlPFNMQVByb2R1Y3RbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTTEFDYXRlZ29yaWVzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U0xBUHJvZHVjdHMoKTogUHJvbWlzZTxTTEFQcm9kdWN0W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0U0xBUHJvZHVjdHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUZXJtc0FuZENvbmRpdGlvbnNGb3JtKHRyYW5zSWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUZXJtc0FuZENvbmRpdGlvbnNGb3JtKHRyYW5zSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uUGxhblBlcmlvZHModHJhbnNJZDogbnVtYmVyKTogUHJvbWlzZTxQbGFuVGltZXNbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvblBsYW5QZXJpb2RzKHRyYW5zSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFN1cHBsaWVyUHJvZHVjdHModHJhbnNJZDogbnVtYmVyKTogUHJvbWlzZTxTdXBwbGllclByb2R1Y3RbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTdXBwbGllclByb2R1Y3RzKHRyYW5zSWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9oYW5kbGVCZWZvcmVSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnByZXBhcmVNYW51YWxTYXZlSW50ZXJuYWxQYXJhbSgpO1xuICAgIHRoaXMucHJlcGFyZU1Mb2NhdEludGVybmFsUGFyYW0oKTtcbiAgICB0aGlzLnByZXBhcmVQYWtCaW5uZW5JbnRlcm5hbFBhcmFtKCk7XG4gICAgdGhpcy5wcmVwYXJlRHJvcFNoaXBtZW50SW50ZXJuYWxQYXJhbSgpO1xuICAgIHRoaXMucHJlcGFyZVJlY2VpdmVHb29kc1dpdGhEYXRhVGVybWluYWxJbnRlcm5hbFBhcmFtKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgX2hhbmRsZUFmdGVyUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZW1haW5pbmdBbW91bnQgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tBbmRTYXZlTGluZXNGb3JBSUNvbmZpcm1hdGlvbih0cmFuc2FjdGlvbklkOiBudW1iZXIsIGFuYWx5c2lzSWQ6IG51bWJlciwgbGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0cmFuc2FjdGlvbklkICYmIGFuYWx5c2lzSWQgJiYgbGluZXMgJiYgbGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRMaW5lc0ZvckFJOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSBsaW5lcy5maWx0ZXIobCA9PiBsLmxpbmtlZEFuYWx5c2lzUmVzdWx0SWQgIT09IG51bGwgJiYgbC5saW5rZWRBbmFseXNpc1Jlc3VsdElkICE9PSB1bmRlZmluZWQpO1xuICAgICAgY29uc3Qgb3JkZXJDb25maXJtYXRpb25UcmFuc2FjdGlvbkxpbmtzOiBPcmRlckNvbmZpcm1hdGlvblRyYW5zYWN0aW9uTGlua1tdID0gW107XG4gICAgICBzZWxlY3RlZExpbmVzRm9yQUkuZm9yRWFjaChsID0+IHtcbiAgICAgICAgY29uc3Qgb3JkZXJDb25maXJtYXRpb25UcmFuc2FjdGlvbkxpbms6IE9yZGVyQ29uZmlybWF0aW9uVHJhbnNhY3Rpb25MaW5rID0gbmV3IE9yZGVyQ29uZmlybWF0aW9uVHJhbnNhY3Rpb25MaW5rKCk7XG4gICAgICAgIG9yZGVyQ29uZmlybWF0aW9uVHJhbnNhY3Rpb25MaW5rLnRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbklkO1xuICAgICAgICBvcmRlckNvbmZpcm1hdGlvblRyYW5zYWN0aW9uTGluay50cmFuc2FjdGlvbkxpbmVOdW1iZXIgPSBsLmxpbmVOcjtcbiAgICAgICAgb3JkZXJDb25maXJtYXRpb25UcmFuc2FjdGlvbkxpbmsub3JkZXJDb25maXJtYXRpb25BbmFseXNpc1Jlc3VsdElkID0gbC5saW5rZWRBbmFseXNpc1Jlc3VsdElkO1xuICAgICAgICBvcmRlckNvbmZpcm1hdGlvblRyYW5zYWN0aW9uTGlua3MucHVzaChvcmRlckNvbmZpcm1hdGlvblRyYW5zYWN0aW9uTGluayk7XG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmxpbmtUcmFuc2FjdGlvblRvT3JkZXJDb25maXJtYXRpb24oYW5hbHlzaXNJZCwgb3JkZXJDb25maXJtYXRpb25UcmFuc2FjdGlvbkxpbmtzKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2NoZWNrQW5kQWRkUmVsYXRpb25UcmFuc2FjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvICYmIHRoaXMucmVsYXRpb24gJiYgIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuc2F2ZVJlbGF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uIHx8ICF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gfHwgIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbk5yKSB7XG4gICAgICBjb25zdCBjcmVhdGVNZXRob2Q6IENyZWF0ZVRyYW5zYWN0aW9uRm4gPSB0aGlzLl9jcmVhdGVUcmFuc2FjdGlvbk1ldGhvZHMuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kIHx8IFRyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyKTtcbiAgICAgIGlmIChjcmVhdGVNZXRob2QpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdDogQ3JlYXRlVHJhbnNhY3Rpb25SZXF1ZXN0ID0gbmV3IENyZWF0ZVRyYW5zYWN0aW9uUmVxdWVzdCgpO1xuICAgICAgICByZXR1cm4gYXdhaXQgY3JlYXRlTWV0aG9kKHJlcXVlc3QpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSB0cmFuc2FjdGlvblwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG4gIH1cblxufVxuIl19