cdk-iam-floyd
Version:
AWS IAM policy statement generator with fluent interface for AWS CDK
1,561 lines • 158 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cleanrooms = void 0;
const shared_1 = require("../../shared");
/**
* Statement provider for service [cleanrooms](https://docs.aws.amazon.com/service-authorization/latest/reference/list_cleanrooms.html).
*
* @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
*/
class Cleanrooms extends shared_1.PolicyStatement {
/**
* Grants permission to view details of analysisTemplates associated to the collaboration
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_BatchGetCollaborationAnalysisTemplate.html
*/
toBatchGetCollaborationAnalysisTemplate() {
return this.to('BatchGetCollaborationAnalysisTemplate');
}
/**
* Grants permission to view details for schemas
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_BatchGetSchema.html
*/
toBatchGetSchema() {
return this.to('BatchGetSchema');
}
/**
* Grants permission to view analysis rules associated with schemas
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_BatchGetSchemaAnalysisRule.html
*/
toBatchGetSchemaAnalysisRule() {
return this.to('BatchGetSchemaAnalysisRule');
}
/**
* Grants permission to create a new analysis template
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateAnalysisTemplate.html
*/
toCreateAnalysisTemplate() {
return this.to('CreateAnalysisTemplate');
}
/**
* Grants permission to create a new collaboration, a shared data collaboration environment
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateCollaboration.html
*/
toCreateCollaboration() {
return this.to('CreateCollaboration');
}
/**
* Grants permission to create a change request in a collaboration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateCollaborationChangeRequest.html
*/
toCreateCollaborationChangeRequest() {
return this.to('CreateCollaborationChangeRequest');
}
/**
* Grants permission to link a Cleanrooms ML configured audience model with a collaboration by creating a new association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredAudienceModelAssociation.html
*/
toCreateConfiguredAudienceModelAssociation() {
return this.to('CreateConfiguredAudienceModelAssociation');
}
/**
* Grants permission to create a new configured table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredTable.html
*/
toCreateConfiguredTable() {
return this.to('CreateConfiguredTable');
}
/**
* Grants permission to create a analysis rule for a configured table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredTableAnalysisRule.html
*/
toCreateConfiguredTableAnalysisRule() {
return this.to('CreateConfiguredTableAnalysisRule');
}
/**
* Grants permission to link a configured table with a collaboration by creating a new association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredTableAssociation.html
*/
toCreateConfiguredTableAssociation() {
return this.to('CreateConfiguredTableAssociation');
}
/**
* Grants permission to create an analysis rule for a configured table association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredTableAssociationAnalysisRule.html
*/
toCreateConfiguredTableAssociationAnalysisRule() {
return this.to('CreateConfiguredTableAssociationAnalysisRule');
}
/**
* Grants permission to link an id mapping workflow with a collaboration by creating a new id mapping table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateIdMappingTable.html
*/
toCreateIdMappingTable() {
return this.to('CreateIdMappingTable');
}
/**
* Grants permission to link an AWS Entity Resolution Id Namespace with a collaboration by creating a new association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateIdNamespaceAssociation.html
*/
toCreateIdNamespaceAssociation() {
return this.to('CreateIdNamespaceAssociation');
}
/**
* Grants permission to create a new intermediate table in a membership
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateIntermediateTable.html
*/
toCreateIntermediateTable() {
return this.to('CreateIntermediateTable');
}
/**
* Grants permission to create an analysis rule for an intermediate table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateIntermediateTableAnalysisRule.html
*/
toCreateIntermediateTableAnalysisRule() {
return this.to('CreateIntermediateTableAnalysisRule');
}
/**
* Grants permission to join collaborations by creating a membership
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateMembership.html
*/
toCreateMembership() {
return this.to('CreateMembership');
}
/**
* Grants permission to create a new privacy budget template
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreatePrivacyBudgetTemplate.html
*/
toCreatePrivacyBudgetTemplate() {
return this.to('CreatePrivacyBudgetTemplate');
}
/**
* Grants permission to delete an existing analysis template
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteAnalysisTemplate.html
*/
toDeleteAnalysisTemplate() {
return this.to('DeleteAnalysisTemplate');
}
/**
* Grants permission to delete an existing collaboration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteCollaboration.html
*/
toDeleteCollaboration() {
return this.to('DeleteCollaboration');
}
/**
* Grants permission to delete an existing configured audience model association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredAudienceModelAssociation.html
*/
toDeleteConfiguredAudienceModelAssociation() {
return this.to('DeleteConfiguredAudienceModelAssociation');
}
/**
* Grants permission to delete a configured table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredTable.html
*/
toDeleteConfiguredTable() {
return this.to('DeleteConfiguredTable');
}
/**
* Grants permission to delete an existing analysis rule
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredTableAnalysisRule.html
*/
toDeleteConfiguredTableAnalysisRule() {
return this.to('DeleteConfiguredTableAnalysisRule');
}
/**
* Grants permission to remove a configured table association from a collaboration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredTableAssociation.html
*/
toDeleteConfiguredTableAssociation() {
return this.to('DeleteConfiguredTableAssociation');
}
/**
* Grants permission to delete an existing configured table association analysis rule
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredTableAssociationAnalysisRule.html
*/
toDeleteConfiguredTableAssociationAnalysisRule() {
return this.to('DeleteConfiguredTableAssociationAnalysisRule');
}
/**
* Grants permission to remove an id mapping table from a collaboration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteIdMappingTable.html
*/
toDeleteIdMappingTable() {
return this.to('DeleteIdMappingTable');
}
/**
* Grants permission to remove an Id Namespace Association from a collaboration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteIdNamespaceAssociation.html
*/
toDeleteIdNamespaceAssociation() {
return this.to('DeleteIdNamespaceAssociation');
}
/**
* Grants permission to remove an intermediate table from a collaboration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteIntermediateTable.html
*/
toDeleteIntermediateTable() {
return this.to('DeleteIntermediateTable');
}
/**
* Grants permission to delete an existing analysis rule for an intermediate table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteIntermediateTableAnalysisRule.html
*/
toDeleteIntermediateTableAnalysisRule() {
return this.to('DeleteIntermediateTableAnalysisRule');
}
/**
* Grants permission to delete members from a collaboration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteMember.html
*/
toDeleteMember() {
return this.to('DeleteMember');
}
/**
* Grants permission to leave collaborations by deleting a membership
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteMembership.html
*/
toDeleteMembership() {
return this.to('DeleteMembership');
}
/**
* Grants permission to delete an existing privacy budget template
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeletePrivacyBudgetTemplate.html
*/
toDeletePrivacyBudgetTemplate() {
return this.to('DeletePrivacyBudgetTemplate');
}
/**
* Grants permission to invalidate an intermediate table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DisallowIntermediateTable.html
*/
toDisallowIntermediateTable() {
return this.to('DisallowIntermediateTable');
}
/**
* Grants permission to get an analysis log export
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetAnalysisLogExport.html
*/
toGetAnalysisLogExport() {
return this.to('GetAnalysisLogExport');
}
/**
* Grants permission to view details for an analysis template
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetAnalysisTemplate.html
*/
toGetAnalysisTemplate() {
return this.to('GetAnalysisTemplate');
}
/**
* Grants permission to view details for a collaboration
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaboration.html
*/
toGetCollaboration() {
return this.to('GetCollaboration');
}
/**
* Grants permission to view details for an analysis template within a collaboration
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationAnalysisTemplate.html
*/
toGetCollaborationAnalysisTemplate() {
return this.to('GetCollaborationAnalysisTemplate');
}
/**
* Grants permission to get a change request in a collaboration
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationChangeRequest.html
*/
toGetCollaborationChangeRequest() {
return this.to('GetCollaborationChangeRequest');
}
/**
* Grants permission to view details for a configured audience model association within a collaboration
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationConfiguredAudienceModelAssociation.html
*/
toGetCollaborationConfiguredAudienceModelAssociation() {
return this.to('GetCollaborationConfiguredAudienceModelAssociation');
}
/**
* Grants permission to get id namespace association within a collaboration
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationIdNamespaceAssociation.html
*/
toGetCollaborationIdNamespaceAssociation() {
return this.to('GetCollaborationIdNamespaceAssociation');
}
/**
* Grants permission to view details for a privacy budget template within a collaboration
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationPrivacyBudgetTemplate.html
*/
toGetCollaborationPrivacyBudgetTemplate() {
return this.to('GetCollaborationPrivacyBudgetTemplate');
}
/**
* Grants permission to view details for a configured audience model association
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredAudienceModelAssociation.html
*/
toGetConfiguredAudienceModelAssociation() {
return this.to('GetConfiguredAudienceModelAssociation');
}
/**
* Grants permission to view details for a configured table
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredTable.html
*/
toGetConfiguredTable() {
return this.to('GetConfiguredTable');
}
/**
* Grants permission to view analysis rules for a configured table
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredTableAnalysisRule.html
*/
toGetConfiguredTableAnalysisRule() {
return this.to('GetConfiguredTableAnalysisRule');
}
/**
* Grants permission to view details for a configured table association
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredTableAssociation.html
*/
toGetConfiguredTableAssociation() {
return this.to('GetConfiguredTableAssociation');
}
/**
* Grants permission to view analysis rules for a configured table association
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredTableAssociationAnalysisRule.html
*/
toGetConfiguredTableAssociationAnalysisRule() {
return this.to('GetConfiguredTableAssociationAnalysisRule');
}
/**
* Grants permission to view details of an id mapping table
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetIdMappingTable.html
*/
toGetIdMappingTable() {
return this.to('GetIdMappingTable');
}
/**
* Grants permission to view details of an id namespace association
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetIdNamespaceAssociation.html
*/
toGetIdNamespaceAssociation() {
return this.to('GetIdNamespaceAssociation');
}
/**
* Grants permission to view details of an intermediate table
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetIntermediateTable.html
*/
toGetIntermediateTable() {
return this.to('GetIntermediateTable');
}
/**
* Grants permission to view analysis rules for an intermediate table
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetIntermediateTableAnalysisRule.html
*/
toGetIntermediateTableAnalysisRule() {
return this.to('GetIntermediateTableAnalysisRule');
}
/**
* Grants permission to view details about a membership
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetMembership.html
*/
toGetMembership() {
return this.to('GetMembership');
}
/**
* Grants permission to view details for a privacy budget template
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetPrivacyBudgetTemplate.html
*/
toGetPrivacyBudgetTemplate() {
return this.to('GetPrivacyBudgetTemplate');
}
/**
* Grants permission to view a protected job
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetProtectedJob.html
*/
toGetProtectedJob() {
return this.to('GetProtectedJob');
}
/**
* Grants permission to view a protected query
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetProtectedQuery.html
*/
toGetProtectedQuery() {
return this.to('GetProtectedQuery');
}
/**
* Grants permission to view details for a schema
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetSchema.html
*/
toGetSchema() {
return this.to('GetSchema');
}
/**
* Grants permission to view analysis rules associated with a schema
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetSchemaAnalysisRule.html
*/
toGetSchemaAnalysisRule() {
return this.to('GetSchemaAnalysisRule');
}
/**
* Grants permission to list analysis log exports
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListAnalysisLogExports.html
*/
toListAnalysisLogExports() {
return this.to('ListAnalysisLogExports');
}
/**
* Grants permission to list available analysis templates
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListAnalysisTemplates.html
*/
toListAnalysisTemplates() {
return this.to('ListAnalysisTemplates');
}
/**
* Grants permission to list available analysis templates within a collaboration
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationAnalysisTemplates.html
*/
toListCollaborationAnalysisTemplates() {
return this.to('ListCollaborationAnalysisTemplates');
}
/**
* Grants permission to list change requests in a collaboration
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationChangeRequests.html
*/
toListCollaborationChangeRequests() {
return this.to('ListCollaborationChangeRequests');
}
/**
* Grants permission to list available configured audience model association within a collaboration
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationConfiguredAudienceModelAssociations.html
*/
toListCollaborationConfiguredAudienceModelAssociations() {
return this.to('ListCollaborationConfiguredAudienceModelAssociations');
}
/**
* Grants permission to list id namespace within a collaboration
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationIdNamespaceAssociations.html
*/
toListCollaborationIdNamespaceAssociations() {
return this.to('ListCollaborationIdNamespaceAssociations');
}
/**
* Grants permission to list available privacy budget templates within a collaboration
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationPrivacyBudgetTemplates.html
*/
toListCollaborationPrivacyBudgetTemplates() {
return this.to('ListCollaborationPrivacyBudgetTemplates');
}
/**
* Grants permission to list privacy budgets within a collaboration
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationPrivacyBudgets.html
*/
toListCollaborationPrivacyBudgets() {
return this.to('ListCollaborationPrivacyBudgets');
}
/**
* Grants permission to list available collaborations
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborations.html
*/
toListCollaborations() {
return this.to('ListCollaborations');
}
/**
* Grants permission to list available configured audience model associations for a membership
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListConfiguredAudienceModelAssociations.html
*/
toListConfiguredAudienceModelAssociations() {
return this.to('ListConfiguredAudienceModelAssociations');
}
/**
* Grants permission to list available configured table associations for a membership
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListConfiguredTableAssociations.html
*/
toListConfiguredTableAssociations() {
return this.to('ListConfiguredTableAssociations');
}
/**
* Grants permission to list available configured tables
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListConfiguredTables.html
*/
toListConfiguredTables() {
return this.to('ListConfiguredTables');
}
/**
* Grants permission to list available id mapping tables for a membership
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListIdMappingTables.html
*/
toListIdMappingTables() {
return this.to('ListIdMappingTables');
}
/**
* Grants permission to list entity resolution data associations for a membership
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListIdNamespaceAssociations.html
*/
toListIdNamespaceAssociations() {
return this.to('ListIdNamespaceAssociations');
}
/**
* Grants permission to list versions of an intermediate table
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListIntermediateTableVersions.html
*/
toListIntermediateTableVersions() {
return this.to('ListIntermediateTableVersions');
}
/**
* Grants permission to list intermediate tables for a membership
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListIntermediateTables.html
*/
toListIntermediateTables() {
return this.to('ListIntermediateTables');
}
/**
* Grants permission to list the members of a collaboration
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListMembers.html
*/
toListMembers() {
return this.to('ListMembers');
}
/**
* Grants permission to list available memberships
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListMemberships.html
*/
toListMemberships() {
return this.to('ListMemberships');
}
/**
* Grants permission to list available privacy budget templates
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListPrivacyBudgetTemplates.html
*/
toListPrivacyBudgetTemplates() {
return this.to('ListPrivacyBudgetTemplates');
}
/**
* Grants permission to list available privacy budgets
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListPrivacyBudgets.html
*/
toListPrivacyBudgets() {
return this.to('ListPrivacyBudgets');
}
/**
* Grants permission to list protected jobs
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListProtectedJobs.html
*/
toListProtectedJobs() {
return this.to('ListProtectedJobs');
}
/**
* Grants permission to list protected queries
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListProtectedQueries.html
*/
toListProtectedQueries() {
return this.to('ListProtectedQueries');
}
/**
* Grants permission to view available schemas for a collaboration
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListSchemas.html
*/
toListSchemas() {
return this.to('ListSchemas');
}
/**
* Grants permission to list tags for a resource
*
* Access Level: List
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListTagsForResource.html
*/
toListTagsForResource() {
return this.to('ListTagsForResource');
}
/**
* Grants permission to start an Id Mapping Job in AWS Entity Resolution to generate id mapping results in cleanrooms collaboration.
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_PopulateIdMappingTable.html
*/
toPopulateIdMappingTable() {
return this.to('PopulateIdMappingTable');
}
/**
* Grants permission to populate an intermediate table by executing its stored analysis
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_PopulateIntermediateTable.html
*/
toPopulateIntermediateTable() {
return this.to('PopulateIntermediateTable');
}
/**
* Grants permission to preview privacy budget template settings
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_PreviewPrivacyImpact.html
*/
toPreviewPrivacyImpact() {
return this.to('PreviewPrivacyImpact');
}
/**
* Grants permission to start an analysis log export
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_StartAnalysisLogExport.html
*/
toStartAnalysisLogExport() {
return this.to('StartAnalysisLogExport');
}
/**
* Grants permission to start protected jobs
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_StartProtectedJob.html
*/
toStartProtectedJob() {
return this.to('StartProtectedJob');
}
/**
* Grants permission to start protected queries
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_StartProtectedQuery.html
*/
toStartProtectedQuery() {
return this.to('StartProtectedQuery');
}
/**
* Grants permission to tag a resource
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_TagResource.html
*/
toTagResource() {
return this.to('TagResource');
}
/**
* Grants permission to untag a resource
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UntagResource.html
*/
toUntagResource() {
return this.to('UntagResource');
}
/**
* Grants permission to update details of the analysis template
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateAnalysisTemplate.html
*/
toUpdateAnalysisTemplate() {
return this.to('UpdateAnalysisTemplate');
}
/**
* Grants permission to update details of the collaboration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateCollaboration.html
*/
toUpdateCollaboration() {
return this.to('UpdateCollaboration');
}
/**
* Grants permission to update a change request in a collaboration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateCollaborationChangeRequest.html
*/
toUpdateCollaborationChangeRequest() {
return this.to('UpdateCollaborationChangeRequest');
}
/**
* Grants permission to update a configured audience model association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredAudienceModelAssociation.html
*/
toUpdateConfiguredAudienceModelAssociation() {
return this.to('UpdateConfiguredAudienceModelAssociation');
}
/**
* Grants permission to update an existing configured table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTable.html
*/
toUpdateConfiguredTable() {
return this.to('UpdateConfiguredTable');
}
/**
* Grants permission to update analysis rules for a configured table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTableAnalysisRule.html
*/
toUpdateConfiguredTableAnalysisRule() {
return this.to('UpdateConfiguredTableAnalysisRule');
}
/**
* Grants permission to update a configured table association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTableAssociation.html
*/
toUpdateConfiguredTableAssociation() {
return this.to('UpdateConfiguredTableAssociation');
}
/**
* Grants permission to update analysis rules for a configured table association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTableAssociationAnalysisRule.html
*/
toUpdateConfiguredTableAssociationAnalysisRule() {
return this.to('UpdateConfiguredTableAssociationAnalysisRule');
}
/**
* Grants permission to update an id mapping table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateIdMappingTable.html
*/
toUpdateIdMappingTable() {
return this.to('UpdateIdMappingTable');
}
/**
* Grants permission to update a entity resolution input association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateIdNamespaceAssociation.html
*/
toUpdateIdNamespaceAssociation() {
return this.to('UpdateIdNamespaceAssociation');
}
/**
* Grants permission to update an intermediate table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateIntermediateTable.html
*/
toUpdateIntermediateTable() {
return this.to('UpdateIntermediateTable');
}
/**
* Grants permission to update an analysis rule for an intermediate table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateIntermediateTableAnalysisRule.html
*/
toUpdateIntermediateTableAnalysisRule() {
return this.to('UpdateIntermediateTableAnalysisRule');
}
/**
* Grants permission to update details of a membership
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateMembership.html
*/
toUpdateMembership() {
return this.to('UpdateMembership');
}
/**
* Grants permission to update details of the privacy budget template
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdatePrivacyBudgetTemplate.html
*/
toUpdatePrivacyBudgetTemplate() {
return this.to('UpdatePrivacyBudgetTemplate');
}
/**
* Grants permission to update protected jobs
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateProtectedJob.html
*/
toUpdateProtectedJob() {
return this.to('UpdateProtectedJob');
}
/**
* Grants permission to update protected queries
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateProtectedQuery.html
*/
toUpdateProtectedQuery() {
return this.to('UpdateProtectedQuery');
}
/**
* Grants permission to access a collaboration in the context of Clean Rooms ML custom models
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/ml-behaviors-byom.html#ml-behaviors-byom-membership-collaboration-access
*/
toPassCollaboration() {
return this.to('PassCollaboration');
}
/**
* Grants permission to access a membership in the context of Clean Rooms ML custom models
*
* Access Level: Read
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/ml-behaviors-byom.html#ml-behaviors-byom-membership-collaboration-access
*/
toPassMembership() {
return this.to('PassMembership');
}
/**
* Grants permission to update the allowed columns of an existing configured table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTable.html
*/
toUpdateConfiguredTableAllowedColumns() {
return this.to('UpdateConfiguredTableAllowedColumns');
}
/**
* Grants permission to update the table reference of an existing configured table
*
* Access Level: Write
*
* https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTable.html
*/
toUpdateConfiguredTableReference() {
return this.to('UpdateConfiguredTableReference');
}
/**
* Adds a resource of type analysistemplate to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param membershipId - Identifier for the membershipId.
* @param analysisTemplateId - Identifier for the analysisTemplateId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onAnalysistemplate(membershipId, analysisTemplateId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/analysistemplate/${analysisTemplateId}`);
}
/**
* Adds a resource of type collaboration to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param collaborationId - Identifier for the collaborationId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onCollaboration(collaborationId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:collaboration/${collaborationId}`);
}
/**
* Adds a resource of type configuredaudiencemodelassociation to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param membershipId - Identifier for the membershipId.
* @param configuredAudienceModelAssociationId - Identifier for the configuredAudienceModelAssociationId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onConfiguredaudiencemodelassociation(membershipId, configuredAudienceModelAssociationId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/configuredaudiencemodelassociation/${configuredAudienceModelAssociationId}`);
}
/**
* Adds a resource of type configuredtable to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param configuredTableId - Identifier for the configuredTableId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onConfiguredtable(configuredTableId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:configuredtable/${configuredTableId}`);
}
/**
* Adds a resource of type configuredtableassociation to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param membershipId - Identifier for the membershipId.
* @param configuredTableAssociationId - Identifier for the configuredTableAssociationId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onConfiguredtableassociation(membershipId, configuredTableAssociationId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/configuredtableassociation/${configuredTableAssociationId}`);
}
/**
* Adds a resource of type idmappingtable to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param membershipId - Identifier for the membershipId.
* @param idMappingTableId - Identifier for the idMappingTableId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onIdmappingtable(membershipId, idMappingTableId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/idmappingtable/${idMappingTableId}`);
}
/**
* Adds a resource of type idnamespaceassociation to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param membershipId - Identifier for the membershipId.
* @param idNamespaceAssociationId - Identifier for the idNamespaceAssociationId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onIdnamespaceassociation(membershipId, idNamespaceAssociationId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/idnamespaceassociation/${idNamespaceAssociationId}`);
}
/**
* Adds a resource of type intermediatetable to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param membershipId - Identifier for the membershipId.
* @param intermediateTableId - Identifier for the intermediateTableId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onIntermediatetable(membershipId, intermediateTableId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/intermediatetable/${intermediateTableId}`);
}
/**
* Adds a resource of type membership to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param membershipId - Identifier for the membershipId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onMembership(membershipId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}`);
}
/**
* Adds a resource of type privacybudgettemplate to the statement
*
* https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
*
* @param membershipId - Identifier for the membershipId.
* @param privacyBudgetTemplateId - Identifier for the privacyBudgetTemplateId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onPrivacybudgettemplate(membershipId, privacyBudgetTemplateId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/privacybudgettemplate/${privacyBudgetTemplateId}`);
}
/**
* Filters access by the tags that are passed in the request
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag
*
* Applies to actions:
* - .toCreateAnalysisTemplate()
* - .toCreateCollaboration()
* - .toCreateCollaborationChangeRequest()
* - .toCreateConfiguredAudienceModelAssociation()
* - .toCreateConfiguredTable()
* - .toCreateConfiguredTableAssociation()
* - .toCreateConfiguredTableAssociationAnalysisRule()
* - .toCreateIdMappingTable()
* - .toCreateIdNamespaceAssociation()
* - .toCreateIntermediateTable()
* - .toCreateMembership()
* - .toCreatePrivacyBudgetTemplate()
* - .toTagResource()
*
* @param tagKey The tag key to check
* @param value The value(s) to check
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
*/
ifAwsRequestTag(tagKey, value, operator) {
return this.if(`aws:RequestTag/${tagKey}`, value, operator ?? 'StringLike');
}
/**
* Filters access by the tags associated with the resource
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag
*
* Applies to actions:
* - .toBatchGetCollaborationAnalysisTemplate()
* - .toBatchGetSchema()
* - .toBatchGetSchemaAnalysisRule()
* - .toCreateAnalysisTemplate()
* - .toCreateCollaboration()
* - .toCreateCollaborationChangeRequest()
* - .toCreateConfiguredAudienceModelAssociation()
* - .toCreateConfiguredTable()
* - .toCreateConfiguredTableAnalysisRule()
* - .toCreateConfiguredTableAssociation()
* - .toCreateConfiguredTableAssociationAnalysisRule()
* - .toCreateIdMappingTable()
* - .toCreateIdNamespaceAssociation()
* - .toCreateIntermediateTable()
* - .toCreateIntermediateTableAnalysisRule()
* - .toCreateMembership()
* - .toCreatePrivacyBudgetTemplate()
* - .toDeleteAnalysisTemplate()
* - .toDeleteCollaboration()
* - .toDeleteConfiguredAudienceModelAssociation()
* - .toDeleteConfiguredTable()
* - .toDeleteConfiguredTableAnalysisRule()
* - .toDeleteConfiguredTableAssociation()
* - .toDeleteConfiguredTableAssociationAnalysisRule()
* - .toDeleteIdMappingTable()
* - .toDeleteIdNamespaceAssociation()
* - .toDeleteIntermediateTable()
* - .toDeleteIntermediateTableAnalysisRule()
* - .toDeleteMember()
* - .toDeleteMembership()
* - .toDeletePrivacyBudgetTemplate()
* - .toDisallowIntermediateTable()
* - .toGetAnalysisLogExport()
* - .toGetAnalysisTemplate()
* - .toGetCollaboration()
* - .toGetCollaborationAnalysisTemplate()
* - .toGetCollaborationChangeRequest()
* - .toGetCollaborationConfiguredAudienceModelAssociation()
* - .toGetCollaborationIdNamespaceAssociation()
* - .toGetCollaborationPrivacyBudgetTemplate()
* - .toGetConfiguredAudienceModelAssociation()
* - .toGetConfiguredTable()
* - .toGetConfiguredTableAnalysisRule()
* - .toGetConfiguredTableAssociation()
* - .toGetConfiguredTableAssociationAnalysisRule()
* - .toGetIdMappingTable()
* - .toGetIdNamespaceAssociation()
* - .toGetIntermediateTable()
* - .toGetIntermediateTableAnalysisRule()
* - .toGetMembership()
* - .toGetPrivacyBudgetTemplate()
* - .toGetProtectedJob()
* - .toGetProtectedQuery()
* - .toGetSchema()
* - .toGetSchemaAnalysisRule()
* - .toListAnalysisLogExports()
* - .toListAnalysisTemplates()
* - .toListCollaborationAnalysisTemplates()
* - .toListCollaborationChangeRequests()
* - .toListCollaborationConfiguredAudienceModelAssociations()
* - .toListCollaborationIdNamespaceAssociations()
* - .toListCollaborationPrivacyBudgetTemplates()
* - .toListCollaborationPrivacyBudgets()
* - .toListConfiguredAudienceModelAssociations()
* - .toListConfiguredTableAssociations()
* - .toListIdMappingTables()
* - .toListIdNamespaceAssociations()
* - .toListIntermediateTableVersions()
* - .toListIntermediateTables()
* - .toListMembers()
* - .toListPrivacyBudgetTemplates()
* - .toListPrivacyBudgets()
* - .toListProtectedJobs()
* - .toListProtectedQueries()
* - .toListSchemas()
* - .toListTagsForResource()
* - .toPopulateIdMappingTable()
* - .toPopulateIntermediateTable()
* - .toPreviewPrivacyImpact()
* - .toStartAnalysisLogExport()
* - .toStartProtectedJob()
* - .toStartProtectedQuery()
* - .toTagResource()
* - .toUntagResource()
* - .toUpdateAnalysisTemplate()
* - .toUpdateCollaboration()
* - .toUpdateCollaborationChangeRequest()
* - .toUpdateConfiguredAudienceModelAssociation()
* - .toUpdateConfiguredTable()
* - .toUpdateConfiguredTableAnalysisRule()
* - .toUpdateConfiguredTableAssociation()
* - .toUpdateConfiguredTableAssociationAnalysisRule()
* - .toUpdateIdMappingTable()
* - .toUpdateIdNamespaceAssociation()
* - .toUpdateIntermediateTable()
* - .toUpdateIntermediateTableAnalysisRule()
* - .toUpdateMembership()
* - .toUpdatePrivacyBudgetTemplate()
* - .toUpdateProtectedJob()
* - .toUpdateProtectedQuery()
* - .toPassCollaboration()
* - .toPassMembership()
* - .toUpdateConfiguredTableAllowedColumns()
* - .toUpdateConfiguredTableReference()
*
* Applies to resource types:
* - analysistemplate
* - collaboration
* - configuredaudiencemodelassociation
* - configuredtable
* - configuredtableassociation
* - idmappingtable
* - idnamespaceassociation
* - intermediatetable
* - membership
* - privacybudgettemplate
*
* @param tagKey The tag key to check
* @param value The value(s) to check
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
*/
ifAwsResourceTag(tagKey, value, operator) {
return this.if(`aws:ResourceTag/${tagKey}`, value, operator ?? 'StringLike');
}
/**
* Filters access by the tag keys that are passed in the request
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys
*
* Applies to actions:
* - .toCreateAnalysisTemplate()
* - .toCreateCollaboration()
* - .toCreateCollaborationChangeRequest()
* - .toCreateConfiguredAudienceModelAssociation()
* - .toCreateConfiguredTable()
* - .toCreateConfiguredTableAssociation()
* - .toCreateConfiguredTableAssociationAnalysisRule()
* - .toCreateIdMappingTable()
* - .toCreateIdNamespaceAssociation()
* - .toCreateIntermediateTable()
* - .toCreateMembership()
* - .toCreatePrivacyBudgetTemplate()
* - .toTagResource()
* - .toUntagResource()
*
* @param value The value(s) to check
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
*/
ifAwsTagKeys(value, operator) {
return this.if(`aws:TagKeys`, value, operator ?? 'StringLike');
}
/**
* Statement provider for service [cleanrooms](https://docs.aws.amazon.com/service-authorization/latest/reference/list_cleanrooms.html).
*
*/
constructor(props) {
super(props);
this.servicePrefix = 'cleanrooms';
this.accessLevelList = {
Read: [
'BatchGetCollaborationAnalysisTemplate',
'BatchGetSchema',
'BatchGetSchemaAnalysisRule',
'GetAnalysisLogExport',
'GetAnalysisTemplate',
'GetCollaboration',
'GetCollaborationAnalysisTemplate',
'GetCollaborationChangeRequest',
'GetCollaborationConfiguredAudienceModelAssociation',
'GetCollaborationIdNamespaceAssociation',
'GetCollaborationPrivacyBudgetTemplate',
'GetConfiguredAudienceModelAssociation',
'GetConfiguredTable',
'GetConfiguredTableAnalysisRule',
'GetConfiguredTableAssociation',
'GetConfiguredTableAssociationAnalysisRule',
'GetIdMappingTable',
'GetIdNamespaceAssociation',
'GetIntermediateTable',
'GetIntermediateTableAnalysisRule',
'GetMembership',
'GetPrivacyBudgetTemplate',
'GetProtectedJob',
'GetProtectedQuery',
'GetSchema',
'GetSchemaAnalysisRule',
'PreviewPrivacyImpact',
'PassCollaboration',
'PassMembership'
],
Write: [
'CreateAnalysisTemplate',
'CreateCollaboration',
'CreateCollaborationChangeRequest',
'CreateConfiguredAudienceModelAssociation',
'CreateConfiguredTable',
'CreateConfiguredTableAnalysisRule',
'CreateConfiguredTableAssociation',
'CreateConfiguredTableAssociationAnalysisRule',
'CreateIdMappingTable',
'CreateIdNamespaceAssociation',
'CreateIntermediateTable',
'CreateIntermediateTableAnalysisRule',
'CreateMembership',
'CreatePrivacyBudgetTemplate',
'DeleteAnalysisTemplate',
'DeleteCollaboration',
'DeleteConfiguredAudienceModelAssociation',
'DeleteConfiguredTable',
'DeleteConfiguredTableAnalysisRule',
'DeleteConfiguredTableAssociation',
'DeleteConfiguredTableAssociationAnalysisRule',
'DeleteIdMappingTable',
'DeleteIdNamespaceAssociation',
'DeleteIntermediateTable',
'DeleteIntermediateTableAnalysisRule',
'DeleteMember',
'DeleteMembership',
'DeletePrivacyBudgetTemplate',
'DisallowIntermediateTable',
'PopulateIdMappingTable',
'PopulateIntermediateTable',
'StartAnalysisLogExport',
'StartProtectedJob',
'StartProtectedQuery',
'TagResource',
'UntagResource',
'UpdateAnalysisTemplate',
'UpdateCollaboration',
'UpdateCollaborationChangeRequest',
'UpdateConfiguredAudienceModelAssociation',
'UpdateConfiguredTable',
'UpdateConfiguredTableAnalysisRule',
'UpdateConfiguredTableAssociation',
'UpdateConfiguredTableAssociationAnalysisRule',
'UpdateIdMappingTable',
'UpdateIdNamespaceAssociation',
'UpdateIntermediateTable',
'UpdateIntermediateTableAnalysisRule',
'UpdateMembership',
'UpdatePrivacyBudgetTemplate',
'UpdateProtectedJob',
'UpdateProtectedQuery',
'UpdateConfiguredTableAllowedColumns',
'UpdateConfiguredTableReference'
],
List: [
'ListAnalysisLogExports',
'ListAnalysisTemplates',
'ListCollaborationAnalysisTemplates',
'ListCollaborationChangeRequests',
'ListCollaborationConfiguredAudienceModelAssociations',
'ListCollaborationIdNamespaceAssociations',
'ListCollaborationPrivacyBudgetTemplates',
'ListCollaborationPrivacyBudgets',
'ListCollaborations',
'ListConfiguredAudienceModelAssociations',
'ListConfiguredTableAssociations',
'ListConfiguredTables',
'ListIdMappingTables',
'ListIdNamespaceAssociations',
'ListIntermediateTableVersions',
'ListIntermediateTables',
'ListMembers',
'ListMemberships',
'ListPrivacyBudgetTemplates',
'ListPrivacyBudgets',
'ListProtectedJobs',
'ListProtectedQueries',
'ListSchemas',
'ListTagsForResource'
],
Tagging: [
'TagResource',
'UntagResource'
]
};
}
}
exports.Cleanrooms = Cleanrooms;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW5yb29tcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsZWFucm9vbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXlEO0FBR3pEOzs7O0dBSUc7QUFDSCxNQUFhLFVBQVcsU0FBUSx3QkFBZTtJQUc3Qzs7Ozs7O09BTUc7SUFDSSx1Q0FBdUM7UUFDNUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksNEJBQTRCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx3QkFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksa0NBQWtDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSwwQ0FBMEM7UUFDL0MsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHVCQUF1QjtRQUM1QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUNBQW1DO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEVBQUUs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O2dCQUNuQixxQkFBcUI7Z0JBQ3JCLGFBQWE7Z0JBQ2IsZUFBZTtnQkFDZix3QkFBd0I7Z0JBQ3hCLHFCQUFxQjtnQkFDckIsa0NBQWtDO2dCQUNsQywwQ0FBMEM7Z0JBQzFDLHVCQUF1QjtnQkFDdkIsbUNBQW1DO2dCQUNuQyxrQ0FBa0M7Z0JBQ2xDLDhDQUE4QztnQkFDOUMsc0JBQXNCO2dCQUN0Qiw4QkFBOEI7Z0JBQzlCLHlCQUF5QjtnQkFDekIscUNBQXFDO2dCQUNyQyxrQkFBa0I7Z0JBQ2xCLDZCQUE2QjtnQkFDN0Isb0JBQW9CO2dCQUNwQixzQkFBc0I7Z0JBQ3RCLHFDQUFxQztnQkFDckMsZ0NBQWdDO2FBQ2pDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLHdCQUF3QjtnQkFDeEIsdUJBQXVCO2dCQUN2QixvQ0FBb0M7Z0JBQ3BDLGlDQUFpQztnQkFDakMsc0RBQXNEO2dCQUN0RCwwQ0FBMEM7Z0JBQzFDLHlDQUF5QztnQkFDekMsaUNBQWlDO2dCQUNqQyxvQkFBb0I7Z0JBQ3BCLHlDQUF5QztnQkFDekMsaUNBQWlDO2dCQUNqQyxzQkFBc0I7Z0JBQ3RCLHFCQUFxQjtnQkFDckIsNkJBQTZCO2dCQUM3QiwrQkFBK0I7Z0JBQy9CLHdCQUF3QjtnQkFDeEIsYUFBYTtnQkFDYixpQkFBaUI7Z0JBQ2pCLDRCQUE0QjtnQkFDNUIsb0JBQW9CO2dCQUNwQixtQkFBbUI7Z0JBQ25CLHNCQUFzQjtnQkFDdEIsYUFBYTtnQkFDYixxQkFBcUI7YUFDdEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztJQW9YRixDQUFDO0NBQ0Y7QUF2b0RELGdDQXVvREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2NsZWFucm9vbXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2NsZWFucm9vbXMuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDbGVhbnJvb21zIGV4dGVuZHMgUG9saWN5U3RhdGVtZW50IHtcbiAgcHVibGljIHNlcnZpY2VQcmVmaXggPSAnY2xlYW5yb29tcyc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBvZiBhbmFseXNpc1RlbXBsYXRlcyBhc3NvY2lhdGVkIHRvIHRoZSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfQmF0Y2hHZXRDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9CYXRjaEdldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdCYXRjaEdldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIGZvciBzY2hlbWFzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfQmF0Y2hHZXRTY2hlbWEuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQmF0Y2hHZXRTY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0JhdGNoR2V0U2NoZW1hJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhbmFseXNpcyBydWxlcyBhc3NvY2lhdGVkIHdpdGggc2NoZW1hc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0JhdGNoR2V0U2NoZW1hQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0JhdGNoR2V0U2NoZW1hQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdCYXRjaEdldFNjaGVtYUFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBhbmFseXNpcyB0ZW1wbGF0ZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVBbmFseXNpc1RlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUFuYWx5c2lzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUFuYWx5c2lzVGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgY29sbGFib3JhdGlvbiwgYSBzaGFyZWQgZGF0YSBjb2xsYWJvcmF0aW9uIGVudmlyb25tZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbGxhYm9yYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ29sbGFib3JhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29sbGFib3JhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIGNoYW5nZSByZXF1ZXN0IGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVDb2xsYWJvcmF0aW9uQ2hhbmdlUmVxdWVzdC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVDb2xsYWJvcmF0aW9uQ2hhbmdlUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaW5rIGEgQ2xlYW5yb29tcyBNTCBjb25maWd1cmVkIGF1ZGllbmNlIG1vZGVsIHdpdGggYSBjb2xsYWJvcmF0aW9uIGJ5IGNyZWF0aW5nIGEgbmV3IGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBjb25maWd1cmVkIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVDb25maWd1cmVkVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIGFuYWx5c2lzIHJ1bGUgZm9yIGEgY29uZmlndXJlZCB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaW5rIGEgY29uZmlndXJlZCB0YWJsZSB3aXRoIGEgY29sbGFib3JhdGlvbiBieSBjcmVhdGluZyBhIG5ldyBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gYW5hbHlzaXMgcnVsZSBmb3IgYSBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpbmsgYW4gaWQgbWFwcGluZyB3b3JrZmxvdyB3aXRoIGEgY29sbGFib3JhdGlvbiBieSBjcmVhdGluZyBhIG5ldyBpZCBtYXBwaW5nIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUlkTWFwcGluZ1RhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUlkTWFwcGluZ1RhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVJZE1hcHBpbmdUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpbmsgYW4gQVdTIEVudGl0eSBSZXNvbHV0aW9uIElkIE5hbWVzcGFjZSB3aXRoIGEgY29sbGFib3JhdGlvbiBieSBjcmVhdGluZyBhIG5ldyBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgaW50ZXJtZWRpYXRlIHRhYmxlIGluIGEgbWVtYmVyc2hpcFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVJbnRlcm1lZGlhdGVUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVJbnRlcm1lZGlhdGVUYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gYW5hbHlzaXMgcnVsZSBmb3IgYW4gaW50ZXJtZWRpYXRlIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUludGVybWVkaWF0ZVRhYmxlQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUludGVybWVkaWF0ZVRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGpvaW4gY29sbGFib3JhdGlvbnMgYnkgY3JlYXRpbmcgYSBtZW1iZXJzaGlwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZU1lbWJlcnNoaXAuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlTWVtYmVyc2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlTWVtYmVyc2hpcCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBwcml2YWN5IGJ1ZGdldCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlUHJpdmFjeUJ1ZGdldFRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYW4gZXhpc3RpbmcgYW5hbHlzaXMgdGVtcGxhdGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlQW5hbHlzaXNUZW1wbGF0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVBbmFseXNpc1RlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVBbmFseXNpc1RlbXBsYXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGFuIGV4aXN0aW5nIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlQ29sbGFib3JhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDb2xsYWJvcmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb2xsYWJvcmF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGFuIGV4aXN0aW5nIGNvbmZpZ3VyZWQgYXVkaWVuY2UgbW9kZWwgYXNzb2NpYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgY29uZmlndXJlZCB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EZWxldGVDb25maWd1cmVkVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlQ29uZmlndXJlZFRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb25maWd1cmVkVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYW4gZXhpc3RpbmcgYW5hbHlzaXMgcnVsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EZWxldGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZW1vdmUgYSBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uIGZyb20gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBleGlzdGluZyBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uIGFuYWx5c2lzIHJ1bGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVtb3ZlIGFuIGlkIG1hcHBpbmcgdGFibGUgZnJvbSBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlSWRNYXBwaW5nVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlSWRNYXBwaW5nVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUlkTWFwcGluZ1RhYmxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVtb3ZlIGFuIElkIE5hbWVzcGFjZSBBc3NvY2lhdGlvbiBmcm9tIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EZWxldGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZW1vdmUgYW4gaW50ZXJtZWRpYXRlIHRhYmxlIGZyb20gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVJbnRlcm1lZGlhdGVUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBleGlzdGluZyBhbmFseXNpcyBydWxlIGZvciBhbiBpbnRlcm1lZGlhdGUgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlQW5hbHlzaXNSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIG1lbWJlcnMgZnJvbSBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlTWVtYmVyLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZU1lbWJlcigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlTWVtYmVyJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGVhdmUgY29sbGFib3JhdGlvbnMgYnkgZGVsZXRpbmcgYSBtZW1iZXJzaGlwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0RlbGV0ZU1lbWJlcnNoaXAuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlTWVtYmVyc2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlTWVtYmVyc2hpcCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBleGlzdGluZyBwcml2YWN5IGJ1ZGdldCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EZWxldGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlUHJpdmFjeUJ1ZGdldFRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBpbnZhbGlkYXRlIGFuIGludGVybWVkaWF0ZSB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EaXNhbGxvd0ludGVybWVkaWF0ZVRhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rpc2FsbG93SW50ZXJtZWRpYXRlVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rpc2FsbG93SW50ZXJtZWRpYXRlVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYW4gYW5hbHlzaXMgbG9nIGV4cG9ydFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldEFuYWx5c2lzTG9nRXhwb3J0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldEFuYWx5c2lzTG9nRXhwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRBbmFseXNpc0xvZ0V4cG9ydCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBmb3IgYW4gYW5hbHlzaXMgdGVtcGxhdGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRBbmFseXNpc1RlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldEFuYWx5c2lzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldEFuYWx5c2lzVGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGRldGFpbHMgZm9yIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbGxhYm9yYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q29sbGFib3JhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q29sbGFib3JhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBmb3IgYW4gYW5hbHlzaXMgdGVtcGxhdGUgd2l0aGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIGNoYW5nZSByZXF1ZXN0IGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb2xsYWJvcmF0aW9uQ2hhbmdlUmVxdWVzdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBmb3IgYSBjb25maWd1cmVkIGF1ZGllbmNlIG1vZGVsIGFzc29jaWF0aW9uIHdpdGhpbiBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRDb2xsYWJvcmF0aW9uQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRDb2xsYWJvcmF0aW9uQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q29sbGFib3JhdGlvbkNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgaWQgbmFtZXNwYWNlIGFzc29jaWF0aW9uIHdpdGhpbiBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q29sbGFib3JhdGlvbklkTmFtZXNwYWNlQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGRldGFpbHMgZm9yIGEgcHJpdmFjeSBidWRnZXQgdGVtcGxhdGUgd2l0aGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0VGVtcGxhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBmb3IgYSBjb25maWd1cmVkIGF1ZGllbmNlIG1vZGVsIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIGZvciBhIGNvbmZpZ3VyZWQgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRDb25maWd1cmVkVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q29uZmlndXJlZFRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGFuYWx5c2lzIHJ1bGVzIGZvciBhIGNvbmZpZ3VyZWQgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGRldGFpbHMgZm9yIGEgY29uZmlndXJlZCB0YWJsZSBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgYW5hbHlzaXMgcnVsZXMgZm9yIGEgY29uZmlndXJlZCB0YWJsZSBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBvZiBhbiBpZCBtYXBwaW5nIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0SWRNYXBwaW5nVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0SWRNYXBwaW5nVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldElkTWFwcGluZ1RhYmxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIG9mIGFuIGlkIG5hbWVzcGFjZSBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldElkTmFtZXNwYWNlQXNzb2NpYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0SWROYW1lc3BhY2VBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0SWROYW1lc3BhY2VBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBvZiBhbiBpbnRlcm1lZGlhdGUgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRJbnRlcm1lZGlhdGVUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRJbnRlcm1lZGlhdGVUYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0SW50ZXJtZWRpYXRlVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGFuYWx5c2lzIHJ1bGVzIGZvciBhbiBpbnRlcm1lZGlhdGUgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0SW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGRldGFpbHMgYWJvdXQgYSBtZW1iZXJzaGlwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0TWVtYmVyc2hpcC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRNZW1iZXJzaGlwKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRNZW1iZXJzaGlwJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIGZvciBhIHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhIHByb3RlY3RlZCBqb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRQcm90ZWN0ZWRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0UHJvdGVjdGVkSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRQcm90ZWN0ZWRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGEgcHJvdGVjdGVkIHF1ZXJ5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0UHJvdGVjdGVkUXVlcnkuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0UHJvdGVjdGVkUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFByb3RlY3RlZFF1ZXJ5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIGZvciBhIHNjaGVtYVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldFNjaGVtYS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRTY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFNjaGVtYScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgYW5hbHlzaXMgcnVsZXMgYXNzb2NpYXRlZCB3aXRoIGEgc2NoZW1hXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0U2NoZW1hQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFNjaGVtYUFuYWx5c2lzUnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0U2NoZW1hQW5hbHlzaXNSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBhbmFseXNpcyBsb2cgZXhwb3J0c1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RBbmFseXNpc0xvZ0V4cG9ydHMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEFuYWx5c2lzTG9nRXhwb3J0cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEFuYWx5c2lzTG9nRXhwb3J0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGFuYWx5c2lzIHRlbXBsYXRlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RBbmFseXNpc1RlbXBsYXRlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0QW5hbHlzaXNUZW1wbGF0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RBbmFseXNpc1RlbXBsYXRlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGFuYWx5c2lzIHRlbXBsYXRlcyB3aXRoaW4gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0Q29sbGFib3JhdGlvbkFuYWx5c2lzVGVtcGxhdGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q29sbGFib3JhdGlvbkFuYWx5c2lzVGVtcGxhdGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBjaGFuZ2UgcmVxdWVzdHMgaW4gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3RzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3RzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBhdmFpbGFibGUgY29uZmlndXJlZCBhdWRpZW5jZSBtb2RlbCBhc3NvY2lhdGlvbiB3aXRoaW4gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25Db25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0Q29sbGFib3JhdGlvbkNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q29sbGFib3JhdGlvbkNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBpZCBuYW1lc3BhY2Ugd2l0aGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdENvbGxhYm9yYXRpb25JZE5hbWVzcGFjZUFzc29jaWF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdENvbGxhYm9yYXRpb25JZE5hbWVzcGFjZUFzc29jaWF0aW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlcyB3aXRoaW4gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0VGVtcGxhdGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDb2xsYWJvcmF0aW9uUHJpdmFjeUJ1ZGdldFRlbXBsYXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0VGVtcGxhdGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBwcml2YWN5IGJ1ZGdldHMgd2l0aGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RDb2xsYWJvcmF0aW9uUHJpdmFjeUJ1ZGdldHMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGNvbGxhYm9yYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDb2xsYWJvcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdENvbGxhYm9yYXRpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBhdmFpbGFibGUgY29uZmlndXJlZCBhdWRpZW5jZSBtb2RlbCBhc3NvY2lhdGlvbnMgZm9yIGEgbWVtYmVyc2hpcFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGNvbmZpZ3VyZWQgdGFibGUgYXNzb2NpYXRpb25zIGZvciBhIG1lbWJlcnNoaXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0Q29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGF2YWlsYWJsZSBjb25maWd1cmVkIHRhYmxlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RDb25maWd1cmVkVGFibGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDb25maWd1cmVkVGFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q29uZmlndXJlZFRhYmxlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGlkIG1hcHBpbmcgdGFibGVzIGZvciBhIG1lbWJlcnNoaXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0SWRNYXBwaW5nVGFibGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RJZE1hcHBpbmdUYWJsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RJZE1hcHBpbmdUYWJsZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGVudGl0eSByZXNvbHV0aW9uIGRhdGEgYXNzb2NpYXRpb25zIGZvciBhIG1lbWJlcnNoaXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0SWROYW1lc3BhY2VBc3NvY2lhdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdElkTmFtZXNwYWNlQXNzb2NpYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0SWROYW1lc3BhY2VBc3NvY2lhdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHZlcnNpb25zIG9mIGFuIGludGVybWVkaWF0ZSB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RJbnRlcm1lZGlhdGVUYWJsZVZlcnNpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RJbnRlcm1lZGlhdGVUYWJsZVZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0SW50ZXJtZWRpYXRlVGFibGVWZXJzaW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgaW50ZXJtZWRpYXRlIHRhYmxlcyBmb3IgYSBtZW1iZXJzaGlwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdEludGVybWVkaWF0ZVRhYmxlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0SW50ZXJtZWRpYXRlVGFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0SW50ZXJtZWRpYXRlVGFibGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0aGUgbWVtYmVycyBvZiBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0TWVtYmVycy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0TWVtYmVycygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdE1lbWJlcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGF2YWlsYWJsZSBtZW1iZXJzaGlwc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RNZW1iZXJzaGlwcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0TWVtYmVyc2hpcHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RNZW1iZXJzaGlwcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RQcml2YWN5QnVkZ2V0VGVtcGxhdGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RQcml2YWN5QnVkZ2V0VGVtcGxhdGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIHByaXZhY3kgYnVkZ2V0c1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RQcml2YWN5QnVkZ2V0cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UHJpdmFjeUJ1ZGdldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RQcml2YWN5QnVkZ2V0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgcHJvdGVjdGVkIGpvYnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0UHJvdGVjdGVkSm9icy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UHJvdGVjdGVkSm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFByb3RlY3RlZEpvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHByb3RlY3RlZCBxdWVyaWVzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdFByb3RlY3RlZFF1ZXJpZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFByb3RlY3RlZFF1ZXJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RQcm90ZWN0ZWRRdWVyaWVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhdmFpbGFibGUgc2NoZW1hcyBmb3IgYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdFNjaGVtYXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFNjaGVtYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RTY2hlbWFzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0YWdzIGZvciBhIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdFRhZ3NGb3JSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGFnc0ZvclJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0VGFnc0ZvclJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYW4gSWQgTWFwcGluZyBKb2IgaW4gQVdTIEVudGl0eSBSZXNvbHV0aW9uIHRvIGdlbmVyYXRlIGlkIG1hcHBpbmcgcmVzdWx0cyBpbiBjbGVhbnJvb21zIGNvbGxhYm9yYXRpb24uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1BvcHVsYXRlSWRNYXBwaW5nVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUG9wdWxhdGVJZE1hcHBpbmdUYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUG9wdWxhdGVJZE1hcHBpbmdUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHBvcHVsYXRlIGFuIGludGVybWVkaWF0ZSB0YWJsZSBieSBleGVjdXRpbmcgaXRzIHN0b3JlZCBhbmFseXNpc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9Qb3B1bGF0ZUludGVybWVkaWF0ZVRhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1BvcHVsYXRlSW50ZXJtZWRpYXRlVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1BvcHVsYXRlSW50ZXJtZWRpYXRlVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBwcmV2aWV3IHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlIHNldHRpbmdzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfUHJldmlld1ByaXZhY3lJbXBhY3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUHJldmlld1ByaXZhY3lJbXBhY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1ByZXZpZXdQcml2YWN5SW1wYWN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYW4gYW5hbHlzaXMgbG9nIGV4cG9ydFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9TdGFydEFuYWx5c2lzTG9nRXhwb3J0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0QW5hbHlzaXNMb2dFeHBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0QW5hbHlzaXNMb2dFeHBvcnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCBwcm90ZWN0ZWQgam9ic1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9TdGFydFByb3RlY3RlZEpvYi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdGFydFByb3RlY3RlZEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRQcm90ZWN0ZWRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCBwcm90ZWN0ZWQgcXVlcmllc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9TdGFydFByb3RlY3RlZFF1ZXJ5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0UHJvdGVjdGVkUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0UHJvdGVjdGVkUXVlcnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB0YWcgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmcsIFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9UYWdSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9UYWdSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1bnRhZyBhIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogVGFnZ2luZywgV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VudGFnUmVzb3VyY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVW50YWdSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVW50YWdSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBkZXRhaWxzIG9mIHRoZSBhbmFseXNpcyB0ZW1wbGF0ZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVBbmFseXNpc1RlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUFuYWx5c2lzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUFuYWx5c2lzVGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgZGV0YWlscyBvZiB0aGUgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVDb2xsYWJvcmF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNvbGxhYm9yYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUNvbGxhYm9yYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBjaGFuZ2UgcmVxdWVzdCBpbiBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUNvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgY29uZmlndXJlZCBhdWRpZW5jZSBtb2RlbCBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYW4gZXhpc3RpbmcgY29uZmlndXJlZCB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVDb25maWd1cmVkVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlQ29uZmlndXJlZFRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVDb25maWd1cmVkVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYW5hbHlzaXMgcnVsZXMgZm9yIGEgY29uZmlndXJlZCB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhbmFseXNpcyBydWxlcyBmb3IgYSBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhbiBpZCBtYXBwaW5nIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUlkTWFwcGluZ1RhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUlkTWFwcGluZ1RhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVJZE1hcHBpbmdUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIGVudGl0eSByZXNvbHV0aW9uIGlucHV0IGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhbiBpbnRlcm1lZGlhdGUgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlSW50ZXJtZWRpYXRlVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlSW50ZXJtZWRpYXRlVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUludGVybWVkaWF0ZVRhYmxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGFuIGFuYWx5c2lzIHJ1bGUgZm9yIGFuIGludGVybWVkaWF0ZSB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgZGV0YWlscyBvZiBhIG1lbWJlcnNoaXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlTWVtYmVyc2hpcC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVNZW1iZXJzaGlwKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVNZW1iZXJzaGlwJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGRldGFpbHMgb2YgdGhlIHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBwcm90ZWN0ZWQgam9ic1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVQcm90ZWN0ZWRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUHJvdGVjdGVkSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVQcm90ZWN0ZWRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgcHJvdGVjdGVkIHF1ZXJpZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlUHJvdGVjdGVkUXVlcnkuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUHJvdGVjdGVkUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVByb3RlY3RlZFF1ZXJ5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWNjZXNzIGEgY29sbGFib3JhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBDbGVhbiBSb29tcyBNTCBjdXN0b20gbW9kZWxzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L3VzZXJndWlkZS9tbC1iZWhhdmlvcnMtYnlvbS5odG1sI21sLWJlaGF2aW9ycy1ieW9tLW1lbWJlcnNoaXAtY29sbGFib3JhdGlvbi1hY2Nlc3NcbiAgICovXG4gIHB1YmxpYyB0b1Bhc3NDb2xsYWJvcmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdQYXNzQ29sbGFib3JhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFjY2VzcyBhIG1lbWJlcnNoaXAgaW4gdGhlIGNvbnRleHQgb2YgQ2xlYW4gUm9vbXMgTUwgY3VzdG9tIG1vZGVsc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC91c2VyZ3VpZGUvbWwtYmVoYXZpb3JzLWJ5b20uaHRtbCNtbC1iZWhhdmlvcnMtYnlvbS1tZW1iZXJzaGlwLWNvbGxhYm9yYXRpb24tYWNjZXNzXG4gICAqL1xuICBwdWJsaWMgdG9QYXNzTWVtYmVyc2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUGFzc01lbWJlcnNoaXAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhlIGFsbG93ZWQgY29sdW1ucyBvZiBhbiBleGlzdGluZyBjb25maWd1cmVkIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVDb25maWd1cmVkVGFibGVBbGxvd2VkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlQ29uZmlndXJlZFRhYmxlQWxsb3dlZENvbHVtbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhlIHRhYmxlIHJlZmVyZW5jZSBvZiBhbiBleGlzdGluZyBjb25maWd1cmVkIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVDb25maWd1cmVkVGFibGVSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZVJlZmVyZW5jZScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFjY2Vzc0xldmVsTGlzdDogQWNjZXNzTGV2ZWxMaXN0ID0ge1xuICAgIFJlYWQ6IFtcbiAgICAgICdCYXRjaEdldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlJyxcbiAgICAgICdCYXRjaEdldFNjaGVtYScsXG4gICAgICAnQmF0Y2hHZXRTY2hlbWFBbmFseXNpc1J1bGUnLFxuICAgICAgJ0dldEFuYWx5c2lzTG9nRXhwb3J0JyxcbiAgICAgICdHZXRBbmFseXNpc1RlbXBsYXRlJyxcbiAgICAgICdHZXRDb2xsYWJvcmF0aW9uJyxcbiAgICAgICdHZXRDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZScsXG4gICAgICAnR2V0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QnLFxuICAgICAgJ0dldENvbGxhYm9yYXRpb25Db25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uJyxcbiAgICAgICdHZXRDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbicsXG4gICAgICAnR2V0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZScsXG4gICAgICAnR2V0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbicsXG4gICAgICAnR2V0Q29uZmlndXJlZFRhYmxlJyxcbiAgICAgICdHZXRDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnLFxuICAgICAgJ0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uJyxcbiAgICAgICdHZXRDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScsXG4gICAgICAnR2V0SWRNYXBwaW5nVGFibGUnLFxuICAgICAgJ0dldElkTmFtZXNwYWNlQXNzb2NpYXRpb24nLFxuICAgICAgJ0dldEludGVybWVkaWF0ZVRhYmxlJyxcbiAgICAgICdHZXRJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZScsXG4gICAgICAnR2V0TWVtYmVyc2hpcCcsXG4gICAgICAnR2V0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlJyxcbiAgICAgICdHZXRQcm90ZWN0ZWRKb2InLFxuICAgICAgJ0dldFByb3RlY3RlZFF1ZXJ5JyxcbiAgICAgICdHZXRTY2hlbWEnLFxuICAgICAgJ0dldFNjaGVtYUFuYWx5c2lzUnVsZScsXG4gICAgICAnUHJldmlld1ByaXZhY3lJbXBhY3QnLFxuICAgICAgJ1Bhc3NDb2xsYWJvcmF0aW9uJyxcbiAgICAgICdQYXNzTWVtYmVyc2hpcCdcbiAgICBdLFxuICAgIFdyaXRlOiBbXG4gICAgICAnQ3JlYXRlQW5hbHlzaXNUZW1wbGF0ZScsXG4gICAgICAnQ3JlYXRlQ29sbGFib3JhdGlvbicsXG4gICAgICAnQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QnLFxuICAgICAgJ0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24nLFxuICAgICAgJ0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZScsXG4gICAgICAnQ3JlYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlJyxcbiAgICAgICdDcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicsXG4gICAgICAnQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUnLFxuICAgICAgJ0NyZWF0ZUlkTWFwcGluZ1RhYmxlJyxcbiAgICAgICdDcmVhdGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uJyxcbiAgICAgICdDcmVhdGVJbnRlcm1lZGlhdGVUYWJsZScsXG4gICAgICAnQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUnLFxuICAgICAgJ0NyZWF0ZU1lbWJlcnNoaXAnLFxuICAgICAgJ0NyZWF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZScsXG4gICAgICAnRGVsZXRlQW5hbHlzaXNUZW1wbGF0ZScsXG4gICAgICAnRGVsZXRlQ29sbGFib3JhdGlvbicsXG4gICAgICAnRGVsZXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbicsXG4gICAgICAnRGVsZXRlQ29uZmlndXJlZFRhYmxlJyxcbiAgICAgICdEZWxldGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnLFxuICAgICAgJ0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uJyxcbiAgICAgICdEZWxldGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScsXG4gICAgICAnRGVsZXRlSWRNYXBwaW5nVGFibGUnLFxuICAgICAgJ0RlbGV0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24nLFxuICAgICAgJ0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlJyxcbiAgICAgICdEZWxldGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZScsXG4gICAgICAnRGVsZXRlTWVtYmVyJyxcbiAgICAgICdEZWxldGVNZW1iZXJzaGlwJyxcbiAgICAgICdEZWxldGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUnLFxuICAgICAgJ0Rpc2FsbG93SW50ZXJtZWRpYXRlVGFibGUnLFxuICAgICAgJ1BvcHVsYXRlSWRNYXBwaW5nVGFibGUnLFxuICAgICAgJ1BvcHVsYXRlSW50ZXJtZWRpYXRlVGFibGUnLFxuICAgICAgJ1N0YXJ0QW5hbHlzaXNMb2dFeHBvcnQnLFxuICAgICAgJ1N0YXJ0UHJvdGVjdGVkSm9iJyxcbiAgICAgICdTdGFydFByb3RlY3RlZFF1ZXJ5JyxcbiAgICAgICdUYWdSZXNvdXJjZScsXG4gICAgICAnVW50YWdSZXNvdXJjZScsXG4gICAgICAnVXBkYXRlQW5hbHlzaXNUZW1wbGF0ZScsXG4gICAgICAnVXBkYXRlQ29sbGFib3JhdGlvbicsXG4gICAgICAnVXBkYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QnLFxuICAgICAgJ1VwZGF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24nLFxuICAgICAgJ1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZScsXG4gICAgICAnVXBkYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlJyxcbiAgICAgICdVcGRhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicsXG4gICAgICAnVXBkYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUnLFxuICAgICAgJ1VwZGF0ZUlkTWFwcGluZ1RhYmxlJyxcbiAgICAgICdVcGRhdGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uJyxcbiAgICAgICdVcGRhdGVJbnRlcm1lZGlhdGVUYWJsZScsXG4gICAgICAnVXBkYXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUnLFxuICAgICAgJ1VwZGF0ZU1lbWJlcnNoaXAnLFxuICAgICAgJ1VwZGF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZScsXG4gICAgICAnVXBkYXRlUHJvdGVjdGVkSm9iJyxcbiAgICAgICdVcGRhdGVQcm90ZWN0ZWRRdWVyeScsXG4gICAgICAnVXBkYXRlQ29uZmlndXJlZFRhYmxlQWxsb3dlZENvbHVtbnMnLFxuICAgICAgJ1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZVJlZmVyZW5jZSdcbiAgICBdLFxuICAgIExpc3Q6IFtcbiAgICAgICdMaXN0QW5hbHlzaXNMb2dFeHBvcnRzJyxcbiAgICAgICdMaXN0QW5hbHlzaXNUZW1wbGF0ZXMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZXMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uQ2hhbmdlUmVxdWVzdHMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uUHJpdmFjeUJ1ZGdldFRlbXBsYXRlcycsXG4gICAgICAnTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0cycsXG4gICAgICAnTGlzdENvbGxhYm9yYXRpb25zJyxcbiAgICAgICdMaXN0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RDb25maWd1cmVkVGFibGVzJyxcbiAgICAgICdMaXN0SWRNYXBwaW5nVGFibGVzJyxcbiAgICAgICdMaXN0SWROYW1lc3BhY2VBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RJbnRlcm1lZGlhdGVUYWJsZVZlcnNpb25zJyxcbiAgICAgICdMaXN0SW50ZXJtZWRpYXRlVGFibGVzJyxcbiAgICAgICdMaXN0TWVtYmVycycsXG4gICAgICAnTGlzdE1lbWJlcnNoaXBzJyxcbiAgICAgICdMaXN0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlcycsXG4gICAgICAnTGlzdFByaXZhY3lCdWRnZXRzJyxcbiAgICAgICdMaXN0UHJvdGVjdGVkSm9icycsXG4gICAgICAnTGlzdFByb3RlY3RlZFF1ZXJpZXMnLFxuICAgICAgJ0xpc3RTY2hlbWFzJyxcbiAgICAgICdMaXN0VGFnc0ZvclJlc291cmNlJ1xuICAgIF0sXG4gICAgVGFnZ2luZzogW1xuICAgICAgJ1RhZ1Jlc291cmNlJyxcbiAgICAgICdVbnRhZ1Jlc291cmNlJ1xuICAgIF1cbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgYW5hbHlzaXN0ZW1wbGF0ZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5LWlhbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBtZW1iZXJzaGlwSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgbWVtYmVyc2hpcElkLlxuICAgKiBAcGFyYW0gYW5hbHlzaXNUZW1wbGF0ZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIGFuYWx5c2lzVGVtcGxhdGVJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uQW5hbHlzaXN0ZW1wbGF0ZShtZW1iZXJzaGlwSWQ6IHN0cmluZywgYW5hbHlzaXNUZW1wbGF0ZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06Y2xlYW5yb29tczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06bWVtYmVyc2hpcC8keyBtZW1iZXJzaGlwSWQgfS9hbmFseXNpc3RlbXBsYXRlLyR7IGFuYWx5c2lzVGVtcGxhdGVJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgY29sbGFib3JhdGlvbiB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5LWlhbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsYWJvcmF0aW9uSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgY29sbGFib3JhdGlvbklkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Db2xsYWJvcmF0aW9uKGNvbGxhYm9yYXRpb25JZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmNsZWFucm9vbXM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmNvbGxhYm9yYXRpb24vJHsgY29sbGFib3JhdGlvbklkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBjb25maWd1cmVkYXVkaWVuY2Vtb2RlbGFzc29jaWF0aW9uIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC91c2VyZ3VpZGUvc2VjdXJpdHktaWFtLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIG1lbWJlcnNoaXBJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBtZW1iZXJzaGlwSWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgY29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbklkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Db25maWd1cmVkYXVkaWVuY2Vtb2RlbGFzc29jaWF0aW9uKG1lbWJlcnNoaXBJZDogc3RyaW5nLCBjb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpjbGVhbnJvb21zOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTptZW1iZXJzaGlwLyR7IG1lbWJlcnNoaXBJZCB9L2NvbmZpZ3VyZWRhdWRpZW5jZW1vZGVsYXNzb2NpYXRpb24vJHsgY29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbklkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBjb25maWd1cmVkdGFibGUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L3VzZXJndWlkZS9zZWN1cml0eS1pYW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlndXJlZFRhYmxlSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgY29uZmlndXJlZFRhYmxlSWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvbkNvbmZpZ3VyZWR0YWJsZShjb25maWd1cmVkVGFibGVJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmNsZWFucm9vbXM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmNvbmZpZ3VyZWR0YWJsZS8keyBjb25maWd1cmVkVGFibGVJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgY29uZmlndXJlZHRhYmxlYXNzb2NpYXRpb24gdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L3VzZXJndWlkZS9zZWN1cml0eS1pYW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gbWVtYmVyc2hpcElkIC0gSWRlbnRpZmllciBmb3IgdGhlIG1lbWJlcnNoaXBJZC5cbiAgICogQHBhcmFtIGNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgY29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25JZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uQ29uZmlndXJlZHRhYmxlYXNzb2NpYXRpb24obWVtYmVyc2hpcElkOiBzdHJpbmcsIGNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpjbGVhbnJvb21zOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTptZW1iZXJzaGlwLyR7IG1lbWJlcnNoaXBJZCB9L2NvbmZpZ3VyZWR0YWJsZWFzc29jaWF0aW9uLyR7IGNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIGlkbWFwcGluZ3RhYmxlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC91c2VyZ3VpZGUvc2VjdXJpdHktaWFtLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIG1lbWJlcnNoaXBJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBtZW1iZXJzaGlwSWQuXG4gICAqIEBwYXJhbSBpZE1hcHBpbmdUYWJsZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIGlkTWFwcGluZ1RhYmxlSWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvbklkbWFwcGluZ3RhYmxlKG1lbWJlcnNoaXBJZDogc3RyaW5nLCBpZE1hcHBpbmdUYWJsZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06Y2xlYW5yb29tczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06bWVtYmVyc2hpcC8keyBtZW1iZXJzaGlwSWQgfS9pZG1hcHBpbmd0YWJsZS8keyBpZE1hcHBpbmdUYWJsZUlkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBpZG5hbWVzcGFjZWFzc29jaWF0aW9uIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC91c2VyZ3VpZGUvc2VjdXJpdHktaWFtLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIG1lbWJlcnNoaXBJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBtZW1iZXJzaGlwSWQuXG4gICAqIEBwYXJhbSBpZE5hbWVzcGFjZUFzc29jaWF0aW9uSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgaWROYW1lc3BhY2VBc3NvY2lhdGlvbklkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25JZG5hbWVzcGFjZWFzc29jaWF0aW9uKG1lbWJlcnNoaXBJZDogc3RyaW5nLCBpZE5hbWVzcGFjZUFzc29jaWF0aW9uSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpjbGVhbnJvb21zOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTptZW1iZXJzaGlwLyR7IG1lbWJlcnNoaXBJZCB9L2lkbmFtZXNwYWNlYXNzb2NpYXRpb24vJHsgaWROYW1lc3BhY2VBc3NvY2lhdGlvbklkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBpbnRlcm1lZGlhdGV0YWJsZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5LWlhbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBtZW1iZXJzaGlwSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgbWVtYmVyc2hpcElkLlxuICAgKiBAcGFyYW0gaW50ZXJtZWRpYXRlVGFibGVJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBpbnRlcm1lZGlhdGVUYWJsZUlkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25JbnRlcm1lZGlhdGV0YWJsZShtZW1iZXJzaGlwSWQ6IHN0cmluZywgaW50ZXJtZWRpYXRlVGFibGVJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmNsZWFucm9vbXM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9Om1lbWJlcnNoaXAvJHsgbWVtYmVyc2hpcElkIH0vaW50ZXJtZWRpYXRldGFibGUvJHsgaW50ZXJtZWRpYXRlVGFibGVJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgbWVtYmVyc2hpcCB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5LWlhbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBtZW1iZXJzaGlwSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgbWVtYmVyc2hpcElkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25NZW1iZXJzaGlwKG1lbWJlcnNoaXBJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmNsZWFucm9vbXM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9Om1lbWJlcnNoaXAvJHsgbWVtYmVyc2hpcElkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBwcml2YWN5YnVkZ2V0dGVtcGxhdGUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L3VzZXJndWlkZS9zZWN1cml0eS1pYW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gbWVtYmVyc2hpcElkIC0gSWRlbnRpZmllciBmb3IgdGhlIG1lbWJlcnNoaXBJZC5cbiAgICogQHBhcmFtIHByaXZhY3lCdWRnZXRUZW1wbGF0ZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIHByaXZhY3lCdWRnZXRUZW1wbGF0ZUlkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Qcml2YWN5YnVkZ2V0dGVtcGxhdGUobWVtYmVyc2hpcElkOiBzdHJpbmcsIHByaXZhY3lCdWRnZXRUZW1wbGF0ZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06Y2xlYW5yb29tczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06bWVtYmVyc2hpcC8keyBtZW1iZXJzaGlwSWQgfS9wcml2YWN5YnVkZ2V0dGVtcGxhdGUvJHsgcHJpdmFjeUJ1ZGdldFRlbXBsYXRlSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSB0YWdzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVxdWVzdHRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9DcmVhdGVJZE1hcHBpbmdUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b0NyZWF0ZU1lbWJlcnNoaXAoKVxuICAgKiAtIC50b0NyZWF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVxdWVzdFRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXF1ZXN0VGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVzb3VyY2V0YWdcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0JhdGNoR2V0Q29sbGFib3JhdGlvbkFuYWx5c2lzVGVtcGxhdGUoKVxuICAgKiAtIC50b0JhdGNoR2V0U2NoZW1hKClcbiAgICogLSAudG9CYXRjaEdldFNjaGVtYUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvQ3JlYXRlQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9DcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUoKVxuICAgKiAtIC50b0NyZWF0ZUlkTWFwcGluZ1RhYmxlKClcbiAgICogLSAudG9DcmVhdGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uKClcbiAgICogLSAudG9DcmVhdGVJbnRlcm1lZGlhdGVUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUoKVxuICAgKiAtIC50b0NyZWF0ZU1lbWJlcnNoaXAoKVxuICAgKiAtIC50b0NyZWF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpXG4gICAqIC0gLnRvRGVsZXRlQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvRGVsZXRlQ29sbGFib3JhdGlvbigpXG4gICAqIC0gLnRvRGVsZXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvRGVsZXRlQ29uZmlndXJlZFRhYmxlKClcbiAgICogLSAudG9EZWxldGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUoKVxuICAgKiAtIC50b0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKClcbiAgICogLSAudG9EZWxldGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvRGVsZXRlSWRNYXBwaW5nVGFibGUoKVxuICAgKiAtIC50b0RlbGV0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlKClcbiAgICogLSAudG9EZWxldGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvRGVsZXRlTWVtYmVyKClcbiAgICogLSAudG9EZWxldGVNZW1iZXJzaGlwKClcbiAgICogLSAudG9EZWxldGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUoKVxuICAgKiAtIC50b0Rpc2FsbG93SW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b0dldEFuYWx5c2lzTG9nRXhwb3J0KClcbiAgICogLSAudG9HZXRBbmFseXNpc1RlbXBsYXRlKClcbiAgICogLSAudG9HZXRDb2xsYWJvcmF0aW9uKClcbiAgICogLSAudG9HZXRDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvR2V0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKVxuICAgKiAtIC50b0dldENvbGxhYm9yYXRpb25Db25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uKClcbiAgICogLSAudG9HZXRDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvR2V0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpXG4gICAqIC0gLnRvR2V0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvR2V0Q29uZmlndXJlZFRhYmxlKClcbiAgICogLSAudG9HZXRDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUoKVxuICAgKiAtIC50b0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKClcbiAgICogLSAudG9HZXRDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvR2V0SWRNYXBwaW5nVGFibGUoKVxuICAgKiAtIC50b0dldElkTmFtZXNwYWNlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0dldEludGVybWVkaWF0ZVRhYmxlKClcbiAgICogLSAudG9HZXRJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvR2V0TWVtYmVyc2hpcCgpXG4gICAqIC0gLnRvR2V0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlKClcbiAgICogLSAudG9HZXRQcm90ZWN0ZWRKb2IoKVxuICAgKiAtIC50b0dldFByb3RlY3RlZFF1ZXJ5KClcbiAgICogLSAudG9HZXRTY2hlbWEoKVxuICAgKiAtIC50b0dldFNjaGVtYUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvTGlzdEFuYWx5c2lzTG9nRXhwb3J0cygpXG4gICAqIC0gLnRvTGlzdEFuYWx5c2lzVGVtcGxhdGVzKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvbkFuYWx5c2lzVGVtcGxhdGVzKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3RzKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvbkNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb25zKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvbklkTmFtZXNwYWNlQXNzb2NpYXRpb25zKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZXMoKVxuICAgKiAtIC50b0xpc3RDb2xsYWJvcmF0aW9uUHJpdmFjeUJ1ZGdldHMoKVxuICAgKiAtIC50b0xpc3RDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9ucygpXG4gICAqIC0gLnRvTGlzdENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9ucygpXG4gICAqIC0gLnRvTGlzdElkTWFwcGluZ1RhYmxlcygpXG4gICAqIC0gLnRvTGlzdElkTmFtZXNwYWNlQXNzb2NpYXRpb25zKClcbiAgICogLSAudG9MaXN0SW50ZXJtZWRpYXRlVGFibGVWZXJzaW9ucygpXG4gICAqIC0gLnRvTGlzdEludGVybWVkaWF0ZVRhYmxlcygpXG4gICAqIC0gLnRvTGlzdE1lbWJlcnMoKVxuICAgKiAtIC50b0xpc3RQcml2YWN5QnVkZ2V0VGVtcGxhdGVzKClcbiAgICogLSAudG9MaXN0UHJpdmFjeUJ1ZGdldHMoKVxuICAgKiAtIC50b0xpc3RQcm90ZWN0ZWRKb2JzKClcbiAgICogLSAudG9MaXN0UHJvdGVjdGVkUXVlcmllcygpXG4gICAqIC0gLnRvTGlzdFNjaGVtYXMoKVxuICAgKiAtIC50b0xpc3RUYWdzRm9yUmVzb3VyY2UoKVxuICAgKiAtIC50b1BvcHVsYXRlSWRNYXBwaW5nVGFibGUoKVxuICAgKiAtIC50b1BvcHVsYXRlSW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b1ByZXZpZXdQcml2YWN5SW1wYWN0KClcbiAgICogLSAudG9TdGFydEFuYWx5c2lzTG9nRXhwb3J0KClcbiAgICogLSAudG9TdGFydFByb3RlY3RlZEpvYigpXG4gICAqIC0gLnRvU3RhcnRQcm90ZWN0ZWRRdWVyeSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VudGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VwZGF0ZUFuYWx5c2lzVGVtcGxhdGUoKVxuICAgKiAtIC50b1VwZGF0ZUNvbGxhYm9yYXRpb24oKVxuICAgKiAtIC50b1VwZGF0ZUNvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0KClcbiAgICogLSAudG9VcGRhdGVDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uKClcbiAgICogLSAudG9VcGRhdGVDb25maWd1cmVkVGFibGUoKVxuICAgKiAtIC50b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvVXBkYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9VcGRhdGVJZE1hcHBpbmdUYWJsZSgpXG4gICAqIC0gLnRvVXBkYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvVXBkYXRlSW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b1VwZGF0ZUludGVybWVkaWF0ZVRhYmxlQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9VcGRhdGVNZW1iZXJzaGlwKClcbiAgICogLSAudG9VcGRhdGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUoKVxuICAgKiAtIC50b1VwZGF0ZVByb3RlY3RlZEpvYigpXG4gICAqIC0gLnRvVXBkYXRlUHJvdGVjdGVkUXVlcnkoKVxuICAgKiAtIC50b1Bhc3NDb2xsYWJvcmF0aW9uKClcbiAgICogLSAudG9QYXNzTWVtYmVyc2hpcCgpXG4gICAqIC0gLnRvVXBkYXRlQ29uZmlndXJlZFRhYmxlQWxsb3dlZENvbHVtbnMoKVxuICAgKiAtIC50b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZVJlZmVyZW5jZSgpXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gcmVzb3VyY2UgdHlwZXM6XG4gICAqIC0gYW5hbHlzaXN0ZW1wbGF0ZVxuICAgKiAtIGNvbGxhYm9yYXRpb25cbiAgICogLSBjb25maWd1cmVkYXVkaWVuY2Vtb2RlbGFzc29jaWF0aW9uXG4gICAqIC0gY29uZmlndXJlZHRhYmxlXG4gICAqIC0gY29uZmlndXJlZHRhYmxlYXNzb2NpYXRpb25cbiAgICogLSBpZG1hcHBpbmd0YWJsZVxuICAgKiAtIGlkbmFtZXNwYWNlYXNzb2NpYXRpb25cbiAgICogLSBpbnRlcm1lZGlhdGV0YWJsZVxuICAgKiAtIG1lbWJlcnNoaXBcbiAgICogLSBwcml2YWN5YnVkZ2V0dGVtcGxhdGVcbiAgICpcbiAgICogQHBhcmFtIHRhZ0tleSBUaGUgdGFnIGtleSB0byBjaGVja1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1Jlc291cmNlVGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlc291cmNlVGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZyBrZXlzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtdGFna2V5c1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9DcmVhdGVJZE1hcHBpbmdUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b0NyZWF0ZU1lbWJlcnNoaXAoKVxuICAgKiAtIC50b0NyZWF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VudGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1RhZ0tleXModmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpUYWdLZXlzYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtjbGVhbnJvb21zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9jbGVhbnJvb21zLmh0bWwpLlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM/OiBpYW0uUG9saWN5U3RhdGVtZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbn1cbiJdfQ==