UNPKG

cdk-iam-floyd

Version:

AWS IAM policy statement generator with fluent interface for AWS CDK

895 lines 75.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Iq = void 0; const shared_1 = require("../../shared"); /** * Statement provider for service [iq](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiq.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ class Iq extends shared_1.PolicyStatement { /** * Grants permission to accept an incoming voice/video call * * Access Level: Write * * https://aws.amazon.com/iq/ */ toAcceptCall() { return this.to('AcceptCall'); } /** * Grants permission to approve a payment request * * Access Level: Write * * https://aws.amazon.com/iq/ */ toApprovePaymentRequest() { return this.to('ApprovePaymentRequest'); } /** * Grants permission to approve a proposal * * Access Level: Write * * https://aws.amazon.com/iq/ */ toApproveProposal() { return this.to('ApproveProposal'); } /** * Grants permission to archive a conversation * * Access Level: Write * * https://aws.amazon.com/iq/ */ toArchiveConversation() { return this.to('ArchiveConversation'); } /** * Grants permission to complete a proposal * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCompleteProposal() { return this.to('CompleteProposal'); } /** * Grants permission to respond to a request or send a direct message to initiate a conversation * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreateConversation() { return this.to('CreateConversation'); } /** * Grants permission to create an expert profile * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreateExpert() { return this.to('CreateExpert'); } /** * Grants permission to create a listing * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreateListing() { return this.to('CreateListing'); } /** * Grants permission to create a milestone proposal * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreateMilestoneProposal() { return this.to('CreateMilestoneProposal'); } /** * Grants permission to create a payment request * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreatePaymentRequest() { return this.to('CreatePaymentRequest'); } /** * Grants permission to submit new requests * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreateProject() { return this.to('CreateProject'); } /** * Grants permission to submit new requests * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreateRequest() { return this.to('CreateRequest'); } /** * Grants permission to create a scheduled proposal * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreateScheduledProposal() { return this.to('CreateScheduledProposal'); } /** * Grants permission to create a seller profile * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreateSeller() { return this.to('CreateSeller'); } /** * Grants permission to create an upfront proposal * * Access Level: Write * * https://aws.amazon.com/iq/ */ toCreateUpfrontProposal() { return this.to('CreateUpfrontProposal'); } /** * Grants permission to decline an incoming voice/video call * * Access Level: Write * * https://aws.amazon.com/iq/ */ toDeclineCall() { return this.to('DeclineCall'); } /** * Grants permission to delete an existing attachment * * Access Level: Write * * https://aws.amazon.com/iq/ */ toDeleteAttachment() { return this.to('DeleteAttachment'); } /** * Grants permission to disable individual public profile page * * Access Level: Write * * https://aws.amazon.com/iq/ */ toDisableIndividualPublicProfile() { return this.to('DisableIndividualPublicProfile'); } /** * Grants permission to download existing attachment * * Access Level: Read * * https://aws.amazon.com/iq/ */ toDownloadAttachment() { return this.to('DownloadAttachment'); } /** * Grants permission to enable individual public profile page * * Access Level: Write * * https://aws.amazon.com/iq/ */ toEnableIndividualPublicProfile() { return this.to('EnableIndividualPublicProfile'); } /** * Grants permission to end a voice/video call * * Access Level: Write * * https://aws.amazon.com/iq/ */ toEndCall() { return this.to('EndCall'); } /** * Grants permission to read buyer information * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetBuyer() { return this.to('GetBuyer'); } /** * Grants permission to read details of a voice/video call * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetCall() { return this.to('GetCall'); } /** * Grants permission to read the chat environment details about a conversation * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetChatInfo() { return this.to('GetChatInfo'); } /** * Grants permission to read chat messages in a conversation * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetChatMessages() { return this.to('GetChatMessages'); } /** * Grants permission to request a websocket token for the conversation notifications * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetChatToken() { return this.to('GetChatToken'); } /** * Grants permission to read chat messages in a company conversation * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetCompanyChatMessages() { return this.to('GetCompanyChatMessages'); } /** * Grants permission to read a company profile * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetCompanyProfile() { return this.to('GetCompanyProfile'); } /** * Grants permission to read details of a conversation * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetConversation() { return this.to('GetConversation'); } /** * Grants permission to read expert information * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetExpert() { return this.to('GetExpert'); } /** * Grants permission to read a listing * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetListing() { return this.to('GetListing'); } /** * Grants permission to read a seller profile information * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetMarketplaceSeller() { return this.to('GetMarketplaceSeller'); } /** * Grants permission to read a payment request * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetPaymentRequest() { return this.to('GetPaymentRequest'); } /** * Grants permission to read a proposal * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetProposal() { return this.to('GetProposal'); } /** * Grants permission to get a created request * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetRequest() { return this.to('GetRequest'); } /** * Grants permission to read a review for an expert * * Access Level: Read * * https://aws.amazon.com/iq/ */ toGetReview() { return this.to('GetReview'); } /** * Grants permission to hide a request * * Access Level: Write * * https://aws.amazon.com/iq/ */ toHideRequest() { return this.to('HideRequest'); } /** * Grants permission to start a voice/video call * * Access Level: Write * * https://aws.amazon.com/iq/ */ toInitiateCall() { return this.to('InitiateCall'); } /** * Grants permission to link an AWS certification to individual profile * * Access Level: Write * * https://aws.amazon.com/iq/ */ toLinkAwsCertification() { return this.to('LinkAwsCertification'); } /** * Grants permission to list existing attachments * * Access Level: List * * https://aws.amazon.com/iq/ */ toListAttachments() { return this.to('ListAttachments'); } /** * Grants permission to list existing conversations * * Access Level: Read * * https://aws.amazon.com/iq/ */ toListConversations() { return this.to('ListConversations'); } /** * Grants permission to list access logs of expert activity * * Access Level: Read * * https://aws.amazon.com/iq/ */ toListExpertAccessLogs() { return this.to('ListExpertAccessLogs'); } /** * Grants permission to list listings * * Access Level: Read * * https://aws.amazon.com/iq/ */ toListListings() { return this.to('ListListings'); } /** * Grants permission to list payment requests * * Access Level: Read * * https://aws.amazon.com/iq/ */ toListPaymentRequests() { return this.to('ListPaymentRequests'); } /** * Grants permission to list proposals * * Access Level: Read * * https://aws.amazon.com/iq/ */ toListProposals() { return this.to('ListProposals'); } /** * Grants permission to list requests that are created * * Access Level: Read * * https://aws.amazon.com/iq/ */ toListRequests() { return this.to('ListRequests'); } /** * Grants permission to list reviews for an expert * * Access Level: Read * * https://aws.amazon.com/iq/ */ toListReviews() { return this.to('ListReviews'); } /** * Grants permission to mark a message as read in a conversation * * Access Level: Write * * https://aws.amazon.com/iq/ */ toMarkChatMessageRead() { return this.to('MarkChatMessageRead'); } /** * Grants permission to reject a payment request * * Access Level: Write * * https://aws.amazon.com/iq/ */ toRejectPaymentRequest() { return this.to('RejectPaymentRequest'); } /** * Grants permission to reject a proposal * * Access Level: Write * * https://aws.amazon.com/iq/ */ toRejectProposal() { return this.to('RejectProposal'); } /** * Grants permission to send a message in a conversation as a company * * Access Level: Write * * https://aws.amazon.com/iq/ */ toSendCompanyChatMessage() { return this.to('SendCompanyChatMessage'); } /** * Grants permission to send a message in a conversation as an individual * * Access Level: Write * * https://aws.amazon.com/iq/ */ toSendIndividualChatMessage() { return this.to('SendIndividualChatMessage'); } /** * Grants permission to unarchive a conversation * * Access Level: Write * * https://aws.amazon.com/iq/ */ toUnarchiveConversation() { return this.to('UnarchiveConversation'); } /** * Grants permission to unlink an AWS certification from individual profile * * Access Level: Write * * https://aws.amazon.com/iq/ */ toUnlinkAwsCertification() { return this.to('UnlinkAwsCertification'); } /** * Grants permission to update a company profile * * Access Level: Write * * https://aws.amazon.com/iq/ */ toUpdateCompanyProfile() { return this.to('UpdateCompanyProfile'); } /** * Grants permission to add more participants into a conversation * * Access Level: Write * * https://aws.amazon.com/iq/ */ toUpdateConversationMembers() { return this.to('UpdateConversationMembers'); } /** * Grants permission to update an expert information * * Access Level: Write * * https://aws.amazon.com/iq/ */ toUpdateExpert() { return this.to('UpdateExpert'); } /** * Grants permission to update a listing * * Access Level: Write * * https://aws.amazon.com/iq/ */ toUpdateListing() { return this.to('UpdateListing'); } /** * Grants permission to update a request * * Access Level: Write * * https://aws.amazon.com/iq/ */ toUpdateRequest() { return this.to('UpdateRequest'); } /** * Grants permission to upload an attachment * * Access Level: Write * * https://aws.amazon.com/iq/ */ toUploadAttachment() { return this.to('UploadAttachment'); } /** * Grants permission to withdraw a payment request * * Access Level: Write * * https://aws.amazon.com/iq/ */ toWithdrawPaymentRequest() { return this.to('WithdrawPaymentRequest'); } /** * Grants permission to withdraw a proposal * * Access Level: Write * * https://aws.amazon.com/iq/ */ toWithdrawProposal() { return this.to('WithdrawProposal'); } /** * Grants permission to write a review for an expert * * Access Level: Write * * https://aws.amazon.com/iq/ */ toWriteReview() { return this.to('WriteReview'); } /** * Adds a resource of type conversation to the statement * * https://aws.amazon.com/iq/ * * @param conversationId - Identifier for the conversationId. * @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. */ onConversation(conversationId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::conversation/${conversationId}`); } /** * Adds a resource of type buyer to the statement * * https://aws.amazon.com/iq/ * * @param buyerId - Identifier for the buyerId. * @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. */ onBuyer(buyerId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::buyer/${buyerId}`); } /** * Adds a resource of type expert to the statement * * https://aws.amazon.com/iq/ * * @param expertId - Identifier for the expertId. * @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. */ onExpert(expertId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::expert/${expertId}`); } /** * Adds a resource of type call to the statement * * https://aws.amazon.com/iq/ * * @param callId - Identifier for the callId. * @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. */ onCall(callId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::call/${callId}`); } /** * Adds a resource of type token to the statement * * https://aws.amazon.com/iq/ * * @param tokenId - Identifier for the tokenId. * @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. */ onToken(tokenId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::token/${tokenId}`); } /** * Adds a resource of type proposal to the statement * * https://aws.amazon.com/iq/ * * @param conversationId - Identifier for the conversationId. * @param proposalId - Identifier for the proposalId. * @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. */ onProposal(conversationId, proposalId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::proposal/${conversationId}/${proposalId}`); } /** * Adds a resource of type paymentRequest to the statement * * https://aws.amazon.com/iq/ * * @param conversationId - Identifier for the conversationId. * @param proposalId - Identifier for the proposalId. * @param paymentRequestId - Identifier for the paymentRequestId. * @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. */ onPaymentRequest(conversationId, proposalId, paymentRequestId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::paymentRequest/${conversationId}/${proposalId}/${paymentRequestId}`); } /** * Adds a resource of type paymentSchedule to the statement * * https://aws.amazon.com/iq/ * * @param conversationId - Identifier for the conversationId. * @param proposalId - Identifier for the proposalId. * @param versionId - Identifier for the versionId. * @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. */ onPaymentSchedule(conversationId, proposalId, versionId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::paymentSchedule/${conversationId}/${proposalId}/${versionId}`); } /** * Adds a resource of type seller to the statement * * https://aws.amazon.com/iq/ * * @param sellerAwsAccountId - Identifier for the sellerAwsAccountId. * @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. */ onSeller(sellerAwsAccountId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::seller/${sellerAwsAccountId}`); } /** * Adds a resource of type company to the statement * * https://aws.amazon.com/iq/ * * @param companyId - Identifier for the companyId. * @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. */ onCompany(companyId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::company/${companyId}`); } /** * Adds a resource of type request to the statement * * https://aws.amazon.com/iq/ * * @param requestId - Identifier for the requestId. * @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. */ onRequest(requestId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::request/${requestId}`); } /** * Adds a resource of type listing to the statement * * https://aws.amazon.com/iq/ * * @param listingId - Identifier for the listingId. * @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. */ onListing(listingId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::listing/${listingId}`); } /** * Adds a resource of type attachment to the statement * * https://aws.amazon.com/iq/ * * @param attachmentId - Identifier for the attachmentId. * @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. */ onAttachment(attachmentId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::attachment/${attachmentId}`); } /** * Adds a resource of type permission to the statement * * https://aws.amazon.com/iq/ * * @param permissionRequestId - Identifier for the permissionRequestId. * @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. */ onPermission(permissionRequestId, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:iq-permission:${region ?? this.defaultRegion}::permission/${permissionRequestId}`); } /** * Statement provider for service [iq](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiq.html). * */ constructor(props) { super(props); this.servicePrefix = 'iq'; this.accessLevelList = { Write: [ 'AcceptCall', 'ApprovePaymentRequest', 'ApproveProposal', 'ArchiveConversation', 'CompleteProposal', 'CreateConversation', 'CreateExpert', 'CreateListing', 'CreateMilestoneProposal', 'CreatePaymentRequest', 'CreateProject', 'CreateRequest', 'CreateScheduledProposal', 'CreateSeller', 'CreateUpfrontProposal', 'DeclineCall', 'DeleteAttachment', 'DisableIndividualPublicProfile', 'EnableIndividualPublicProfile', 'EndCall', 'HideRequest', 'InitiateCall', 'LinkAwsCertification', 'MarkChatMessageRead', 'RejectPaymentRequest', 'RejectProposal', 'SendCompanyChatMessage', 'SendIndividualChatMessage', 'UnarchiveConversation', 'UnlinkAwsCertification', 'UpdateCompanyProfile', 'UpdateConversationMembers', 'UpdateExpert', 'UpdateListing', 'UpdateRequest', 'UploadAttachment', 'WithdrawPaymentRequest', 'WithdrawProposal', 'WriteReview' ], Read: [ 'DownloadAttachment', 'GetBuyer', 'GetCall', 'GetChatInfo', 'GetChatMessages', 'GetChatToken', 'GetCompanyChatMessages', 'GetCompanyProfile', 'GetConversation', 'GetExpert', 'GetListing', 'GetMarketplaceSeller', 'GetPaymentRequest', 'GetProposal', 'GetRequest', 'GetReview', 'ListConversations', 'ListExpertAccessLogs', 'ListListings', 'ListPaymentRequests', 'ListProposals', 'ListRequests', 'ListReviews' ], List: [ 'ListAttachments' ] }; } } exports.Iq = Iq; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpcS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBK0M7QUFHL0M7Ozs7R0FJRztBQUNILE1BQWEsRUFBRyxTQUFRLHdCQUFlO0lBR3JDOzs7Ozs7T0FNRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9CQUFvQjtRQUN6QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx5QkFBeUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUMs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QUNaLHNCQUFzQjtnQkFDdEIsbUJBQW1CO2dCQUNuQixhQUFhO2dCQUNiLFlBQVk7Z0JBQ1osV0FBVztnQkFDWCxtQkFBbUI7Z0JBQ25CLHNCQUFzQjtnQkFDdEIsY0FBYztnQkFDZCxxQkFBcUI7Z0JBQ3JCLGVBQWU7Z0JBQ2YsY0FBYztnQkFDZCxhQUFhO2FBQ2Q7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osaUJBQWlCO2FBQ2xCO1NBQ0YsQ0FBQztJQW1NRixDQUFDO0NBQ0Y7QUFsOEJELGdCQWs4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBhd3NfaWFtIGFzIGlhbSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG4vKipcbiAqIFN0YXRlbWVudCBwcm92aWRlciBmb3Igc2VydmljZSBbaXFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2F3c2lxLmh0bWwpLlxuICpcbiAqIEBwYXJhbSBzaWQgW1NJRF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19zaWQuaHRtbCkgb2YgdGhlIHN0YXRlbWVudFxuICovXG5leHBvcnQgY2xhc3MgSXEgZXh0ZW5kcyBQb2xpY3lTdGF0ZW1lbnQge1xuICBwdWJsaWMgc2VydmljZVByZWZpeCA9ICdpcSc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFjY2VwdCBhbiBpbmNvbWluZyB2b2ljZS92aWRlbyBjYWxsXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0FjY2VwdENhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FjY2VwdENhbGwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhcHByb3ZlIGEgcGF5bWVudCByZXF1ZXN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0FwcHJvdmVQYXltZW50UmVxdWVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXBwcm92ZVBheW1lbnRSZXF1ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXBwcm92ZSBhIHByb3Bvc2FsXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0FwcHJvdmVQcm9wb3NhbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXBwcm92ZVByb3Bvc2FsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXJjaGl2ZSBhIGNvbnZlcnNhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9BcmNoaXZlQ29udmVyc2F0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdBcmNoaXZlQ29udmVyc2F0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY29tcGxldGUgYSBwcm9wb3NhbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9Db21wbGV0ZVByb3Bvc2FsKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDb21wbGV0ZVByb3Bvc2FsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVzcG9uZCB0byBhIHJlcXVlc3Qgb3Igc2VuZCBhIGRpcmVjdCBtZXNzYWdlIHRvIGluaXRpYXRlIGEgY29udmVyc2F0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUNvbnZlcnNhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29udmVyc2F0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuIGV4cGVydCBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUV4cGVydCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlRXhwZXJ0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbGlzdGluZ1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVMaXN0aW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVMaXN0aW5nJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbWlsZXN0b25lIHByb3Bvc2FsXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZU1pbGVzdG9uZVByb3Bvc2FsKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVNaWxlc3RvbmVQcm9wb3NhbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHBheW1lbnQgcmVxdWVzdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVQYXltZW50UmVxdWVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlUGF5bWVudFJlcXVlc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdWJtaXQgbmV3IHJlcXVlc3RzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVByb2plY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVByb2plY3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdWJtaXQgbmV3IHJlcXVlc3RzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVJlcXVlc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBzY2hlZHVsZWQgcHJvcG9zYWxcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlU2NoZWR1bGVkUHJvcG9zYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVNjaGVkdWxlZFByb3Bvc2FsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgc2VsbGVyIHByb2ZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlU2VsbGVyKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVTZWxsZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gdXBmcm9udCBwcm9wb3NhbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVVcGZyb250UHJvcG9zYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVVwZnJvbnRQcm9wb3NhbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlY2xpbmUgYW4gaW5jb21pbmcgdm9pY2UvdmlkZW8gY2FsbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9EZWNsaW5lQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVjbGluZUNhbGwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYW4gZXhpc3RpbmcgYXR0YWNobWVudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVBdHRhY2htZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVBdHRhY2htZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGlzYWJsZSBpbmRpdmlkdWFsIHB1YmxpYyBwcm9maWxlIHBhZ2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvRGlzYWJsZUluZGl2aWR1YWxQdWJsaWNQcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEaXNhYmxlSW5kaXZpZHVhbFB1YmxpY1Byb2ZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkb3dubG9hZCBleGlzdGluZyBhdHRhY2htZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvRG93bmxvYWRBdHRhY2htZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEb3dubG9hZEF0dGFjaG1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBlbmFibGUgaW5kaXZpZHVhbCBwdWJsaWMgcHJvZmlsZSBwYWdlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0VuYWJsZUluZGl2aWR1YWxQdWJsaWNQcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdFbmFibGVJbmRpdmlkdWFsUHVibGljUHJvZmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGVuZCBhIHZvaWNlL3ZpZGVvIGNhbGxcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvRW5kQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRW5kQ2FsbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlYWQgYnV5ZXIgaW5mb3JtYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9HZXRCdXllcigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0QnV5ZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIGRldGFpbHMgb2YgYSB2b2ljZS92aWRlbyBjYWxsXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvR2V0Q2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q2FsbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIGNoYXQgZW52aXJvbm1lbnQgZGV0YWlscyBhYm91dCBhIGNvbnZlcnNhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0dldENoYXRJbmZvKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDaGF0SW5mbycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlYWQgY2hhdCBtZXNzYWdlcyBpbiBhIGNvbnZlcnNhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0dldENoYXRNZXNzYWdlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q2hhdE1lc3NhZ2VzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVxdWVzdCBhIHdlYnNvY2tldCB0b2tlbiBmb3IgdGhlIGNvbnZlcnNhdGlvbiBub3RpZmljYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvR2V0Q2hhdFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDaGF0VG9rZW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIGNoYXQgbWVzc2FnZXMgaW4gYSBjb21wYW55IGNvbnZlcnNhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0dldENvbXBhbnlDaGF0TWVzc2FnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldENvbXBhbnlDaGF0TWVzc2FnZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIGEgY29tcGFueSBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvR2V0Q29tcGFueVByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldENvbXBhbnlQcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVhZCBkZXRhaWxzIG9mIGEgY29udmVyc2F0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvR2V0Q29udmVyc2F0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb252ZXJzYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIGV4cGVydCBpbmZvcm1hdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0dldEV4cGVydCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0RXhwZXJ0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVhZCBhIGxpc3RpbmdcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9HZXRMaXN0aW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRMaXN0aW5nJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVhZCBhIHNlbGxlciBwcm9maWxlIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvR2V0TWFya2V0cGxhY2VTZWxsZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldE1hcmtldHBsYWNlU2VsbGVyJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVhZCBhIHBheW1lbnQgcmVxdWVzdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0dldFBheW1lbnRSZX