@hivegpt/hiveai-angular 0.0.387 → 0.0.388

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.
@@ -1488,8 +1488,8 @@ export class ChatDrawerComponent {
1488
1488
  'x-api-key': this.apiKey,
1489
1489
  'hive-bot-id': this.botId,
1490
1490
  'domain-authority': this.domainAuthorityValue,
1491
- event_url: this.eventUrl,
1492
- event_token: this.eventToken,
1491
+ eventUrl: this.eventUrl,
1492
+ eventToken: this.eventToken,
1493
1493
  };
1494
1494
  if (this.workspaceToken) {
1495
1495
  headers['workspaceToken'] = this.workspaceToken;
@@ -1757,4 +1757,4 @@ ChatDrawerComponent.propDecorators = {
1757
1757
  refreshToken: [{ type: Output }],
1758
1758
  openSupport: [{ type: Output }]
1759
1759
  };
1760
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9tbnQvNTBiM2NkZWEtZTI5Ny00MzVjLWFkOWMtMDQ4M2M5NWM2ZDI1L3Byb2Zlc3Npb25hbC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQtZHJhd2VyL2NoYXQtZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFFWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxTQUFTLE1BQU0sd0NBQXdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDLENBQUMsZ0JBQWdCO0FBUWxELE1BQU0sT0FBTyxtQkFBbUI7SUF3SDlCLFlBQ1UsRUFBZSxFQUNmLFVBQXVCLEVBQ3ZCLEdBQXNCLEVBQ3RCLElBQWdCLEVBQ2hCLFNBQXVCLEVBQ3ZCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUFFLDZCQUE2QjtJQUN2RSxrQkFBc0M7UUFUdEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQWE7UUFDdkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUExSHhDLHNCQUFpQixHQUFHLHNCQUFzQixDQUFDO1FBR25ELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ2YsZ0JBQVcsR0FBVyxVQUFVLENBQUM7UUE0Q2hDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDeEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3pDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVoRCxlQUFVLEdBQUcsNkJBQTZCLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFDekMsNEJBQXVCLEdBQUcsc0JBQXNCLENBQUM7UUFDakQsMEJBQXFCLEdBQUcsbUJBQW1CLENBQUM7UUFDNUMsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLFlBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsU0FBSSxHQUFXLE1BQU0sQ0FBQztRQUN0QixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QiwyQkFBc0IsR0FBa0IsSUFBSSxDQUFDO1FBQzdDLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFTZCxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQVUzQixrQ0FBNkIsR0FBVyxDQUFDLENBQUM7UUFDMUMsMEJBQXFCLEdBQVcsRUFBRSxDQUFDO1FBUW5DLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLHVCQUFrQixHQUFXLEVBQUUsQ0FBQztRQUNoQyxXQUFNLEdBQVcsWUFBWSxDQUFDLENBQUMsNkJBQTZCO1FBeUQ1RCx5QkFBb0IsR0FBUSxXQUFXLENBQUM7UUFpZ0J4QyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQWlHeEIsa0JBQWEsR0FBRyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7WUFFcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDOUM7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsT0FBTztZQUNULENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLGNBQWMsQ0FBQztnQkFDeEIsS0FBSyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBOFRGLDRCQUF1QixHQUFRLEVBQUUsQ0FBQztRQUNsQywwQkFBcUIsR0FBUSxDQUFDLENBQUMsQ0FBQztRQXVPaEMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFvRXBCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBSXhCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBaUt4QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBYzdCLE1BQU07UUFDTixNQUFNO1FBQ04sNEVBQTRFO1FBQzVFLDRMQUE0TDtRQUM1TCw2REFBNkQ7UUFDN0QsT0FBTztRQUNQLE1BQU07UUFDTixpRUFBaUU7UUFDakUsa0pBQWtKO1FBQ2xKLHdFQUF3RTtRQUN4RSxPQUFPO1FBQ1AsTUFBTTtRQUNOLHlFQUF5RTtRQUN6RSxnSUFBZ0k7UUFDaEksK0VBQStFO1FBQy9FLE9BQU87UUFDUCxNQUFNO1FBQ04scUZBQXFGO1FBQ3JGLHNIQUFzSDtRQUN0SCwyRkFBMkY7UUFDM0YsT0FBTztRQUNQLE1BQU07UUFDTiwyRUFBMkU7UUFDM0UsNklBQTZJO1FBQzdJLDJGQUEyRjtRQUMzRixNQUFNO1FBQ04sSUFBSTtRQUNKLGFBQVEsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFnQjdDLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQVc3Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUF3QzFCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBL2hEbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQywyQkFBMkI7UUFDM0IsNkJBQTZCO1FBQzdCLElBQUk7SUFDTixDQUFDO0lBQ0QsY0FBYyxDQUFDLEdBQVc7UUFDeEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsdURBQXVEO1FBQ3ZELElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbEU7UUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtnQkFDbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFFOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUN4Qzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDMUI7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2pCLElBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhO2dCQUN6RCxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDMUI7Z0JBQ0EsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDekI7U0FDRjtJQUNILENBQUM7SUFJRCxRQUFRO1FBQ04sdUZBQXVGO1FBQ3ZGLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUVuRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUV4QyxpREFBaUQ7UUFFakQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGVBQWUsQ0FBQztTQUM3QzthQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxXQUFXLENBQUM7U0FDekM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztTQUN2QztRQUVELHlDQUF5QztRQUN6QywyQ0FBMkM7UUFFM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUM3QixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUV4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQy9CLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQ0YsQ0FBQztRQUNGLHNCQUFzQjtRQUN0Qiw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFVBQVU7YUFDWiw2QkFBNkIsQ0FDNUIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxvQkFBb0IsQ0FDMUI7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHRCxnQkFBZ0I7UUFDZCxJQUFJO1lBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ2pEO1FBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtRQUNsQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzdDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXBFLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQy9DLElBQUksQ0FBQyxLQUFLLEVBQ1YsZUFBZSxFQUNmLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztnQkFDRixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUtELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2FBQzlDLDJCQUEyQixFQUFFO2FBQzdCLFNBQVMsQ0FDUixDQUFDLEdBQUcsRUFBRSxFQUFFOztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLDhDQUE4QztZQUM5QyxJQUFJLE1BQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLDBDQUFFLFdBQVcsRUFBRTtnQkFDcEMsTUFBTSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUNYLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsVUFBVSxHQUNYLEdBQUcsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLENBQUM7Z0JBRXhCLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxVQUFVLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxXQUFXLENBQUM7Z0JBRXpDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUNqRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FDckMsQ0FBQztnQkFFRixJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUM7d0JBQzFELE1BQU0sQ0FBQztvQkFDVCxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUNoRCxpQkFBaUIsQ0FDbEIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUNqRDtxQkFBTTtvQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixXQUFXLFlBQVksQ0FBQyxDQUFDO2lCQUM1RDtnQkFFRCxJQUFJLENBQUMsK0JBQStCO29CQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUM7Z0JBRWhDLElBQUksSUFBSSxDQUFDLDZCQUE2QixJQUFJLEdBQUcsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDMUQscUJBQXFCLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2lCQUNoQztnQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzFCO2lCQUFNLElBQUksTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLEVBQUU7Z0JBQzlCLE1BQU0sRUFDSixlQUFlLEVBQ2YsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUNYLGNBQWMsRUFDZCxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDWixHQUFHLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLENBQUMsMENBQUUsV0FBVyxDQUFDO2dCQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLENBQUMsMENBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FDM0IsQ0FBQztnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN4QixrQkFBa0IsR0FBRzt3QkFDbkIsR0FBRyxFQUFFLFVBQVU7d0JBQ2YsSUFBSSxFQUFFLElBQUk7d0JBQ1YsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUMvQixDQUFDO29CQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBRXRDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFCO2dCQUVELDRDQUE0QztnQkFDNUMsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtvQkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDcEQsa0JBQWtCLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUI7Z0JBRUQsSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ3pDLGtCQUFrQixDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7b0JBQzdDLGtCQUFrQixDQUFDLGdCQUFnQixHQUFHLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO29CQUNoRixrQkFBa0IsQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO29CQUMvRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUMxQjtnQkFFRCxJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRS9CLGtCQUFrQixDQUFDLE9BQU87d0JBQ3hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN2QjtnQkFFRCxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDL0Isa0JBQWtCLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUI7Z0JBRUQsSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7b0JBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztvQkFDbkQsa0JBQWtCLENBQUMsZUFBZSxHQUFHLGdCQUFnQixDQUFDO29CQUN0RCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUMxQjtnQkFFRCxJQUFJLFdBQVcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFDekMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO29CQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN6Qix3Q0FBd0M7aUJBQ3pDO2dCQUVELGlEQUFpRDthQUNsRDtpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7YUFDeEQ7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELHlCQUF5QixLQUFJLENBQUM7SUFDOUIsV0FBVyxDQUFDLElBQVMsRUFBRSxJQUFZO1FBQ2pDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxXQUFXO2dCQUNkLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDaEQsNkJBQTZCO0lBQy9CLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxjQUFzQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEUsMENBQTBDO1FBQzFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFN0QsUUFBUSxjQUFjLEVBQUU7WUFDdEIsS0FBSyxDQUFDO2dCQUNKLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztZQUV6QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLHNCQUFzQixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMxQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxjQUFjO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLGdCQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDekMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7O1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFFaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsaUJBQWlCLDBDQUFFLE1BQU07Z0JBQ3RELENBQUMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCO2dCQUN2QixDQUFDLENBQUM7b0JBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FDakIsMERBQTBELENBQzNEO2lCQUNGLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUN6RCxJQUFJLENBQUMsS0FBSyxFQUNWLEtBQUssQ0FDTixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsa0JBQWtCLElBQUksQ0FBQyxlQUFlLGVBQWUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xILE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFNLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxXQUFXLENBQUksU0FBUyxHQUFHLFdBQVcsRUFBRSxNQUFVO1FBQ3hELE9BQU8sQ0FBQyxLQUFVLEVBQWlCLEVBQUU7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsWUFBWSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLEVBQUUsQ0FBQyxNQUFXLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsdUJBQXVCO0lBQ3ZCLHlCQUF5QjtJQUN6QixzQ0FBc0M7SUFDdEMsMENBQTBDO0lBQzFDLGdDQUFnQztJQUNoQyxRQUFRO0lBQ1IscUJBQXFCO0lBQ3JCLDhGQUE4RjtJQUM5RixhQUFhO0lBQ2Isa0NBQWtDO0lBQ2xDLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDMUIsWUFBWTtJQUNaLHFDQUFxQztJQUNyQyxpRUFBaUU7SUFDakUsZ0NBQWdDO0lBQ2hDLDJCQUEyQjtJQUMzQixXQUFXO0lBQ1gsU0FBUztJQUNULElBQUk7SUFFSixjQUFjLENBQUMsS0FBVTs7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDekIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQy9CLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxLQUFJLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDcEMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRTtvQkFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLElBQUksRUFBRSxNQUFNO3dCQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDakQsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQzt3QkFDM0QsTUFBTSxFQUFFLEtBQUs7d0JBQ2IsZUFBZSxFQUFFLEtBQUs7d0JBQ3RCLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7d0JBQzdDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztxQkFDZCxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtvQkFDckIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7b0JBQ3RDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO29CQUNsRSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO29CQUVqRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDaEIsSUFBSSxFQUFFLElBQUk7d0JBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNqRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7d0JBQ3JDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTt3QkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO3dCQUM3QixXQUFXLEVBQUUsV0FBVzt3QkFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO3dCQUNsQyxnQkFBZ0IsRUFBRSxnQkFBZ0I7d0JBQ2xDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7d0JBQzNELE1BQU0sRUFBRSxLQUFLO3dCQUNiLGVBQWUsRUFBRSxLQUFLO3dCQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7cUJBQ2QsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ3ZEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZTtRQUM1QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLElBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELG9DQUFvQztRQUNwQyx3QkFBd0I7UUFFeEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6QixNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDO1FBQ25ELE1BQU0sUUFBUSxHQUFHLHdDQUF3QyxDQUFDO1FBRTFELElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQzFCLGlCQUFpQixFQUNqQixxQ0FBcUMsQ0FDdEMsQ0FBQztZQUNGLDhDQUE4QztZQUM5QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FDMUIsUUFBUSxFQUNSLHFDQUFxQyxDQUN0QyxDQUFDO1lBQ0YsK0NBQStDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztRQUVELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXJELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDbkUsMkNBQTJDO1FBQzNDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUN2RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25FLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLE9BQU8sRUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQzNDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILHVFQUF1RTtRQUN2RSxrQ0FBa0M7UUFDbEMsdUNBQXVDO1FBQ3ZDLDhFQUE4RTtRQUM5RSxJQUFJO0lBQ04sQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQUcsR0FBRyxJQUFJOztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLElBQUksRUFBRSxDQUFBLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQjtZQUNyRCxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDaEM7UUFBQyxPQUFPLEtBQUssRUFBRSxHQUFFO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFFNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDcEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUM3QixPQUFPO1NBQ1I7UUFDRCxJQUFJO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO1FBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtRQUVsQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQztZQUNoRCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUIsTUFBTSxFQUFFLEtBQUs7WUFDYixlQUFlLEVBQUUsS0FBSztTQUN2QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTVCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLG1CQUFtQixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV2RixJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBd0IsR0FBRyxFQUFFO1lBQy9CLE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjthQUM5QztTQUNGLENBQUM7YUFDRCxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV6RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixPQUFPO2FBQ1I7WUFFRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDaEIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztvQkFDaEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUM5QixhQUFhLEVBQUUsSUFBSTtpQkFDcEIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3RELHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQXVCRCxJQUFJLENBQUMsVUFBZSxFQUFFLE1BQVcsRUFBRSxjQUF3QjtRQUN6RCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFPLEVBQUUsRUFBRTs7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV2RCxJQUFJLElBQUksRUFBRTtnQkFDUixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixJQUFJLEVBQUUsYUFBYTt3QkFDbkIsV0FBVyxFQUFFLGNBQWM7cUJBQzVCLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM3Qix5QkFBeUI7Z0JBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUUzQixxQkFBcUI7Z0JBQ3JCLDJCQUEyQjtnQkFDM0IsVUFBVTtnQkFDVixPQUFPO2FBQ1I7WUFFRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQztZQUNoQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3JFLElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDckQsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RCxDQUFDLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBRTdCLElBQUksZUFBb0IsQ0FBQztnQkFFekIsSUFBSTtvQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUM3QixlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixJQUFJO3dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDOUIsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUMvQztvQkFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO2lCQUNmO2dCQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFakMsSUFBSSxlQUFlLElBQUksQ0FBQSxNQUFBLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxVQUFVLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7b0JBQzlELElBQ0UsZUFBZSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0I7d0JBQzlDLGVBQWUsQ0FBQyxVQUFVLElBQUksYUFBYTt3QkFDM0MsZUFBZSxDQUFDLFVBQVUsSUFBSSx5QkFBeUIsRUFDdkQ7d0JBQ0EsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO3FCQUN6QztvQkFFRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO3dCQUM5RCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7d0JBQ3BCLE1BQUEsZUFBZSxDQUFDLE9BQU8sMENBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7NEJBQzNDLFVBQVUsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNwRCxDQUFDLENBQUMsQ0FBQzt3QkFFSCxJQUFJLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE1BQU0sSUFBRyxDQUFDOzRCQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDcEU7b0JBRUQsSUFDRSxlQUFlLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxtQkFBbUI7d0JBQ3RELENBQUEsTUFBQSxlQUFlLENBQUMsT0FBTywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUNuQzt3QkFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDakIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxVQUFVOzRCQUNyQyxVQUFVLEVBQUUsZUFBZSxDQUFDLE9BQU87eUJBQ3BDLENBQUMsQ0FBQztxQkFDSjtvQkFFRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO3dCQUM1RCxJQUFJLFFBQVEsR0FBRyxNQUFBLGVBQWUsQ0FBQyxPQUFPLDBDQUFFLE1BQU0sQ0FBQzt3QkFDL0MsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFOzRCQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQ0FDakIsU0FBUyxFQUFFLHdCQUF3QjtnQ0FDbkMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxPQUFPOzZCQUNoQyxDQUFDLENBQUM7eUJBQ0o7NkJBQU0sSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFOzRCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQ0FDakIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxVQUFVO2dDQUNyQyxhQUFhLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzs2QkFDbkQsQ0FBQyxDQUFDO3lCQUNKO3FCQUNGO29CQUVELElBQUksZUFBZSxDQUFDLFlBQVksSUFBSSxNQUFNLEVBQUU7d0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDOzRCQUNqQixTQUFTLEVBQUUsZUFBZSxDQUFDLFVBQVU7NEJBQ3JDLE1BQU0sRUFBRSxlQUFlLENBQUMsT0FBTzt5QkFDaEMsQ0FBQyxDQUFDO3dCQUVILElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFOzRCQUMxQixlQUFlLENBQUMsT0FBTztnQ0FDckIsTUFBTSxHQUFHLG9EQUFvRCxDQUFDO3lCQUNqRTtxQkFDRjtvQkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDaEIsSUFBSSxFQUFFLElBQUk7d0JBQ1YsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPO3dCQUNoQyxNQUFNLEVBQUUsZUFBZTt3QkFDdkIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUMvQixDQUFDLENBQUM7b0JBRUgsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7d0JBQzFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7NEJBQ2QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7d0JBQy9CLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztxQkFDVDtvQkFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLElBQUksRUFBRSxJQUFJO3dCQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVTt3QkFDeEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUMvQixDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN6QjtZQUVELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV0QixxREFBcUQ7WUFDckQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWEsRUFBRSxPQUFPO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSx5QkFBeUIsSUFBSSxDQUFDLEtBQUssaUJBQWlCLGVBQWUsbUJBQW1CLENBQUM7UUFDakksS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNULE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLE1BQU0sRUFBRSx1Q0FBdUM7Z0JBQy9DLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjthQUM5QztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ2xFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1gsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLElBQUksRUFBRSxJQUFJO29CQUNWLE9BQU8sRUFDTCxJQUFJLENBQUMsZUFBZTt3QkFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQ0FBcUMsQ0FBQztvQkFDNUQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUM5QixhQUFhLEVBQUUsSUFBSTtpQkFDcEIsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNoQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUNqRDtnQkFDRCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzlCLGFBQWEsRUFBRSxJQUFJO2FBQ3BCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0I7Z0JBQ3JCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDakUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLFdBQVcsRUFBRTtvQkFDZixXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO1lBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDNUMsc0NBQXNDO1lBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2Qiw0QkFBNEI7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFDRCxZQUFZLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVE7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBQ0QsZ0NBQWdDO0lBQ2hDLHlDQUF5QztJQUN6Qyx1REFBdUQ7SUFDdkQsa0NBQWtDO0lBQ2xDLGdDQUFnQztJQUNoQyw4REFBOEQ7SUFDOUQsOENBQThDO0lBQzlDLHlDQUF5QztJQUN6QyxnQ0FBZ0M7SUFDaEMsOENBQThDO0lBQzlDLHlCQUF5QjtJQUN6Qiw0Q0FBNEM7SUFDNUMsa0NBQWtDO0lBQ2xDLHlDQUF5QztJQUN6QyxRQUFRO0lBQ1IsSUFBSTtJQUNKLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSztRQUNoQix1QkFBdUI7UUFDdkIsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5Qyx1REFBdUQ7UUFDdkQsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFFM0MsMEVBQTBFO1FBQzFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhDLHNDQUFzQztRQUN0QyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFdEIsaUNBQWlDO1FBQ2pDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0IsZ0NBQWdDO1FBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhDLG1HQUFtRztRQUNuRyxzQ0FBc0M7UUFFdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsdUNBQXVDO1FBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7SUFDcEMsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLG9DQUFvQztRQUNwQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUvRCxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFbkQseUVBQXlFO1FBQ3pFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMvQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsOENBQThDO1FBQzlDLDBCQUEwQjtRQUMxQixhQUFhO2FBQ1YsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFeEMseUNBQXlDO1FBQ3pDLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBSUQsaUJBQWlCLENBQUMsS0FBVTtRQUMxQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FDNUIsQ0FBQztZQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUNqRSx3Q0FBd0MsRUFDeEMsRUFBRSxDQUNILENBQUM7WUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FDNUIsQ0FBQztnQkFDRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FDakUsd0NBQXdDLEVBQ3hDLEVBQUUsQ0FDSCxDQUFDO2dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztnQkFDbkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxZQUFZLENBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUM1QixDQUFDO2dCQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUNqRSx3Q0FBd0MsRUFDeEMsRUFBRSxDQUNILENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUMxQjtTQUNGO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsdUNBQXVDO1FBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDbkUsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRCxjQUFjO1FBQ1osSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUztnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQzNDLElBQUksT0FBTyxFQUFFLEdBQUcsQ0FBQztnQkFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJCLElBQUksTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sRUFBRTtTQUNwQjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsZ0ZBQWdGO1FBQ2hGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO1FBRUQseURBQXlEO1FBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQWUsRUFBRSxFQUFFO1lBQ3JELElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMzQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7d0JBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsd0JBQXdCO3FCQUNoRTtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBRztRQUN2QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxXQUFXLElBQUksQ0FBQyxPQUFPLHlCQUF5QixDQUFDO1FBQzFGLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxhQUFhLEVBQUUsU0FBUyxHQUFHLGlCQUFpQjthQUM3QztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztTQUMxQixDQUFDO2FBQ0MsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDakIsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFO2dCQUNmLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsc0NBQXNDO2FBQy9EO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQzthQUNqRDtRQUNILENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO2dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztnQkFDdEMsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsTUFBTTtRQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN2QixTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVFLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxnRUFBZ0UsQ0FBQyxJQUFJLENBQzFFLFNBQVMsQ0FBQyxTQUFTLENBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQU07UUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDcEMsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQUk7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFNO1FBQ2YsT0FBTyxDQUFDLENBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FDOUMsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBTTtRQUNsQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FDRixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxXQUFXLElBQUksQ0FBQyxPQUFPLDZEQUE2RCxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQzlILEVBQUUsT0FBTyxFQUFFLENBQ1o7YUFDQSxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQ3hCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQ0YsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsV0FBVyxJQUFJLENBQUMsT0FBTyxxQ0FBcUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUN0RyxFQUFFLE9BQU8sRUFBRSxDQUNaO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQU1ELGlDQUFpQztJQUNqQyxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZOztRQUN0QixNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVU7UUFDdEIsbUNBQW1DO1FBQ25DLHFCQUFxQjtRQUNyQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0QsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7O1FBQ1osT0FBTyxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELHFCQUFxQjs7UUFDbkIsTUFBTSxjQUFjLEdBQUcsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLE9BQU8sWUFBWSxDQUFDO1NBQ3JCO2FBQU07WUFDTCxJQUFJLGNBQWMsSUFBSSxDQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLE1BQUssQ0FBQyxFQUFFO2dCQUNsRCxPQUFPLFlBQVksQ0FBQzthQUNyQjtpQkFBTTtnQkFDTCxPQUFPLENBQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLE1BQU0sSUFBRyxDQUFDO29CQUMvQixDQUFDLENBQUMsR0FBRyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsTUFBTSxrQkFBa0I7b0JBQzdDLENBQUMsQ0FBQyxHQUFHLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLGlCQUFpQixDQUFDO2FBQ2hEO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsWUFBWSxJQUFJLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQztRQUNqRixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1NBQ25DLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM5QyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGlDQUM1QixLQUFLLEtBQ1IsUUFBUSxFQUFFLEtBQUssSUFDZixDQUFDLENBQUM7YUFDTDtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV4RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQU9ELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSx5Q0FBeUMsZUFBZSxVQUFVLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6SCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLE1BQU0sRUFBRSwwQkFBMEI7WUFDbEMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtTQUM5QyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN6QyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXhCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFFNUIsSUFBSSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxNQUFNLEtBQUksR0FBRyxFQUFFO2dCQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDN0I7WUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsd0JBQXdCLENBQUMsUUFBZ0I7UUFDdkMsSUFBSTtZQUNGLDhDQUE4QztZQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUV2QyxtREFBbUQ7WUFDbkQsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBWSxFQUFFLEVBQUU7Z0JBQzVELE9BQU8sWUFBWSxJQUFJLFlBQ3JCLEtBQUssSUFBSSxFQUNYLHFCQUFxQixJQUFJLE1BQU0sQ0FBQztZQUNsQyxDQUFDLENBQUM7WUFFRiwyRUFBMkU7WUFDM0UsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUV2RSx3REFBd0Q7WUFDeEQsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFMUQsMkNBQTJDO1lBQzNDLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELE9BQU8sRUFBRSxDQUFDLENBQUMsMkRBQTJEO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQjtRQUMxQixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUNqRCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQscUVBQXFFO1FBQ3JFLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQ3pCLHFCQUFxQixFQUNyQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ2YsT0FBTyxlQUFlLElBQUksZ0JBQWdCLENBQUM7YUFDNUM7aUJBQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixPQUFPLGVBQWUsSUFBSSxnQkFBZ0IsQ0FBQzthQUM1QztZQUNELE9BQU8sV0FBVyxJQUFJLFdBQVcsQ0FBQztRQUNwQyxDQUFDLENBQ0YsQ0FBQztRQUVGLGtFQUFrRTtRQUNsRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDckUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksV0FBVyxDQUFDO1lBRXJDLDBDQUEwQztZQUMxQyxPQUFPOzttRkFFc0UsV0FBVyxTQUFTLElBQUksQ0FBQyxjQUFjLENBQ2xILE1BQU0sQ0FDUDs2REFDc0QsUUFBUSxLQUFLLFdBQVc7YUFDeEUsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXJELHlDQUF5QztRQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBRTdELHlCQUF5QjtRQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUV2RCw2QkFBNkI7UUFDN0IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRXBELHVDQUF1QztRQUN2QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FDakIseUJBQXlCLEVBQ3pCLHFDQUFxQyxDQUN0QyxDQUFDO1FBRUYsZ0RBQWdEO1FBQ2hELElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRS9DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxVQUFVLENBQUMsSUFBWTtRQUNyQixPQUFPLElBQUk7YUFDUixPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQzthQUN0QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQzthQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQzthQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQzthQUN2QixPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxxQ0FBcUM7SUFDOUIsZUFBZSxDQUFDLElBQVk7UUFDakMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUN0QyxHQUFHLEVBQUU7WUFDSCxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNyQyxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBS0QsY0FBYztRQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0Qsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUE2QkQsaUNBQWlDO0lBQ2pDLGFBQWEsQ0FBQyxHQUFXO1FBQ3ZCLElBQUk7WUFDRixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtTQUNuRTtRQUFDLFdBQU07WUFDTixPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsYUFBYSxDQUFDLEdBQVc7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxPQUFPLG9EQUFvRCxNQUFNLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQU87UUFDakIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUlELGVBQWU7UUFDYixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV6QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDbkUsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMscUNBQXFDO1FBQy9ELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztRQUMvRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNELGNBQWM7UUFDWixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztZQUMvRCw2Q0FBNkM7WUFDN0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ25FLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzthQUNoQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFHRCxZQUFZLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUNELHNCQUFzQjtRQUNwQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDbkUsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM3RDtJQUNILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxJQUFZO1FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxLQUFVO1FBQzdCLElBQUk7WUFDRixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDNUMsdUNBQXVDO2dCQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDeEI7U0FDRjtRQUFDLE9BQU8sS0FBSyxFQUFFLEdBQUU7UUFDbEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQTZCLENBQUM7UUFDckQsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsbUJBQW1CO1FBQ25ELFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsaUNBQWlDO1FBQ3ZGLDZEQUE2RDtRQUM3RCxJQUFJLFFBQVEsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQy9CLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLGlDQUFpQztZQUNsRSxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyw0Q0FBNEM7U0FDaEY7YUFBTTtZQUNMLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLDZDQUE2QztTQUNuRjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUk7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFFbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7aUJBQ2hDO2dCQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxjQUFjOztRQUNaLGlGQUFpRjtRQUNqRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxNQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxPQUFPLDBDQUFFLFdBQVcsRUFBRTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUQsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRztvQkFDNUIsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUNqQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJO2lCQUM1QyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELHNCQUFzQjtRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFRO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDeEIsQ0FDRixDQUFDO1lBRUYsMkVBQTJFO1lBQzNFLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQztvQkFDbEUsS0FBSyxDQUFDO2dCQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7b0JBQ2xFLEtBQUssQ0FBQzthQUNUO1lBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtZQUVsQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUM5QixNQUFNLEVBQUUsS0FBSztnQkFDYixlQUFlLEVBQUUsS0FBSztnQkFDdEIsMkJBQTJCLEVBQUUsSUFBSTthQUNsQyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5CLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLHFCQUFxQjtnQkFDeEIsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDOUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHO2dCQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU87Z0JBQ3RDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQy9CLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQ3ZDLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSTthQUN6QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztZQUNyRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUV6QiwrQ0FBK0M7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FDakIsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLGVBQWUsRUFDcEIsRUFBRSxFQUNGLElBQUksRUFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUN4QixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUNaLFFBQWdCLEVBQ2hCLE1BQWEsRUFDYixjQUFzQixFQUN0QixHQUFTLEVBQ1QsSUFBVSxFQUNWLFVBQW1CLEVBQ25CLGVBQXFCOztRQUVyQixJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxTQUFTLENBQUM7UUFFaEQsSUFBSSxJQUFJLEdBQUc7WUFDVCxhQUFhLEVBQUUsUUFBUTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFO1lBQ2xELFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUM5QixNQUFNLEVBQUUsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxtQ0FBSSxFQUFFO1lBQ2hFLGVBQWUsRUFBRSxjQUFjO1lBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDekIsQ0FBQztRQUVGLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxlQUFlLENBQUM7U0FDM0M7UUFFRCxNQUFNLE9BQU8sR0FBUTtZQUNuQixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLGFBQWEsRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDeEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQzdDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDN0IsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQ2pEO1FBRUQsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNULE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLE9BQU87WUFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQzNCLENBQUM7YUFDQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO2dCQUN0RCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFekIseUNBQXlDO2dCQUN6QyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7b0JBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2lCQUM1QjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2FBQ3BCO1lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLHlDQUF5QztRQUMzQyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxpQkFBaUIsQ0FDZixRQUFnQixFQUNoQixNQUFhLEVBQ2IsY0FBc0IsRUFDdEIsR0FBUyxFQUNULElBQVUsRUFDVixVQUFtQixFQUNuQixlQUFxQjs7UUFFckIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsU0FBUyxDQUFDO1FBRWxELE1BQU0sSUFBSSxHQUFRO1lBQ2hCLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU7WUFDbEQsTUFBTSxFQUFFLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsbUNBQUksRUFBRTtZQUNoRSxlQUFlLEVBQUUsY0FBYztZQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3pCLENBQUM7UUFFRixJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsZUFBZSxDQUFDO1NBQzNDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3pCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxvQkFBb0I7U0FDOUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQy9DLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLHlDQUF5QztZQUMzQyxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUssRUFBRSxHQUFHOztRQUN6QixxQ0FBcUM7UUFDckMsSUFBSSxRQUFRLEdBQUcsTUFBTSxLQUFLLElBQUksQ0FBQztRQUUvQixnRUFBZ0U7UUFDaEUsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxTQUFTLEdBQ1gsQ0FBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDNUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUNqQywwQ0FBRSxLQUFLLEtBQUksR0FBRyxDQUFDO1lBQ2xCLFFBQVEsSUFBSSxPQUFPLFNBQVMsT0FBTyxLQUFLLElBQUksQ0FBQztTQUM5QztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxXQUFXO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQztZQUNyRSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0RSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNwRCxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTt3QkFDMUIsTUFBTSxDQUFDLGVBQWUsR0FBRyxnQkFBZ0IsQ0FDdkMsSUFBSSxDQUFDLFFBQVEsRUFDYixNQUFNLENBQUMsZUFBZSxDQUN2QixDQUFDO3FCQUNIO29CQUNELE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsR0FBRyxDQUFDLGVBQWUsR0FBRyxnQkFBZ0IsQ0FDcEMsSUFBSSxDQUFDLFFBQVEsRUFDYixHQUFHLENBQUMsZUFBZSxDQUNwQixDQUFDO1lBQ0YsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztZQUNwQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFRO1FBQ3BCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNSLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FDL0QsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUM5QyxJQUFJLENBQUMsWUFBWSxFQUNqQixXQUFXLENBQ1osQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFO2dCQUMvRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7UUFDSCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssSUFBSSwwQkFBMEI7WUFDeEMsSUFBSSxDQUFDLEtBQUssSUFBSSwwQkFBMEIsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSTtRQUNoQixJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDLENBQUMsNkNBQTZDO0lBQ25ELENBQUM7OztZQTlqRUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw2QkFBNkI7Z0JBQ3ZDLDhvekVBQTJDO2dCQUUzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQVZRLFdBQVc7WUFFWCxXQUFXO1lBOUJsQixpQkFBaUI7WUFMVixVQUFVO1lBcUJWLFlBQVk7WUFkbkIsVUFBVTtZQVFWLFNBQVM7WUFnQkYsYUFBYTtZQUZiLG1CQUFtQjtZQTVCbkIsa0JBQWtCOzs7dUJBNEN4QixTQUFTLFNBQUMsVUFBVTtzQkFDcEIsU0FBUyxTQUFDLFNBQVM7cUNBQ25CLFlBQVksU0FBQyx1QkFBdUI7cUJBRXBDLFNBQVMsU0FBQyxRQUFROzRCQUNsQixTQUFTLFNBQUMsZUFBZTs0QkFDekIsU0FBUyxTQUFDLGVBQWU7eUJBRXpCLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOzBCQUd6QyxLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLO3lCQUNMLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLEtBQUs7d0JBQ0wsS0FBSztvQkFDTCxLQUFLO29CQUNMLEtBQUs7K0JBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7dUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3NCQUNMLEtBQUs7K0JBQ0wsS0FBSztpQ0FDTCxLQUFLO3VCQUNMLEtBQUs7NkJBQ0wsS0FBSzt1QkFDTCxLQUFLO2lDQUNMLEtBQUs7bUNBQ0wsS0FBSztvQkFDTCxLQUFLOzhCQUNMLEtBQUs7a0NBQ0wsS0FBSzt3QkFDTCxLQUFLO2lDQUNMLEtBQUs7OEJBQ0wsS0FBSzt1QkFDTCxLQUFLOytCQUNMLEtBQUs7d0JBQ0wsS0FBSztxQkFDTCxLQUFLO29CQUNMLEtBQUs7K0JBRUwsS0FBSzttQ0FDTCxLQUFLOzRCQUNMLE1BQU07MkJBQ04sTUFBTTt1QkFDTixNQUFNOzZCQUNOLE1BQU07dUJBQ04sTUFBTTs4QkFDTixNQUFNOzhCQUNOLE1BQU07MkJBQ04sTUFBTTswQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREcmF3ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvcm1hdE5vdywgZm9ybWF0VGltZVN0YW1wcyB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIGRldl9lbnZpcm9ubWVudCxcbiAgcHJvZF9lbnZpcm9ubWVudCxcbn0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IENvbnZlcnNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb252ZXJzYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vc29ja2V0LXNlcnZpY2Uuc2VydmljZSc7XG5cbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0ICogYXMgU3BlZWNoU0RLIGZyb20gJ21pY3Jvc29mdC1jb2duaXRpdmVzZXJ2aWNlcy1zcGVlY2gtc2RrJztcbmltcG9ydCB7IEJvdHNTZXJ2aWNlIH0gZnJvbSAnLi4vYm90LnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbWFya2VkIGZyb20gJ21hcmtlZCc7IC8vIEltcG9ydCBtYXJrZWRcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGl2ZWdwdC1jaGF0LWRyYXdlci1wYWNrYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtZHJhd2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC1kcmF3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENoYXREcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ2NoYXRNYWluJykgcHJpdmF0ZSBjaGF0TWFpbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbXlJbnB1dCcpIHByaXZhdGUgbXlJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbignY2xvc2VwbGF5Z3JvdW5kYnV0dG9uJylcbiAgY2xvc2VQbGF5Z3JvdW5kQnV0dG9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdkcmF3ZXInKSBkcmF3ZXIhOiBNYXREcmF3ZXI7XG4gIEBWaWV3Q2hpbGQoJ3NvdXJjZXNEcmF3ZXInKSBzb3VyY2VzRHJhd2VyITogTWF0RHJhd2VyO1xuICBAVmlld0NoaWxkKCdlZGl0b3JzRHJhd2VyJykgZWRpdG9yc0RyYXdlciE6IE1hdERyYXdlcjtcbiAgcHJpdmF0ZSBib2R5T3ZlcmZsb3dDbGFzcyA9ICdib2R5LW92ZXJmbG93LWhpZGRlbic7XG4gIEBWaWV3Q2hpbGQoJ215VGV4dGFyZWEnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbXlUZXh0YXJlYSE6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47IC8vIFJlZmVyZW5jZSB0byB0aGUgdGV4dGFyZWFcbiAgaXNDb2xsYXBzZWRUcnVlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvcGlsb3ROYW1lOiBzdHJpbmcgPSAnSGl2ZVhHUFQnO1xuICBASW5wdXQoKSBmaXJzdE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhc3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBhcGlLZXkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlQWkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlVXNlciE6IHN0cmluZztcbiAgQElucHV0KCkgYmdHcmFkaWVudCE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBib3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RTa2lsbHMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBvcmdJZCE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25Db2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25iZ0NvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBjcmVkZW50aWFscyE6IFtdO1xuICBASW5wdXQoKSBkYXRlVGltZUNvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBkYXRlVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudElkITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudFVybCE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRUb2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgd29ya3NwYWNlVG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHMyN1Rva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdEljb24hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm1GaWVsZEJnQ29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm1GaWVsZFRleHRDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZnVsbFZpZXchOiBib29sZWFuO1xuICBASW5wdXQoKSBncmFkaWVudENvbG9ycyE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBncmVldGluZyE6IHN0cmluZztcbiAgQElucHV0KCkgbWVzc2FnZVRleHRDb2xvckFpITogc3RyaW5nO1xuICBASW5wdXQoKSBtZXNzYWdlVGV4dENvbG9yVXNlciE6IHN0cmluZztcbiAgQElucHV0KCkgcnVsZXMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbmRCdXR0b25Db2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgc2VuZEJ1dHRvblRleHRDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgc2hvd0Nsb3NlITogYm9vbGVhbjtcbiAgQElucHV0KCkgdGh1bWJzRG93bk1lc3NhZ2VzITogc3RyaW5nW107XG4gIEBJbnB1dCgpIHRodW1ic1VwTWVzc2FnZSE6IHN0cmluZztcbiAgQElucHV0KCkgdGltZXpvbmUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHVua25vd25SZXNwb25zZXMhOiBbXTtcbiAgQElucHV0KCkgdXNlT3BlbkFpITogYm9vbGVhbjtcbiAgQElucHV0KCkgdXNlcklkITogc3RyaW5nO1xuICBASW5wdXQoKSBpc0RldiE6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgYWdhaW5CdXR0b25Db2xvciE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBhZ2FpbkJ1dHRvblRleHRDb2xvciE6IHN0cmluZ1tdO1xuICBAT3V0cHV0KCkgZmVlZGJhY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25DbG9zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb3BlblBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlc3Npb25BY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZUJvdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY29ubmVjdFdpdGhVc2VyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzY2hlZHVsZU1lZXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlZnJlc2hUb2tlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb3BlblN1cHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBhdXRvZ2VuS2V5ID0gJ0F1dG9nZW5fZURKVHRFVS1OQjBSdElwenExdyc7XG4gIGFkZFRvTXlBZ2VuZGFBY3Rpb24gPSAnYWRkX3RvX215X2FnZW5kYSc7XG4gIG15VXBjb21pbmdTZXNzaW9uQWN0aW9uID0gJ215X3VwY29tbWluZ19zZXNzaW9uJztcbiAgY29ubmVjdE9yRm9sbG93QWN0aW9uID0gJ2Nvbm5lY3Rfb3JfZm9sbG93JztcbiAgYWlSZXNwb25zZTogc3RyaW5nID0gJyc7XG4gIGNoYXRMb2c6IGFueVtdID0gW107XG4gIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgZmVlZGJhY2tEb25lOiBib29sZWFuID0gZmFsc2U7XG4gIGdyZWV0aW5nTXNnOiBzdHJpbmcgPSAnJztcbiAgaGFzQmFja2Ryb3BWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnB1dDogc3RyaW5nID0gJyc7XG4gIGxpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtb2RlOiBzdHJpbmcgPSAnb3Zlcic7XG4gIHF1aWNrUHJvbXB0czogYW55W10gPSBbXTtcbiAgdGh1bWJzRG93bk1zZ0luZGV4ID0gMDtcbiAgdXNlck5hbWU6IHN0cmluZyA9ICcnO1xuICBzaG93U3RhcnRBZ2FpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0lPU0RldmljZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93RmVlZEJhY2tJY29uc0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdGVtcGVyYXR1cmU6IG51bWJlciA9IDE7XG4gIHNwZWFrZXJzID0gW107XG4gIGVudmlyb25tZW50OiB7XG4gICAgVVNFUlNfQVBJO1xuICAgIEJBU0VfVVJMO1xuICAgIEFHRU5UU19BUEk7XG4gIH07XG4gIHBlbmRpbmdSZXF1ZXN0czogYW55O1xuICBteUNvbm5lY3Rpb25zOiBhbnk7XG4gIGNvbnZlcnNhdGlvbktleTogc3RyaW5nO1xuICBjb25TZXNzaW9uS2V5OiBzdHJpbmcgPSAnJztcbiAgaXNGZXRjaERhdGFGb3I6IGJvb2xlYW47XG4gIGlzNDAxOiBib29sZWFuO1xuICBtc2c6IGFueTtcbiAgY2hhdDogYW55O1xuICBpc1dvcmtmbG93T3BlbjogYm9vbGVhbjtcbiAgb3JnV29ya2Zsb3dzOiBhbnk7XG4gIG9wZW5Xb3JrZmxvd0lucHV0OiBib29sZWFuO1xuICBzZWxlY3RlZFdvcmtmbG93OiBhbnk7XG4gIHdvcmtmbG93Rm9ybTogYW55O1xuICBjdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzczogbnVtYmVyID0gMDtcbiAgY3VycmVudFdvcmtmbG93QWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgZXhlY3V0aW5nV29ya2Zsb3c6IGJvb2xlYW47XG4gIHdvcmtmbG93RXhlY3V0aW9uRGV0YWlsczogYW55O1xuICBzaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzOiBhbnk7XG4gIGN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM6IGFueTtcblxuICBzcGVlY2hDb25maWc6IFNwZWVjaFNESy5TcGVlY2hDb25maWc7XG4gIHJlY29nbml6ZXI6IFNwZWVjaFNESy5TcGVlY2hSZWNvZ25pemVyO1xuICByZWNvZ25pemVkVGV4dDogc3RyaW5nID0gJyc7XG4gIGF1dGhvcml6YXRpb25Ub2tlbjogc3RyaW5nID0gJyc7XG4gIHJlZ2lvbjogc3RyaW5nID0gJ3dlc3RldXJvcGUnOyAvLyBTZXQgeW91ciBBenVyZSByZWdpb24gaGVyZVxuICBpc1JlY29yZGluZzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGJvdFNlcnZpY2U6IEJvdHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc29ja2V0U2VydmljZTogU29ja2V0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnZlcnNhdGlvblNlcnZpY2U6IENvbnZlcnNhdGlvblNlcnZpY2UsIC8vIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZVxuICApIHtcbiAgICB0aGlzLmNoYXRNYWluID0gbmV3IEVsZW1lbnRSZWYobnVsbCk7XG5cbiAgICAvLyBpZiAodGhpcy5wbGF0Zm9ybS5JT1MpIHtcbiAgICAvLyAgIHRoaXMuaXNJT1NEZXZpY2UgPSB0cnVlO1xuICAgIC8vIH1cbiAgfVxuICBnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRUcmFuc2xhdGlvbihrZXkpO1xuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgZXZlbnRJZCBjaGFuZ2VzIHRvIHVwZGF0ZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4gICAgaWYgKGNoYW5nZXMuZXZlbnRJZCAmJiBjaGFuZ2VzLmV2ZW50SWQuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRFdmVudElkKGNoYW5nZXMuZXZlbnRJZC5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnMyN1Rva2VuKSB7XG4gICAgICBpZiAoY2hhbmdlcy5zMjdUb2tlbi5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5zMjdUb2tlbi5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuczI3VG9rZW4gPSBjaGFuZ2VzLnMyN1Rva2VuLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICBjb25zb2xlLmxvZygnaXNGZXRjaERhdGFGb3I6ICcsIHRoaXMuaXNGZXRjaERhdGFGb3IpO1xuICAgICAgICBjb25zb2xlLmxvZygnbXNnOiAnLCB0aGlzLm1zZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjaGF0OiAnLCB0aGlzLmNoYXQpO1xuICAgICAgICBpZiAodGhpcy5pczQwMSkge1xuICAgICAgICAgIGlmICh0aGlzLmlzRmV0Y2hEYXRhRm9yKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YUZvcih0aGlzLm1zZywgdGhpcy5jaGF0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEodGhpcy5tc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm9yZ0lkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZXMub3JnSWQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMub3JnSWQucHJldmlvdXNWYWx1ZSAmJlxuICAgICAgICBjaGFuZ2VzLm9yZ0lkLmN1cnJlbnRWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNvY2tldCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRvbWFpbkF1dGhvcml0eVZhbHVlOiBhbnkgPSAncHJvZC1saXRlJztcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdGhlIGV2ZW50SWQgaW4gdHJhbnNsYXRpb24gc2VydmljZSB0byBnZXQgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICBpZiAodGhpcy5ldmVudElkKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRFdmVudElkKHRoaXMuZXZlbnRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuaXNEZXYgPyBkZXZfZW52aXJvbm1lbnQgOiBwcm9kX2Vudmlyb25tZW50O1xuXG4gICAgY29uc3QgZG9tYWluID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBoZWFkZXIgdmFsdWUgYmFzZWQgb24gdGhlIGRvbWFpblxuXG4gICAgaWYgKGRvbWFpbi5pbmNsdWRlcygncHJlLWFwcC5zb2NpYWwyNy5jb20nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdwcmUtcHJvZC1saXRlJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbi5pbmNsdWRlcygnYXBwLnNvY2lhbDI3LmNvbScpKSB7XG4gICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID0gJ3Byb2QtbGl0ZSc7XG4gICAgfSBlbHNlIGlmIChkb21haW4uaW5jbHVkZXMoJ2hpdmVncHQuaW8nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdoaXZlZ3B0JztcbiAgICB9XG5cbiAgICAvLyB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgpO1xuICAgIC8vIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuY2hhbmdlVGVtcGVyYXR1cmUodGhpcy50ZW1wZXJhdHVyZSk7XG4gICAgdGhpcy5mZXRjaEJvdENvbmZpZygpLnN1YnNjcmliZShcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgdGhpcy5mZXRjaENoYXRIaXN0b3J5KCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XG4gICAgICB9XG4gICAgKTtcbiAgICAvLyB0aGlzLmZldGNoQWdlbnRzKCk7XG4gICAgLy8gdGhpcy5mZXRjaEVkaXRvckNvbnRlbnQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAvLyB0aGlzLmluaXRpYWxpemVTb2NrZXQoKTtcbiAgICB0aGlzLmJvdFNlcnZpY2VcbiAgICAgIC5mZXRjaFNwZWVjaEF1dGhvcml6YXRpb25Ub2tlbihcbiAgICAgICAgdGhpcy5ib3RJZCxcbiAgICAgICAgdGhpcy5hcGlLZXksXG4gICAgICAgIHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWVcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHRva2VuKSA9PiB7XG4gICAgICAgIHRoaXMuYXV0aG9yaXphdGlvblRva2VuID0gdG9rZW47XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNwZWVjaFJlY29nbml6ZXIodG9rZW4pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGluaXRpYWxpemVTb2NrZXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc29ja2V0U2VydmljZS5kaXNjb25uZWN0U29ja2V0Q29ubmVjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmNvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1lFUyBJTklUJyk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbl9pZCA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCk7XG5cbiAgICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLnJlZ2lzdGVyVXNlclNwZWNpZmljSGl2ZVNvY2tldChcbiAgICAgICAgICB0aGlzLmJvdElkLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICB0aGlzLm9yZ0lkXG4gICAgICAgICk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubGlzdGVuU29ja2V0cygpO1xuICAgICAgICB9LCAzMDApO1xuICAgICAgfSwgMjAwKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgc3Vic2NyaXB0aW9uTmV3OiBhbnk7XG4gIHNvY2tldERhdGE6IGFueTtcblxuICBsaXN0ZW5Tb2NrZXRzKCkge1xuICAgIGlmICh0aGlzLmV2ZW50U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdMaXN0ZW4gU29ja2V0Jyk7XG4gICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZVxuICAgICAgLmdldFVzZXJTcGVjaWZpY05vdGlmaWNhdGlvbigpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0xpc3RlbiBTb2NrZXQgcmVzcG9uc2UnKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgIC8vIENoZWNrIGlmIE90aGVyRmllbGRzIGV4aXN0cyBpbiB0aGUgcmVzcG9uc2VcbiAgICAgICAgICBpZiAocmVzPy5tPy5PdGhlckZpZWxkcz8ud29ya2Zsb3dfaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgcGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICBhY3Rpb25fbmFtZSxcbiAgICAgICAgICAgICAgY3VycmVudF9hY3Rpb25fbmFtZSxcbiAgICAgICAgICAgICAgd29ya2Zsb3dfZXhlY3V0aW9uX2lkLFxuICAgICAgICAgICAgICB0aW1lX3N0YW1wLFxuICAgICAgICAgICAgfSA9IHJlcz8ubT8uT3RoZXJGaWVsZHM7XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uUHJvZ3Jlc3MgPSBwZXJjZW50YWdlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb24gPSBhY3Rpb25fbmFtZTtcblxuICAgICAgICAgICAgY29uc3QgYWN0aW9uSW5kZXggPSB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscy5BY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKGEpID0+IGEuTmFtZSA9PSBjdXJyZW50X2FjdGlvbl9uYW1lXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnNbYWN0aW9uSW5kZXhdWydPdXRwdXQnXSA9XG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuICAgICAgICAgICAgICB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscy5BY3Rpb25zW2FjdGlvbkluZGV4XVtcbiAgICAgICAgICAgICAgICAnSW5zZXJ0VGltZVN0YW1wJ1xuICAgICAgICAgICAgICBdID0gZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCB0aW1lX3N0YW1wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFjdGlvbiB3aXRoIG5hbWUgJHthY3Rpb25fbmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9PSAxMDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXVsnV29ya2Zsb3dFeGVjdXRpb25JZCddID1cbiAgICAgICAgICAgICAgICB3b3JrZmxvd19leGVjdXRpb25faWQ7XG4gICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzPy5tPy5PdGhlckZpZWxkcykge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBjb252ZXJzYXRpb25faWQsXG4gICAgICAgICAgICAgIGJvdF9pZCxcbiAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgYW5zd2VyLFxuICAgICAgICAgICAgICB3ZWJfcmVzdWx0cyxcbiAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdHMsXG4gICAgICAgICAgICAgIGdyYXBocyxcbiAgICAgICAgICAgICAgZXhlY3V0aW9uX2dyYXBocyxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICB9ID0gcmVzPy5tPy5PdGhlckZpZWxkcztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtZXNzYWdlX2lkMScpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzPy5tPy5PdGhlckZpZWxkcyk7XG4gICAgICAgICAgICB2YXIgY3VycmVudENoYXRNZXNzYWdlID0gdGhpcy5jaGF0TG9nLmZpbmQoXG4gICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PSBtZXNzYWdlX2lkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jaGF0TG9nKTtcbiAgICAgICAgICAgIGlmICghY3VycmVudENoYXRNZXNzYWdlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtZXNzYWdlX2lkMicpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlX2lkKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIF9pZDogbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjdXJyZW50Q2hhdE1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbWVzc2FnZV9pZDMnKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZV9pZCk7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBmaWVsZHMgYmFzZWQgb24gdGhlaXIgcHJlc2VuY2VcbiAgICAgICAgICAgIGlmIChzZWFyY2hfcmVzdWx0cyAmJiBBcnJheS5pc0FycmF5KHNlYXJjaF9yZXN1bHRzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnT25saW5lIFNlYXJjaCBUZXJtczonLCBzZWFyY2hfcmVzdWx0cyk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5zZWFyY2hUZXJtcyA9IHNlYXJjaF9yZXN1bHRzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3ZWJfcmVzdWx0cyAmJiBBcnJheS5pc0FycmF5KHdlYl9yZXN1bHRzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnV2ViIFJlc3VsdHM6Jywgd2ViX3Jlc3VsdHMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2Uuc291cmNlc0xpc3QgPSB3ZWJfcmVzdWx0cztcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLmRpc3BsYXllZFNvdXJjZXMgPSB3ZWJfcmVzdWx0cz8uc2xpY2UoMCwgMyk7IC8vIEZpcnN0IDMgY2FyZHNcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLnJlbWFpbmluZ1NvdXJjZXMgPSB3ZWJfcmVzdWx0cz8uc2xpY2UoMyk7IC8vIFJlbWFpbmluZyBpdGVtc1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhbnN3ZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Fuc3dlcjonLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXIpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdyYXBocyAmJiBBcnJheS5pc0FycmF5KGdyYXBocykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0dyYXBoczonLCBncmFwaHMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZ3JhcGhzID0gZ3JhcGhzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleGVjdXRpb25fZ3JhcGhzICYmIEFycmF5LmlzQXJyYXkoZXhlY3V0aW9uX2dyYXBocykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0V4ZWN1dGlvbiBHcmFwaHM6JywgZXhlY3V0aW9uX2dyYXBocyk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5leGVjdXRpb25HcmFwaHMgPSBleGVjdXRpb25fZ3JhcGhzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHN1Z2dlc3Rpb25zKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc3VnZ2VzdGlvbnM6Jywgc3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UucmVsYXRlZExpc3RJdGVtcyA9IHN1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIC8vIFByb2Nlc3Mgb25saW5lIHNlYXJjaCB0ZXJtcyBhcyBuZWVkZWRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIGFueSBvdGhlciBmaWVsZHMgYW5kIHRoZWlyIHByb2Nlc3NpbmcgaGVyZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ090aGVyRmllbGRzIGlzIG1pc3NpbmcgaW4gdGhlIHJlc3BvbnNlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGZldGNoaW5nIGRhdGEgZnJvbSBzb2NrZXQnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNvY2tldEFuZExpc3RlbigpIHt9XG4gIGhhbmRsZUV2ZW50KGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICd3ZWJyZXN1bHQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fuc3dlcic6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JhcGgnOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNvY2tldFNlcnZpY2UuZGlzY29ubmVjdFNvY2tldENvbm5lY3Rpb24oKTtcbiAgICAvL3RoaXMuc29ja2V0U2VydmljZS5jbG9zZSgpO1xuICB9XG4gIGNoYW5nZVRlbXBlcmF0dXJlKG5ld1RlbXBlcmF0dXJlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy50ZW1wZXJhdHVyZSA9IG5ld1RlbXBlcmF0dXJlO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGl2ZWdwdC1jaGF0LXdyYXBwZXInKTtcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgdGhlbWUgY2xhc3NlcyBmcm9tIGJvZHlcbiAgICB3cmFwcGVyPy5jbGFzc0xpc3QucmVtb3ZlKCdjcmVhdGl2ZScsICdiYWxhbmNlZCcsICdwcmVjaXNlJyk7XG5cbiAgICBzd2l0Y2ggKG5ld1RlbXBlcmF0dXJlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ2NyZWF0aXZlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdiYWxhbmNlZCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgncHJlY2lzZScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RhcnRBZ2FpbigpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IGZhbHNlO1xuICAgIHRoaXMuY2hhdExvZyA9IFtdO1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICdhaScsXG4gICAgICBtZXNzYWdlOiB0aGlzLmdyZWV0aW5nTXNnLFxuXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgfSk7XG4gICAgdGhpcy5hcmNoaWV2ZU1lc3NhZ2VzKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhcmNoaWV2ZU1lc3NhZ2VzKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYm90L2NsZWFyLWhpc3RvcnkvJHt0aGlzLmJvdElkfS8ke3RoaXMudXNlcklkfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB0cmlnZ2VyU3VwcG9ydCgpIHtcbiAgICB0aGlzLm9wZW5TdXBwb3J0LmVtaXQoKTtcbiAgfVxuICBmZXRjaEJvdENvbmZpZygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3RzP2JvdF9pZD0ke3RoaXMuYm90SWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmJvdE5hbWUgPSB0aGlzLmdldFRyYW5zbGF0aW9uKHJlcy5OYW1lKTtcbiAgICAgICAgdGhpcy5ib3RJY29uID0gcmVzLkljb247XG4gICAgICAgIHRoaXMuYm90U2tpbGxzID0gcmVzPy5Ta2lsbHM7XG4gICAgICAgIHRoaXMuZ3JlZXRpbmdNc2cgPSByZXMuR3JlZXRpbmc7XG5cbiAgICAgICAgdGhpcy50aHVtYnNEb3duTWVzc2FnZXMgPSByZXM/Lk5lZ2F0aXZlUmVzcG9uc2VzPy5sZW5ndGhcbiAgICAgICAgICA/IHJlcy5OZWdhdGl2ZVJlc3BvbnNlc1xuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgIGBXZSBhcmUgc29ycnkgd2UndmUgbm90IGJlZW4gYWJsZSB0byBhbnN3ZXIgeW91ciBxdWVzdGlvbmBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIHRoaXMucXVpY2tQcm9tcHRzID0gcmVzLlF1aWNrUHJvbXB0cztcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdGJvdCBjb25maWc6ICcsIGVycm9yKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQ2hhdEhpc3RvcnkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5jb252ZXJzYXRpb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQsIGZhbHNlKTtcbiAgICB0aGlzLmNvblNlc3Npb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0U2Vzc2lvbktleShcbiAgICAgIHRoaXMuYm90SWQsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uS2V5fT9zZXNzaW9uX2lkPSR7dGhpcy5jb25TZXNzaW9uS2V5fWA7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3I8YW55PignZmV0Y2hDb252ZXJzYXRpb24nKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcjxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0PzogVCkge1xuICAgIHJldHVybiAoZXJyb3I6IGFueSk6IE9ic2VydmFibGU8VD4gPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtvcGVyYXRpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIG9mKHJlc3VsdCBhcyBUKTtcbiAgICB9O1xuICB9XG4gIC8vIGZldGNoQ2hhdEhpc3RvcnkoKSB7XG4gIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgLy8gICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgLy8gICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gIC8vICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gIC8vICAgfSk7XG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cFxuICAvLyAgICAgLmdldChgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25LZXl9YCwgeyBoZWFkZXJzIH0pXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAvLyAgICAgICB9KSxcbiAgLy8gICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTogJywgZXJyb3IpO1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICBtYXBDaGF0SGlzdG9yeShjaGF0czogYW55KSB7XG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ2FpJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZ3JlZXRpbmdNc2csXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgfSk7XG4gICAgaWYgKGNoYXRzICYmIGNoYXRzPy5NZXNzYWdlcz8ubGVuZ3RoKSB7XG4gICAgICBjaGF0cz8uTWVzc2FnZXMuZm9yRWFjaCgoY2hhdDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjaGF0LlR5cGUgPT0gJ3VzZXInKSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICAgICAgICBXb3JrZmxvd0V4ZWN1dGlvbklkOiBjaGF0LldvcmtmbG93RXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGF0LlR5cGUgPT0gJ2FpJykge1xuICAgICAgICAgIHZhciBzb3VyY2VzTGlzdCA9IGNoYXQuV2ViTGlua3MgfHwgW107XG4gICAgICAgICAgdmFyIGRpc3BsYXllZFNvdXJjZXMgPSBjaGF0LldlYkxpbmtzLnNsaWNlKDAsIDMpOyAvLyBGaXJzdCAzIGNhcmRzXG4gICAgICAgICAgdmFyIHJlbWFpbmluZ1NvdXJjZXMgPSBjaGF0LldlYkxpbmtzLnNsaWNlKDMpOyAvLyBSZW1haW5pbmcgaXRlbXNcblxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpLFxuICAgICAgICAgICAgZXhlY3V0aW9uR3JhcGhzOiBjaGF0LkV4ZWN1dGlvbkdyYXBocyxcbiAgICAgICAgICAgIGdyYXBoczogY2hhdC5HcmFwaHMsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogY2hhdC5TZWFyY2hUZXJtcyxcbiAgICAgICAgICAgIHNvdXJjZXNMaXN0OiBzb3VyY2VzTGlzdCxcbiAgICAgICAgICAgIGRpc3BsYXllZFNvdXJjZXM6IGRpc3BsYXllZFNvdXJjZXMsXG4gICAgICAgICAgICByZW1haW5pbmdTb3VyY2VzOiByZW1haW5pbmdTb3VyY2VzLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIShtZXNzYWdlPy5sZW5ndGggPiAwKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdoZXJlIGlzIG15IG1lc3NhZ2UnKVxuICAgIC8vIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UudHJpbSgpO1xuXG4gICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSAvXFxbKFteW10rKV1cXCgoW14pXSspXFwpL2c7XG4gICAgY29uc3QgdXJsUmVnZXggPSAvKD88IWhyZWY9XCIpXFxiaHR0cHM/OlxcL1xcL1xcUysoPzwhWy4sXSkvZ2k7XG5cbiAgICBpZiAobWFya2Rvd25MaW5rUmVnZXgudGVzdChtZXNzYWdlKSkge1xuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgICAgbWFya2Rvd25MaW5rUmVnZXgsXG4gICAgICAgICc8YSBocmVmPVwiJDJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT4nXG4gICAgICApO1xuICAgICAgLy9jb25zb2xlLmxvZygnU2FuaXRpemVkIG1lc3NhZ2U6ICcsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIdG1sKGh0bWwpO1xuICAgIH1cblxuICAgIGlmICh1cmxSZWdleC50ZXN0KG1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBodG1sID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgICB1cmxSZWdleCxcbiAgICAgICAgJzxhIGhyZWY9XCIkJlwiIHRhcmdldD1cIl9ibGFua1wiPiQmPC9hPidcbiAgICAgICk7XG4gICAgICAvLyBjb25zb2xlLmxvZygnU2FuaXRpemVkIG1lc3NhZ2U6ICcsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIdG1sKGh0bWwpO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoLyg/OlxcclxcbnxcXHJ8XFxuKS9nLCAnPGJyPicpO1xuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXFwqXFwqKC4qPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGhlYWRlcnMgdG8gSFRNTCBoZWFkZXJzXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXigjezEsNn0pXFxzKyguKikkL2dtLCAobWF0Y2gsIGhhc2hlcywgdGV4dCkgPT4ge1xuICAgICAgY29uc3QgbGV2ZWwgPSBoYXNoZXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGA8aCR7bGV2ZWx9PiR7dGV4dH08L2gke2xldmVsfT5gO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgY29uc3Qgc2FuaXRpemVkTWVzc2FnZSA9IHRoaXMuc2FuaXRpemVIdG1sKG1lc3NhZ2UpO1xuICAgIHJldHVybiBzYW5pdGl6ZWRNZXNzYWdlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGNvbnN0IGZlZWRiYWNrTGlua3MgPVxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZlZWRiYWNrLWxpbmsnKTtcbiAgICBmZWVkYmFja0xpbmtzLmZvckVhY2goKGxpbms6IGFueSkgPT4ge1xuICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICB0aGlzLm9uRmVlZGJhY2tDbGljay5iaW5kKHRoaXMsICd6ZW5kZXNrJylcbiAgICAgICk7XG4gICAgfSk7XG4gICAgLy8gaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjay1saW5rJykpIHtcbiAgICAvLyAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgLy8gICAgIC5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2stbGluaycpXG4gICAgLy8gICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25GZWVkYmFja0NsaWNrLmJpbmQodGhpcywgJ3plbmRlc2snKSk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2FuaXRpemVIdG1sKGh0bWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbCk7XG4gIH1cblxuICBvbkZlZWRiYWNrQ2xpY2sodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZmVlZGJhY2tFdmVudC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgICB0aGlzLm9uQ2xvc2VFdmVudC5lbWl0KCk7XG4gIH1cblxuICBzZW5kTWVzc2FnZVdpdGhUaWxlKHByb21wdDogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnB1dCA9IHByb21wdDtcbiAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgfVxuICBpc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgZmV0Y2hEYXRhKG1zZyA9IG51bGwpIHtcbiAgICB0aGlzLmlucHV0ID0gbXNnIHx8IHRoaXMuaW5wdXQ/LnRyaW0oKTtcbiAgICB0aGlzLm1zZyA9IHRoaXMuaW5wdXQ7XG4gICAgaWYgKCF0aGlzLmlucHV0IHx8IHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRoaXMuaW5wdXQpLFxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdoaWRkZW4nOyAvLyBSZXNldCB0aGUgaGVpZ2h0XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgNjJweGA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KHRoaXMuaW5wdXQsIHRoaXMuYWdlbnRzLCB0aGlzLmNvbnZlcnNhdGlvbktleSk7XG4gIH1cbiAgZmV0Y2hEYXRhRm9yKG1zZywgY2hhdCkge1xuICAgIGNvbnN0IGlucHV0TXNnID0gbXNnPy50cmltKCk7XG4gICAgaWYgKCFpbnB1dE1zZyB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNoYXQucmVsYXRlZExpc3RJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGlucHV0TXNnKSxcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KGlucHV0TXNnLCB0aGlzLmFnZW50cywgdGhpcy5jb252ZXJzYXRpb25LZXksIG1zZywgY2hhdCk7XG4gIH1cbiAgZmV0Y2hTbWFsbFRhbGsoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdC9zbWFsbC10YWxrLyR7dGhpcy5ib3RJZH0vJHt0aGlzLnVzZXJJZH1gO1xuXG4gICAgdGhpcy5odHRwXG4gICAgICAuZ2V0PHsgc21hbGxUYWxrOiBzdHJpbmcgfT4odXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc21hbGwgdGFsazonLCBlcnJvcik7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5zbWFsbFRhbGspIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZShyZXNwb25zZS5zbWFsbFRhbGspLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMjtcbiAgICAgICAgICAvLyB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcmVhZEFsbENodW5rcyA9IChzdHJlYW06IGFueSkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICBjb25zdCBhbGxTdWdnZXN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIHJlYWRlci5jbG9zZWQuY2F0Y2goKGVycjogYW55KSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlYWRpbmcgc3RyZWFtOiAnLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBzdGFydDogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVtcChjb250cm9sbGVyLCByZWFkZXIsIGFsbFN1Z2dlc3Rpb25zKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgcHVtcChjb250cm9sbGVyOiBhbnksIHJlYWRlcjogYW55LCBhbGxTdWdnZXN0aW9uczogc3RyaW5nW10pIHtcbiAgICByZWFkZXIucmVhZCgpLnRoZW4oKHsgZG9uZSwgdmFsdWUgfTogYW55KSA9PiB7XG4gICAgICBjb25zdCBsYXN0SXRlbSA9IHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGxhc3RJdGVtLm1lc3NhZ2UgPSB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShsYXN0SXRlbS5tZXNzYWdlKTtcbiAgICAgICAgdGhpcy5jaGF0TG9nLnBvcCgpO1xuICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChsYXN0SXRlbSk7XG4gICAgICAgIGlmIChhbGxTdWdnZXN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3N1Z2dlc3Rpb25zJyxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBhbGxTdWdnZXN0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgLy8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XG5cbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgdGhpcy5mZXRjaFNtYWxsVGFsaygpO1xuICAgICAgICAvLyB9LDEwMDApXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlY29kZWRDaHVuayA9IHRoaXMuZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgdGhpcy5haVJlc3BvbnNlICs9IGRlY29kZWRDaHVuaztcbiAgICAgIGlmIChsYXN0SXRlbS50eXBlID09PSAnYWknKSB7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zTWF0Y2ggPSB0aGlzLmFpUmVzcG9uc2UubWF0Y2goLzxzdWc+KC4qPyk8XFwvc3VnPi9nKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zTWF0Y2gpIHtcbiAgICAgICAgICBzdWdnZXN0aW9uc01hdGNoLmZvckVhY2goKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFpUmVzcG9uc2UgPSB0aGlzLmFpUmVzcG9uc2UucmVwbGFjZShtYXRjaCwgJycpO1xuICAgICAgICAgICAgYWxsU3VnZ2VzdGlvbnMucHVzaChtYXRjaD8ucmVwbGFjZSgvPFxcLz9zdWc+L2csICcnKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0SXRlbS5tZXNzYWdlID0gdGhpcy5haVJlc3BvbnNlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGFpRm9ybWF0dGVkRGF0YTogYW55O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiAnKTtcbiAgICAgICAgICBhaUZvcm1hdHRlZERhdGEgPSBKU09OLnBhcnNlKEpTT04ucGFyc2UodGhpcy5haVJlc3BvbnNlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiAyJyk7XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEgPSBKU09OLnBhcnNlKHRoaXMuYWlSZXNwb25zZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gZG9uZScpO1xuXG4gICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEgJiYgYWlGb3JtYXR0ZWREYXRhPy5zZWN0aW9uX2lkPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ2NvbXBhbnlfc2VhcmNoJyB8fFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ3VzZXJfc2VhcmNoJyB8fFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ2luZHVzdHJ5X2NvbXBhbnlfc2VhcmNoJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaE15Q29ubmVjdGlvbnMoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gdGhpcy5teVVwY29taW5nU2Vzc2lvbkFjdGlvbikge1xuICAgICAgICAgICAgdmFyIHNwZWFrZXJJZHMgPSBbXTtcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5mb3JFYWNoKChzZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgIHNwZWFrZXJJZHMgPSBbLi4uc3BlYWtlcklkcywgLi4uc2Vzc2lvbi5zcGVha2Vyc107XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHNwZWFrZXJJZHM/Lmxlbmd0aCA+IDApIHRoaXMuZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKHNwZWFrZXJJZHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMuYWRkVG9NeUFnZW5kYUFjdGlvbiAmJlxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/Lmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXG4gICAgICAgICAgICAgIHNlc3Npb25JZHM6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMuY29ubmVjdE9yRm9sbG93QWN0aW9uKSB7XG4gICAgICAgICAgICBsZXQgdXNlcnNMZW4gPSBhaUZvcm1hdHRlZERhdGEuY29udGVudD8ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHVzZXJzTGVuID4gMSkge1xuICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogJ29wZW5fbmV0d29ya2luZ19kcmF3ZXInLFxuICAgICAgICAgICAgICAgIHNlYXJjaDogYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1c2Vyc0xlbiA9PSAxKSB7XG4gICAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcbiAgICAgICAgICAgICAgICBjb25uZXRVc2VySWRzOiBbYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnRbMF0udXNlcklkXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5pc19vcGVuX3BhZ2UgPT0gJ3RydWUnKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICBzZWN0aW9uSWQ6IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkLFxuICAgICAgICAgICAgICBzZWFyY2g6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQnJvd3NlcigpKSB7XG4gICAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5tZXNzYWdlICs9XG4gICAgICAgICAgICAgICAgJ1xcblxcbicgKyAnPGEgaWQ9XCJjbG9zZUJvdE5vd1wiPkNsaWNrIEhlcmU8L2E+IHRvIHNlZSByZXN1bHRzLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGFpRm9ybWF0dGVkRGF0YS5tZXNzYWdlLFxuICAgICAgICAgICAgYWN0aW9uOiBhaUZvcm1hdHRlZERhdGEsXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZUJyb3dzZXIoKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkQ2xvc2VCb3RDbGlja0V2ZW50KCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYWlSZXNwb25zZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLmFpUmVzcG9uc2UsXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcblxuICAgICAgLy8gRW5xdWV1ZSB0aGUgbmV4dCBkYXRhIGNodW5rIGludG8gb3VyIHRhcmdldCBzdHJlYW1cbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnB1bXAoY29udHJvbGxlciwgcmVhZGVyLCBhbGxTdWdnZXN0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICBzdWJtaXRGZWVkYmFjayhmbGFnOiBib29sZWFuLCBtZXNzYWdlKSB7XG4gICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG5cbiAgICB0aGlzLmZlZWRiYWNrRG9uZSA9IHRydWU7XG4gICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gbnVsbDtcbiAgICBjb25zdCBjb252ZXJzYXRpb25faWQgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQpO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29udmVyc2F0aW9uL2NvUGlsb3QvJHt0aGlzLmJvdElkfS9jb252ZXJzYXRpb24vJHtjb252ZXJzYXRpb25faWR9L2hlbHBmdWwtcmVzcG9uc2VgO1xuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIGFwaUtleTogJ0NvbnZlcnNhdGlvbl9XSXovcUFtK0VFbWZPa0ZhVUEvd2VBPT0nLFxuICAgICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBtZXNzYWdlSWQ6IG1lc3NhZ2UuX2lkLCBpc0hlbHBmdWw6IGZsYWcgfSksXG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAoZmxhZykge1xuICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgdGhpcy50aHVtYnNVcE1lc3NhZ2UgfHxcbiAgICAgICAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oJ01heSBJIGFzc2lzdCB5b3Ugd2l0aCBhbnl0aGluZyBlbHNlJyksXG4gICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZmVlZGJhY2tEb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlKFxuICAgICAgICAgIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzW3RoaXMudGh1bWJzRG93bk1zZ0luZGV4XVxuICAgICAgICApLFxuICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ID1cbiAgICAgICAgKHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ICsgMSkgJSB0aGlzLnRodW1ic0Rvd25NZXNzYWdlcy5sZW5ndGg7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdXBwb3J0TGluazg4Jyk7XG4gICAgICAgIGlmIChzdXBwb3J0TGluaykge1xuICAgICAgICAgIHN1cHBvcnRMaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50cmlnZ2VyU3VwcG9ydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKTtcbiAgICAgIHRoaXMuZmVlZGJhY2tEb25lID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xuICAgIH0pO1xuICB9XG4gIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIChuZXcgbGluZSlcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAvLyBDYWxsIHlvdXIgc3VibWl0IGZ1bmN0aW9uXG4gICAgICB0aGlzLmhhbmRsZVN1Ym1pdChldmVudCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZVN1Ym1pdChldmVudCkge1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICB9XG5cbiAgaGFuZGxlVXBDbGljayhpZHg6IGFueSkge1xuICAgIGlmICh0aGlzLmZlZWRiYWNrRG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3VibWl0RmVlZGJhY2sodHJ1ZSwgdGhpcy5jaGF0TG9nW2lkeF0pO1xuICAgIHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkO1xuXG4gICAgaWYgKHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQpIHtcbiAgICAgIHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZDtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGhhbmRsZURvd25DbGljayhpZHg6IGFueSkge1xuICAgIGlmICh0aGlzLmZlZWRiYWNrRG9uZSkgcmV0dXJuO1xuICAgIHRoaXMuc3VibWl0RmVlZGJhY2soZmFsc2UsIHRoaXMuY2hhdExvZ1tpZHhdKTtcbiAgICB0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQ7XG4gICAgaWYgKHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkKVxuICAgICAgdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQ7XG4gIH1cbiAgLy8gaGFuZGxlQ29weUNsaWNrKGluZGV4OiBhbnkpIHtcbiAgLy8gICAvLyBDb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBjbGlwYm9hcmRcbiAgLy8gICBjb25zdCBjb250ZW50VG9Db3B5ID0gdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlO1xuICAvLyAgIGNvbnNvbGUubG9nKCdjb250ZW50VG9Db3B5Jyk7XG4gIC8vICAgY29uc29sZS5sb2coY29udGVudFRvQ29weSk7XG4gIC8vICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudFRvQ29weSkudGhlbigoKSA9PiB7XG4gIC8vICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBtZXNzYWdlIHdhcyBjb3BpZWRcbiAgLy8gICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgIC8vIFJlc2V0IHRoZSBjb3BpZWQgc3RhdGUgYWZ0ZXIgYSBkZWxheVxuICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gZmFsc2U7XG4gIC8vICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgIH0sIDIwMDApOyAvLyBSZXNldCBhZnRlciAyIHNlY29uZHNcbiAgLy8gICB9KTtcbiAgLy8gfVxuICBjb3B5VGV4dChpZCwgaW5kZXgpIHtcbiAgICAvLyBHZXQgdGhlIHRleHQgZWxlbWVudFxuICAgIHZhciB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSB0ZXh0YXJlYSBlbGVtZW50IHRvIGNvcHkgdGhlIHRleHRcbiAgICB2YXIgdGVtcFRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICB0ZW1wVGV4dEFyZWEudmFsdWUgPSB0ZXh0RWxlbWVudC5pbm5lclRleHQ7XG5cbiAgICAvLyBBcHBlbmQgdGhlIHRleHRhcmVhIHRvIHRoZSBib2R5IChuZWNlc3NhcnkgZm9yIHRoZSBleGVjQ29tbWFuZCB0byB3b3JrKVxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVtcFRleHRBcmVhKTtcblxuICAgIC8vIFNlbGVjdCB0aGUgdGV4dCBpbnNpZGUgdGhlIHRleHRhcmVhXG4gICAgdGVtcFRleHRBcmVhLnNlbGVjdCgpO1xuXG4gICAgLy8gQ29weSB0aGUgdGV4dCB0byB0aGUgY2xpcGJvYXJkXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcblxuICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IHRleHRhcmVhXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wVGV4dEFyZWEpO1xuXG4gICAgLy8gT3B0aW9uYWxseSwgeW91IGNhbiBhbGVydCB0aGUgdXNlciBvciBjaGFuZ2UgdGhlIGJ1dHRvbiB0ZXh0IHRvIGluZGljYXRlIHRoZSBjb3B5IHdhcyBzdWNjZXNzZnVsXG4gICAgLy8gYWxlcnQoJ1RleHQgY29waWVkIHRvIGNsaXBib2FyZCEnKTtcblxuICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDIwMDApOyAvLyBSZXNldCBhZnRlciAyIHNlY29uZHNcbiAgfVxuICBoYW5kbGVDb3B5Q2xpY2soaW5kZXg6IGFueSkge1xuICAgIC8vIENvcHkgdGhlIG1lc3NhZ2UgdG8gdGhlIGNsaXBib2FyZFxuICAgIGNvbnN0IGNvbnRlbnRUb0NvcHkgPSB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2U7XG4gICAgY29uc3QgcmVzdXRsdCA9IHRoaXMuY29weVRleHQoJ21lc3NhZ2VUZXh0XycgKyBpbmRleCwgaW5kZXgpO1xuICB9XG5cbiAgc2FuaXRpemVIVE1MKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgZG9jdW1lbnQgZnJhZ21lbnQgdG8gaG9sZCB0aGUgc2ltcGxpZmllZCBjb250ZW50XG4gICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAvLyBBcHBlbmQgdGhlIGNoaWxkcmVuIG9mIHRoZSBib2R5IG9mIHRoZSBwYXJzZWQgZG9jdW1lbnQgdG8gdGhlIGZyYWdtZW50XG4gICAgQXJyYXkuZnJvbShkb2MuYm9keS5jaGlsZE5vZGVzKS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChub2RlLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgZGl2IGVsZW1lbnQgdG8gaG9sZCB0aGUgc2ltcGxpZmllZCBIVE1MXG4gICAgY29uc3Qgc2ltcGxpZmllZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHNpbXBsaWZpZWREaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG4gICAgLy8gUmVtb3ZlIGNvbXBsZXggdGFncyBvciBhdHRyaWJ1dGVzIGFzIG5lZWRlZFxuICAgIC8vIEV4YW1wbGU6IHJlbW92ZSBzY3JpcHRzXG4gICAgc2ltcGxpZmllZERpdlxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NjcmlwdCcpXG4gICAgICAuZm9yRWFjaCgoc2NyaXB0KSA9PiBzY3JpcHQucmVtb3ZlKCkpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSBzaW1wbGlmaWVkIEhUTUwgYXMgYSBzdHJpbmdcbiAgICByZXR1cm4gc2ltcGxpZmllZERpdi5pbm5lckhUTUw7XG4gIH1cblxuICBjdXJyZW50TWVzc2FnZUZvckVkaXRvcjogYW55ID0gJyc7XG4gIGN1cnJlbnRJbmRleEZvckVkaXRvcjogYW55ID0gLTE7XG4gIGhhbmRsZUVkaXRvckNsaWNrKGluZGV4OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPT0gLTEpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4Rm9yRWRpdG9yID0gaW5kZXg7XG4gICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5zYW5pdGl6ZUhUTUwoXG4gICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZVxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yLnJlcGxhY2UoXG4gICAgICAgICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICcnXG4gICAgICApO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9PSBpbmRleCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yICs9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvci5yZXBsYWNlKFxuICAgICAgICAgICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICAgJydcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPSBpbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvci5yZXBsYWNlKFxuICAgICAgICAgICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICAgJydcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmlzRWRpdG9yID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmlzRWRpdG9yID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMjAwMCk7IC8vIFJlc2V0IGFmdGVyIDIgc2Vjb25kc1xuICAgIHRoaXMuZWRpdG9yc0RyYXdlci5vcGVuKCk7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgc2Nyb2xsVG9Cb3R0b20oKSB7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jaGF0TWFpbi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICAgIHRoaXMuY2hhdE1haW4ubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICBpZiAoY291bnRlcisrID4gNSkgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgfSwgNSk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICBjb25zb2xlLmluZm8oJ2luY29taW5nIGFjdGlvbiBmcm9tIHRoZSBjaGF0Ym90IEFJJyk7XG4gICAgY29uc29sZS5pbmZvKGFjdGlvbik7XG5cbiAgICBpZiAoYWN0aW9uPy5jb250ZW50KSB7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIENoZWNrIGlmIHRoZSBkcmF3ZXIgaXMgaW5pdGlhbGx5IG9wZW4gYW5kIGFwcGx5IG92ZXJmbG93IGhpZGRlbiB0byBib2R5IGlmIHNvXG4gICAgaWYgKHRoaXMuZHJhd2VyLm9wZW5lZCkge1xuICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcbiAgICB9XG5cbiAgICAvLyBMaXN0ZW4gdG8gY2hhbmdlcyBpbiB0aGUgZHJhd2VyIGJlaW5nIG9wZW5lZCBvciBjbG9zZWRcbiAgICB0aGlzLmRyYXdlci5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQm9keU92ZXJmbG93KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRyYXdlci5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQpID0+IHtcbiAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubXlUZXh0YXJlYSAmJiB0aGlzLm15VGV4dGFyZWEubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5teVRleHRhcmVhLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTsgLy8gRm9jdXMgb24gdGhlIHRleHRhcmVhXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Qm9keU92ZXJmbG93KCkge1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUJvZHlPdmVyZmxvdygpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuYm9keU92ZXJmbG93Q2xhc3MpO1xuICB9XG5cbiAgZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKGlkcykge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L3VzZXJzL2dldC1ieS1zdGFmZi1pZHNgO1xuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArICd5b3VyX3Rva2VuX2hlcmUnLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGlkcyksXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOyAvLyBQYXJzZSB0aGUgSlNPTiBib2R5IG9mIHRoZSByZXNwb25zZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTmV0d29yayByZXNwb25zZSB3YXMgbm90IG9rLicpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkYXRhLmZvckVhY2goKHNwZWFrZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3BlYWtlcnNbc3BlYWtlci5pZF0gPSBzcGVha2VyO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhOicsIGVycik7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBwZXJmb3JtU2Vzc2lvbkFjdGlvbihzZXNzaW9uSWQsIGFjdGlvbikge1xuICAgIHRoaXMuc2Vzc2lvbkFjdGlvbnMubmV4dCh7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBhY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICBhZGRDbG9zZUJvdENsaWNrRXZlbnQoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjbG9zZUJvdE5vdycpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VCb3QubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNNb2JpbGVCcm93c2VyKCkge1xuICAgIHJldHVybiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoXG4gICAgICBuYXZpZ2F0b3IudXNlckFnZW50XG4gICAgKTtcbiAgfVxuXG4gIGNvbm5lY3RUb1VzZXIodXNlcklkKSB7XG4gICAgdGhpcy5jb25uZWN0V2l0aFVzZXIuZW1pdCh7XG4gICAgICBjb25uZWN0OiAhdGhpcy5jYW5EaXNjb25uZWN0KHVzZXJJZCksXG4gICAgICB1c2VySWQsXG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBzY2hlZHVsZU1lZXRpbmdXaXRoVXNlcih1c2VyKSB7XG4gICAgdGhpcy5zY2hlZHVsZU1lZXRpbmcuZW1pdCh1c2VyKTtcbiAgfVxuXG4gIGNhbkNvbm5lY3QodXNlcklkKSB7XG4gICAgcmV0dXJuICEoXG4gICAgICB0aGlzLmNhbkRpc2Nvbm5lY3QodXNlcklkKSB8fFxuICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZmluZCgoYSkgPT4gYSA9PSB1c2VySWQpXG4gICAgKTtcbiAgfVxuXG4gIGNhbkRpc2Nvbm5lY3QodXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMubXlDb25uZWN0aW9ucy5maW5kKChjb25uKSA9PiBjb25uLnVzZXJJZCA9PSB1c2VySWQpO1xuICB9XG5cbiAgZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgYXBpS2V5OiB0aGlzLmF1dG9nZW5LZXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgYCR7dGhpcy5lbnZpcm9ubWVudC5VU0VSU19BUEl9L2V2ZW50cy8ke3RoaXMuZXZlbnRJZH0vY29ubmVjdGlvbi1yZXF1ZXN0cy9hdXRvZ2VuL3BlbmRpbmctc2VudC1yZXF1ZXN0cz91c2VySWQ9JHt0aGlzLnVzZXJJZH1gLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyA9IHJlcztcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwZW5kaW5nIHJlcXVlc3RzOiAnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGZldGNoTXlDb25uZWN0aW9ucygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS91c2Vycy1jb25uZWN0aW9ucy9hdXRvZ2VuP3VzZXJJZD0ke3RoaXMudXNlcklkfWAsXG4gICAgICAgIHsgaGVhZGVycyB9XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubXlDb25uZWN0aW9ucyA9IHJlcztcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwZW5kaW5nIHJlcXVlc3RzOiAnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGlzRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGFnZW50czogYW55O1xuICBzZWxlY3RlZEFnZW50cyA9IFtdO1xuICBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAvLyBUb2dnbGUgdGhlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLmFnZW50cykgdGhpcy5mZXRjaEFnZW50cygpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblNlbGVjdEFsbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFnZW50cz8uZm9yRWFjaCgoYWdlbnQpID0+IChhZ2VudC5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25BZ2VudENoYW5nZShhZ2VudDogYW55KTogdm9pZCB7XG4gICAgLy9hZ2VudC5zZWxlY3RlZCA9ICFhZ2VudC5zZWxlY3RlZDtcbiAgICAvL2NvbnNvbGUubG9nKGFnZW50KTtcbiAgICBsZXQgYWdlbnRGb3VuZCA9IHRoaXMuYWdlbnRzLmZpbHRlcigocCkgPT4gcC5pZCA9PSBhZ2VudC5pZCk7XG4gICAgaWYgKGFnZW50Rm91bmQgJiYgYWdlbnRGb3VuZC5sZW5ndGggPiAwKSB7XG4gICAgICBhZ2VudEZvdW5kWzBdLnNlbGVjdGVkID0gIWFnZW50Rm91bmRbMF0uc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFyZUFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFnZW50cz8uZXZlcnkoKGFnZW50KSA9PiAhYWdlbnQuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZ2V0RHJvcGRvd25IZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0ZWRBZ2VudHMgPSB0aGlzLmFnZW50cz8uZmlsdGVyKChhZ2VudCkgPT4gYWdlbnQuc2VsZWN0ZWQpO1xuICAgIGlmICghc2VsZWN0ZWRBZ2VudHMpIHtcbiAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzZWxlY3RlZEFnZW50cyAmJiBzZWxlY3RlZEFnZW50cz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICA/IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50cyBTZWxlY3RlZGBcbiAgICAgICAgICA6IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50IFNlbGVjdGVkYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZmV0Y2hBZ2VudHNfaHR0cCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29QaWxvdC8ke3RoaXMuYm90SWR9L2FjdGl2ZS1hZ2VudHNgO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHt9LCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMuYWdlbnRzID0gcmVzLm1hcCgoYWdlbnQpID0+ICh7XG4gICAgICAgICAgICAuLi5hZ2VudCxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXRib3QgY29uZmlnOiAnLCBlcnJvcik7XG5cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICBkb2N1bWVudENvbnRlbnQ6IGFueTtcblxuICBjb252ZXJzYXRpb25JZDogYW55O1xuICBpc0NvbnRlbnRMb2FkZWQgPSBmYWxzZTtcblxuICBmZXRjaENvbnRlbnRfaHR0cCgpIHtcbiAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gZmFsc2U7XG4gICAgY29uc29sZS5sb2coJ0FQSSBjYWxsIGZ1bmN0aW9uJyk7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25faWQgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQpO1xuICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25faWQ7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db252ZXJzYXRpb25Eb2N1bWVudHM/Y29udmVyc2F0aW9uSWQ9JHtjb252ZXJzYXRpb25faWR9JmJvdElkPSR7dGhpcy5ib3RJZH1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogJ1dJei9xQW0rRUVtZk9rRmFVQS93ZUE9PScsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRDb250ZW50ID0gcmVzO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdHZXQgQVBJIGNhbGxsZWQgc3VjY2VzcycpO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZyBESjogJywgZXJyb3IpO1xuICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yPy5zdGF0dXMgPT0gNDA0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2Rhc2gnKTtcbiAgICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmZXRjaEFnZW50cygpIHtcbiAgICB0aGlzLmZldGNoQWdlbnRzX2h0dHAoKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGZldGNoRWRpdG9yQ29udGVudCgpIHtcbiAgICB0aGlzLmZldGNoQ29udGVudF9odHRwKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyBldmVudHMvJHtldmVudElkfS91c2Vycy1jb25uZWN0aW9uc1xuICBwcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkobWFya2Rvd246IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIGEgY3VzdG9tIHJlbmRlcmVyIHRvIG1vZGlmeSA8YT4gdGFnc1xuICAgICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgbWFya2VkLlJlbmRlcmVyKCk7XG5cbiAgICAgIC8vIEN1c3RvbWl6ZSBhbmNob3IgdGFncyB0byBpbmNsdWRlIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICByZW5kZXJlci5saW5rID0gKGhyZWY6IHN0cmluZywgdGl0bGU6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBgPGEgaHJlZj1cIiR7aHJlZn1cIiB0aXRsZT1cIiR7XG4gICAgICAgICAgdGl0bGUgfHwgJydcbiAgICAgICAgfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7dGV4dH08L2E+YDtcbiAgICAgIH07XG5cbiAgICAgIC8vIFBhcnNlIHRoZSBtYXJrZG93biBjb250ZW50IHRvIEhUTUwgdXNpbmcgbWFya2VkIHdpdGggdGhlIGN1c3RvbSByZW5kZXJlclxuICAgICAgY29uc3QgbWFya2Rvd25Db250ZW50ID0gbWFya2VkLnBhcnNlKG1hcmtkb3duLCB7IHJlbmRlcmVyOiByZW5kZXJlciB9KTtcblxuICAgICAgLy8gU2FuaXRpemUgdGhlIHBhcnNlZCBIVE1MIHVzaW5nIEFuZ3VsYXIncyBEb21TYW5pdGl6ZXJcbiAgICAgIGNvbnN0IHNhbml0aXplZEh0bWwgPVxuICAgICAgICB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChtYXJrZG93bkNvbnRlbnQpO1xuXG4gICAgICAvLyBSZXR1cm4gdGhlIHNhZmUgSFRNTCBjb250ZW50IGZvciBkaXNwbGF5XG4gICAgICByZXR1cm4gc2FuaXRpemVkSHRtbDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcHJvY2Vzc2luZyBtYXJrZG93bjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gJyc7IC8vIFJldHVybiBhbiBlbXB0eSBzdHJpbmcgb3IgaGFuZGxlIHRoZSBlcnJvciBhcHByb3ByaWF0ZWx5XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUh0bWwobWFya2Rvd246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFtYXJrZG93biB8fCAhKG1hcmtkb3duLmxlbmd0aCA+IDApKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnB1dCBNYXJrZG93biBpcyBudWxsIG9yIGVtcHR5Jyk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBoZWFkZXJzICgjIyMgb3IgIyMpIHRvIDxzdHJvbmc+IGZvciBib2xkIGhlYWRpbmdzXG4gICAgbGV0IGh0bWwgPSBtYXJrZG93bi5yZXBsYWNlKFxuICAgICAgL14oI3sxLDZ9KVxccysoLiopJC9nbSxcbiAgICAgIChtYXRjaCwgaGFzaGVzLCB0ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gaGFzaGVzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxldmVsID09PSAzKSB7XG4gICAgICAgICAgcmV0dXJuIGA8aDM+PHN0cm9uZz4ke3RleHR9PC9zdHJvbmc+PC9oMz5gO1xuICAgICAgICB9IGVsc2UgaWYgKGxldmVsID09PSA0KSB7XG4gICAgICAgICAgcmV0dXJuIGA8aDQ+PHN0cm9uZz4ke3RleHR9PC9zdHJvbmc+PC9oND5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPHN0cm9uZz4ke3RleHR9PC9zdHJvbmc+YDtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBjb2RlIGJsb2NrcyB3aXRoIGxhbmd1YWdlIHRvIHByZWZvcm1hdHRlZCBIVE1MXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvYGBgKFxcdyspP1xcbihbXFxzXFxTXSo/KWBgYC9nLCAobWF0Y2gsIGxhbmcsIGNvZGUpID0+IHtcbiAgICAgIGNvbnN0IGVzY2FwZWRDb2RlID0gdGhpcy5lc2NhcGVIdG1sKGNvZGUpO1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5nIHx8ICdwbGFpbnRleHQnO1xuXG4gICAgICAvLyBDcmVhdGUgYSBjb3B5IGJ1dHRvbiBmb3IgdGhlIGNvZGUgYmxvY2tcbiAgICAgIHJldHVybiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29kZS1jb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImNvcHktYnV0dG9uXCIgY2xhc3M9XCJjb3B5LWJ1dHRvblwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJ1xcYCR7ZXNjYXBlZENvZGV9XFxgJylcIj4ke3RoaXMuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICdDb3B5J1xuICAgICAgKX08L2J1dHRvbj5cbiAgICAgICAgPHByZSBjbGFzcz1cImNvZGVfYmxvY2sgZGlmZlwiPjxjb2RlIGNsYXNzPVwibGFuZ3VhZ2UtJHtsYW5ndWFnZX1cIj4ke2VzY2FwZWRDb2RlfTwvY29kZT48L3ByZT5cbiAgICAgIDwvZGl2PmA7XG4gICAgfSk7XG5cbiAgICAvLyBDb252ZXJ0IGlubGluZSBjb2RlICh3cmFwcGVkIGluIGBiYWNrdGlja3NgKSB0byBpbmxpbmUgPGNvZGU+IHRhZ3NcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9gKFteYF0rKWAvZywgJzxjb2RlPiQxPC9jb2RlPicpO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBib2xkIHRvIEhUTUwgPHN0cm9uZz5cbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9cXCpcXCooLio/KVxcKlxcKi9nLCAnPHN0cm9uZz4kMTwvc3Ryb25nPicpO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXJlZCBsaXN0c1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXGQrXFwuXFxzKyguKikkL2dtLCAnPGxpPiQxPC9saT4nKTtcblxuICAgIC8vIENvbnZlcnQgYnVsbGV0IHBvaW50IGxpc3RzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXlxcLVxccysoLiopJC9nbSwgJzxsaT4kMTwvbGk+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGxpbmtzIHRvIEhUTUwgbGlua3NcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKFxuICAgICAgL1xcWyhbXlxcXV0rKV1cXCgoW14pXSspXFwpL2csXG4gICAgICAnPGEgaHJlZj1cIiQyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JDE8L2E+J1xuICAgICk7XG5cbiAgICAvLyBDb252ZXJ0IG5ldyBsaW5lcyB0byA8YnI+IHRhZ3MgZm9yIHBhcmFncmFwaHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC8oPzpcXHJcXG58XFxyfFxcbikvZywgJzxicj4nKTtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGVzY2FwZSBIVE1MIGNoYXJhY3RlcnMgZm9yIGNvZGUgYmxvY2tzXG4gIGVzY2FwZUh0bWwoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29kZVxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgIC5yZXBsYWNlKC8nL2csICcmIzAzOTsnKTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIGNvcHkgdGV4dCB0byBjbGlwYm9hcmRcbiAgcHVibGljIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBhbGVydCgnQ29kZSBjb3BpZWQgdG8gY2xpcGJvYXJkIScpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvcHkgdGV4dDogJywgZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgaXNDb2xsYXBzZWRGb3JHcmFwaCA9IGZhbHNlO1xuICBpc0NvbGxhcHNlZEZvckZHcmFwaCA9IGZhbHNlO1xuICB0b2dnbGVDb2xsYXBzZSgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gIXRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlQ29sbGFwc2VHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yR3JhcGggPSAhdGhpcy5pc0NvbGxhcHNlZEZvckdyYXBoO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICB0b2dnbGVDb2xsYXBzZUZHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yRkdyYXBoID0gIXRoaXMuaXNDb2xsYXBzZWRGb3JGR3JhcGg7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIC8vICAgW1xuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEphbnVhcnkgMjAyNDogSW4tRGVwdGggYW5kIENvbmNpc2UgLSBUaGUgQUkgVHJhY2tcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIkVhY2ggbW9udGgsIHdlIGNvbXBpbGUgc2lnbmlmaWNhbnQgbmV3cywgdHJlbmRzLCBhbmQgaGFwcGVuaW5ncyBpbiBBSSwgcHJvdmlkaW5nIGRldGFpbGVkIHN1bW1hcmllcyB3aXRoIGtleSBwb2ludHMgaW4gYnVsbGV0IGZvcm0gZm9yIGNvbmNpc2UgeWV0IGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtamFudWFyeS0yMDI0L1wiXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiVG9wIEFJIE5ld3MsIEphbnVhcnkgMjAyNCAtIEV2ZXJ5cGl4ZWwgSm91cm5hbFwiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiSW4gdGhpcyBtb250aGx5IHJvdW5kdXAsIHdlIHNwb3RsaWdodCB0aGUgdG9wIEFJIG5ld3Mgc3RvcmllcyBmcm9tIEphbnVhcnksIGluY2x1ZGluZyB0aGUgT3BlbkFJIHZzLiBUaGUgTmV3IFlvcmsgVGltZXMgTGF3c3VpdC5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vam91cm5hbC5ldmVyeXBpeGVsLmNvbS90b3AtYWktbmV3cy1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgSnVseSAyMDI0OiBJbi1EZXB0aCBhbmQgQ29uY2lzZSAtIFRoZSBBSSBUcmFja1wiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiVGhpcyBwYWdlIGZlYXR1cmVzIEFJIE5ld3MgZm9yIEp1bHkgMjAyNCwgaGlnaGxpZ2h0aW5nIHNpZ25pZmljYW50IGV2ZW50cyBzdWNoIGFzIENhbnZhIGFjcXVpcmluZyBMZW9uYXJkbyBBSS5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vdGhlYWl0cmFjay5jb20vYWktbmV3cy1qdWx5LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UvXCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJKYW51YXJ5IG5ld3Mgcm91bmR1cDogV2hhdCdzIG5ldyBpbiB0aGUgd29ybGQgb2YgQUk/IC0gUGx1cmFsc2lnaHRcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIk9wZW5BSeKAmXMgbmV3IEdQVCBzdG9yZSwgYnVzaW5lc3MtcmVhZHkgQ2hhdEdQVCBwbGFucywgYW5kIGEgcHJlZGljdGVkIHJpc2UgaW4gQUktcG93ZXJlZCBjeWJlcmNyaW1lLlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly93d3cucGx1cmFsc2lnaHQuY29tL3Jlc291cmNlcy9ibG9nL2RhdGEvYWktdGhpcy1tb250aC1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgQXVndXN0IDIwMjQ6IEluLURlcHRoIGFuZCBDb25jaXNlIC0gVGhlIEFJIFRyYWNrXCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJUaGlzIHBhZ2UgZmVhdHVyZXMgQUkgTmV3cyBmb3IgQXVndXN0IDIwMjQsIHdpdGggaGlnaGxpZ2h0cyBzdWNoIGFzIE52aWRpYSBkZWxheWluZyB0aGUg4oCcQmxhY2t3ZWxs4oCdIEIyMDAgQUkgY2hpcHMgZGVsaXZlcnkuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtYXVndXN0LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UtZHVwbGljYXRlL1wiXG4gIC8vICAgfVxuICAvLyBdXG4gIGRhdGVUaW1lID0geyBub3c6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICAvLyBFeHRyYWN0cyB0aGUgZG9tYWluIGZyb20gYSBVUkxcbiAgZ2V0RG9tYWluTmFtZSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgaG9zdG5hbWUgfSA9IG5ldyBVUkwodXJsKTtcbiAgICAgIHJldHVybiBob3N0bmFtZS5yZXBsYWNlKC9ed3d3XFwuLywgJycpOyAvLyBSZW1vdmUgJ3d3dy4nIGlmIHByZXNlbnRcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGVzIHRoZSBmYXZpY29uIFVSTFxuICBnZXRGYXZpY29uVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLmdldERvbWFpbk5hbWUodXJsKTtcbiAgICByZXR1cm4gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vczIvZmF2aWNvbnM/c3o9MTI4JmRvbWFpbj0ke2RvbWFpbn1gO1xuICB9XG4gIGN1cnJlbnRTb3VyY2VzTGlzdDogYW55ID0gW107XG4gIG9uQ2FyZENsaWNrKHNvdXJjZXMpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTb3VyY2VzTGlzdCA9IHNvdXJjZXM7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5vcGVuKCk7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGlzU2hvd0VkaXRvckJ1dHRvbiA9IHRydWU7XG5cbiAgb3Blbk91dGVyRWRpdG9yKCkge1xuICAgIHRoaXMuZmV0Y2hFZGl0b3JDb250ZW50KCk7XG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLm9wZW4oKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5pc1Nob3dFZGl0b3JCdXR0b24gPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZUVkaXRvcigpIHtcbiAgICB0aGlzLmVkaXRvcnNEcmF3ZXIuY2xvc2UoKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNTaG93RWRpdG9yQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpZiBuZWVkZWRcbiAgICB0aGlzLm9uRHJhd2VyQ2xvc2VkKCk7XG4gIH1cblxuICBvbkNsb3NlU291cmNlKCkge1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5jbG9zZSgpO1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgdGhpcy5vbkRyYXdlckNsb3NlZCgpO1xuICB9XG4gIG9uRHJhd2VyQ2xvc2VkKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc0RyYXdlck9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgICAvLyBVc2UgbmdDbGFzcyB0byBkeW5hbWljYWxseSBhcHBseSB0aGUgY2xhc3NcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgfVxuICAgIH0sIDgwMCk7XG4gIH1cbiAgaXNEcmF3ZXJPcGVuID0gdHJ1ZTtcblxuICB0b2dnbGVEcmF3ZXIodG9kbykge1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gdG9kbztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy51cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk7XG4gIH1cbiAgdXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpIHtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSB0aGlzLmlzRHJhd2VyT3BlbiA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgfVxuICB9XG4gIG9wZW5MaW5rSW5OZXdUYWIobGluazogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93Lm9wZW4obGluaywgJ19ibGFuaycpO1xuICB9XG4gIGFkanVzdFRleHRhcmVhSGVpZ2h0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgLy8gUHJldmVudHMgYSBuZXcgbGluZSBmcm9tIGJlaW5nIGFkZGVkXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7IC8vIFJlc2V0IHRoZSBoZWlnaHRcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgOyAvLyBBZGp1c3QgaGVpZ2h0IHRvIG1hdGNoIGNvbnRlbnRcbiAgICAvLyBFbnN1cmUgdGhlIGhlaWdodCBkb2Vzbid0IGV4Y2VlZCB0aGUgbWF4LWhlaWdodCBzZXQgaW4gQ1NTXG4gICAgaWYgKHRleHRhcmVhLnNjcm9sbEhlaWdodCA+IDE1MCkge1xuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYDE1MHB4YDsgLy8gQWRqdXN0IGhlaWdodCB0byBtYXRjaCBjb250ZW50XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7IC8vIEVuYWJsZSBzY3JvbGxpbmcgaWYgY29udGVudCBleGNlZWRzIDQwMHB4XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nOyAvLyBIaWRlIHNjcm9sbGJhciBpZiBjb250ZW50IGlzIHdpdGhpbiBsaW1pdHNcbiAgICB9XG4gIH1cblxuICB0b2dnbGVXb3JrZmxvd3ModmFsdWUgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRm9yQ29wMjlCb3RJZCgpKSB7XG4gICAgICB0aGlzLmJvdFNlcnZpY2UuZ2V0V29ya2Zsb3dzQnlPcmdJZCh0aGlzLm9yZ0lkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLm9yZ1dvcmtmbG93cyA9IHJlcztcbiAgICAgICAgdGhpcy5pc1dvcmtmbG93T3BlbiA9IHZhbHVlID09IG51bGwgPyAhdGhpcy5pc1dvcmtmbG93T3BlbiA6IHZhbHVlO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1dvcmtmbG93T3Blbikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gICAgLy8gQ3JlYXRlIGZvcm0gY29udHJvbHMgZHluYW1pY2FsbHkgYmFzZWQgb24gc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hXG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8uVHJpZ2dlcj8uSW5wdXRTY2hlbWEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgIGZvcm1Db250cm9sc1tpbnB1dC5JbnB1dElkXSA9IFtcbiAgICAgICAgICBpbnB1dC5WYWx1ZSB8fCAnJyxcbiAgICAgICAgICBpbnB1dC5SZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZm9ybVxuICAgIHRoaXMud29ya2Zsb3dGb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICB9XG5cbiAgb25Xb3JrZmxvd1NlbGVjdGVkKHdvcmtmbG93KSB7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gd29ya2Zsb3c7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5Xb3JrZmxvd0lucHV0ID0gdHJ1ZTtcbiAgfVxuXG4gIG9uV29ya2Zsb3dTdWJtaXQoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FsbENoYXRzJyk7XG4gICAgaWYgKHRoaXMud29ya2Zsb3dGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSk7XG5cbiAgICAgIHZhciBpbnB1dCA9IHRoaXMucHJlcGFyZUh0bWwoXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVNYXJrZG93bihcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuTmFtZSxcbiAgICAgICAgICB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICAvLyB1cGRhdGUgbGFzdCB0d28gY2hhdExvZyBlbnRyaWVzLCBzZXQgc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyID0gZmFsc2VcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMV1bJ3Nob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlciddID1cbiAgICAgICAgICBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAyXVsnc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyJ10gPVxuICAgICAgICAgIGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgICBtZXNzYWdlOiBpbnB1dCxcbiAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgICBzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXI6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coaW5wdXQpO1xuXG4gICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzID0gMDtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uID1cbiAgICAgICAgJ0V4ZWN1dGluZyAnICsgdGhpcy5zZWxlY3RlZFdvcmtmbG93LkFjdGlvbnNbMF0uTmFtZTtcbiAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gdHJ1ZTtcbiAgICAgIHRoaXMuZXhlY3V0aW5nV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB7XG4gICAgICAgIEFjdGlvbnM6IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5BY3Rpb25zLFxuICAgICAgICBJbnB1dHM6IHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgICB3b3JrZmxvd0lucHV0czogdGhpcy53b3JrZmxvd0Zvcm0udmFsdWUsXG4gICAgICAgIFdvcmtmbG93TmFtZTogdGhpcy5zZWxlY3RlZFdvcmtmbG93Lk5hbWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gZXhlY3V0ZSB0aGUgYXNrIGVuZHBvaW50IHdpdGggd29ya2Zsb3cgaW5wdXRcbiAgICAgIHRoaXMubWFrZUFza1JlcXVlc3QoXG4gICAgICAgIGlucHV0LFxuICAgICAgICB0aGlzLmFnZW50cyxcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25LZXksXG4gICAgICAgICcnLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbJ19pZCddLFxuICAgICAgICB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBtYWtlQXNrUmVxdWVzdChcbiAgICBpbnB1dE1zZzogc3RyaW5nLFxuICAgIGFnZW50czogYW55W10sXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBtc2c/OiBhbnksXG4gICAgY2hhdD86IGFueSxcbiAgICB3b3JrZmxvd0lkPzogc3RyaW5nLFxuICAgIHdvcmtmbG93X2lucHV0cz86IGFueVxuICApOiB2b2lkIHtcbiAgICB2YXIgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYWkvYXNrYDtcblxuICAgIHZhciBib2R5ID0ge1xuICAgICAgdXNlcl9xdWVzdGlvbjogaW5wdXRNc2csXG4gICAgICB1c2VyX2lkOiB0aGlzLnVzZXJJZCxcbiAgICAgIGJvdF9pZDogdGhpcy5ib3RJZCxcbiAgICAgIG1lc3NhZ2VfaWQ6IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZW5lcmF0ZUtleSgpLFxuICAgICAgc2Vzc2lvbl9pZDogdGhpcy5jb25TZXNzaW9uS2V5LFxuICAgICAgYWdlbnRzOiBhZ2VudHM/LmZpbHRlcigocCkgPT4gcC5zZWxlY3RlZCkubWFwKChwKSA9PiBwLmlkKSA/PyBbXSxcbiAgICAgIGNvbnZlcnNhdGlvbl9pZDogY29udmVyc2F0aW9uSWQsXG4gICAgICBmaXJzdF9uYW1lOiB0aGlzLmZpcnN0TmFtZSxcbiAgICAgIGxhc3RfbmFtZTogdGhpcy5sYXN0TmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtmbG93SWQpIHtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lkJ10gPSB3b3JrZmxvd0lkO1xuICAgICAgYm9keVsnd29ya2Zsb3dfaW5wdXRzJ10gPSB3b3JrZmxvd19pbnB1dHM7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyczogYW55ID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRoaXMuczI3VG9rZW4sXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgZXZlbnRfdXJsOiB0aGlzLmV2ZW50VXJsLFxuICAgICAgZXZlbnRfdG9rZW46IHRoaXMuZXZlbnRUb2tlbixcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMud29ya3NwYWNlVG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbJ3dvcmtzcGFjZVRva2VuJ10gPSB0aGlzLndvcmtzcGFjZVRva2VuO1xuICAgIH1cblxuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICB0aGlzLmlzNDAxID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbi5lbWl0KCk7XG5cbiAgICAgICAgICAvLyBJZiBgbXNnYCBhbmQgYGNoYXRgIGV4aXN0LCBoYW5kbGUgdGhlbVxuICAgICAgICAgIGlmIChtc2cgJiYgY2hhdCkge1xuICAgICAgICAgICAgdGhpcy5tc2cgPSBtc2c7XG4gICAgICAgICAgICB0aGlzLmNoYXQgPSBjaGF0O1xuICAgICAgICAgICAgdGhpcy5pc0ZldGNoRGF0YUZvciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXM0MDEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAvLyBBZGRpdGlvbmFsIHJlc3BvbnNlIGhhbmRsaW5nIGlmIG5lZWRlZFxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiAnLCBlcnIpO1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmlucHV0ID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gbnVsbDtcbiAgICB0aGlzLm9wZW5Xb3JrZmxvd0lucHV0ID0gZmFsc2U7XG4gICAgdGhpcy5pc1dvcmtmbG93T3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG1ha2VBc2tSZXF1ZXN0b2xkKFxuICAgIGlucHV0TXNnOiBzdHJpbmcsXG4gICAgYWdlbnRzOiBhbnlbXSxcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICAgIG1zZz86IGFueSxcbiAgICBjaGF0PzogYW55LFxuICAgIHdvcmtmbG93SWQ/OiBzdHJpbmcsXG4gICAgd29ya2Zsb3dfaW5wdXRzPzogYW55XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2FpL2Fza2A7XG5cbiAgICBjb25zdCBib2R5OiBhbnkgPSB7XG4gICAgICB1c2VyX3F1ZXN0aW9uOiBpbnB1dE1zZyxcbiAgICAgIHVzZXJfaWQ6IHRoaXMudXNlcklkLFxuICAgICAgYm90X2lkOiB0aGlzLmJvdElkLFxuICAgICAgbWVzc2FnZV9pZDogdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdlbmVyYXRlS2V5KCksXG4gICAgICBhZ2VudHM6IGFnZW50cz8uZmlsdGVyKChwKSA9PiBwLnNlbGVjdGVkKS5tYXAoKHApID0+IHAuaWQpID8/IFtdLFxuICAgICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGZpcnN0X25hbWU6IHRoaXMuZmlyc3ROYW1lLFxuICAgICAgbGFzdF9uYW1lOiB0aGlzLmxhc3ROYW1lLFxuICAgIH07XG5cbiAgICBpZiAod29ya2Zsb3dJZCkge1xuICAgICAgYm9keVsnd29ya2Zsb3dfaWQnXSA9IHdvcmtmbG93SWQ7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pbnB1dHMnXSA9IHdvcmtmbG93X2lucHV0cztcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5odHRwLnBvc3QodXJsLCBib2R5LCB7IGhlYWRlcnMgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAvLyBBZGRpdGlvbmFsIHJlc3BvbnNlIGhhbmRsaW5nIGlmIG5lZWRlZFxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiAnLCBlcnIpO1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBudWxsO1xuICAgIHRoaXMub3BlbldvcmtmbG93SW5wdXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzV29ya2Zsb3dPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2VuZXJhdGVNYXJrZG93bih0aXRsZSwgb2JqKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXJrZG93biB3aXRoIHRoZSB0aXRsZVxuICAgIGxldCBtYXJrZG93biA9IGAjIyAke3RpdGxlfVxcbmA7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIG9iamVjdCBhbmQgYXBwZW5kIHRoZSBmaWVsZCBuYW1lcyBhbmQgdmFsdWVzXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgdmFyIGtleV9sYWJlbCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hLmZpbmQoXG4gICAgICAgICAgKGlucHV0KSA9PiBpbnB1dC5JbnB1dElkID09PSBrZXlcbiAgICAgICAgKT8uTGFiZWwgfHwga2V5O1xuICAgICAgbWFya2Rvd24gKz0gYC0gKioke2tleV9sYWJlbH0qKjogJHt2YWx1ZX1cXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZG93bjtcbiAgfVxuXG4gIHNob3dXb3JrZmxvd0hpc3RvcnlEZXRhaWxzKHdvcmtmbG93X2lkKSB7XG4gICAgaWYgKCF3b3JrZmxvd19pZCkge1xuICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0aGlzLmN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM7XG4gICAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYm90U2VydmljZS5nZXRXb3JrZmxvd0V4ZWN1dGlvbkJ5SWQod29ya2Zsb3dfaWQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5BY3Rpb25zICYmIEFycmF5LmlzQXJyYXkocmVzLkFjdGlvbnMpKSB7XG4gICAgICAgIHJlcy5BY3Rpb25zID0gcmVzLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICBpZiAoYWN0aW9uLkluc2VydFRpbWVTdGFtcCkge1xuICAgICAgICAgICAgYWN0aW9uLkluc2VydFRpbWVTdGFtcCA9IGZvcm1hdFRpbWVTdGFtcHMoXG4gICAgICAgICAgICAgIHRoaXMudGltZXpvbmUsXG4gICAgICAgICAgICAgIGFjdGlvbi5JbnNlcnRUaW1lU3RhbXBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXMuSW5zZXJ0VGltZVN0YW1wID0gZm9ybWF0VGltZVN0YW1wcyhcbiAgICAgICAgdGhpcy50aW1lem9uZSxcbiAgICAgICAgcmVzLkluc2VydFRpbWVTdGFtcFxuICAgICAgKTtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gcmVzO1xuICAgICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gZmFsc2U7XG4gIH1cblxuICBvYmplY3RUb0FycmF5KG9iajogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcCgoa2V5KSA9PiAoeyBrZXksIHZhbHVlOiBvYmpba2V5XSB9KSk7XG4gIH1cblxuICBzdGFydE5ld0NvbnZlcnNhdGlvbigpIHtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbktleSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCwgdHJ1ZSk7XG4gICAgdGhpcy5jaGF0TG9nID0gW3RoaXMuY2hhdExvZ1swXV07XG4gICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVNvY2tldCgpO1xuICAgIH0sIDIwMCk7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVTcGVlY2hSZWNvZ25pemVyKHRva2VuOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNwZWVjaENvbmZpZyA9IFNwZWVjaFNESy5TcGVlY2hDb25maWcuZnJvbUF1dGhvcml6YXRpb25Ub2tlbihcbiAgICAgIHRva2VuLFxuICAgICAgdGhpcy5yZWdpb25cbiAgICApO1xuICAgIGNvbnN0IGF1ZGlvQ29uZmlnID0gU3BlZWNoU0RLLkF1ZGlvQ29uZmlnLmZyb21EZWZhdWx0TWljcm9waG9uZUlucHV0KCk7XG4gICAgdGhpcy5yZWNvZ25pemVyID0gbmV3IFNwZWVjaFNESy5TcGVlY2hSZWNvZ25pemVyKFxuICAgICAgdGhpcy5zcGVlY2hDb25maWcsXG4gICAgICBhdWRpb0NvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLnJlY29nbml6ZXIucmVjb2duaXppbmcgPSAocywgZSkgPT4ge1xuICAgICAgaWYgKGUucmVzdWx0LnJlYXNvbiA9PT0gU3BlZWNoU0RLLlJlc3VsdFJlYXNvbi5SZWNvZ25pemluZ1NwZWVjaCkge1xuICAgICAgICB0aGlzLmlucHV0ID0gZS5yZXN1bHQudGV4dDtcbiAgICAgICAgY29uc29sZS5sb2coYFJlY29nbml6aW5nOiAke2UucmVzdWx0LnRleHR9YCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlY29nbml6ZXIucmVjb2duaXplZCA9IChzLCBlKSA9PiB7XG4gICAgICBpZiAoZS5yZXN1bHQucmVhc29uID09PSBTcGVlY2hTREsuUmVzdWx0UmVhc29uLlJlY29nbml6ZWRTcGVlY2gpIHtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGUucmVzdWx0LnRleHQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWNvZ25pemVkOiAke2UucmVzdWx0LnRleHR9YCk7XG4gICAgICAgIHRoaXMudG9nZ2xlUmVjb3JkaW5nKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlY29nbml6ZXIuY2FuY2VsZWQgPSAocywgZSkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignQ2FuY2VsZWQ6ICcsIGUuZXJyb3JEZXRhaWxzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnNlc3Npb25TdG9wcGVkID0gKHMsIGUpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZXNzaW9uIHN0b3BwZWQuJyk7XG4gICAgICB0aGlzLnJlY29nbml6ZXIuc3RvcENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gICAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIH07XG4gIH1cblxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XG4gICAgdGhpcy5pc1JlY29yZGluZyA9ICF0aGlzLmlzUmVjb3JkaW5nO1xuXG4gICAgaWYgKHRoaXMuaXNSZWNvcmRpbmcpIHtcbiAgICAgIHRoaXMuc3RhcnRSZWNvZ25pdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3BSZWNvZ25pdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0UmVjb2duaXRpb24oKSB7XG4gICAgdGhpcy5yZWNvZ25pemVyLnN0YXJ0Q29udGludW91c1JlY29nbml0aW9uQXN5bmMoKTtcbiAgfVxuXG4gIHN0b3BSZWNvZ25pdGlvbigpIHtcbiAgICB0aGlzLnJlY29nbml6ZXIuc3RvcENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gIH1cblxuICBjaGVja0ZvckNvcDI5Qm90SWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYm90SWQgPT0gJzY2ZmEzZjI3NmM1ZDcxZTI3MTdiZmVhOCcgfHxcbiAgICAgIHRoaXMuYm90SWQgPT0gJzY3MTYzMzU0NTY1MmRkNzhlZmVjODQ4ZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0TGF0ZXN0VGltZSh0aW1lKTogc3RyaW5nIHtcbiAgICBpZiAodGltZSkge1xuICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZyhbXSwge1xuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgfSk7IC8vIHJldHVybnMgY3VycmVudCB0aW1lIGluICdzaG9ydFRpbWUnIGZvcm1hdFxuICB9XG59XG4iXX0=
1760
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9tbnQvNTBiM2NkZWEtZTI5Ny00MzVjLWFkOWMtMDQ4M2M5NWM2ZDI1L3Byb2Zlc3Npb25hbC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQtZHJhd2VyL2NoYXQtZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFFWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxTQUFTLE1BQU0sd0NBQXdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDLENBQUMsZ0JBQWdCO0FBUWxELE1BQU0sT0FBTyxtQkFBbUI7SUF3SDlCLFlBQ1UsRUFBZSxFQUNmLFVBQXVCLEVBQ3ZCLEdBQXNCLEVBQ3RCLElBQWdCLEVBQ2hCLFNBQXVCLEVBQ3ZCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUFFLDZCQUE2QjtJQUN2RSxrQkFBc0M7UUFUdEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQWE7UUFDdkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUExSHhDLHNCQUFpQixHQUFHLHNCQUFzQixDQUFDO1FBR25ELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ2YsZ0JBQVcsR0FBVyxVQUFVLENBQUM7UUE0Q2hDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDeEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3pDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVoRCxlQUFVLEdBQUcsNkJBQTZCLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFDekMsNEJBQXVCLEdBQUcsc0JBQXNCLENBQUM7UUFDakQsMEJBQXFCLEdBQUcsbUJBQW1CLENBQUM7UUFDNUMsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLFlBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsU0FBSSxHQUFXLE1BQU0sQ0FBQztRQUN0QixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QiwyQkFBc0IsR0FBa0IsSUFBSSxDQUFDO1FBQzdDLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFTZCxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQVUzQixrQ0FBNkIsR0FBVyxDQUFDLENBQUM7UUFDMUMsMEJBQXFCLEdBQVcsRUFBRSxDQUFDO1FBUW5DLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLHVCQUFrQixHQUFXLEVBQUUsQ0FBQztRQUNoQyxXQUFNLEdBQVcsWUFBWSxDQUFDLENBQUMsNkJBQTZCO1FBeUQ1RCx5QkFBb0IsR0FBUSxXQUFXLENBQUM7UUFpZ0J4QyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQWlHeEIsa0JBQWEsR0FBRyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7WUFFcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDOUM7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsT0FBTztZQUNULENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLGNBQWMsQ0FBQztnQkFDeEIsS0FBSyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBOFRGLDRCQUF1QixHQUFRLEVBQUUsQ0FBQztRQUNsQywwQkFBcUIsR0FBUSxDQUFDLENBQUMsQ0FBQztRQXVPaEMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFvRXBCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBSXhCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBaUt4QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBYzdCLE1BQU07UUFDTixNQUFNO1FBQ04sNEVBQTRFO1FBQzVFLDRMQUE0TDtRQUM1TCw2REFBNkQ7UUFDN0QsT0FBTztRQUNQLE1BQU07UUFDTixpRUFBaUU7UUFDakUsa0pBQWtKO1FBQ2xKLHdFQUF3RTtRQUN4RSxPQUFPO1FBQ1AsTUFBTTtRQUNOLHlFQUF5RTtRQUN6RSxnSUFBZ0k7UUFDaEksK0VBQStFO1FBQy9FLE9BQU87UUFDUCxNQUFNO1FBQ04scUZBQXFGO1FBQ3JGLHNIQUFzSDtRQUN0SCwyRkFBMkY7UUFDM0YsT0FBTztRQUNQLE1BQU07UUFDTiwyRUFBMkU7UUFDM0UsNklBQTZJO1FBQzdJLDJGQUEyRjtRQUMzRixNQUFNO1FBQ04sSUFBSTtRQUNKLGFBQVEsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFnQjdDLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQVc3Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUF3QzFCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBL2hEbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQywyQkFBMkI7UUFDM0IsNkJBQTZCO1FBQzdCLElBQUk7SUFDTixDQUFDO0lBQ0QsY0FBYyxDQUFDLEdBQVc7UUFDeEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsdURBQXVEO1FBQ3ZELElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbEU7UUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtnQkFDbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFFOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUN4Qzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDMUI7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2pCLElBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhO2dCQUN6RCxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDMUI7Z0JBQ0EsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDekI7U0FDRjtJQUNILENBQUM7SUFJRCxRQUFRO1FBQ04sdUZBQXVGO1FBQ3ZGLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUVuRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUV4QyxpREFBaUQ7UUFFakQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGVBQWUsQ0FBQztTQUM3QzthQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxXQUFXLENBQUM7U0FDekM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztTQUN2QztRQUVELHlDQUF5QztRQUN6QywyQ0FBMkM7UUFFM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUM3QixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUV4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQy9CLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQ0YsQ0FBQztRQUNGLHNCQUFzQjtRQUN0Qiw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFVBQVU7YUFDWiw2QkFBNkIsQ0FDNUIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxvQkFBb0IsQ0FDMUI7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHRCxnQkFBZ0I7UUFDZCxJQUFJO1lBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ2pEO1FBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtRQUNsQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzdDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXBFLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQy9DLElBQUksQ0FBQyxLQUFLLEVBQ1YsZUFBZSxFQUNmLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztnQkFDRixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUtELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2FBQzlDLDJCQUEyQixFQUFFO2FBQzdCLFNBQVMsQ0FDUixDQUFDLEdBQUcsRUFBRSxFQUFFOztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLDhDQUE4QztZQUM5QyxJQUFJLE1BQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLDBDQUFFLFdBQVcsRUFBRTtnQkFDcEMsTUFBTSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUNYLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsVUFBVSxHQUNYLEdBQUcsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLENBQUM7Z0JBRXhCLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxVQUFVLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxXQUFXLENBQUM7Z0JBRXpDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUNqRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FDckMsQ0FBQztnQkFFRixJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUM7d0JBQzFELE1BQU0sQ0FBQztvQkFDVCxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUNoRCxpQkFBaUIsQ0FDbEIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUNqRDtxQkFBTTtvQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixXQUFXLFlBQVksQ0FBQyxDQUFDO2lCQUM1RDtnQkFFRCxJQUFJLENBQUMsK0JBQStCO29CQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUM7Z0JBRWhDLElBQUksSUFBSSxDQUFDLDZCQUE2QixJQUFJLEdBQUcsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDMUQscUJBQXFCLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2lCQUNoQztnQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzFCO2lCQUFNLElBQUksTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLEVBQUU7Z0JBQzlCLE1BQU0sRUFDSixlQUFlLEVBQ2YsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUNYLGNBQWMsRUFDZCxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDWixHQUFHLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLENBQUMsMENBQUUsV0FBVyxDQUFDO2dCQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLENBQUMsMENBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FDM0IsQ0FBQztnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN4QixrQkFBa0IsR0FBRzt3QkFDbkIsR0FBRyxFQUFFLFVBQVU7d0JBQ2YsSUFBSSxFQUFFLElBQUk7d0JBQ1YsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUMvQixDQUFDO29CQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBRXRDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFCO2dCQUVELDRDQUE0QztnQkFDNUMsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtvQkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDcEQsa0JBQWtCLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUI7Z0JBRUQsSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ3pDLGtCQUFrQixDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7b0JBQzdDLGtCQUFrQixDQUFDLGdCQUFnQixHQUFHLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO29CQUNoRixrQkFBa0IsQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO29CQUMvRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUMxQjtnQkFFRCxJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRS9CLGtCQUFrQixDQUFDLE9BQU87d0JBQ3hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN2QjtnQkFFRCxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDL0Isa0JBQWtCLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUI7Z0JBRUQsSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7b0JBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztvQkFDbkQsa0JBQWtCLENBQUMsZUFBZSxHQUFHLGdCQUFnQixDQUFDO29CQUN0RCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUMxQjtnQkFFRCxJQUFJLFdBQVcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFDekMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO29CQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN6Qix3Q0FBd0M7aUJBQ3pDO2dCQUVELGlEQUFpRDthQUNsRDtpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7YUFDeEQ7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELHlCQUF5QixLQUFJLENBQUM7SUFDOUIsV0FBVyxDQUFDLElBQVMsRUFBRSxJQUFZO1FBQ2pDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxXQUFXO2dCQUNkLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDaEQsNkJBQTZCO0lBQy9CLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxjQUFzQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEUsMENBQTBDO1FBQzFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFN0QsUUFBUSxjQUFjLEVBQUU7WUFDdEIsS0FBSyxDQUFDO2dCQUNKLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztZQUV6QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLHNCQUFzQixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMxQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxjQUFjO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLGdCQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDekMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7O1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFFaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsaUJBQWlCLDBDQUFFLE1BQU07Z0JBQ3RELENBQUMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCO2dCQUN2QixDQUFDLENBQUM7b0JBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FDakIsMERBQTBELENBQzNEO2lCQUNGLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUN6RCxJQUFJLENBQUMsS0FBSyxFQUNWLEtBQUssQ0FDTixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsa0JBQWtCLElBQUksQ0FBQyxlQUFlLGVBQWUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xILE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFNLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxXQUFXLENBQUksU0FBUyxHQUFHLFdBQVcsRUFBRSxNQUFVO1FBQ3hELE9BQU8sQ0FBQyxLQUFVLEVBQWlCLEVBQUU7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsWUFBWSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLEVBQUUsQ0FBQyxNQUFXLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsdUJBQXVCO0lBQ3ZCLHlCQUF5QjtJQUN6QixzQ0FBc0M7SUFDdEMsMENBQTBDO0lBQzFDLGdDQUFnQztJQUNoQyxRQUFRO0lBQ1IscUJBQXFCO0lBQ3JCLDhGQUE4RjtJQUM5RixhQUFhO0lBQ2Isa0NBQWtDO0lBQ2xDLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDMUIsWUFBWTtJQUNaLHFDQUFxQztJQUNyQyxpRUFBaUU7SUFDakUsZ0NBQWdDO0lBQ2hDLDJCQUEyQjtJQUMzQixXQUFXO0lBQ1gsU0FBUztJQUNULElBQUk7SUFFSixjQUFjLENBQUMsS0FBVTs7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDekIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQy9CLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxLQUFJLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDcEMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRTtvQkFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLElBQUksRUFBRSxNQUFNO3dCQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDakQsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQzt3QkFDM0QsTUFBTSxFQUFFLEtBQUs7d0JBQ2IsZUFBZSxFQUFFLEtBQUs7d0JBQ3RCLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7d0JBQzdDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztxQkFDZCxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtvQkFDckIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7b0JBQ3RDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO29CQUNsRSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO29CQUVqRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDaEIsSUFBSSxFQUFFLElBQUk7d0JBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNqRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7d0JBQ3JDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTt3QkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO3dCQUM3QixXQUFXLEVBQUUsV0FBVzt3QkFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO3dCQUNsQyxnQkFBZ0IsRUFBRSxnQkFBZ0I7d0JBQ2xDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7d0JBQzNELE1BQU0sRUFBRSxLQUFLO3dCQUNiLGVBQWUsRUFBRSxLQUFLO3dCQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7cUJBQ2QsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ3ZEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZTtRQUM1QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLElBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELG9DQUFvQztRQUNwQyx3QkFBd0I7UUFFeEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6QixNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDO1FBQ25ELE1BQU0sUUFBUSxHQUFHLHdDQUF3QyxDQUFDO1FBRTFELElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQzFCLGlCQUFpQixFQUNqQixxQ0FBcUMsQ0FDdEMsQ0FBQztZQUNGLDhDQUE4QztZQUM5QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FDMUIsUUFBUSxFQUNSLHFDQUFxQyxDQUN0QyxDQUFDO1lBQ0YsK0NBQStDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztRQUVELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXJELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDbkUsMkNBQTJDO1FBQzNDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUN2RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25FLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLE9BQU8sRUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQzNDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILHVFQUF1RTtRQUN2RSxrQ0FBa0M7UUFDbEMsdUNBQXVDO1FBQ3ZDLDhFQUE4RTtRQUM5RSxJQUFJO0lBQ04sQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQUcsR0FBRyxJQUFJOztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLElBQUksRUFBRSxDQUFBLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQjtZQUNyRCxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDaEM7UUFBQyxPQUFPLEtBQUssRUFBRSxHQUFFO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFFNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDcEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUM3QixPQUFPO1NBQ1I7UUFDRCxJQUFJO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO1FBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtRQUVsQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQztZQUNoRCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUIsTUFBTSxFQUFFLEtBQUs7WUFDYixlQUFlLEVBQUUsS0FBSztTQUN2QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTVCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLG1CQUFtQixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV2RixJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBd0IsR0FBRyxFQUFFO1lBQy9CLE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjthQUM5QztTQUNGLENBQUM7YUFDRCxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV6RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixPQUFPO2FBQ1I7WUFFRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDaEIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztvQkFDaEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUM5QixhQUFhLEVBQUUsSUFBSTtpQkFDcEIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3RELHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQXVCRCxJQUFJLENBQUMsVUFBZSxFQUFFLE1BQVcsRUFBRSxjQUF3QjtRQUN6RCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFPLEVBQUUsRUFBRTs7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV2RCxJQUFJLElBQUksRUFBRTtnQkFDUixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixJQUFJLEVBQUUsYUFBYTt3QkFDbkIsV0FBVyxFQUFFLGNBQWM7cUJBQzVCLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM3Qix5QkFBeUI7Z0JBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUUzQixxQkFBcUI7Z0JBQ3JCLDJCQUEyQjtnQkFDM0IsVUFBVTtnQkFDVixPQUFPO2FBQ1I7WUFFRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQztZQUNoQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3JFLElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDckQsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RCxDQUFDLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBRTdCLElBQUksZUFBb0IsQ0FBQztnQkFFekIsSUFBSTtvQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUM3QixlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixJQUFJO3dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDOUIsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUMvQztvQkFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO2lCQUNmO2dCQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFakMsSUFBSSxlQUFlLElBQUksQ0FBQSxNQUFBLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxVQUFVLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7b0JBQzlELElBQ0UsZUFBZSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0I7d0JBQzlDLGVBQWUsQ0FBQyxVQUFVLElBQUksYUFBYTt3QkFDM0MsZUFBZSxDQUFDLFVBQVUsSUFBSSx5QkFBeUIsRUFDdkQ7d0JBQ0EsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO3FCQUN6QztvQkFFRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO3dCQUM5RCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7d0JBQ3BCLE1BQUEsZUFBZSxDQUFDLE9BQU8sMENBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7NEJBQzNDLFVBQVUsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNwRCxDQUFDLENBQUMsQ0FBQzt3QkFFSCxJQUFJLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE1BQU0sSUFBRyxDQUFDOzRCQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDcEU7b0JBRUQsSUFDRSxlQUFlLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxtQkFBbUI7d0JBQ3RELENBQUEsTUFBQSxlQUFlLENBQUMsT0FBTywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUNuQzt3QkFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDakIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxVQUFVOzRCQUNyQyxVQUFVLEVBQUUsZUFBZSxDQUFDLE9BQU87eUJBQ3BDLENBQUMsQ0FBQztxQkFDSjtvQkFFRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO3dCQUM1RCxJQUFJLFFBQVEsR0FBRyxNQUFBLGVBQWUsQ0FBQyxPQUFPLDBDQUFFLE1BQU0sQ0FBQzt3QkFDL0MsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFOzRCQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQ0FDakIsU0FBUyxFQUFFLHdCQUF3QjtnQ0FDbkMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxPQUFPOzZCQUNoQyxDQUFDLENBQUM7eUJBQ0o7NkJBQU0sSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFOzRCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQ0FDakIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxVQUFVO2dDQUNyQyxhQUFhLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzs2QkFDbkQsQ0FBQyxDQUFDO3lCQUNKO3FCQUNGO29CQUVELElBQUksZUFBZSxDQUFDLFlBQVksSUFBSSxNQUFNLEVBQUU7d0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDOzRCQUNqQixTQUFTLEVBQUUsZUFBZSxDQUFDLFVBQVU7NEJBQ3JDLE1BQU0sRUFBRSxlQUFlLENBQUMsT0FBTzt5QkFDaEMsQ0FBQyxDQUFDO3dCQUVILElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFOzRCQUMxQixlQUFlLENBQUMsT0FBTztnQ0FDckIsTUFBTSxHQUFHLG9EQUFvRCxDQUFDO3lCQUNqRTtxQkFDRjtvQkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDaEIsSUFBSSxFQUFFLElBQUk7d0JBQ1YsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPO3dCQUNoQyxNQUFNLEVBQUUsZUFBZTt3QkFDdkIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUMvQixDQUFDLENBQUM7b0JBRUgsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7d0JBQzFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7NEJBQ2QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7d0JBQy9CLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztxQkFDVDtvQkFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLElBQUksRUFBRSxJQUFJO3dCQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVTt3QkFDeEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUMvQixDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN6QjtZQUVELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV0QixxREFBcUQ7WUFDckQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWEsRUFBRSxPQUFPO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSx5QkFBeUIsSUFBSSxDQUFDLEtBQUssaUJBQWlCLGVBQWUsbUJBQW1CLENBQUM7UUFDakksS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNULE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLE1BQU0sRUFBRSx1Q0FBdUM7Z0JBQy9DLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjthQUM5QztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ2xFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1gsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLElBQUksRUFBRSxJQUFJO29CQUNWLE9BQU8sRUFDTCxJQUFJLENBQUMsZUFBZTt3QkFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQ0FBcUMsQ0FBQztvQkFDNUQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUM5QixhQUFhLEVBQUUsSUFBSTtpQkFDcEIsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNoQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUNqRDtnQkFDRCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzlCLGFBQWEsRUFBRSxJQUFJO2FBQ3BCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0I7Z0JBQ3JCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDakUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLFdBQVcsRUFBRTtvQkFDZixXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO1lBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDNUMsc0NBQXNDO1lBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2Qiw0QkFBNEI7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFDRCxZQUFZLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVE7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBQ0QsZ0NBQWdDO0lBQ2hDLHlDQUF5QztJQUN6Qyx1REFBdUQ7SUFDdkQsa0NBQWtDO0lBQ2xDLGdDQUFnQztJQUNoQyw4REFBOEQ7SUFDOUQsOENBQThDO0lBQzlDLHlDQUF5QztJQUN6QyxnQ0FBZ0M7SUFDaEMsOENBQThDO0lBQzlDLHlCQUF5QjtJQUN6Qiw0Q0FBNEM7SUFDNUMsa0NBQWtDO0lBQ2xDLHlDQUF5QztJQUN6QyxRQUFRO0lBQ1IsSUFBSTtJQUNKLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSztRQUNoQix1QkFBdUI7UUFDdkIsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5Qyx1REFBdUQ7UUFDdkQsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFFM0MsMEVBQTBFO1FBQzFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhDLHNDQUFzQztRQUN0QyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFdEIsaUNBQWlDO1FBQ2pDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0IsZ0NBQWdDO1FBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhDLG1HQUFtRztRQUNuRyxzQ0FBc0M7UUFFdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsdUNBQXVDO1FBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7SUFDcEMsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLG9DQUFvQztRQUNwQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUvRCxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFbkQseUVBQXlFO1FBQ3pFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMvQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsOENBQThDO1FBQzlDLDBCQUEwQjtRQUMxQixhQUFhO2FBQ1YsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFeEMseUNBQXlDO1FBQ3pDLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBSUQsaUJBQWlCLENBQUMsS0FBVTtRQUMxQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FDNUIsQ0FBQztZQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUNqRSx3Q0FBd0MsRUFDeEMsRUFBRSxDQUNILENBQUM7WUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FDNUIsQ0FBQztnQkFDRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FDakUsd0NBQXdDLEVBQ3hDLEVBQUUsQ0FDSCxDQUFDO2dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztnQkFDbkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxZQUFZLENBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUM1QixDQUFDO2dCQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUNqRSx3Q0FBd0MsRUFDeEMsRUFBRSxDQUNILENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUMxQjtTQUNGO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsdUNBQXVDO1FBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDbkUsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRCxjQUFjO1FBQ1osSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUztnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQzNDLElBQUksT0FBTyxFQUFFLEdBQUcsQ0FBQztnQkFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJCLElBQUksTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sRUFBRTtTQUNwQjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsZ0ZBQWdGO1FBQ2hGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO1FBRUQseURBQXlEO1FBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQWUsRUFBRSxFQUFFO1lBQ3JELElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMzQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7d0JBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsd0JBQXdCO3FCQUNoRTtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBRztRQUN2QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxXQUFXLElBQUksQ0FBQyxPQUFPLHlCQUF5QixDQUFDO1FBQzFGLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxhQUFhLEVBQUUsU0FBUyxHQUFHLGlCQUFpQjthQUM3QztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztTQUMxQixDQUFDO2FBQ0MsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDakIsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFO2dCQUNmLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsc0NBQXNDO2FBQy9EO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQzthQUNqRDtRQUNILENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO2dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztnQkFDdEMsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsTUFBTTtRQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN2QixTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVFLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxnRUFBZ0UsQ0FBQyxJQUFJLENBQzFFLFNBQVMsQ0FBQyxTQUFTLENBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQU07UUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDcEMsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQUk7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFNO1FBQ2YsT0FBTyxDQUFDLENBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FDOUMsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBTTtRQUNsQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FDRixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxXQUFXLElBQUksQ0FBQyxPQUFPLDZEQUE2RCxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQzlILEVBQUUsT0FBTyxFQUFFLENBQ1o7YUFDQSxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQ3hCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQ0YsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsV0FBVyxJQUFJLENBQUMsT0FBTyxxQ0FBcUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUN0RyxFQUFFLE9BQU8sRUFBRSxDQUNaO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQU1ELGlDQUFpQztJQUNqQyxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZOztRQUN0QixNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVU7UUFDdEIsbUNBQW1DO1FBQ25DLHFCQUFxQjtRQUNyQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0QsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7O1FBQ1osT0FBTyxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELHFCQUFxQjs7UUFDbkIsTUFBTSxjQUFjLEdBQUcsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLE9BQU8sWUFBWSxDQUFDO1NBQ3JCO2FBQU07WUFDTCxJQUFJLGNBQWMsSUFBSSxDQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLE1BQUssQ0FBQyxFQUFFO2dCQUNsRCxPQUFPLFlBQVksQ0FBQzthQUNyQjtpQkFBTTtnQkFDTCxPQUFPLENBQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLE1BQU0sSUFBRyxDQUFDO29CQUMvQixDQUFDLENBQUMsR0FBRyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsTUFBTSxrQkFBa0I7b0JBQzdDLENBQUMsQ0FBQyxHQUFHLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLGlCQUFpQixDQUFDO2FBQ2hEO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsWUFBWSxJQUFJLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQztRQUNqRixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1NBQ25DLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM5QyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGlDQUM1QixLQUFLLEtBQ1IsUUFBUSxFQUFFLEtBQUssSUFDZixDQUFDLENBQUM7YUFDTDtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV4RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQU9ELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSx5Q0FBeUMsZUFBZSxVQUFVLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6SCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLE1BQU0sRUFBRSwwQkFBMEI7WUFDbEMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtTQUM5QyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN6QyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXhCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFFNUIsSUFBSSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxNQUFNLEtBQUksR0FBRyxFQUFFO2dCQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDN0I7WUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsd0JBQXdCLENBQUMsUUFBZ0I7UUFDdkMsSUFBSTtZQUNGLDhDQUE4QztZQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUV2QyxtREFBbUQ7WUFDbkQsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBWSxFQUFFLEVBQUU7Z0JBQzVELE9BQU8sWUFBWSxJQUFJLFlBQ3JCLEtBQUssSUFBSSxFQUNYLHFCQUFxQixJQUFJLE1BQU0sQ0FBQztZQUNsQyxDQUFDLENBQUM7WUFFRiwyRUFBMkU7WUFDM0UsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUV2RSx3REFBd0Q7WUFDeEQsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFMUQsMkNBQTJDO1lBQzNDLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELE9BQU8sRUFBRSxDQUFDLENBQUMsMkRBQTJEO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQjtRQUMxQixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUNqRCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQscUVBQXFFO1FBQ3JFLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQ3pCLHFCQUFxQixFQUNyQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ2YsT0FBTyxlQUFlLElBQUksZ0JBQWdCLENBQUM7YUFDNUM7aUJBQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixPQUFPLGVBQWUsSUFBSSxnQkFBZ0IsQ0FBQzthQUM1QztZQUNELE9BQU8sV0FBVyxJQUFJLFdBQVcsQ0FBQztRQUNwQyxDQUFDLENBQ0YsQ0FBQztRQUVGLGtFQUFrRTtRQUNsRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDckUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksV0FBVyxDQUFDO1lBRXJDLDBDQUEwQztZQUMxQyxPQUFPOzttRkFFc0UsV0FBVyxTQUFTLElBQUksQ0FBQyxjQUFjLENBQ2xILE1BQU0sQ0FDUDs2REFDc0QsUUFBUSxLQUFLLFdBQVc7YUFDeEUsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXJELHlDQUF5QztRQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBRTdELHlCQUF5QjtRQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUV2RCw2QkFBNkI7UUFDN0IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRXBELHVDQUF1QztRQUN2QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FDakIseUJBQXlCLEVBQ3pCLHFDQUFxQyxDQUN0QyxDQUFDO1FBRUYsZ0RBQWdEO1FBQ2hELElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRS9DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxVQUFVLENBQUMsSUFBWTtRQUNyQixPQUFPLElBQUk7YUFDUixPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQzthQUN0QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQzthQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQzthQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQzthQUN2QixPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxxQ0FBcUM7SUFDOUIsZUFBZSxDQUFDLElBQVk7UUFDakMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUN0QyxHQUFHLEVBQUU7WUFDSCxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNyQyxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBS0QsY0FBYztRQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0Qsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUE2QkQsaUNBQWlDO0lBQ2pDLGFBQWEsQ0FBQyxHQUFXO1FBQ3ZCLElBQUk7WUFDRixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtTQUNuRTtRQUFDLFdBQU07WUFDTixPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsYUFBYSxDQUFDLEdBQVc7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxPQUFPLG9EQUFvRCxNQUFNLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQU87UUFDakIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUlELGVBQWU7UUFDYixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV6QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDbkUsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMscUNBQXFDO1FBQy9ELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztRQUMvRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNELGNBQWM7UUFDWixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztZQUMvRCw2Q0FBNkM7WUFDN0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ25FLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzthQUNoQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFHRCxZQUFZLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUNELHNCQUFzQjtRQUNwQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDbkUsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM3RDtJQUNILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxJQUFZO1FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxLQUFVO1FBQzdCLElBQUk7WUFDRixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDNUMsdUNBQXVDO2dCQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDeEI7U0FDRjtRQUFDLE9BQU8sS0FBSyxFQUFFLEdBQUU7UUFDbEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQTZCLENBQUM7UUFDckQsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsbUJBQW1CO1FBQ25ELFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsaUNBQWlDO1FBQ3ZGLDZEQUE2RDtRQUM3RCxJQUFJLFFBQVEsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQy9CLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLGlDQUFpQztZQUNsRSxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyw0Q0FBNEM7U0FDaEY7YUFBTTtZQUNMLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLDZDQUE2QztTQUNuRjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUk7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFFbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7aUJBQ2hDO2dCQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxjQUFjOztRQUNaLGlGQUFpRjtRQUNqRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxNQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxPQUFPLDBDQUFFLFdBQVcsRUFBRTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUQsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRztvQkFDNUIsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUNqQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJO2lCQUM1QyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELHNCQUFzQjtRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFRO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDeEIsQ0FDRixDQUFDO1lBRUYsMkVBQTJFO1lBQzNFLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQztvQkFDbEUsS0FBSyxDQUFDO2dCQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7b0JBQ2xFLEtBQUssQ0FBQzthQUNUO1lBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtZQUVsQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUM5QixNQUFNLEVBQUUsS0FBSztnQkFDYixlQUFlLEVBQUUsS0FBSztnQkFDdEIsMkJBQTJCLEVBQUUsSUFBSTthQUNsQyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5CLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLHFCQUFxQjtnQkFDeEIsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDOUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHO2dCQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU87Z0JBQ3RDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQy9CLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQ3ZDLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSTthQUN6QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztZQUNyRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUV6QiwrQ0FBK0M7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FDakIsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLGVBQWUsRUFDcEIsRUFBRSxFQUNGLElBQUksRUFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUN4QixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUNaLFFBQWdCLEVBQ2hCLE1BQWEsRUFDYixjQUFzQixFQUN0QixHQUFTLEVBQ1QsSUFBVSxFQUNWLFVBQW1CLEVBQ25CLGVBQXFCOztRQUVyQixJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxTQUFTLENBQUM7UUFFaEQsSUFBSSxJQUFJLEdBQUc7WUFDVCxhQUFhLEVBQUUsUUFBUTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFO1lBQ2xELFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUM5QixNQUFNLEVBQUUsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxtQ0FBSSxFQUFFO1lBQ2hFLGVBQWUsRUFBRSxjQUFjO1lBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDekIsQ0FBQztRQUVGLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxlQUFlLENBQUM7U0FDM0M7UUFFRCxNQUFNLE9BQU8sR0FBUTtZQUNuQixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLGFBQWEsRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDeEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQzdDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQ2pEO1FBRUQsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNULE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLE9BQU87WUFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQzNCLENBQUM7YUFDQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO2dCQUN0RCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFekIseUNBQXlDO2dCQUN6QyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7b0JBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2lCQUM1QjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2FBQ3BCO1lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLHlDQUF5QztRQUMzQyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxpQkFBaUIsQ0FDZixRQUFnQixFQUNoQixNQUFhLEVBQ2IsY0FBc0IsRUFDdEIsR0FBUyxFQUNULElBQVUsRUFDVixVQUFtQixFQUNuQixlQUFxQjs7UUFFckIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsU0FBUyxDQUFDO1FBRWxELE1BQU0sSUFBSSxHQUFRO1lBQ2hCLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU7WUFDbEQsTUFBTSxFQUFFLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsbUNBQUksRUFBRTtZQUNoRSxlQUFlLEVBQUUsY0FBYztZQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3pCLENBQUM7UUFFRixJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsZUFBZSxDQUFDO1NBQzNDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3pCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxvQkFBb0I7U0FDOUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQy9DLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLHlDQUF5QztZQUMzQyxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUssRUFBRSxHQUFHOztRQUN6QixxQ0FBcUM7UUFDckMsSUFBSSxRQUFRLEdBQUcsTUFBTSxLQUFLLElBQUksQ0FBQztRQUUvQixnRUFBZ0U7UUFDaEUsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxTQUFTLEdBQ1gsQ0FBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDNUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUNqQywwQ0FBRSxLQUFLLEtBQUksR0FBRyxDQUFDO1lBQ2xCLFFBQVEsSUFBSSxPQUFPLFNBQVMsT0FBTyxLQUFLLElBQUksQ0FBQztTQUM5QztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxXQUFXO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQztZQUNyRSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0RSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNwRCxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTt3QkFDMUIsTUFBTSxDQUFDLGVBQWUsR0FBRyxnQkFBZ0IsQ0FDdkMsSUFBSSxDQUFDLFFBQVEsRUFDYixNQUFNLENBQUMsZUFBZSxDQUN2QixDQUFDO3FCQUNIO29CQUNELE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsR0FBRyxDQUFDLGVBQWUsR0FBRyxnQkFBZ0IsQ0FDcEMsSUFBSSxDQUFDLFFBQVEsRUFDYixHQUFHLENBQUMsZUFBZSxDQUNwQixDQUFDO1lBQ0YsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztZQUNwQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFRO1FBQ3BCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNSLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FDL0QsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUM5QyxJQUFJLENBQUMsWUFBWSxFQUNqQixXQUFXLENBQ1osQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFO2dCQUMvRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7UUFDSCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssSUFBSSwwQkFBMEI7WUFDeEMsSUFBSSxDQUFDLEtBQUssSUFBSSwwQkFBMEIsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSTtRQUNoQixJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDLENBQUMsNkNBQTZDO0lBQ25ELENBQUM7OztZQTlqRUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw2QkFBNkI7Z0JBQ3ZDLDhvekVBQTJDO2dCQUUzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQVZRLFdBQVc7WUFFWCxXQUFXO1lBOUJsQixpQkFBaUI7WUFMVixVQUFVO1lBcUJWLFlBQVk7WUFkbkIsVUFBVTtZQVFWLFNBQVM7WUFnQkYsYUFBYTtZQUZiLG1CQUFtQjtZQTVCbkIsa0JBQWtCOzs7dUJBNEN4QixTQUFTLFNBQUMsVUFBVTtzQkFDcEIsU0FBUyxTQUFDLFNBQVM7cUNBQ25CLFlBQVksU0FBQyx1QkFBdUI7cUJBRXBDLFNBQVMsU0FBQyxRQUFROzRCQUNsQixTQUFTLFNBQUMsZUFBZTs0QkFDekIsU0FBUyxTQUFDLGVBQWU7eUJBRXpCLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOzBCQUd6QyxLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLO3lCQUNMLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLEtBQUs7d0JBQ0wsS0FBSztvQkFDTCxLQUFLO29CQUNMLEtBQUs7K0JBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7dUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3NCQUNMLEtBQUs7K0JBQ0wsS0FBSztpQ0FDTCxLQUFLO3VCQUNMLEtBQUs7NkJBQ0wsS0FBSzt1QkFDTCxLQUFLO2lDQUNMLEtBQUs7bUNBQ0wsS0FBSztvQkFDTCxLQUFLOzhCQUNMLEtBQUs7a0NBQ0wsS0FBSzt3QkFDTCxLQUFLO2lDQUNMLEtBQUs7OEJBQ0wsS0FBSzt1QkFDTCxLQUFLOytCQUNMLEtBQUs7d0JBQ0wsS0FBSztxQkFDTCxLQUFLO29CQUNMLEtBQUs7K0JBRUwsS0FBSzttQ0FDTCxLQUFLOzRCQUNMLE1BQU07MkJBQ04sTUFBTTt1QkFDTixNQUFNOzZCQUNOLE1BQU07dUJBQ04sTUFBTTs4QkFDTixNQUFNOzhCQUNOLE1BQU07MkJBQ04sTUFBTTswQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREcmF3ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvcm1hdE5vdywgZm9ybWF0VGltZVN0YW1wcyB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIGRldl9lbnZpcm9ubWVudCxcbiAgcHJvZF9lbnZpcm9ubWVudCxcbn0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IENvbnZlcnNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb252ZXJzYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vc29ja2V0LXNlcnZpY2Uuc2VydmljZSc7XG5cbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0ICogYXMgU3BlZWNoU0RLIGZyb20gJ21pY3Jvc29mdC1jb2duaXRpdmVzZXJ2aWNlcy1zcGVlY2gtc2RrJztcbmltcG9ydCB7IEJvdHNTZXJ2aWNlIH0gZnJvbSAnLi4vYm90LnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbWFya2VkIGZyb20gJ21hcmtlZCc7IC8vIEltcG9ydCBtYXJrZWRcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGl2ZWdwdC1jaGF0LWRyYXdlci1wYWNrYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtZHJhd2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC1kcmF3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENoYXREcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ2NoYXRNYWluJykgcHJpdmF0ZSBjaGF0TWFpbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbXlJbnB1dCcpIHByaXZhdGUgbXlJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbignY2xvc2VwbGF5Z3JvdW5kYnV0dG9uJylcbiAgY2xvc2VQbGF5Z3JvdW5kQnV0dG9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdkcmF3ZXInKSBkcmF3ZXIhOiBNYXREcmF3ZXI7XG4gIEBWaWV3Q2hpbGQoJ3NvdXJjZXNEcmF3ZXInKSBzb3VyY2VzRHJhd2VyITogTWF0RHJhd2VyO1xuICBAVmlld0NoaWxkKCdlZGl0b3JzRHJhd2VyJykgZWRpdG9yc0RyYXdlciE6IE1hdERyYXdlcjtcbiAgcHJpdmF0ZSBib2R5T3ZlcmZsb3dDbGFzcyA9ICdib2R5LW92ZXJmbG93LWhpZGRlbic7XG4gIEBWaWV3Q2hpbGQoJ215VGV4dGFyZWEnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbXlUZXh0YXJlYSE6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47IC8vIFJlZmVyZW5jZSB0byB0aGUgdGV4dGFyZWFcbiAgaXNDb2xsYXBzZWRUcnVlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvcGlsb3ROYW1lOiBzdHJpbmcgPSAnSGl2ZVhHUFQnO1xuICBASW5wdXQoKSBmaXJzdE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhc3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBhcGlLZXkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlQWkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlVXNlciE6IHN0cmluZztcbiAgQElucHV0KCkgYmdHcmFkaWVudCE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBib3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RTa2lsbHMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBvcmdJZCE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25Db2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25iZ0NvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBjcmVkZW50aWFscyE6IFtdO1xuICBASW5wdXQoKSBkYXRlVGltZUNvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBkYXRlVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudElkITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudFVybCE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRUb2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgd29ya3NwYWNlVG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHMyN1Rva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdEljb24hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm1GaWVsZEJnQ29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm1GaWVsZFRleHRDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZnVsbFZpZXchOiBib29sZWFuO1xuICBASW5wdXQoKSBncmFkaWVudENvbG9ycyE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBncmVldGluZyE6IHN0cmluZztcbiAgQElucHV0KCkgbWVzc2FnZVRleHRDb2xvckFpITogc3RyaW5nO1xuICBASW5wdXQoKSBtZXNzYWdlVGV4dENvbG9yVXNlciE6IHN0cmluZztcbiAgQElucHV0KCkgcnVsZXMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbmRCdXR0b25Db2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgc2VuZEJ1dHRvblRleHRDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgc2hvd0Nsb3NlITogYm9vbGVhbjtcbiAgQElucHV0KCkgdGh1bWJzRG93bk1lc3NhZ2VzITogc3RyaW5nW107XG4gIEBJbnB1dCgpIHRodW1ic1VwTWVzc2FnZSE6IHN0cmluZztcbiAgQElucHV0KCkgdGltZXpvbmUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHVua25vd25SZXNwb25zZXMhOiBbXTtcbiAgQElucHV0KCkgdXNlT3BlbkFpITogYm9vbGVhbjtcbiAgQElucHV0KCkgdXNlcklkITogc3RyaW5nO1xuICBASW5wdXQoKSBpc0RldiE6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgYWdhaW5CdXR0b25Db2xvciE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBhZ2FpbkJ1dHRvblRleHRDb2xvciE6IHN0cmluZ1tdO1xuICBAT3V0cHV0KCkgZmVlZGJhY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25DbG9zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb3BlblBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlc3Npb25BY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZUJvdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY29ubmVjdFdpdGhVc2VyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzY2hlZHVsZU1lZXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlZnJlc2hUb2tlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb3BlblN1cHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBhdXRvZ2VuS2V5ID0gJ0F1dG9nZW5fZURKVHRFVS1OQjBSdElwenExdyc7XG4gIGFkZFRvTXlBZ2VuZGFBY3Rpb24gPSAnYWRkX3RvX215X2FnZW5kYSc7XG4gIG15VXBjb21pbmdTZXNzaW9uQWN0aW9uID0gJ215X3VwY29tbWluZ19zZXNzaW9uJztcbiAgY29ubmVjdE9yRm9sbG93QWN0aW9uID0gJ2Nvbm5lY3Rfb3JfZm9sbG93JztcbiAgYWlSZXNwb25zZTogc3RyaW5nID0gJyc7XG4gIGNoYXRMb2c6IGFueVtdID0gW107XG4gIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgZmVlZGJhY2tEb25lOiBib29sZWFuID0gZmFsc2U7XG4gIGdyZWV0aW5nTXNnOiBzdHJpbmcgPSAnJztcbiAgaGFzQmFja2Ryb3BWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnB1dDogc3RyaW5nID0gJyc7XG4gIGxpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtb2RlOiBzdHJpbmcgPSAnb3Zlcic7XG4gIHF1aWNrUHJvbXB0czogYW55W10gPSBbXTtcbiAgdGh1bWJzRG93bk1zZ0luZGV4ID0gMDtcbiAgdXNlck5hbWU6IHN0cmluZyA9ICcnO1xuICBzaG93U3RhcnRBZ2FpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0lPU0RldmljZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93RmVlZEJhY2tJY29uc0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdGVtcGVyYXR1cmU6IG51bWJlciA9IDE7XG4gIHNwZWFrZXJzID0gW107XG4gIGVudmlyb25tZW50OiB7XG4gICAgVVNFUlNfQVBJO1xuICAgIEJBU0VfVVJMO1xuICAgIEFHRU5UU19BUEk7XG4gIH07XG4gIHBlbmRpbmdSZXF1ZXN0czogYW55O1xuICBteUNvbm5lY3Rpb25zOiBhbnk7XG4gIGNvbnZlcnNhdGlvbktleTogc3RyaW5nO1xuICBjb25TZXNzaW9uS2V5OiBzdHJpbmcgPSAnJztcbiAgaXNGZXRjaERhdGFGb3I6IGJvb2xlYW47XG4gIGlzNDAxOiBib29sZWFuO1xuICBtc2c6IGFueTtcbiAgY2hhdDogYW55O1xuICBpc1dvcmtmbG93T3BlbjogYm9vbGVhbjtcbiAgb3JnV29ya2Zsb3dzOiBhbnk7XG4gIG9wZW5Xb3JrZmxvd0lucHV0OiBib29sZWFuO1xuICBzZWxlY3RlZFdvcmtmbG93OiBhbnk7XG4gIHdvcmtmbG93Rm9ybTogYW55O1xuICBjdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzczogbnVtYmVyID0gMDtcbiAgY3VycmVudFdvcmtmbG93QWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgZXhlY3V0aW5nV29ya2Zsb3c6IGJvb2xlYW47XG4gIHdvcmtmbG93RXhlY3V0aW9uRGV0YWlsczogYW55O1xuICBzaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzOiBhbnk7XG4gIGN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM6IGFueTtcblxuICBzcGVlY2hDb25maWc6IFNwZWVjaFNESy5TcGVlY2hDb25maWc7XG4gIHJlY29nbml6ZXI6IFNwZWVjaFNESy5TcGVlY2hSZWNvZ25pemVyO1xuICByZWNvZ25pemVkVGV4dDogc3RyaW5nID0gJyc7XG4gIGF1dGhvcml6YXRpb25Ub2tlbjogc3RyaW5nID0gJyc7XG4gIHJlZ2lvbjogc3RyaW5nID0gJ3dlc3RldXJvcGUnOyAvLyBTZXQgeW91ciBBenVyZSByZWdpb24gaGVyZVxuICBpc1JlY29yZGluZzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGJvdFNlcnZpY2U6IEJvdHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc29ja2V0U2VydmljZTogU29ja2V0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnZlcnNhdGlvblNlcnZpY2U6IENvbnZlcnNhdGlvblNlcnZpY2UsIC8vIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZVxuICApIHtcbiAgICB0aGlzLmNoYXRNYWluID0gbmV3IEVsZW1lbnRSZWYobnVsbCk7XG5cbiAgICAvLyBpZiAodGhpcy5wbGF0Zm9ybS5JT1MpIHtcbiAgICAvLyAgIHRoaXMuaXNJT1NEZXZpY2UgPSB0cnVlO1xuICAgIC8vIH1cbiAgfVxuICBnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRUcmFuc2xhdGlvbihrZXkpO1xuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgZXZlbnRJZCBjaGFuZ2VzIHRvIHVwZGF0ZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4gICAgaWYgKGNoYW5nZXMuZXZlbnRJZCAmJiBjaGFuZ2VzLmV2ZW50SWQuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRFdmVudElkKGNoYW5nZXMuZXZlbnRJZC5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnMyN1Rva2VuKSB7XG4gICAgICBpZiAoY2hhbmdlcy5zMjdUb2tlbi5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5zMjdUb2tlbi5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuczI3VG9rZW4gPSBjaGFuZ2VzLnMyN1Rva2VuLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICBjb25zb2xlLmxvZygnaXNGZXRjaERhdGFGb3I6ICcsIHRoaXMuaXNGZXRjaERhdGFGb3IpO1xuICAgICAgICBjb25zb2xlLmxvZygnbXNnOiAnLCB0aGlzLm1zZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjaGF0OiAnLCB0aGlzLmNoYXQpO1xuICAgICAgICBpZiAodGhpcy5pczQwMSkge1xuICAgICAgICAgIGlmICh0aGlzLmlzRmV0Y2hEYXRhRm9yKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YUZvcih0aGlzLm1zZywgdGhpcy5jaGF0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEodGhpcy5tc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm9yZ0lkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZXMub3JnSWQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMub3JnSWQucHJldmlvdXNWYWx1ZSAmJlxuICAgICAgICBjaGFuZ2VzLm9yZ0lkLmN1cnJlbnRWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNvY2tldCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRvbWFpbkF1dGhvcml0eVZhbHVlOiBhbnkgPSAncHJvZC1saXRlJztcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdGhlIGV2ZW50SWQgaW4gdHJhbnNsYXRpb24gc2VydmljZSB0byBnZXQgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICBpZiAodGhpcy5ldmVudElkKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRFdmVudElkKHRoaXMuZXZlbnRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuaXNEZXYgPyBkZXZfZW52aXJvbm1lbnQgOiBwcm9kX2Vudmlyb25tZW50O1xuXG4gICAgY29uc3QgZG9tYWluID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBoZWFkZXIgdmFsdWUgYmFzZWQgb24gdGhlIGRvbWFpblxuXG4gICAgaWYgKGRvbWFpbi5pbmNsdWRlcygncHJlLWFwcC5zb2NpYWwyNy5jb20nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdwcmUtcHJvZC1saXRlJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbi5pbmNsdWRlcygnYXBwLnNvY2lhbDI3LmNvbScpKSB7XG4gICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID0gJ3Byb2QtbGl0ZSc7XG4gICAgfSBlbHNlIGlmIChkb21haW4uaW5jbHVkZXMoJ2hpdmVncHQuaW8nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdoaXZlZ3B0JztcbiAgICB9XG5cbiAgICAvLyB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgpO1xuICAgIC8vIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuY2hhbmdlVGVtcGVyYXR1cmUodGhpcy50ZW1wZXJhdHVyZSk7XG4gICAgdGhpcy5mZXRjaEJvdENvbmZpZygpLnN1YnNjcmliZShcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgdGhpcy5mZXRjaENoYXRIaXN0b3J5KCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XG4gICAgICB9XG4gICAgKTtcbiAgICAvLyB0aGlzLmZldGNoQWdlbnRzKCk7XG4gICAgLy8gdGhpcy5mZXRjaEVkaXRvckNvbnRlbnQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAvLyB0aGlzLmluaXRpYWxpemVTb2NrZXQoKTtcbiAgICB0aGlzLmJvdFNlcnZpY2VcbiAgICAgIC5mZXRjaFNwZWVjaEF1dGhvcml6YXRpb25Ub2tlbihcbiAgICAgICAgdGhpcy5ib3RJZCxcbiAgICAgICAgdGhpcy5hcGlLZXksXG4gICAgICAgIHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWVcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHRva2VuKSA9PiB7XG4gICAgICAgIHRoaXMuYXV0aG9yaXphdGlvblRva2VuID0gdG9rZW47XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNwZWVjaFJlY29nbml6ZXIodG9rZW4pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGluaXRpYWxpemVTb2NrZXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc29ja2V0U2VydmljZS5kaXNjb25uZWN0U29ja2V0Q29ubmVjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmNvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1lFUyBJTklUJyk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbl9pZCA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCk7XG5cbiAgICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLnJlZ2lzdGVyVXNlclNwZWNpZmljSGl2ZVNvY2tldChcbiAgICAgICAgICB0aGlzLmJvdElkLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICB0aGlzLm9yZ0lkXG4gICAgICAgICk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubGlzdGVuU29ja2V0cygpO1xuICAgICAgICB9LCAzMDApO1xuICAgICAgfSwgMjAwKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgc3Vic2NyaXB0aW9uTmV3OiBhbnk7XG4gIHNvY2tldERhdGE6IGFueTtcblxuICBsaXN0ZW5Tb2NrZXRzKCkge1xuICAgIGlmICh0aGlzLmV2ZW50U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdMaXN0ZW4gU29ja2V0Jyk7XG4gICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZVxuICAgICAgLmdldFVzZXJTcGVjaWZpY05vdGlmaWNhdGlvbigpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0xpc3RlbiBTb2NrZXQgcmVzcG9uc2UnKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgIC8vIENoZWNrIGlmIE90aGVyRmllbGRzIGV4aXN0cyBpbiB0aGUgcmVzcG9uc2VcbiAgICAgICAgICBpZiAocmVzPy5tPy5PdGhlckZpZWxkcz8ud29ya2Zsb3dfaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgcGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICBhY3Rpb25fbmFtZSxcbiAgICAgICAgICAgICAgY3VycmVudF9hY3Rpb25fbmFtZSxcbiAgICAgICAgICAgICAgd29ya2Zsb3dfZXhlY3V0aW9uX2lkLFxuICAgICAgICAgICAgICB0aW1lX3N0YW1wLFxuICAgICAgICAgICAgfSA9IHJlcz8ubT8uT3RoZXJGaWVsZHM7XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uUHJvZ3Jlc3MgPSBwZXJjZW50YWdlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb24gPSBhY3Rpb25fbmFtZTtcblxuICAgICAgICAgICAgY29uc3QgYWN0aW9uSW5kZXggPSB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscy5BY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKGEpID0+IGEuTmFtZSA9PSBjdXJyZW50X2FjdGlvbl9uYW1lXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnNbYWN0aW9uSW5kZXhdWydPdXRwdXQnXSA9XG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuICAgICAgICAgICAgICB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscy5BY3Rpb25zW2FjdGlvbkluZGV4XVtcbiAgICAgICAgICAgICAgICAnSW5zZXJ0VGltZVN0YW1wJ1xuICAgICAgICAgICAgICBdID0gZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCB0aW1lX3N0YW1wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFjdGlvbiB3aXRoIG5hbWUgJHthY3Rpb25fbmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9PSAxMDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXVsnV29ya2Zsb3dFeGVjdXRpb25JZCddID1cbiAgICAgICAgICAgICAgICB3b3JrZmxvd19leGVjdXRpb25faWQ7XG4gICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzPy5tPy5PdGhlckZpZWxkcykge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBjb252ZXJzYXRpb25faWQsXG4gICAgICAgICAgICAgIGJvdF9pZCxcbiAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgYW5zd2VyLFxuICAgICAgICAgICAgICB3ZWJfcmVzdWx0cyxcbiAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdHMsXG4gICAgICAgICAgICAgIGdyYXBocyxcbiAgICAgICAgICAgICAgZXhlY3V0aW9uX2dyYXBocyxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICB9ID0gcmVzPy5tPy5PdGhlckZpZWxkcztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtZXNzYWdlX2lkMScpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzPy5tPy5PdGhlckZpZWxkcyk7XG4gICAgICAgICAgICB2YXIgY3VycmVudENoYXRNZXNzYWdlID0gdGhpcy5jaGF0TG9nLmZpbmQoXG4gICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PSBtZXNzYWdlX2lkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jaGF0TG9nKTtcbiAgICAgICAgICAgIGlmICghY3VycmVudENoYXRNZXNzYWdlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtZXNzYWdlX2lkMicpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlX2lkKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIF9pZDogbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjdXJyZW50Q2hhdE1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbWVzc2FnZV9pZDMnKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZV9pZCk7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBmaWVsZHMgYmFzZWQgb24gdGhlaXIgcHJlc2VuY2VcbiAgICAgICAgICAgIGlmIChzZWFyY2hfcmVzdWx0cyAmJiBBcnJheS5pc0FycmF5KHNlYXJjaF9yZXN1bHRzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnT25saW5lIFNlYXJjaCBUZXJtczonLCBzZWFyY2hfcmVzdWx0cyk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5zZWFyY2hUZXJtcyA9IHNlYXJjaF9yZXN1bHRzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3ZWJfcmVzdWx0cyAmJiBBcnJheS5pc0FycmF5KHdlYl9yZXN1bHRzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnV2ViIFJlc3VsdHM6Jywgd2ViX3Jlc3VsdHMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2Uuc291cmNlc0xpc3QgPSB3ZWJfcmVzdWx0cztcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLmRpc3BsYXllZFNvdXJjZXMgPSB3ZWJfcmVzdWx0cz8uc2xpY2UoMCwgMyk7IC8vIEZpcnN0IDMgY2FyZHNcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLnJlbWFpbmluZ1NvdXJjZXMgPSB3ZWJfcmVzdWx0cz8uc2xpY2UoMyk7IC8vIFJlbWFpbmluZyBpdGVtc1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhbnN3ZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Fuc3dlcjonLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXIpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdyYXBocyAmJiBBcnJheS5pc0FycmF5KGdyYXBocykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0dyYXBoczonLCBncmFwaHMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZ3JhcGhzID0gZ3JhcGhzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleGVjdXRpb25fZ3JhcGhzICYmIEFycmF5LmlzQXJyYXkoZXhlY3V0aW9uX2dyYXBocykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0V4ZWN1dGlvbiBHcmFwaHM6JywgZXhlY3V0aW9uX2dyYXBocyk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5leGVjdXRpb25HcmFwaHMgPSBleGVjdXRpb25fZ3JhcGhzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHN1Z2dlc3Rpb25zKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc3VnZ2VzdGlvbnM6Jywgc3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UucmVsYXRlZExpc3RJdGVtcyA9IHN1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIC8vIFByb2Nlc3Mgb25saW5lIHNlYXJjaCB0ZXJtcyBhcyBuZWVkZWRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIGFueSBvdGhlciBmaWVsZHMgYW5kIHRoZWlyIHByb2Nlc3NpbmcgaGVyZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ090aGVyRmllbGRzIGlzIG1pc3NpbmcgaW4gdGhlIHJlc3BvbnNlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGZldGNoaW5nIGRhdGEgZnJvbSBzb2NrZXQnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNvY2tldEFuZExpc3RlbigpIHt9XG4gIGhhbmRsZUV2ZW50KGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICd3ZWJyZXN1bHQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fuc3dlcic6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JhcGgnOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNvY2tldFNlcnZpY2UuZGlzY29ubmVjdFNvY2tldENvbm5lY3Rpb24oKTtcbiAgICAvL3RoaXMuc29ja2V0U2VydmljZS5jbG9zZSgpO1xuICB9XG4gIGNoYW5nZVRlbXBlcmF0dXJlKG5ld1RlbXBlcmF0dXJlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy50ZW1wZXJhdHVyZSA9IG5ld1RlbXBlcmF0dXJlO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGl2ZWdwdC1jaGF0LXdyYXBwZXInKTtcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgdGhlbWUgY2xhc3NlcyBmcm9tIGJvZHlcbiAgICB3cmFwcGVyPy5jbGFzc0xpc3QucmVtb3ZlKCdjcmVhdGl2ZScsICdiYWxhbmNlZCcsICdwcmVjaXNlJyk7XG5cbiAgICBzd2l0Y2ggKG5ld1RlbXBlcmF0dXJlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ2NyZWF0aXZlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdiYWxhbmNlZCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgncHJlY2lzZScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RhcnRBZ2FpbigpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IGZhbHNlO1xuICAgIHRoaXMuY2hhdExvZyA9IFtdO1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICdhaScsXG4gICAgICBtZXNzYWdlOiB0aGlzLmdyZWV0aW5nTXNnLFxuXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgfSk7XG4gICAgdGhpcy5hcmNoaWV2ZU1lc3NhZ2VzKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhcmNoaWV2ZU1lc3NhZ2VzKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYm90L2NsZWFyLWhpc3RvcnkvJHt0aGlzLmJvdElkfS8ke3RoaXMudXNlcklkfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB0cmlnZ2VyU3VwcG9ydCgpIHtcbiAgICB0aGlzLm9wZW5TdXBwb3J0LmVtaXQoKTtcbiAgfVxuICBmZXRjaEJvdENvbmZpZygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3RzP2JvdF9pZD0ke3RoaXMuYm90SWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmJvdE5hbWUgPSB0aGlzLmdldFRyYW5zbGF0aW9uKHJlcy5OYW1lKTtcbiAgICAgICAgdGhpcy5ib3RJY29uID0gcmVzLkljb247XG4gICAgICAgIHRoaXMuYm90U2tpbGxzID0gcmVzPy5Ta2lsbHM7XG4gICAgICAgIHRoaXMuZ3JlZXRpbmdNc2cgPSByZXMuR3JlZXRpbmc7XG5cbiAgICAgICAgdGhpcy50aHVtYnNEb3duTWVzc2FnZXMgPSByZXM/Lk5lZ2F0aXZlUmVzcG9uc2VzPy5sZW5ndGhcbiAgICAgICAgICA/IHJlcy5OZWdhdGl2ZVJlc3BvbnNlc1xuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgIGBXZSBhcmUgc29ycnkgd2UndmUgbm90IGJlZW4gYWJsZSB0byBhbnN3ZXIgeW91ciBxdWVzdGlvbmBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIHRoaXMucXVpY2tQcm9tcHRzID0gcmVzLlF1aWNrUHJvbXB0cztcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdGJvdCBjb25maWc6ICcsIGVycm9yKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQ2hhdEhpc3RvcnkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5jb252ZXJzYXRpb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQsIGZhbHNlKTtcbiAgICB0aGlzLmNvblNlc3Npb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0U2Vzc2lvbktleShcbiAgICAgIHRoaXMuYm90SWQsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uS2V5fT9zZXNzaW9uX2lkPSR7dGhpcy5jb25TZXNzaW9uS2V5fWA7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3I8YW55PignZmV0Y2hDb252ZXJzYXRpb24nKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcjxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0PzogVCkge1xuICAgIHJldHVybiAoZXJyb3I6IGFueSk6IE9ic2VydmFibGU8VD4gPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtvcGVyYXRpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIG9mKHJlc3VsdCBhcyBUKTtcbiAgICB9O1xuICB9XG4gIC8vIGZldGNoQ2hhdEhpc3RvcnkoKSB7XG4gIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgLy8gICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgLy8gICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gIC8vICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gIC8vICAgfSk7XG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cFxuICAvLyAgICAgLmdldChgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25LZXl9YCwgeyBoZWFkZXJzIH0pXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAvLyAgICAgICB9KSxcbiAgLy8gICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTogJywgZXJyb3IpO1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICBtYXBDaGF0SGlzdG9yeShjaGF0czogYW55KSB7XG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ2FpJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZ3JlZXRpbmdNc2csXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgfSk7XG4gICAgaWYgKGNoYXRzICYmIGNoYXRzPy5NZXNzYWdlcz8ubGVuZ3RoKSB7XG4gICAgICBjaGF0cz8uTWVzc2FnZXMuZm9yRWFjaCgoY2hhdDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjaGF0LlR5cGUgPT0gJ3VzZXInKSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICAgICAgICBXb3JrZmxvd0V4ZWN1dGlvbklkOiBjaGF0LldvcmtmbG93RXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGF0LlR5cGUgPT0gJ2FpJykge1xuICAgICAgICAgIHZhciBzb3VyY2VzTGlzdCA9IGNoYXQuV2ViTGlua3MgfHwgW107XG4gICAgICAgICAgdmFyIGRpc3BsYXllZFNvdXJjZXMgPSBjaGF0LldlYkxpbmtzLnNsaWNlKDAsIDMpOyAvLyBGaXJzdCAzIGNhcmRzXG4gICAgICAgICAgdmFyIHJlbWFpbmluZ1NvdXJjZXMgPSBjaGF0LldlYkxpbmtzLnNsaWNlKDMpOyAvLyBSZW1haW5pbmcgaXRlbXNcblxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpLFxuICAgICAgICAgICAgZXhlY3V0aW9uR3JhcGhzOiBjaGF0LkV4ZWN1dGlvbkdyYXBocyxcbiAgICAgICAgICAgIGdyYXBoczogY2hhdC5HcmFwaHMsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogY2hhdC5TZWFyY2hUZXJtcyxcbiAgICAgICAgICAgIHNvdXJjZXNMaXN0OiBzb3VyY2VzTGlzdCxcbiAgICAgICAgICAgIGRpc3BsYXllZFNvdXJjZXM6IGRpc3BsYXllZFNvdXJjZXMsXG4gICAgICAgICAgICByZW1haW5pbmdTb3VyY2VzOiByZW1haW5pbmdTb3VyY2VzLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIShtZXNzYWdlPy5sZW5ndGggPiAwKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdoZXJlIGlzIG15IG1lc3NhZ2UnKVxuICAgIC8vIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UudHJpbSgpO1xuXG4gICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSAvXFxbKFteW10rKV1cXCgoW14pXSspXFwpL2c7XG4gICAgY29uc3QgdXJsUmVnZXggPSAvKD88IWhyZWY9XCIpXFxiaHR0cHM/OlxcL1xcL1xcUysoPzwhWy4sXSkvZ2k7XG5cbiAgICBpZiAobWFya2Rvd25MaW5rUmVnZXgudGVzdChtZXNzYWdlKSkge1xuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgICAgbWFya2Rvd25MaW5rUmVnZXgsXG4gICAgICAgICc8YSBocmVmPVwiJDJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT4nXG4gICAgICApO1xuICAgICAgLy9jb25zb2xlLmxvZygnU2FuaXRpemVkIG1lc3NhZ2U6ICcsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIdG1sKGh0bWwpO1xuICAgIH1cblxuICAgIGlmICh1cmxSZWdleC50ZXN0KG1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBodG1sID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgICB1cmxSZWdleCxcbiAgICAgICAgJzxhIGhyZWY9XCIkJlwiIHRhcmdldD1cIl9ibGFua1wiPiQmPC9hPidcbiAgICAgICk7XG4gICAgICAvLyBjb25zb2xlLmxvZygnU2FuaXRpemVkIG1lc3NhZ2U6ICcsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIdG1sKGh0bWwpO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoLyg/OlxcclxcbnxcXHJ8XFxuKS9nLCAnPGJyPicpO1xuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXFwqXFwqKC4qPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGhlYWRlcnMgdG8gSFRNTCBoZWFkZXJzXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXigjezEsNn0pXFxzKyguKikkL2dtLCAobWF0Y2gsIGhhc2hlcywgdGV4dCkgPT4ge1xuICAgICAgY29uc3QgbGV2ZWwgPSBoYXNoZXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGA8aCR7bGV2ZWx9PiR7dGV4dH08L2gke2xldmVsfT5gO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgY29uc3Qgc2FuaXRpemVkTWVzc2FnZSA9IHRoaXMuc2FuaXRpemVIdG1sKG1lc3NhZ2UpO1xuICAgIHJldHVybiBzYW5pdGl6ZWRNZXNzYWdlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGNvbnN0IGZlZWRiYWNrTGlua3MgPVxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZlZWRiYWNrLWxpbmsnKTtcbiAgICBmZWVkYmFja0xpbmtzLmZvckVhY2goKGxpbms6IGFueSkgPT4ge1xuICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICB0aGlzLm9uRmVlZGJhY2tDbGljay5iaW5kKHRoaXMsICd6ZW5kZXNrJylcbiAgICAgICk7XG4gICAgfSk7XG4gICAgLy8gaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjay1saW5rJykpIHtcbiAgICAvLyAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgLy8gICAgIC5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2stbGluaycpXG4gICAgLy8gICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25GZWVkYmFja0NsaWNrLmJpbmQodGhpcywgJ3plbmRlc2snKSk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2FuaXRpemVIdG1sKGh0bWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbCk7XG4gIH1cblxuICBvbkZlZWRiYWNrQ2xpY2sodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZmVlZGJhY2tFdmVudC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgICB0aGlzLm9uQ2xvc2VFdmVudC5lbWl0KCk7XG4gIH1cblxuICBzZW5kTWVzc2FnZVdpdGhUaWxlKHByb21wdDogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnB1dCA9IHByb21wdDtcbiAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgfVxuICBpc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgZmV0Y2hEYXRhKG1zZyA9IG51bGwpIHtcbiAgICB0aGlzLmlucHV0ID0gbXNnIHx8IHRoaXMuaW5wdXQ/LnRyaW0oKTtcbiAgICB0aGlzLm1zZyA9IHRoaXMuaW5wdXQ7XG4gICAgaWYgKCF0aGlzLmlucHV0IHx8IHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRoaXMuaW5wdXQpLFxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdoaWRkZW4nOyAvLyBSZXNldCB0aGUgaGVpZ2h0XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgNjJweGA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KHRoaXMuaW5wdXQsIHRoaXMuYWdlbnRzLCB0aGlzLmNvbnZlcnNhdGlvbktleSk7XG4gIH1cbiAgZmV0Y2hEYXRhRm9yKG1zZywgY2hhdCkge1xuICAgIGNvbnN0IGlucHV0TXNnID0gbXNnPy50cmltKCk7XG4gICAgaWYgKCFpbnB1dE1zZyB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNoYXQucmVsYXRlZExpc3RJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGlucHV0TXNnKSxcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KGlucHV0TXNnLCB0aGlzLmFnZW50cywgdGhpcy5jb252ZXJzYXRpb25LZXksIG1zZywgY2hhdCk7XG4gIH1cbiAgZmV0Y2hTbWFsbFRhbGsoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdC9zbWFsbC10YWxrLyR7dGhpcy5ib3RJZH0vJHt0aGlzLnVzZXJJZH1gO1xuXG4gICAgdGhpcy5odHRwXG4gICAgICAuZ2V0PHsgc21hbGxUYWxrOiBzdHJpbmcgfT4odXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc21hbGwgdGFsazonLCBlcnJvcik7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5zbWFsbFRhbGspIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZShyZXNwb25zZS5zbWFsbFRhbGspLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMjtcbiAgICAgICAgICAvLyB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcmVhZEFsbENodW5rcyA9IChzdHJlYW06IGFueSkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICBjb25zdCBhbGxTdWdnZXN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIHJlYWRlci5jbG9zZWQuY2F0Y2goKGVycjogYW55KSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlYWRpbmcgc3RyZWFtOiAnLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBzdGFydDogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVtcChjb250cm9sbGVyLCByZWFkZXIsIGFsbFN1Z2dlc3Rpb25zKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgcHVtcChjb250cm9sbGVyOiBhbnksIHJlYWRlcjogYW55LCBhbGxTdWdnZXN0aW9uczogc3RyaW5nW10pIHtcbiAgICByZWFkZXIucmVhZCgpLnRoZW4oKHsgZG9uZSwgdmFsdWUgfTogYW55KSA9PiB7XG4gICAgICBjb25zdCBsYXN0SXRlbSA9IHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGxhc3RJdGVtLm1lc3NhZ2UgPSB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShsYXN0SXRlbS5tZXNzYWdlKTtcbiAgICAgICAgdGhpcy5jaGF0TG9nLnBvcCgpO1xuICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChsYXN0SXRlbSk7XG4gICAgICAgIGlmIChhbGxTdWdnZXN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3N1Z2dlc3Rpb25zJyxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBhbGxTdWdnZXN0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgLy8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XG5cbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgdGhpcy5mZXRjaFNtYWxsVGFsaygpO1xuICAgICAgICAvLyB9LDEwMDApXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlY29kZWRDaHVuayA9IHRoaXMuZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgdGhpcy5haVJlc3BvbnNlICs9IGRlY29kZWRDaHVuaztcbiAgICAgIGlmIChsYXN0SXRlbS50eXBlID09PSAnYWknKSB7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zTWF0Y2ggPSB0aGlzLmFpUmVzcG9uc2UubWF0Y2goLzxzdWc+KC4qPyk8XFwvc3VnPi9nKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zTWF0Y2gpIHtcbiAgICAgICAgICBzdWdnZXN0aW9uc01hdGNoLmZvckVhY2goKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFpUmVzcG9uc2UgPSB0aGlzLmFpUmVzcG9uc2UucmVwbGFjZShtYXRjaCwgJycpO1xuICAgICAgICAgICAgYWxsU3VnZ2VzdGlvbnMucHVzaChtYXRjaD8ucmVwbGFjZSgvPFxcLz9zdWc+L2csICcnKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0SXRlbS5tZXNzYWdlID0gdGhpcy5haVJlc3BvbnNlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGFpRm9ybWF0dGVkRGF0YTogYW55O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiAnKTtcbiAgICAgICAgICBhaUZvcm1hdHRlZERhdGEgPSBKU09OLnBhcnNlKEpTT04ucGFyc2UodGhpcy5haVJlc3BvbnNlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiAyJyk7XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEgPSBKU09OLnBhcnNlKHRoaXMuYWlSZXNwb25zZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gZG9uZScpO1xuXG4gICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEgJiYgYWlGb3JtYXR0ZWREYXRhPy5zZWN0aW9uX2lkPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ2NvbXBhbnlfc2VhcmNoJyB8fFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ3VzZXJfc2VhcmNoJyB8fFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ2luZHVzdHJ5X2NvbXBhbnlfc2VhcmNoJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaE15Q29ubmVjdGlvbnMoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gdGhpcy5teVVwY29taW5nU2Vzc2lvbkFjdGlvbikge1xuICAgICAgICAgICAgdmFyIHNwZWFrZXJJZHMgPSBbXTtcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5mb3JFYWNoKChzZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgIHNwZWFrZXJJZHMgPSBbLi4uc3BlYWtlcklkcywgLi4uc2Vzc2lvbi5zcGVha2Vyc107XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHNwZWFrZXJJZHM/Lmxlbmd0aCA+IDApIHRoaXMuZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKHNwZWFrZXJJZHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMuYWRkVG9NeUFnZW5kYUFjdGlvbiAmJlxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/Lmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXG4gICAgICAgICAgICAgIHNlc3Npb25JZHM6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMuY29ubmVjdE9yRm9sbG93QWN0aW9uKSB7XG4gICAgICAgICAgICBsZXQgdXNlcnNMZW4gPSBhaUZvcm1hdHRlZERhdGEuY29udGVudD8ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHVzZXJzTGVuID4gMSkge1xuICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogJ29wZW5fbmV0d29ya2luZ19kcmF3ZXInLFxuICAgICAgICAgICAgICAgIHNlYXJjaDogYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1c2Vyc0xlbiA9PSAxKSB7XG4gICAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcbiAgICAgICAgICAgICAgICBjb25uZXRVc2VySWRzOiBbYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnRbMF0udXNlcklkXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5pc19vcGVuX3BhZ2UgPT0gJ3RydWUnKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICBzZWN0aW9uSWQ6IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkLFxuICAgICAgICAgICAgICBzZWFyY2g6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQnJvd3NlcigpKSB7XG4gICAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5tZXNzYWdlICs9XG4gICAgICAgICAgICAgICAgJ1xcblxcbicgKyAnPGEgaWQ9XCJjbG9zZUJvdE5vd1wiPkNsaWNrIEhlcmU8L2E+IHRvIHNlZSByZXN1bHRzLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGFpRm9ybWF0dGVkRGF0YS5tZXNzYWdlLFxuICAgICAgICAgICAgYWN0aW9uOiBhaUZvcm1hdHRlZERhdGEsXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZUJyb3dzZXIoKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkQ2xvc2VCb3RDbGlja0V2ZW50KCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYWlSZXNwb25zZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLmFpUmVzcG9uc2UsXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcblxuICAgICAgLy8gRW5xdWV1ZSB0aGUgbmV4dCBkYXRhIGNodW5rIGludG8gb3VyIHRhcmdldCBzdHJlYW1cbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnB1bXAoY29udHJvbGxlciwgcmVhZGVyLCBhbGxTdWdnZXN0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICBzdWJtaXRGZWVkYmFjayhmbGFnOiBib29sZWFuLCBtZXNzYWdlKSB7XG4gICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG5cbiAgICB0aGlzLmZlZWRiYWNrRG9uZSA9IHRydWU7XG4gICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gbnVsbDtcbiAgICBjb25zdCBjb252ZXJzYXRpb25faWQgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQpO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29udmVyc2F0aW9uL2NvUGlsb3QvJHt0aGlzLmJvdElkfS9jb252ZXJzYXRpb24vJHtjb252ZXJzYXRpb25faWR9L2hlbHBmdWwtcmVzcG9uc2VgO1xuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIGFwaUtleTogJ0NvbnZlcnNhdGlvbl9XSXovcUFtK0VFbWZPa0ZhVUEvd2VBPT0nLFxuICAgICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBtZXNzYWdlSWQ6IG1lc3NhZ2UuX2lkLCBpc0hlbHBmdWw6IGZsYWcgfSksXG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAoZmxhZykge1xuICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgdGhpcy50aHVtYnNVcE1lc3NhZ2UgfHxcbiAgICAgICAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oJ01heSBJIGFzc2lzdCB5b3Ugd2l0aCBhbnl0aGluZyBlbHNlJyksXG4gICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZmVlZGJhY2tEb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlKFxuICAgICAgICAgIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzW3RoaXMudGh1bWJzRG93bk1zZ0luZGV4XVxuICAgICAgICApLFxuICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ID1cbiAgICAgICAgKHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ICsgMSkgJSB0aGlzLnRodW1ic0Rvd25NZXNzYWdlcy5sZW5ndGg7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdXBwb3J0TGluazg4Jyk7XG4gICAgICAgIGlmIChzdXBwb3J0TGluaykge1xuICAgICAgICAgIHN1cHBvcnRMaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50cmlnZ2VyU3VwcG9ydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKTtcbiAgICAgIHRoaXMuZmVlZGJhY2tEb25lID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xuICAgIH0pO1xuICB9XG4gIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIChuZXcgbGluZSlcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAvLyBDYWxsIHlvdXIgc3VibWl0IGZ1bmN0aW9uXG4gICAgICB0aGlzLmhhbmRsZVN1Ym1pdChldmVudCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZVN1Ym1pdChldmVudCkge1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICB9XG5cbiAgaGFuZGxlVXBDbGljayhpZHg6IGFueSkge1xuICAgIGlmICh0aGlzLmZlZWRiYWNrRG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3VibWl0RmVlZGJhY2sodHJ1ZSwgdGhpcy5jaGF0TG9nW2lkeF0pO1xuICAgIHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkO1xuXG4gICAgaWYgKHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQpIHtcbiAgICAgIHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZDtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGhhbmRsZURvd25DbGljayhpZHg6IGFueSkge1xuICAgIGlmICh0aGlzLmZlZWRiYWNrRG9uZSkgcmV0dXJuO1xuICAgIHRoaXMuc3VibWl0RmVlZGJhY2soZmFsc2UsIHRoaXMuY2hhdExvZ1tpZHhdKTtcbiAgICB0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQ7XG4gICAgaWYgKHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkKVxuICAgICAgdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQ7XG4gIH1cbiAgLy8gaGFuZGxlQ29weUNsaWNrKGluZGV4OiBhbnkpIHtcbiAgLy8gICAvLyBDb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBjbGlwYm9hcmRcbiAgLy8gICBjb25zdCBjb250ZW50VG9Db3B5ID0gdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlO1xuICAvLyAgIGNvbnNvbGUubG9nKCdjb250ZW50VG9Db3B5Jyk7XG4gIC8vICAgY29uc29sZS5sb2coY29udGVudFRvQ29weSk7XG4gIC8vICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudFRvQ29weSkudGhlbigoKSA9PiB7XG4gIC8vICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBtZXNzYWdlIHdhcyBjb3BpZWRcbiAgLy8gICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgIC8vIFJlc2V0IHRoZSBjb3BpZWQgc3RhdGUgYWZ0ZXIgYSBkZWxheVxuICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gZmFsc2U7XG4gIC8vICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgIH0sIDIwMDApOyAvLyBSZXNldCBhZnRlciAyIHNlY29uZHNcbiAgLy8gICB9KTtcbiAgLy8gfVxuICBjb3B5VGV4dChpZCwgaW5kZXgpIHtcbiAgICAvLyBHZXQgdGhlIHRleHQgZWxlbWVudFxuICAgIHZhciB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSB0ZXh0YXJlYSBlbGVtZW50IHRvIGNvcHkgdGhlIHRleHRcbiAgICB2YXIgdGVtcFRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICB0ZW1wVGV4dEFyZWEudmFsdWUgPSB0ZXh0RWxlbWVudC5pbm5lclRleHQ7XG5cbiAgICAvLyBBcHBlbmQgdGhlIHRleHRhcmVhIHRvIHRoZSBib2R5IChuZWNlc3NhcnkgZm9yIHRoZSBleGVjQ29tbWFuZCB0byB3b3JrKVxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVtcFRleHRBcmVhKTtcblxuICAgIC8vIFNlbGVjdCB0aGUgdGV4dCBpbnNpZGUgdGhlIHRleHRhcmVhXG4gICAgdGVtcFRleHRBcmVhLnNlbGVjdCgpO1xuXG4gICAgLy8gQ29weSB0aGUgdGV4dCB0byB0aGUgY2xpcGJvYXJkXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcblxuICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IHRleHRhcmVhXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wVGV4dEFyZWEpO1xuXG4gICAgLy8gT3B0aW9uYWxseSwgeW91IGNhbiBhbGVydCB0aGUgdXNlciBvciBjaGFuZ2UgdGhlIGJ1dHRvbiB0ZXh0IHRvIGluZGljYXRlIHRoZSBjb3B5IHdhcyBzdWNjZXNzZnVsXG4gICAgLy8gYWxlcnQoJ1RleHQgY29waWVkIHRvIGNsaXBib2FyZCEnKTtcblxuICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDIwMDApOyAvLyBSZXNldCBhZnRlciAyIHNlY29uZHNcbiAgfVxuICBoYW5kbGVDb3B5Q2xpY2soaW5kZXg6IGFueSkge1xuICAgIC8vIENvcHkgdGhlIG1lc3NhZ2UgdG8gdGhlIGNsaXBib2FyZFxuICAgIGNvbnN0IGNvbnRlbnRUb0NvcHkgPSB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2U7XG4gICAgY29uc3QgcmVzdXRsdCA9IHRoaXMuY29weVRleHQoJ21lc3NhZ2VUZXh0XycgKyBpbmRleCwgaW5kZXgpO1xuICB9XG5cbiAgc2FuaXRpemVIVE1MKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgZG9jdW1lbnQgZnJhZ21lbnQgdG8gaG9sZCB0aGUgc2ltcGxpZmllZCBjb250ZW50XG4gICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAvLyBBcHBlbmQgdGhlIGNoaWxkcmVuIG9mIHRoZSBib2R5IG9mIHRoZSBwYXJzZWQgZG9jdW1lbnQgdG8gdGhlIGZyYWdtZW50XG4gICAgQXJyYXkuZnJvbShkb2MuYm9keS5jaGlsZE5vZGVzKS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChub2RlLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgZGl2IGVsZW1lbnQgdG8gaG9sZCB0aGUgc2ltcGxpZmllZCBIVE1MXG4gICAgY29uc3Qgc2ltcGxpZmllZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHNpbXBsaWZpZWREaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG4gICAgLy8gUmVtb3ZlIGNvbXBsZXggdGFncyBvciBhdHRyaWJ1dGVzIGFzIG5lZWRlZFxuICAgIC8vIEV4YW1wbGU6IHJlbW92ZSBzY3JpcHRzXG4gICAgc2ltcGxpZmllZERpdlxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NjcmlwdCcpXG4gICAgICAuZm9yRWFjaCgoc2NyaXB0KSA9PiBzY3JpcHQucmVtb3ZlKCkpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSBzaW1wbGlmaWVkIEhUTUwgYXMgYSBzdHJpbmdcbiAgICByZXR1cm4gc2ltcGxpZmllZERpdi5pbm5lckhUTUw7XG4gIH1cblxuICBjdXJyZW50TWVzc2FnZUZvckVkaXRvcjogYW55ID0gJyc7XG4gIGN1cnJlbnRJbmRleEZvckVkaXRvcjogYW55ID0gLTE7XG4gIGhhbmRsZUVkaXRvckNsaWNrKGluZGV4OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPT0gLTEpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4Rm9yRWRpdG9yID0gaW5kZXg7XG4gICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5zYW5pdGl6ZUhUTUwoXG4gICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZVxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yLnJlcGxhY2UoXG4gICAgICAgICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICcnXG4gICAgICApO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9PSBpbmRleCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yICs9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvci5yZXBsYWNlKFxuICAgICAgICAgICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICAgJydcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPSBpbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvci5yZXBsYWNlKFxuICAgICAgICAgICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICAgJydcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmlzRWRpdG9yID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmlzRWRpdG9yID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMjAwMCk7IC8vIFJlc2V0IGFmdGVyIDIgc2Vjb25kc1xuICAgIHRoaXMuZWRpdG9yc0RyYXdlci5vcGVuKCk7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgc2Nyb2xsVG9Cb3R0b20oKSB7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jaGF0TWFpbi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICAgIHRoaXMuY2hhdE1haW4ubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICBpZiAoY291bnRlcisrID4gNSkgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgfSwgNSk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICBjb25zb2xlLmluZm8oJ2luY29taW5nIGFjdGlvbiBmcm9tIHRoZSBjaGF0Ym90IEFJJyk7XG4gICAgY29uc29sZS5pbmZvKGFjdGlvbik7XG5cbiAgICBpZiAoYWN0aW9uPy5jb250ZW50KSB7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIENoZWNrIGlmIHRoZSBkcmF3ZXIgaXMgaW5pdGlhbGx5IG9wZW4gYW5kIGFwcGx5IG92ZXJmbG93IGhpZGRlbiB0byBib2R5IGlmIHNvXG4gICAgaWYgKHRoaXMuZHJhd2VyLm9wZW5lZCkge1xuICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcbiAgICB9XG5cbiAgICAvLyBMaXN0ZW4gdG8gY2hhbmdlcyBpbiB0aGUgZHJhd2VyIGJlaW5nIG9wZW5lZCBvciBjbG9zZWRcbiAgICB0aGlzLmRyYXdlci5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQm9keU92ZXJmbG93KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRyYXdlci5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQpID0+IHtcbiAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubXlUZXh0YXJlYSAmJiB0aGlzLm15VGV4dGFyZWEubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5teVRleHRhcmVhLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTsgLy8gRm9jdXMgb24gdGhlIHRleHRhcmVhXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Qm9keU92ZXJmbG93KCkge1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUJvZHlPdmVyZmxvdygpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuYm9keU92ZXJmbG93Q2xhc3MpO1xuICB9XG5cbiAgZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKGlkcykge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L3VzZXJzL2dldC1ieS1zdGFmZi1pZHNgO1xuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArICd5b3VyX3Rva2VuX2hlcmUnLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGlkcyksXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOyAvLyBQYXJzZSB0aGUgSlNPTiBib2R5IG9mIHRoZSByZXNwb25zZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTmV0d29yayByZXNwb25zZSB3YXMgbm90IG9rLicpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkYXRhLmZvckVhY2goKHNwZWFrZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3BlYWtlcnNbc3BlYWtlci5pZF0gPSBzcGVha2VyO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhOicsIGVycik7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBwZXJmb3JtU2Vzc2lvbkFjdGlvbihzZXNzaW9uSWQsIGFjdGlvbikge1xuICAgIHRoaXMuc2Vzc2lvbkFjdGlvbnMubmV4dCh7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBhY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICBhZGRDbG9zZUJvdENsaWNrRXZlbnQoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjbG9zZUJvdE5vdycpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VCb3QubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNNb2JpbGVCcm93c2VyKCkge1xuICAgIHJldHVybiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoXG4gICAgICBuYXZpZ2F0b3IudXNlckFnZW50XG4gICAgKTtcbiAgfVxuXG4gIGNvbm5lY3RUb1VzZXIodXNlcklkKSB7XG4gICAgdGhpcy5jb25uZWN0V2l0aFVzZXIuZW1pdCh7XG4gICAgICBjb25uZWN0OiAhdGhpcy5jYW5EaXNjb25uZWN0KHVzZXJJZCksXG4gICAgICB1c2VySWQsXG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBzY2hlZHVsZU1lZXRpbmdXaXRoVXNlcih1c2VyKSB7XG4gICAgdGhpcy5zY2hlZHVsZU1lZXRpbmcuZW1pdCh1c2VyKTtcbiAgfVxuXG4gIGNhbkNvbm5lY3QodXNlcklkKSB7XG4gICAgcmV0dXJuICEoXG4gICAgICB0aGlzLmNhbkRpc2Nvbm5lY3QodXNlcklkKSB8fFxuICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZmluZCgoYSkgPT4gYSA9PSB1c2VySWQpXG4gICAgKTtcbiAgfVxuXG4gIGNhbkRpc2Nvbm5lY3QodXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMubXlDb25uZWN0aW9ucy5maW5kKChjb25uKSA9PiBjb25uLnVzZXJJZCA9PSB1c2VySWQpO1xuICB9XG5cbiAgZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgYXBpS2V5OiB0aGlzLmF1dG9nZW5LZXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgYCR7dGhpcy5lbnZpcm9ubWVudC5VU0VSU19BUEl9L2V2ZW50cy8ke3RoaXMuZXZlbnRJZH0vY29ubmVjdGlvbi1yZXF1ZXN0cy9hdXRvZ2VuL3BlbmRpbmctc2VudC1yZXF1ZXN0cz91c2VySWQ9JHt0aGlzLnVzZXJJZH1gLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyA9IHJlcztcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwZW5kaW5nIHJlcXVlc3RzOiAnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGZldGNoTXlDb25uZWN0aW9ucygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS91c2Vycy1jb25uZWN0aW9ucy9hdXRvZ2VuP3VzZXJJZD0ke3RoaXMudXNlcklkfWAsXG4gICAgICAgIHsgaGVhZGVycyB9XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubXlDb25uZWN0aW9ucyA9IHJlcztcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwZW5kaW5nIHJlcXVlc3RzOiAnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGlzRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGFnZW50czogYW55O1xuICBzZWxlY3RlZEFnZW50cyA9IFtdO1xuICBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAvLyBUb2dnbGUgdGhlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLmFnZW50cykgdGhpcy5mZXRjaEFnZW50cygpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblNlbGVjdEFsbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFnZW50cz8uZm9yRWFjaCgoYWdlbnQpID0+IChhZ2VudC5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25BZ2VudENoYW5nZShhZ2VudDogYW55KTogdm9pZCB7XG4gICAgLy9hZ2VudC5zZWxlY3RlZCA9ICFhZ2VudC5zZWxlY3RlZDtcbiAgICAvL2NvbnNvbGUubG9nKGFnZW50KTtcbiAgICBsZXQgYWdlbnRGb3VuZCA9IHRoaXMuYWdlbnRzLmZpbHRlcigocCkgPT4gcC5pZCA9PSBhZ2VudC5pZCk7XG4gICAgaWYgKGFnZW50Rm91bmQgJiYgYWdlbnRGb3VuZC5sZW5ndGggPiAwKSB7XG4gICAgICBhZ2VudEZvdW5kWzBdLnNlbGVjdGVkID0gIWFnZW50Rm91bmRbMF0uc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFyZUFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFnZW50cz8uZXZlcnkoKGFnZW50KSA9PiAhYWdlbnQuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZ2V0RHJvcGRvd25IZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0ZWRBZ2VudHMgPSB0aGlzLmFnZW50cz8uZmlsdGVyKChhZ2VudCkgPT4gYWdlbnQuc2VsZWN0ZWQpO1xuICAgIGlmICghc2VsZWN0ZWRBZ2VudHMpIHtcbiAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzZWxlY3RlZEFnZW50cyAmJiBzZWxlY3RlZEFnZW50cz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICA/IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50cyBTZWxlY3RlZGBcbiAgICAgICAgICA6IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50IFNlbGVjdGVkYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZmV0Y2hBZ2VudHNfaHR0cCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29QaWxvdC8ke3RoaXMuYm90SWR9L2FjdGl2ZS1hZ2VudHNgO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHt9LCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMuYWdlbnRzID0gcmVzLm1hcCgoYWdlbnQpID0+ICh7XG4gICAgICAgICAgICAuLi5hZ2VudCxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXRib3QgY29uZmlnOiAnLCBlcnJvcik7XG5cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICBkb2N1bWVudENvbnRlbnQ6IGFueTtcblxuICBjb252ZXJzYXRpb25JZDogYW55O1xuICBpc0NvbnRlbnRMb2FkZWQgPSBmYWxzZTtcblxuICBmZXRjaENvbnRlbnRfaHR0cCgpIHtcbiAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gZmFsc2U7XG4gICAgY29uc29sZS5sb2coJ0FQSSBjYWxsIGZ1bmN0aW9uJyk7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25faWQgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQpO1xuICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25faWQ7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db252ZXJzYXRpb25Eb2N1bWVudHM/Y29udmVyc2F0aW9uSWQ9JHtjb252ZXJzYXRpb25faWR9JmJvdElkPSR7dGhpcy5ib3RJZH1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogJ1dJei9xQW0rRUVtZk9rRmFVQS93ZUE9PScsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRDb250ZW50ID0gcmVzO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdHZXQgQVBJIGNhbGxsZWQgc3VjY2VzcycpO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZyBESjogJywgZXJyb3IpO1xuICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yPy5zdGF0dXMgPT0gNDA0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2Rhc2gnKTtcbiAgICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmZXRjaEFnZW50cygpIHtcbiAgICB0aGlzLmZldGNoQWdlbnRzX2h0dHAoKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGZldGNoRWRpdG9yQ29udGVudCgpIHtcbiAgICB0aGlzLmZldGNoQ29udGVudF9odHRwKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyBldmVudHMvJHtldmVudElkfS91c2Vycy1jb25uZWN0aW9uc1xuICBwcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkobWFya2Rvd246IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIGEgY3VzdG9tIHJlbmRlcmVyIHRvIG1vZGlmeSA8YT4gdGFnc1xuICAgICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgbWFya2VkLlJlbmRlcmVyKCk7XG5cbiAgICAgIC8vIEN1c3RvbWl6ZSBhbmNob3IgdGFncyB0byBpbmNsdWRlIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICByZW5kZXJlci5saW5rID0gKGhyZWY6IHN0cmluZywgdGl0bGU6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBgPGEgaHJlZj1cIiR7aHJlZn1cIiB0aXRsZT1cIiR7XG4gICAgICAgICAgdGl0bGUgfHwgJydcbiAgICAgICAgfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7dGV4dH08L2E+YDtcbiAgICAgIH07XG5cbiAgICAgIC8vIFBhcnNlIHRoZSBtYXJrZG93biBjb250ZW50IHRvIEhUTUwgdXNpbmcgbWFya2VkIHdpdGggdGhlIGN1c3RvbSByZW5kZXJlclxuICAgICAgY29uc3QgbWFya2Rvd25Db250ZW50ID0gbWFya2VkLnBhcnNlKG1hcmtkb3duLCB7IHJlbmRlcmVyOiByZW5kZXJlciB9KTtcblxuICAgICAgLy8gU2FuaXRpemUgdGhlIHBhcnNlZCBIVE1MIHVzaW5nIEFuZ3VsYXIncyBEb21TYW5pdGl6ZXJcbiAgICAgIGNvbnN0IHNhbml0aXplZEh0bWwgPVxuICAgICAgICB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChtYXJrZG93bkNvbnRlbnQpO1xuXG4gICAgICAvLyBSZXR1cm4gdGhlIHNhZmUgSFRNTCBjb250ZW50IGZvciBkaXNwbGF5XG4gICAgICByZXR1cm4gc2FuaXRpemVkSHRtbDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcHJvY2Vzc2luZyBtYXJrZG93bjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gJyc7IC8vIFJldHVybiBhbiBlbXB0eSBzdHJpbmcgb3IgaGFuZGxlIHRoZSBlcnJvciBhcHByb3ByaWF0ZWx5XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUh0bWwobWFya2Rvd246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFtYXJrZG93biB8fCAhKG1hcmtkb3duLmxlbmd0aCA+IDApKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnB1dCBNYXJrZG93biBpcyBudWxsIG9yIGVtcHR5Jyk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBoZWFkZXJzICgjIyMgb3IgIyMpIHRvIDxzdHJvbmc+IGZvciBib2xkIGhlYWRpbmdzXG4gICAgbGV0IGh0bWwgPSBtYXJrZG93bi5yZXBsYWNlKFxuICAgICAgL14oI3sxLDZ9KVxccysoLiopJC9nbSxcbiAgICAgIChtYXRjaCwgaGFzaGVzLCB0ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gaGFzaGVzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxldmVsID09PSAzKSB7XG4gICAgICAgICAgcmV0dXJuIGA8aDM+PHN0cm9uZz4ke3RleHR9PC9zdHJvbmc+PC9oMz5gO1xuICAgICAgICB9IGVsc2UgaWYgKGxldmVsID09PSA0KSB7XG4gICAgICAgICAgcmV0dXJuIGA8aDQ+PHN0cm9uZz4ke3RleHR9PC9zdHJvbmc+PC9oND5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPHN0cm9uZz4ke3RleHR9PC9zdHJvbmc+YDtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBjb2RlIGJsb2NrcyB3aXRoIGxhbmd1YWdlIHRvIHByZWZvcm1hdHRlZCBIVE1MXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvYGBgKFxcdyspP1xcbihbXFxzXFxTXSo/KWBgYC9nLCAobWF0Y2gsIGxhbmcsIGNvZGUpID0+IHtcbiAgICAgIGNvbnN0IGVzY2FwZWRDb2RlID0gdGhpcy5lc2NhcGVIdG1sKGNvZGUpO1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5nIHx8ICdwbGFpbnRleHQnO1xuXG4gICAgICAvLyBDcmVhdGUgYSBjb3B5IGJ1dHRvbiBmb3IgdGhlIGNvZGUgYmxvY2tcbiAgICAgIHJldHVybiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29kZS1jb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImNvcHktYnV0dG9uXCIgY2xhc3M9XCJjb3B5LWJ1dHRvblwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJ1xcYCR7ZXNjYXBlZENvZGV9XFxgJylcIj4ke3RoaXMuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICdDb3B5J1xuICAgICAgKX08L2J1dHRvbj5cbiAgICAgICAgPHByZSBjbGFzcz1cImNvZGVfYmxvY2sgZGlmZlwiPjxjb2RlIGNsYXNzPVwibGFuZ3VhZ2UtJHtsYW5ndWFnZX1cIj4ke2VzY2FwZWRDb2RlfTwvY29kZT48L3ByZT5cbiAgICAgIDwvZGl2PmA7XG4gICAgfSk7XG5cbiAgICAvLyBDb252ZXJ0IGlubGluZSBjb2RlICh3cmFwcGVkIGluIGBiYWNrdGlja3NgKSB0byBpbmxpbmUgPGNvZGU+IHRhZ3NcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9gKFteYF0rKWAvZywgJzxjb2RlPiQxPC9jb2RlPicpO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBib2xkIHRvIEhUTUwgPHN0cm9uZz5cbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9cXCpcXCooLio/KVxcKlxcKi9nLCAnPHN0cm9uZz4kMTwvc3Ryb25nPicpO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXJlZCBsaXN0c1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXGQrXFwuXFxzKyguKikkL2dtLCAnPGxpPiQxPC9saT4nKTtcblxuICAgIC8vIENvbnZlcnQgYnVsbGV0IHBvaW50IGxpc3RzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXlxcLVxccysoLiopJC9nbSwgJzxsaT4kMTwvbGk+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGxpbmtzIHRvIEhUTUwgbGlua3NcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKFxuICAgICAgL1xcWyhbXlxcXV0rKV1cXCgoW14pXSspXFwpL2csXG4gICAgICAnPGEgaHJlZj1cIiQyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JDE8L2E+J1xuICAgICk7XG5cbiAgICAvLyBDb252ZXJ0IG5ldyBsaW5lcyB0byA8YnI+IHRhZ3MgZm9yIHBhcmFncmFwaHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC8oPzpcXHJcXG58XFxyfFxcbikvZywgJzxicj4nKTtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGVzY2FwZSBIVE1MIGNoYXJhY3RlcnMgZm9yIGNvZGUgYmxvY2tzXG4gIGVzY2FwZUh0bWwoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29kZVxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgIC5yZXBsYWNlKC8nL2csICcmIzAzOTsnKTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIGNvcHkgdGV4dCB0byBjbGlwYm9hcmRcbiAgcHVibGljIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBhbGVydCgnQ29kZSBjb3BpZWQgdG8gY2xpcGJvYXJkIScpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvcHkgdGV4dDogJywgZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgaXNDb2xsYXBzZWRGb3JHcmFwaCA9IGZhbHNlO1xuICBpc0NvbGxhcHNlZEZvckZHcmFwaCA9IGZhbHNlO1xuICB0b2dnbGVDb2xsYXBzZSgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gIXRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlQ29sbGFwc2VHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yR3JhcGggPSAhdGhpcy5pc0NvbGxhcHNlZEZvckdyYXBoO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICB0b2dnbGVDb2xsYXBzZUZHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yRkdyYXBoID0gIXRoaXMuaXNDb2xsYXBzZWRGb3JGR3JhcGg7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIC8vICAgW1xuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEphbnVhcnkgMjAyNDogSW4tRGVwdGggYW5kIENvbmNpc2UgLSBUaGUgQUkgVHJhY2tcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIkVhY2ggbW9udGgsIHdlIGNvbXBpbGUgc2lnbmlmaWNhbnQgbmV3cywgdHJlbmRzLCBhbmQgaGFwcGVuaW5ncyBpbiBBSSwgcHJvdmlkaW5nIGRldGFpbGVkIHN1bW1hcmllcyB3aXRoIGtleSBwb2ludHMgaW4gYnVsbGV0IGZvcm0gZm9yIGNvbmNpc2UgeWV0IGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtamFudWFyeS0yMDI0L1wiXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiVG9wIEFJIE5ld3MsIEphbnVhcnkgMjAyNCAtIEV2ZXJ5cGl4ZWwgSm91cm5hbFwiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiSW4gdGhpcyBtb250aGx5IHJvdW5kdXAsIHdlIHNwb3RsaWdodCB0aGUgdG9wIEFJIG5ld3Mgc3RvcmllcyBmcm9tIEphbnVhcnksIGluY2x1ZGluZyB0aGUgT3BlbkFJIHZzLiBUaGUgTmV3IFlvcmsgVGltZXMgTGF3c3VpdC5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vam91cm5hbC5ldmVyeXBpeGVsLmNvbS90b3AtYWktbmV3cy1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgSnVseSAyMDI0OiBJbi1EZXB0aCBhbmQgQ29uY2lzZSAtIFRoZSBBSSBUcmFja1wiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiVGhpcyBwYWdlIGZlYXR1cmVzIEFJIE5ld3MgZm9yIEp1bHkgMjAyNCwgaGlnaGxpZ2h0aW5nIHNpZ25pZmljYW50IGV2ZW50cyBzdWNoIGFzIENhbnZhIGFjcXVpcmluZyBMZW9uYXJkbyBBSS5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vdGhlYWl0cmFjay5jb20vYWktbmV3cy1qdWx5LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UvXCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJKYW51YXJ5IG5ld3Mgcm91bmR1cDogV2hhdCdzIG5ldyBpbiB0aGUgd29ybGQgb2YgQUk/IC0gUGx1cmFsc2lnaHRcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIk9wZW5BSeKAmXMgbmV3IEdQVCBzdG9yZSwgYnVzaW5lc3MtcmVhZHkgQ2hhdEdQVCBwbGFucywgYW5kIGEgcHJlZGljdGVkIHJpc2UgaW4gQUktcG93ZXJlZCBjeWJlcmNyaW1lLlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly93d3cucGx1cmFsc2lnaHQuY29tL3Jlc291cmNlcy9ibG9nL2RhdGEvYWktdGhpcy1tb250aC1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgQXVndXN0IDIwMjQ6IEluLURlcHRoIGFuZCBDb25jaXNlIC0gVGhlIEFJIFRyYWNrXCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJUaGlzIHBhZ2UgZmVhdHVyZXMgQUkgTmV3cyBmb3IgQXVndXN0IDIwMjQsIHdpdGggaGlnaGxpZ2h0cyBzdWNoIGFzIE52aWRpYSBkZWxheWluZyB0aGUg4oCcQmxhY2t3ZWxs4oCdIEIyMDAgQUkgY2hpcHMgZGVsaXZlcnkuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtYXVndXN0LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UtZHVwbGljYXRlL1wiXG4gIC8vICAgfVxuICAvLyBdXG4gIGRhdGVUaW1lID0geyBub3c6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICAvLyBFeHRyYWN0cyB0aGUgZG9tYWluIGZyb20gYSBVUkxcbiAgZ2V0RG9tYWluTmFtZSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgaG9zdG5hbWUgfSA9IG5ldyBVUkwodXJsKTtcbiAgICAgIHJldHVybiBob3N0bmFtZS5yZXBsYWNlKC9ed3d3XFwuLywgJycpOyAvLyBSZW1vdmUgJ3d3dy4nIGlmIHByZXNlbnRcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGVzIHRoZSBmYXZpY29uIFVSTFxuICBnZXRGYXZpY29uVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLmdldERvbWFpbk5hbWUodXJsKTtcbiAgICByZXR1cm4gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vczIvZmF2aWNvbnM/c3o9MTI4JmRvbWFpbj0ke2RvbWFpbn1gO1xuICB9XG4gIGN1cnJlbnRTb3VyY2VzTGlzdDogYW55ID0gW107XG4gIG9uQ2FyZENsaWNrKHNvdXJjZXMpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTb3VyY2VzTGlzdCA9IHNvdXJjZXM7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5vcGVuKCk7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGlzU2hvd0VkaXRvckJ1dHRvbiA9IHRydWU7XG5cbiAgb3Blbk91dGVyRWRpdG9yKCkge1xuICAgIHRoaXMuZmV0Y2hFZGl0b3JDb250ZW50KCk7XG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLm9wZW4oKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5pc1Nob3dFZGl0b3JCdXR0b24gPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZUVkaXRvcigpIHtcbiAgICB0aGlzLmVkaXRvcnNEcmF3ZXIuY2xvc2UoKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNTaG93RWRpdG9yQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpZiBuZWVkZWRcbiAgICB0aGlzLm9uRHJhd2VyQ2xvc2VkKCk7XG4gIH1cblxuICBvbkNsb3NlU291cmNlKCkge1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5jbG9zZSgpO1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgdGhpcy5vbkRyYXdlckNsb3NlZCgpO1xuICB9XG4gIG9uRHJhd2VyQ2xvc2VkKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc0RyYXdlck9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgICAvLyBVc2UgbmdDbGFzcyB0byBkeW5hbWljYWxseSBhcHBseSB0aGUgY2xhc3NcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgfVxuICAgIH0sIDgwMCk7XG4gIH1cbiAgaXNEcmF3ZXJPcGVuID0gdHJ1ZTtcblxuICB0b2dnbGVEcmF3ZXIodG9kbykge1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gdG9kbztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy51cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk7XG4gIH1cbiAgdXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpIHtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSB0aGlzLmlzRHJhd2VyT3BlbiA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgfVxuICB9XG4gIG9wZW5MaW5rSW5OZXdUYWIobGluazogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93Lm9wZW4obGluaywgJ19ibGFuaycpO1xuICB9XG4gIGFkanVzdFRleHRhcmVhSGVpZ2h0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgLy8gUHJldmVudHMgYSBuZXcgbGluZSBmcm9tIGJlaW5nIGFkZGVkXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7IC8vIFJlc2V0IHRoZSBoZWlnaHRcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgOyAvLyBBZGp1c3QgaGVpZ2h0IHRvIG1hdGNoIGNvbnRlbnRcbiAgICAvLyBFbnN1cmUgdGhlIGhlaWdodCBkb2Vzbid0IGV4Y2VlZCB0aGUgbWF4LWhlaWdodCBzZXQgaW4gQ1NTXG4gICAgaWYgKHRleHRhcmVhLnNjcm9sbEhlaWdodCA+IDE1MCkge1xuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYDE1MHB4YDsgLy8gQWRqdXN0IGhlaWdodCB0byBtYXRjaCBjb250ZW50XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7IC8vIEVuYWJsZSBzY3JvbGxpbmcgaWYgY29udGVudCBleGNlZWRzIDQwMHB4XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nOyAvLyBIaWRlIHNjcm9sbGJhciBpZiBjb250ZW50IGlzIHdpdGhpbiBsaW1pdHNcbiAgICB9XG4gIH1cblxuICB0b2dnbGVXb3JrZmxvd3ModmFsdWUgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRm9yQ29wMjlCb3RJZCgpKSB7XG4gICAgICB0aGlzLmJvdFNlcnZpY2UuZ2V0V29ya2Zsb3dzQnlPcmdJZCh0aGlzLm9yZ0lkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLm9yZ1dvcmtmbG93cyA9IHJlcztcbiAgICAgICAgdGhpcy5pc1dvcmtmbG93T3BlbiA9IHZhbHVlID09IG51bGwgPyAhdGhpcy5pc1dvcmtmbG93T3BlbiA6IHZhbHVlO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1dvcmtmbG93T3Blbikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gICAgLy8gQ3JlYXRlIGZvcm0gY29udHJvbHMgZHluYW1pY2FsbHkgYmFzZWQgb24gc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hXG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8uVHJpZ2dlcj8uSW5wdXRTY2hlbWEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgIGZvcm1Db250cm9sc1tpbnB1dC5JbnB1dElkXSA9IFtcbiAgICAgICAgICBpbnB1dC5WYWx1ZSB8fCAnJyxcbiAgICAgICAgICBpbnB1dC5SZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZm9ybVxuICAgIHRoaXMud29ya2Zsb3dGb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICB9XG5cbiAgb25Xb3JrZmxvd1NlbGVjdGVkKHdvcmtmbG93KSB7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gd29ya2Zsb3c7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5Xb3JrZmxvd0lucHV0ID0gdHJ1ZTtcbiAgfVxuXG4gIG9uV29ya2Zsb3dTdWJtaXQoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FsbENoYXRzJyk7XG4gICAgaWYgKHRoaXMud29ya2Zsb3dGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSk7XG5cbiAgICAgIHZhciBpbnB1dCA9IHRoaXMucHJlcGFyZUh0bWwoXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVNYXJrZG93bihcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuTmFtZSxcbiAgICAgICAgICB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICAvLyB1cGRhdGUgbGFzdCB0d28gY2hhdExvZyBlbnRyaWVzLCBzZXQgc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyID0gZmFsc2VcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMV1bJ3Nob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlciddID1cbiAgICAgICAgICBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAyXVsnc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyJ10gPVxuICAgICAgICAgIGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgICBtZXNzYWdlOiBpbnB1dCxcbiAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgICBzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXI6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coaW5wdXQpO1xuXG4gICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzID0gMDtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uID1cbiAgICAgICAgJ0V4ZWN1dGluZyAnICsgdGhpcy5zZWxlY3RlZFdvcmtmbG93LkFjdGlvbnNbMF0uTmFtZTtcbiAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gdHJ1ZTtcbiAgICAgIHRoaXMuZXhlY3V0aW5nV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB7XG4gICAgICAgIEFjdGlvbnM6IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5BY3Rpb25zLFxuICAgICAgICBJbnB1dHM6IHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgICB3b3JrZmxvd0lucHV0czogdGhpcy53b3JrZmxvd0Zvcm0udmFsdWUsXG4gICAgICAgIFdvcmtmbG93TmFtZTogdGhpcy5zZWxlY3RlZFdvcmtmbG93Lk5hbWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gZXhlY3V0ZSB0aGUgYXNrIGVuZHBvaW50IHdpdGggd29ya2Zsb3cgaW5wdXRcbiAgICAgIHRoaXMubWFrZUFza1JlcXVlc3QoXG4gICAgICAgIGlucHV0LFxuICAgICAgICB0aGlzLmFnZW50cyxcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25LZXksXG4gICAgICAgICcnLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbJ19pZCddLFxuICAgICAgICB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBtYWtlQXNrUmVxdWVzdChcbiAgICBpbnB1dE1zZzogc3RyaW5nLFxuICAgIGFnZW50czogYW55W10sXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBtc2c/OiBhbnksXG4gICAgY2hhdD86IGFueSxcbiAgICB3b3JrZmxvd0lkPzogc3RyaW5nLFxuICAgIHdvcmtmbG93X2lucHV0cz86IGFueVxuICApOiB2b2lkIHtcbiAgICB2YXIgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYWkvYXNrYDtcblxuICAgIHZhciBib2R5ID0ge1xuICAgICAgdXNlcl9xdWVzdGlvbjogaW5wdXRNc2csXG4gICAgICB1c2VyX2lkOiB0aGlzLnVzZXJJZCxcbiAgICAgIGJvdF9pZDogdGhpcy5ib3RJZCxcbiAgICAgIG1lc3NhZ2VfaWQ6IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZW5lcmF0ZUtleSgpLFxuICAgICAgc2Vzc2lvbl9pZDogdGhpcy5jb25TZXNzaW9uS2V5LFxuICAgICAgYWdlbnRzOiBhZ2VudHM/LmZpbHRlcigocCkgPT4gcC5zZWxlY3RlZCkubWFwKChwKSA9PiBwLmlkKSA/PyBbXSxcbiAgICAgIGNvbnZlcnNhdGlvbl9pZDogY29udmVyc2F0aW9uSWQsXG4gICAgICBmaXJzdF9uYW1lOiB0aGlzLmZpcnN0TmFtZSxcbiAgICAgIGxhc3RfbmFtZTogdGhpcy5sYXN0TmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtmbG93SWQpIHtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lkJ10gPSB3b3JrZmxvd0lkO1xuICAgICAgYm9keVsnd29ya2Zsb3dfaW5wdXRzJ10gPSB3b3JrZmxvd19pbnB1dHM7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyczogYW55ID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRoaXMuczI3VG9rZW4sXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgZXZlbnRVcmw6IHRoaXMuZXZlbnRVcmwsXG4gICAgICBldmVudFRva2VuOiB0aGlzLmV2ZW50VG9rZW4sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLndvcmtzcGFjZVRva2VuKSB7XG4gICAgICBoZWFkZXJzWyd3b3Jrc3BhY2VUb2tlbiddID0gdGhpcy53b3Jrc3BhY2VUb2tlbjtcbiAgICB9XG5cbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgdGhpcy5pczQwMSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4uZW1pdCgpO1xuXG4gICAgICAgICAgLy8gSWYgYG1zZ2AgYW5kIGBjaGF0YCBleGlzdCwgaGFuZGxlIHRoZW1cbiAgICAgICAgICBpZiAobXNnICYmIGNoYXQpIHtcbiAgICAgICAgICAgIHRoaXMubXNnID0gbXNnO1xuICAgICAgICAgICAgdGhpcy5jaGF0ID0gY2hhdDtcbiAgICAgICAgICAgIHRoaXMuaXNGZXRjaERhdGFGb3IgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlzNDAxID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgLy8gQWRkaXRpb25hbCByZXNwb25zZSBoYW5kbGluZyBpZiBuZWVkZWRcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogJywgZXJyKTtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBtYWtlQXNrUmVxdWVzdG9sZChcbiAgICBpbnB1dE1zZzogc3RyaW5nLFxuICAgIGFnZW50czogYW55W10sXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBtc2c/OiBhbnksXG4gICAgY2hhdD86IGFueSxcbiAgICB3b3JrZmxvd0lkPzogc3RyaW5nLFxuICAgIHdvcmtmbG93X2lucHV0cz86IGFueVxuICApOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9haS9hc2tgO1xuXG4gICAgY29uc3QgYm9keTogYW55ID0ge1xuICAgICAgdXNlcl9xdWVzdGlvbjogaW5wdXRNc2csXG4gICAgICB1c2VyX2lkOiB0aGlzLnVzZXJJZCxcbiAgICAgIGJvdF9pZDogdGhpcy5ib3RJZCxcbiAgICAgIG1lc3NhZ2VfaWQ6IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZW5lcmF0ZUtleSgpLFxuICAgICAgYWdlbnRzOiBhZ2VudHM/LmZpbHRlcigocCkgPT4gcC5zZWxlY3RlZCkubWFwKChwKSA9PiBwLmlkKSA/PyBbXSxcbiAgICAgIGNvbnZlcnNhdGlvbl9pZDogY29udmVyc2F0aW9uSWQsXG4gICAgICBmaXJzdF9uYW1lOiB0aGlzLmZpcnN0TmFtZSxcbiAgICAgIGxhc3RfbmFtZTogdGhpcy5sYXN0TmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtmbG93SWQpIHtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lkJ10gPSB3b3JrZmxvd0lkO1xuICAgICAgYm9keVsnd29ya2Zsb3dfaW5wdXRzJ10gPSB3b3JrZmxvd19pbnB1dHM7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuaHR0cC5wb3N0KHVybCwgYm9keSwgeyBoZWFkZXJzIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgLy8gQWRkaXRpb25hbCByZXNwb25zZSBoYW5kbGluZyBpZiBuZWVkZWRcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogJywgZXJyKTtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmlucHV0ID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gbnVsbDtcbiAgICB0aGlzLm9wZW5Xb3JrZmxvd0lucHV0ID0gZmFsc2U7XG4gICAgdGhpcy5pc1dvcmtmbG93T3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdlbmVyYXRlTWFya2Rvd24odGl0bGUsIG9iaikge1xuICAgIC8vIEluaXRpYWxpemUgbWFya2Rvd24gd2l0aCB0aGUgdGl0bGVcbiAgICBsZXQgbWFya2Rvd24gPSBgIyMgJHt0aXRsZX1cXG5gO1xuXG4gICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBvYmplY3QgYW5kIGFwcGVuZCB0aGUgZmllbGQgbmFtZXMgYW5kIHZhbHVlc1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIHZhciBrZXlfbGFiZWwgPVxuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuVHJpZ2dlci5JbnB1dFNjaGVtYS5maW5kKFxuICAgICAgICAgIChpbnB1dCkgPT4gaW5wdXQuSW5wdXRJZCA9PT0ga2V5XG4gICAgICAgICk/LkxhYmVsIHx8IGtleTtcbiAgICAgIG1hcmtkb3duICs9IGAtICoqJHtrZXlfbGFiZWx9Kio6ICR7dmFsdWV9XFxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2Rvd247XG4gIH1cblxuICBzaG93V29ya2Zsb3dIaXN0b3J5RGV0YWlscyh3b3JrZmxvd19pZCkge1xuICAgIGlmICghd29ya2Zsb3dfaWQpIHtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdGhpcy5jdXJyZW50V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuICAgICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJvdFNlcnZpY2UuZ2V0V29ya2Zsb3dFeGVjdXRpb25CeUlkKHdvcmtmbG93X2lkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMuQWN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHJlcy5BY3Rpb25zKSkge1xuICAgICAgICByZXMuQWN0aW9ucyA9IHJlcy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGlvbi5JbnNlcnRUaW1lU3RhbXApIHtcbiAgICAgICAgICAgIGFjdGlvbi5JbnNlcnRUaW1lU3RhbXAgPSBmb3JtYXRUaW1lU3RhbXBzKFxuICAgICAgICAgICAgICB0aGlzLnRpbWV6b25lLFxuICAgICAgICAgICAgICBhY3Rpb24uSW5zZXJ0VGltZVN0YW1wXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVzLkluc2VydFRpbWVTdGFtcCA9IGZvcm1hdFRpbWVTdGFtcHMoXG4gICAgICAgIHRoaXMudGltZXpvbmUsXG4gICAgICAgIHJlcy5JbnNlcnRUaW1lU3RhbXBcbiAgICAgICk7XG4gICAgICB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9IHJlcztcbiAgICAgIHRoaXMuc2hvd1dvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9IHRydWU7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZU1vZGFsKCkge1xuICAgIHRoaXMuc2hvd1dvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9IGZhbHNlO1xuICB9XG5cbiAgb2JqZWN0VG9BcnJheShvYmo6IGFueSk6IGFueVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoKGtleSkgPT4gKHsga2V5LCB2YWx1ZTogb2JqW2tleV0gfSkpO1xuICB9XG5cbiAgc3RhcnROZXdDb252ZXJzYXRpb24oKSB7XG4gICAgdGhpcy5jb252ZXJzYXRpb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQsIHRydWUpO1xuICAgIHRoaXMuY2hhdExvZyA9IFt0aGlzLmNoYXRMb2dbMF1dO1xuICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluaXRpYWxpemVTb2NrZXQoKTtcbiAgICB9LCAyMDApO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpbml0aWFsaXplU3BlZWNoUmVjb2duaXplcih0b2tlbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zcGVlY2hDb25maWcgPSBTcGVlY2hTREsuU3BlZWNoQ29uZmlnLmZyb21BdXRob3JpemF0aW9uVG9rZW4oXG4gICAgICB0b2tlbixcbiAgICAgIHRoaXMucmVnaW9uXG4gICAgKTtcbiAgICBjb25zdCBhdWRpb0NvbmZpZyA9IFNwZWVjaFNESy5BdWRpb0NvbmZpZy5mcm9tRGVmYXVsdE1pY3JvcGhvbmVJbnB1dCgpO1xuICAgIHRoaXMucmVjb2duaXplciA9IG5ldyBTcGVlY2hTREsuU3BlZWNoUmVjb2duaXplcihcbiAgICAgIHRoaXMuc3BlZWNoQ29uZmlnLFxuICAgICAgYXVkaW9Db25maWdcbiAgICApO1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnJlY29nbml6aW5nID0gKHMsIGUpID0+IHtcbiAgICAgIGlmIChlLnJlc3VsdC5yZWFzb24gPT09IFNwZWVjaFNESy5SZXN1bHRSZWFzb24uUmVjb2duaXppbmdTcGVlY2gpIHtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGUucmVzdWx0LnRleHQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWNvZ25pemluZzogJHtlLnJlc3VsdC50ZXh0fWApO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnJlY29nbml6ZWQgPSAocywgZSkgPT4ge1xuICAgICAgaWYgKGUucmVzdWx0LnJlYXNvbiA9PT0gU3BlZWNoU0RLLlJlc3VsdFJlYXNvbi5SZWNvZ25pemVkU3BlZWNoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBlLnJlc3VsdC50ZXh0O1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVjb2duaXplZDogJHtlLnJlc3VsdC50ZXh0fWApO1xuICAgICAgICB0aGlzLnRvZ2dsZVJlY29yZGluZygpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLmNhbmNlbGVkID0gKHMsIGUpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhbmNlbGVkOiAnLCBlLmVycm9yRGV0YWlscyk7XG4gICAgfTtcblxuICAgIHRoaXMucmVjb2duaXplci5zZXNzaW9uU3RvcHBlZCA9IChzLCBlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnU2Vzc2lvbiBzdG9wcGVkLicpO1xuICAgICAgdGhpcy5yZWNvZ25pemVyLnN0b3BDb250aW51b3VzUmVjb2duaXRpb25Bc3luYygpO1xuICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlUmVjb3JkaW5nKCkge1xuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSAhdGhpcy5pc1JlY29yZGluZztcblxuICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XG4gICAgICB0aGlzLnN0YXJ0UmVjb2duaXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wUmVjb2duaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBzdGFydFJlY29nbml0aW9uKCkge1xuICAgIHRoaXMucmVjb2duaXplci5zdGFydENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gIH1cblxuICBzdG9wUmVjb2duaXRpb24oKSB7XG4gICAgdGhpcy5yZWNvZ25pemVyLnN0b3BDb250aW51b3VzUmVjb2duaXRpb25Bc3luYygpO1xuICB9XG5cbiAgY2hlY2tGb3JDb3AyOUJvdElkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJvdElkID09ICc2NmZhM2YyNzZjNWQ3MWUyNzE3YmZlYTgnIHx8XG4gICAgICB0aGlzLmJvdElkID09ICc2NzE2MzM1NDU2NTJkZDc4ZWZlYzg0OGQnXG4gICAgKTtcbiAgfVxuXG4gIGdldExhdGVzdFRpbWUodGltZSk6IHN0cmluZyB7XG4gICAgaWYgKHRpbWUpIHtcbiAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHtcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgIH0pOyAvLyByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiAnc2hvcnRUaW1lJyBmb3JtYXRcbiAgfVxufVxuIl19